C. Chyby

Chyby sú dvojaké:

Chyby za behu

Preložený program hlási tie isté čísla ako interpreter. Takto vyzerá hlásenie:

ERROR-   11 AT LINE 60

Program pre Turbo-BASIC XL (.tbas) pridá k číslu slovo:

ERROR-   11 OVERFLOW  AT LINE 60

Chybu možno zachytiť príkazom TRAP (kapitola 17); jej číslo je potom v PEEK(195), v Turbo-BASICu XL aj v ERR.

Chyby BASICu

ČísloSlovo v Turbo-BASICu XLČo znamenáNajčastejšia príčina
2MEMnie je pamäťpriveľký DIM; pozri kapitolu 42
3VALUEhodnota mimo rozsahuSQR(-1), LOG(0), POKE s číslom nad 255, záporný index
4>#VARSpriveľa premennýchviac než 128 (Atari BASIC) alebo 256
5$LENreťazec: mimo dĺžkyA$(7) pri texte dlhom 5; zápis za hranicu DIM
6?DATAdošli dátaREAD a žiadne DATA už nie sú
7>32767číslo väčšie než 32767tam, kde sa čaká číslo riadka
8INPUTtext namiesto číslaINPUT alebo READ do číselnej premennej
9DIMpole alebo reťazecchýba DIM, DIM dvakrát, index mimo poľa
10STACKpriveľa vnorenípríliš veľa GOSUB alebo FOR do seba
11OVERFLOWčíslo sa nezmestídelenie nulou, výsledok nad 1E98
12?LINEriadok neexistujevypočítaný GOTO, alebo --quirks
13?FORNEXT bez FORskok doprostred slučky
14TOO LONGriadok je príliš dlhý
15?DELzmizol riadok slučky alebo podprogramu
16?GOSUBRETURN bez GOSUBchýba END pred podprogramami
17GARBAGEriadok nedáva zmyselchybný riadok preložený s --quirks
18?CHRzlý znakVAL textu, ktorý nie je číslo
20#zlé číslo kanálakanál 8 a viac; v Atari BASICu kanál 0 mimo PRINT a INPUT

Turbo-BASIC XL navyše:

ČísloSlovoČo znamená
22?NESTzle vnorené slučky
23?WHILEWEND bez WHILE
24?REPEATUNTIL bez REPEAT
25?DOLOOP bez DO
26?EXITEXIT v slučke, ktorá nie je otvorená (skok do jej tela)
27XPROCprogram vbehol do procedúry
28?EXECENDPROC bez EXEC
29?PROCprocedúra neexistuje
30?#návestie neexistuje

Väčšinu chýb 22 až 30 nájde prekladač už pri preklade.

Basic26 navyše:

ČísloČo znamená
60banka rozšírenej pamäte, ktorú stroj nemá (kapitola 44)

Chyby zariadení

Čísla od 128 prichádzajú z operačného systému a z DOS-u (kapitola 24).

ČísloSlovoČo znamená
128stlačený BREAK (po *B)
129IS OPENkanál je už otvorený
130?DEVzariadenie neexistuje (chýba DOS?)
131WR ONLYčítanie z kanála otvoreného na zápis
132CMDzariadenie taký príkaz nepozná
133NOT OPENkanál nie je otvorený
134#zlé číslo kanála
135RD ONLYzápis do kanála otvoreného na čítanie
136EOFkoniec súboru
137TRUNCriadok v súbore je dlhší, než sa dá prečítať
138TIMEOUTzariadenie neodpovedá (tlačiareň, mechanika)
139NAKzariadenie príkaz odmietlo
141CURSORkurzor alebo bod mimo obrazovky
144DONEzariadenie hlási chybu (disketa chránená proti zápisu)
145MODEzlý grafický režim
146NOT IMPLzariadenie túto funkciu nemá
147RAMna grafický režim nie je pamäť
160zlé číslo mechaniky
161>#FILESpriveľa otvorených súborov
162DSK FULLdisketa je plná
164FILE#poškodený súbor
165NAMEzlé meno súboru
167LOCKEDsúbor je zamknutý
169>DIRadresár diskety je plný
170?FILEsúbor neexistuje

Hlásenia, ktoré nie sú chyba

HlásenieČo znamená
STOPPED AT LINE npríkaz STOP alebo kláves BREAK
NOT IN COMP PRGpríkaz editora, ktorý v preloženom programe nemá čo robiť (kapitola 25)
n BANKS OF EXTENDED MEMORY NEEDEDprogram potrebuje stroj s bankami (kapitola 45)
THE DATA FILE IS NOT LOADEDprogram z --code-only nenašiel svoje dáta

Hlásenia prekladača

program.abas(2,9): error B26017: expected '=' after a string

