Príloha C – Chyby
Chyby sú dvojakého druhu: tie, ktoré nájde prekladač (program sa nepreloží), a tie, ktoré nastanú za behu (program sa preložil, ale niečo sa pokazilo).
Ako čítať hlásenie prekladača
hello.act(2,10): error ACT001: missing double quote in stringSúbor, v zátvorke riadok a stĺpec, potom druh (error chyba, warning upozornenie, note doplnenie k predošlému), číslo a popis.
- Opravuj vždy prvú chybu; ďalšie bývajú jej následkom.
- Miesto je tam, kde si prekladač chybu všimol – skutočná príčina môže byť o kúsok skôr.
- Po 20 chybách prekladač prestane (dá sa zmeniť voľbou
--max-errors).
Chyby prekladu s číslami pôvodného Action!
Čísla 0 až 28 a 61 sú rovnaké ako v pôvodnom Action!. Niektoré sa týkali len obmedzenej pamäte Atari a v action26 ich nestretneš.
| Číslo | Hlásenie | Čo zvyčajne znamená |
|---|---|---|
| ACT001 | missing double quote in string | chýba úvodzovka na konci textu, alebo je text dlhší ako 255 znakov |
| ACT002 | nested DEFINE | DEFINE, ktorý sa odvoláva sám na seba |
| ACT005 | SET directive syntax error | zle zapísaný SET |
| ACT006 | declaration error | meno je už použité; deklarácia za príkazom; zlý tvar deklarácie |
| ACT007 | invalid argument list | chýba zátvorka za menom rutiny; priveľa argumentov |
| ACT008 | variable not declared | neznáme meno – preklep, chýbajúca deklarácia, rutina napísaná až pod volaním |
| ACT009 | not a constant | na mieste, kde má byť číslo známe pri preklade, je premenná |
| ACT010 | illegal assignment | priradenie do poľa, záznamu alebo konštanty; volanie bez zátvoriek |
| ACT011 | unknown error | prekladač narazil na niečo, čo nečakal – často následok predošlej chyby |
| ACT012 | missing THEN | za podmienkou IF chýba THEN; == namiesto = |
| ACT013 | missing FI | IF bez FI |
| ACT015 | missing DO | WHILE alebo FOR bez DO |
| ACT016 | missing TO | FOR bez TO |
| ACT017 | bad expression | zle zapísaný výraz |
| ACT018 | unmatched parentheses | chýba alebo prebýva zátvorka |
| ACT019 | missing OD | slučka bez OD; UNTIL nie je tesne pred OD |
| ACT021 | illegal array reference | index za niečím, čo nie je pole – často premenná s menom knižničnej rutiny |
| ACT023 | illegal conditional expression | porovnanie mimo podmienky; 1<a<3; chýbajú zátvorky okolo x&maska |
| ACT024 | illegal FOR statement | zle zapísaný FOR |
| ACT025 | illegal EXIT | EXIT mimo slučky |
| ACT027 | illegal TYPE declaration | zle zapísaný TYPE |
| ACT028 | illegal RETURN | RETURN(x) v procedúre; RETURN bez hodnoty vo funkcii |
Čísla 0, 3, 4, 14, 20, 22, 26 a 61 sú o nedostatku pamäte pôvodného prekladača.
Hlásenia action26
| Číslo | Druh | Význam |
|---|---|---|
| ACT200 | chyba | zlý príkazový riadok |
| ACT201, ACT202 | chyba | súbor sa nedá otvoriť / zapísať |
| ACT203 | chyba | súbor z INCLUDE alebo FILE sa nenašiel |
| ACT204, ACT205 | chyba | INCLUDE vkladá sám seba; príliš hlboké vnorenie |
| ACT209 | varovanie | znak, ktorý do jazyka nepatrí, bol preskočený |
| ACT211 | chyba | desatinné číslo – Action! ich nemá |
| ACT212 | varovanie | premenná, ktorú nikde nepoužívaš |
| ACT213 | varovanie | menej argumentov ako parametrov (len s --wextra) |
| ACT214 | varovanie | položka patrí inému typu záznamu |
| ACT215 | varovanie | číslo sa do typu nezmestí a skráti sa |
| ACT216 | chyba | program nemá žiadnu rutinu |
| ACT217 | varovanie | delenie nulou |
| ACT219 | varovanie | --strict: toto by pôvodný Action! odmietol |
| ACT220–ACT227 | chyba | assembler (blok ASM; 225 aj prekrytie blokov ORG) |
| ACT228 | varovanie | veľkosť poľa daná premennou |
| ACT231, ACT232 | chyba / varovanie | nastavenia v zdrojáku (;@…): zlé; prebité príkazovým riadkom |
| ACT233 | chyba / varovanie | ORG, ENDORG, ALIGN |
| ACT234 | chyba | CASE |
| ACT235, ACT236 | chyba / varovanie | IF a CASE ako hodnota |
| ACT237 | chyba | ENUM |
| ACT238, ACT239 | chyba / varovanie | viacrozmerné polia |
| ACT240 | chyba | špeciálny znak \{…} |
| ACT241–ACT243 | chyba / varovanie | rozšírená pamäť a okno bánk |
| ACT244 | varovanie | súbor W8P typu, ktorý sa na Atari nedá rozbaliť |
Chyby za behu
Keď rutina knižnice narazí na problém, program vypíše
Err: 170a skončí – pokiaľ nemáš vlastnú obsluhu chýb (kapitola 31).
Chyby knižnice action26
| Číslo | Význam |
|---|---|
| 100 | Sound s číslom hlasu väčším ako 3 |
| 101 | banka rozšírenej pamäte neexistuje |
| 102 | prístup do zakázanej oblasti (registre, vektory) |
| 103, 104 | XAntic: nezlučiteľná banka; rozšírenie to nevie |
| 105 | zbalené dáta v neznámom formáte |
| 106 | poškodený súbor W8P |
| 107 | Player/Missile grafika: pamäť z PMMemory chýba, nezačína na celej stránke alebo nie je na násobku 2 KB (1 KB) |
Chyby zariadení
| Číslo | Význam |
|---|---|
| 128 | stlačený kláves BREAK |
| 129 | kanál je už otvorený |
| 130 | zariadenie neexistuje |
| 131 | kanál je otvorený len na zápis |
| 132 | neplatný príkaz |
| 133 | kanál nie je otvorený |
| 134 | zlé číslo kanála |
| 135 | kanál je otvorený len na čítanie |
| 136 | koniec súboru (nehlási sa ako chyba; nastaví EOF) |
| 137 | riadok je dlhší ako miesto preň |
| 138 | zariadenie neodpovedá |
| 139 | zariadenie odmietlo príkaz |
| 141 | kurzor alebo bod mimo obrazovky |
| 144 | chyba zariadenia – disketa chránená proti zápisu alebo poškodená |
| 146 | zariadenie túto operáciu nevie |
| 147 | málo pamäte na grafický režim |
Chyby diskety
| Číslo | Význam |
|---|---|
| 160 | zlé číslo jednotky |
| 161 | priveľa otvorených súborov |
| 162 | disketa je plná |
| 164 | poškodený súbor |
| 165 | zlé meno súboru |
| 167 | súbor je zamknutý |
| 169 | adresár je plný |
| 170 | súbor neexistuje |
Chyby, ktoré nikto nehlási
Najviac času zaberú chyby, pri ktorých prekladač mlčí a program beží – len zle. Všetky sú opísané v kapitolách:
| Príznak | Pravdepodobná príčina | Kapitola |
|---|---|---|
| premenná sa „sama“ mení | index mimo poľa, pridlhý reťazec | 18, 19 |
| výpočet dáva malé nezmyselné číslo | výraz zo samých BYTE pretiekol | 7 |
| program sa zacyklí | FOR s BYTE do 255; chýbajúci RETURN; podmienka, ktorá sa nikdy nezmení | 13, 3, 11 |
| rutina „nemení“ premennú | dostala kópiu, nie adresu | 14, 20 |
| rutina počíta zle pri volaní zo seba | rekurzia | 16 |
| výpis je nezmysel | text v Put, číslo v Print, zlá značka v PrintF | 4, 26 |
| dva rovnaké texty „nie sú rovnaké“ | porovnanie reťazcov cez = | 19 |
| farba pozadia sa mení sama | BYTE x=710 namiesto BYTE x=[710] | 6, 24 |
Ďalej: Príloha D – Atari v číslach · Obsah