40. Nastavenia v zdrojáku: REM @COMPILE
Na čo to je
Niektoré voľby patria k programu natrvalo: hra potrebuje svoju znakovú sadu, veľký program sa bez --rom-fp nezmestí, textovka má texty v skrytej pamäti. Písať ich zakaždým na príkazový riadok je otravné a ľahko sa na niektorú zabudne. Program si ich preto môže niesť sám, v komentári na svojom začiatku.
Ako sa to píše
0 REM @COMPILE voľby
| Časť | Význam |
|---|---|
REM | pre interpreter je to obyčajný komentár – program ostáva platným BASICom |
@COMPILE | značka, podľa ktorej riadok spozná prekladač |
voľby | to isté, čo by si napísal na príkazový riadok |
Pravidlá:
- Riadky
REM @COMPILEmusia byť na začiatku programu, pred prvým príkazom. Môže ich byť viac za sebou. - Číslo riadka nie je povinné:
REM @COMPILE --rom-fpna úplne prvom riadku súboru platí tiež. Hodí sa to pre dobové výpisy, kde nechceš meniť čísla riadkov. - Cesty k súborom (
--embed font.fnt) sa počítajú od priečinka, v ktorom leží program – nie od miesta, kde stojíš v príkazovom riadku.
Celý program
Súbor examples/config.abas:
0 REM @COMPILE --rom-fp
10 REM Options written in the program itself
20 PRINT "This program asks for --rom-fp"
30 PRINT "in its first line"Preklad a spustenie
Na príkazovom riadku už --rom-fp netreba:
Basic26 config.abas --sim -vČo uvidíš
S -v prekladač najprv povie, čo si z programu prečítal:
REM @COMPILE: --rom-fp
reading config.abas (4 lines, text, Atari BASIC)
peephole: 7 change(s); runtime: 17620 byte(s) left out
wrote config.xex (935 bytes, 4 segment(s), 911 bytes of program)a potom program beží:
This program asks for --rom-fp
in its first lineKtoré voľby smú byť v programe
Len tie, ktoré hovoria, ako sa program prekladá a čo k nemu patrí:
| Skupina | Voľby |
|---|---|
| jazyk | --dialect, --quirks, --strict, --no-line-numbers |
| veľkosť a rýchlosť | -O0, -O1, -O2, --rom-fp |
| miesto v pamäti | --origin, --ramtop, --reserve, --basic-screen, --keep-rem |
| pribalené súbory | --embed, --patch, --file |
| písmená a texty | --charmap, --screen-codes |
| skrytá pamäť a texty | --xmem, --text-under-rom, --text-in-banks, --pack-text |
| správanie | --exit-to-dos, --line-delay |
| disketa | --atr, --dos |
| nečitateľný súbor | --scramble, --scramble-fx, --scramble-level, --scramble-key |
Voľby, ktoré hovoria, čo chceš práve teraz – -o, --sim, --run, -v, --list –, do programu nepatria a prekladač ich tam odmietne:
config.abas(1,1): error B26232: '--sim' cannot be given in the program, only on the command lineKto má prednosť
Príkazový riadok. Keď má program REM @COMPILE -O1 a ty napíšeš -O2, platí -O2 a prekladač na to upozorní. Voľby, ktoré sa dajú zopakovať (--embed, --file, --line-delay), sa sčítajú – platia tie z programu aj tie z príkazového riadka.
Keď chceš hlavičku programu na jeden preklad vypnúť:
Basic26 config.abas --no-source-optionsNajstaršia verzia prekladača: REM @VERSION
Program, ktorý používa niečo nové, môže povedať, od ktorej verzie prekladača ho treba prekladať:
0 REM @VERSION 1.0.0.150
Starší prekladač ho odmietne s jasnou správou, namiesto aby hlásil chyby v riadkoch, ktorým ešte nerozumie:
config.abas(1,1): error B26232: this program needs Basic26 1.0.0.150 or newer, this is 1.0.0.140Verziu svojho prekladača zistíš cez Basic26 --version (kapitola 1). Stačia aj prvé tri čísla (1.0.0). Rovnako ako REM @COMPILE platí len v riadkoch, ktorými sa program začína, a pre interpreter je to komentár. V prekladači Action26 je to ;@version.
Desatinné premenné: REM @FLOAT
Program preložený s --int počíta celými číslami. Ktoré premenné majú predsa držať desatinné čísla, povie ďalší riadok na začiatku programu, REM @FLOAT X,Y,A( – podrobne v kapitole 50.
Na čo je to dobré
- Program sa prekladá vždy rovnako, nech ho prekladá ktokoľvek a odkiaľkoľvek: z príkazového riadka, z editora, zo skriptu.
- Stačí poslať jeden priečinok – program, jeho súbory a nič viac. Žiadny návod „prelož to s týmito desiatimi voľbami“.
- Príklady v priečinku
examplesk prekladaču sú urobené práve takto. Otvor si niektorú z textových hier a pozri sa na jej prvé riadky.
Typická hlavička väčšej hry:
REM @COMPILE --embed hokuf.fnt@$9800 --reserve $7530-$797C
REM @COMPILE --text-under-rom --pack-text
Čo tie voľby znamenajú, vysvetlia kapitoly 42 až 48.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
REM @COMPILE až za prvým príkazom | warning B26232: REM @COMPILE counts only before the first statement of the program; this one is left out |
voľba, ktorá do programu nepatrí (-o, --sim) | error B26232 |
REM @VERSION s verziou novšou než prekladač | error B26232: this program needs Basic26 … or newer, this is … |
preklep v @COMPILE (@COMPIL) | je to obyčajný komentár; voľby sa nepoužijú a nikto nič nehlási |
| riadok bez čísla nie je úplne prvý v súbore | iný riadok bez čísla je chyba (B26044) |
| cesta k súboru od príkazového riadka | hľadá sa od priečinka programu |
Vyskúšaj si
- Prelož
config.abass-va potom s-v --no-source-options. O koľko bajtov sa líši výsledok? - Pridaj do programu druhý riadok
1 REM @COMPILE -O1a prelož ho s-O2na príkazovom riadku. Čo prekladač vypíše? - Zmaž z prvého riadka číslo 0. Preloží sa program rovnako?
Zhrnutie
REM @COMPILE voľbyna začiatku programu sú voľby prekladu, ktoré program nesie so sebou.REM @VERSION 1.0.0.150povie, od ktorej verzie prekladača sa program dá preložiť.- Pre interpreter je to komentár.
- Príkazový riadok má prednosť;
--no-source-optionshlavičku vypne. - Smú tam byť len voľby o tom, ako sa program prekladá – nie
-o,--sim,--run.
Späť: 39. Prekladač Basic26 · Ďalej: 41. Diskety a dobové programy