Súbor, v zátvorke riadok a stĺpec v súbore (nie číslo riadka BASICu), error alebo warning, kód a popis po anglicky. Opravuj vždy prvú chybu; ďalšie bývajú jej následkom.

Kódy 2 až 30 zodpovedajú číslam chýb interpretera – prekladač tú istú chybu našiel skôr, než program spustil.

Chyby

KódKedyČo s tým
B26005index reťazca za hranicou DIMzväčši DIM alebo oprav index
B26011s --int: zlomok do celej premennej, STEP so zlomkom pri celej premennej, číslo za hranicou 32 bitovpremennú do REM @FLOAT (kapitola 50)
B26006RESTORE na riadok, za ktorým nie sú DATA
B26008INPUT bez premennejv Atari BASICu nie je INPUT "text";A
B26009DIM dvakrát; index poľa za hranicou
B26012GOTO, GOSUB, THEN na riadok, ktorý nie jeoprav číslo; pre dobový program --quirks
B26013NEXT bez FOR, alebo s inou premennouslučky sa nesmú krížiť
B26017riadku nerozumie – najčastejšia chybapreklep v príkaze; malé písmená v Atari BASICu; meno premennej začína slovom BASICu; príkaz Turbo-BASICu v súbore .abas
B26023koniec bez začiatku: WEND, UNTIL, LOOP, ELSE, ENDIF
B26030EXIT mimo slučky
B26024začiatok bez konca: FOR, WHILE, REPEAT, DO, IFdoplň NEXT, WEND, UNTIL, LOOP, ENDIF
B26028EXEC, GO# na meno, ktoré nie je
B26040čakala sa hodnota; s --int porovnanie X/N<INT(X/N), ktoré vyjde vždy rovnakovýraz nie je dokončený (PRINT 5+)
B26041chýba zátvorka
B26042text tam, kde má byť číslo, alebo naopak; reťazec v REM @FLOATchýba $ v mene; spájanie textov plusom
B26043chýba THEN
B26044riadok sa nezačína číslom; alebo príkaz menuje číslo riadka v programe s --no-line-numberskapitola 47
B26056XBANK bez --reserve $4000-$7FFFkapitola 45
B26057INCLUDE: súbor sa nenašiel, vkladá sám seba, priveľa úrovní, za menom ešte niečo, alebo program má čísla riadkov či nemá --modernkapitola 47
B26099RUN "D:MENO"; s --int *Fpreložený program nevie nahrať iný program; *F bez --int
B26200zlá voľba na príkazovom riadkuBasic26 --help
B26201súbor sa nenašiel alebo sa nedá čítať
B26202výstup by prepísal vstupdaj -o s iným menom
B26213simulátor: program neskončilčaká na kláves, hodiny, alebo je v nekonečnej slučke; --sim-limit
B26227kód programu sa nezmestí pred --reservenižší --origin, menší program
B26232voľba v REM @COMPILE, ktorá tam nepatrídaj ju na príkazový riadok

Upozornenia

Preklad nezastavia (ak nie je zapnuté --werror).

KódKedy
B26046dve návestia alebo procedúry s rovnakým menom; platí prvé
B26048textu chýba úvodzovka na konci
B26210v texte je znak, ktorý Atari nemá (písmeno s diakritikou); v programe z neho bude ? – kde ho má znaková sada programu, povie --charmap (kapitola 43)
B26219príkaz editora (LIST, SAVE …) – s --strict je to chyba
B26230program robí niečo, čo interpreter znesie, ale stojí za pozornosť: riadky nie sú v poradí, POKE 106, meno začínajúce na NOT vo výpočte, skok na neexistujúci riadok s --quirks
B26231riadok REM s dátami ostáva v pamäti
B26232REM @COMPILE alebo REM @FLOAT za prvým príkazom; príkazový riadok prebil voľbu z programu; REM @FLOAT bez --int alebo s menom, ktoré program nemá
B26233s --int: A/B*C stratí zlomok A/B skôr, než násobí; X/N=INT(X/N) sa preloží ako „N delí X“; INT(A/B) je A/B; X=RND(…) je vždy 0; delenie celých čísel do premennej z REM @FLOAT (kapitola 50)
B26234POKE, DPOKE alebo MOVE na pevnú adresu v zásobníku procesora ($0100–$01F9), kde program aj interpreter držia návratové adresy
B26235číslo v DATA s medzerou za sebou (DATA 1,2 na konci riadku): READ ho ako číslo neprečíta a skončí chybou 8, aj v interpreteri. Editor Atari medzery na konci riadku zahodí, výpis upravený na PC ich môže mať
B26236meno na začiatku príkazu sa začína príkazom: LETTER=4 je LET TER=4, a LETTER inde v programe je iná premenná. Hlási sa, len keď program také celé meno inde používa – zhustené IFA<>B alebo FORI=1TO3 nie

Späť: B. Voľby prekladača · Ďalej: D. Atari v číslach