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

Turbo Basic XL
0 REM @COMPILE voľby
ČasťVýznam
REMpre interpreter je to obyčajný komentár – program ostáva platným BASICom
@COMPILEznačka, podľa ktorej riadok spozná prekladač
voľbyto isté, čo by si napísal na príkazový riadok

Pravidlá:

Celý program

Súbor examples/config.abas:

Atari BASIC
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 line

Ktoré voľby smú byť v programe

Len tie, ktoré hovoria, ako sa program prekladá a čo k nemu patrí:

SkupinaVoľ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 line

Kto 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-options

Najstaršia verzia prekladača: REM @VERSION

Program, ktorý používa niečo nové, môže povedať, od ktorej verzie prekladača ho treba prekladať:

Turbo Basic XL
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.140

Verziu 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é

Typická hlavička väčšej hry:

Turbo Basic XL
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íkazomwarning 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úboreiný riadok bez čísla je chyba (B26044)
cesta k súboru od príkazového riadkahľadá sa od priečinka programu

Vyskúšaj si

  1. Prelož config.abas s -v a potom s -v --no-source-options. O koľko bajtov sa líši výsledok?
  2. Pridaj do programu druhý riadok 1 REM @COMPILE -O1 a prelož ho s -O2 na príkazovom riadku. Čo prekladač vypíše?
  3. Zmaž z prvého riadka číslo 0. Preloží sa program rovnako?

Zhrnutie

Späť: 39. Prekladač Basic26 · Ďalej: 41. Diskety a dobové programy