C. Chyby
Chyby sú dvojaké:
- pri preklade – prekladač program neprijme a vypíše hlásenie s kódom
B26…; súbor.xexnevznikne, - za behu – program sa preložil, ale počas behu narazil na niečo, čo sa nedá vykonať; vypíše
ERROR-a číslo.
Chyby za behu
Preložený program hlási tie isté čísla ako interpreter. Takto vyzerá hlásenie:
ERROR- 11 AT LINE 60Program pre Turbo-BASIC XL (.tbas) pridá k číslu slovo:
ERROR- 11 OVERFLOW AT LINE 60Chybu možno zachytiť príkazom TRAP (kapitola 17); jej číslo je potom v PEEK(195), v Turbo-BASICu XL aj v ERR.
Chyby BASICu
| Číslo | Slovo v Turbo-BASICu XL | Čo znamená | Najčastejšia príčina |
|---|---|---|---|
| 2 | MEM | nie je pamäť | priveľký DIM; pozri kapitolu 42 |
| 3 | VALUE | hodnota mimo rozsahu | SQR(-1), LOG(0), POKE s číslom nad 255, záporný index |
| 4 | >#VARS | priveľa premenných | viac než 128 (Atari BASIC) alebo 256 |
| 5 | $LEN | reťazec: mimo dĺžky | A$(7) pri texte dlhom 5; zápis za hranicu DIM |
| 6 | ?DATA | došli dáta | READ a žiadne DATA už nie sú |
| 7 | >32767 | číslo väčšie než 32767 | tam, kde sa čaká číslo riadka |
| 8 | INPUT | text namiesto čísla | INPUT alebo READ do číselnej premennej |
| 9 | DIM | pole alebo reťazec | chýba DIM, DIM dvakrát, index mimo poľa |
| 10 | STACK | priveľa vnorení | príliš veľa GOSUB alebo FOR do seba |
| 11 | OVERFLOW | číslo sa nezmestí | delenie nulou, výsledok nad 1E98 |
| 12 | ?LINE | riadok neexistuje | vypočítaný GOTO, alebo --quirks |
| 13 | ?FOR | NEXT bez FOR | skok doprostred slučky |
| 14 | TOO LONG | riadok je príliš dlhý | |
| 15 | ?DEL | zmizol riadok slučky alebo podprogramu | |
| 16 | ?GOSUB | RETURN bez GOSUB | chýba END pred podprogramami |
| 17 | GARBAGE | riadok nedáva zmysel | chybný riadok preložený s --quirks |
| 18 | ?CHR | zlý znak | VAL textu, ktorý nie je číslo |
| 20 | # | zlé číslo kanála | kanál 8 a viac; v Atari BASICu kanál 0 mimo PRINT a INPUT |
Turbo-BASIC XL navyše:
| Číslo | Slovo | Čo znamená |
|---|---|---|
| 22 | ?NEST | zle vnorené slučky |
| 23 | ?WHILE | WEND bez WHILE |
| 24 | ?REPEAT | UNTIL bez REPEAT |
| 25 | ?DO | LOOP bez DO |
| 26 | ?EXIT | EXIT v slučke, ktorá nie je otvorená (skok do jej tela) |
| 27 | XPROC | program vbehol do procedúry |
| 28 | ?EXEC | ENDPROC bez EXEC |
| 29 | ?PROC | procedú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á |
|---|---|
| 60 | banka 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).
| Číslo | Slovo | Čo znamená |
|---|---|---|
| 128 | stlačený BREAK (po *B) | |
| 129 | IS OPEN | kanál je už otvorený |
| 130 | ?DEV | zariadenie neexistuje (chýba DOS?) |
| 131 | WR ONLY | čítanie z kanála otvoreného na zápis |
| 132 | CMD | zariadenie taký príkaz nepozná |
| 133 | NOT OPEN | kanál nie je otvorený |
| 134 | # | zlé číslo kanála |
| 135 | RD ONLY | zápis do kanála otvoreného na čítanie |
| 136 | EOF | koniec súboru |
| 137 | TRUNC | riadok v súbore je dlhší, než sa dá prečítať |
| 138 | TIMEOUT | zariadenie neodpovedá (tlačiareň, mechanika) |
| 139 | NAK | zariadenie príkaz odmietlo |
| 141 | CURSOR | kurzor alebo bod mimo obrazovky |
| 144 | DONE | zariadenie hlási chybu (disketa chránená proti zápisu) |
| 145 | MODE | zlý grafický režim |
| 146 | NOT IMPL | zariadenie túto funkciu nemá |
| 147 | RAM | na grafický režim nie je pamäť |
| 160 | zlé číslo mechaniky | |
| 161 | >#FILES | priveľa otvorených súborov |
| 162 | DSK FULL | disketa je plná |
| 164 | FILE# | poškodený súbor |
| 165 | NAME | zlé meno súboru |
| 167 | LOCKED | súbor je zamknutý |
| 169 | >DIR | adresár diskety je plný |
| 170 | ?FILE | súbor neexistuje |
Hlásenia, ktoré nie sú chyba
| Hlásenie | Čo znamená |
|---|---|
STOPPED AT LINE n | príkaz STOP alebo kláves BREAK |
NOT IN COMP PRG | príkaz editora, ktorý v preloženom programe nemá čo robiť (kapitola 25) |
n BANKS OF EXTENDED MEMORY NEEDED | program potrebuje stroj s bankami (kapitola 45) |
THE DATA FILE IS NOT LOADED | program z --code-only nenašiel svoje dáta |
Hlásenia prekladača
program.abas(2,9): error B26017: expected '=' after a stringSú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ód | Kedy | Čo s tým |
|---|---|---|
B26005 | index reťazca za hranicou DIM | zväčši DIM alebo oprav index |
B26011 | s --int: zlomok do celej premennej, STEP so zlomkom pri celej premennej, číslo za hranicou 32 bitov | premennú do REM @FLOAT (kapitola 50) |
B26006 | RESTORE na riadok, za ktorým nie sú DATA | |
B26008 | INPUT bez premennej | v Atari BASICu nie je INPUT "text";A |
B26009 | DIM dvakrát; index poľa za hranicou | |
B26012 | GOTO, GOSUB, THEN na riadok, ktorý nie je | oprav číslo; pre dobový program --quirks |
B26013 | NEXT bez FOR, alebo s inou premennou | slučky sa nesmú krížiť |
B26017 | riadku nerozumie – najčastejšia chyba | preklep v príkaze; malé písmená v Atari BASICu; meno premennej začína slovom BASICu; príkaz Turbo-BASICu v súbore .abas |
B26023 | koniec bez začiatku: WEND, UNTIL, LOOP, ELSE, ENDIF | |
B26030 | EXIT mimo slučky | |
B26024 | začiatok bez konca: FOR, WHILE, REPEAT, DO, IF | doplň NEXT, WEND, UNTIL, LOOP, ENDIF |
B26028 | EXEC, GO# na meno, ktoré nie je | |
B26040 | čakala sa hodnota; s --int porovnanie X/N<INT(X/N), ktoré vyjde vždy rovnako | výraz nie je dokončený (PRINT 5+) |
B26041 | chýba zátvorka | |
B26042 | text tam, kde má byť číslo, alebo naopak; reťazec v REM @FLOAT | chýba $ v mene; spájanie textov plusom |
B26043 | chýba THEN | |
B26044 | riadok sa nezačína číslom; alebo príkaz menuje číslo riadka v programe s --no-line-numbers | kapitola 47 |
B26056 | XBANK bez --reserve $4000-$7FFF | kapitola 45 |
B26057 | INCLUDE: 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á --modern | kapitola 47 |
B26099 | RUN "D:MENO"; s --int *F | preložený program nevie nahrať iný program; *F bez --int |
B26200 | zlá voľba na príkazovom riadku | Basic26 --help |
B26201 | súbor sa nenašiel alebo sa nedá čítať | |
B26202 | výstup by prepísal vstup | daj -o s iným menom |
B26213 | simulátor: program neskončil | čaká na kláves, hodiny, alebo je v nekonečnej slučke; --sim-limit |
B26227 | kód programu sa nezmestí pred --reserve | nižší --origin, menší program |
B26232 | voľba v REM @COMPILE, ktorá tam nepatrí | daj ju na príkazový riadok |
Upozornenia
Preklad nezastavia (ak nie je zapnuté --werror).
| Kód | Kedy |
|---|---|
B26046 | dve návestia alebo procedúry s rovnakým menom; platí prvé |
B26048 | textu chýba úvodzovka na konci |
B26210 | v 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) |
B26219 | príkaz editora (LIST, SAVE …) – s --strict je to chyba |
B26230 | program 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 |
B26231 | riadok REM s dátami ostáva v pamäti |
B26232 | REM @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á |
B26233 | s --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) |
B26234 | POKE, 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ť |
B26236 | meno 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