24. Súbory: OPEN, CLOSE, PRINT #, INPUT #, GET, PUT, STATUS, NOTE, POINT, XIO, LPRINT

Na čo to je

Premenné žijú, len kým program beží. Čo má prežiť vypnutie počítača – tabuľka najlepších výsledkov, uložená hra, zoznam adries –, musí ísť do súboru na diskete.

Atari sa na disketu, klávesnicu, obrazovku aj tlačiareň pozerá rovnako: ako na zariadenie, z ktorého sa číta alebo do ktorého sa píše. Program si k zariadeniu otvorí kanál a ďalej už pracuje s číslom kanála.

Ako sa to píše

Atari BASIC
OPEN #kanál,režim,0,"zariadenie:meno"
PRINT #kanál;čo
INPUT #kanál,premenná
GET #kanál,premenná
PUT #kanál,hodnota
CLOSE #kanál
ČasťVýznam
kanálčíslo 1 až 7, ktoré si vyberieš; kanál 0 je obrazovka a klávesnica a je otvorený stále
režim4 čítanie, 8 zápis (starý súbor sa prepíše), 9 pripísanie na koniec, 12 čítanie aj zápis
0tretie číslo, takmer vždy nula
"D:NOTES.TXT"zariadenie a meno súboru

Zariadenia:

MenoČo to je
D:disketa (D1: prvá mechanika, D2: druhá)
K:klávesnica – znak po znaku, bez RETURN
E:editor: obrazovka a klávesnica po riadkoch
S:obrazovka
P:tlačiareň
C:kazeta

Meno súboru na diskete má najviac 8 znakov, bodku a najviac 3 znaky prípony; len veľké písmená a číslice.

Príkazy:

PríkazČo robí
PRINT #1;A$zapíše riadok textu (alebo číslo) do súboru
INPUT #1,A$prečíta riadok
PUT #1,65zapíše jeden bajt
GET #1,Kprečíta jeden bajt do K
CLOSE #1zavrie kanál – až teraz je súbor na diskete celý
STATUS #1,Sdo S dá stav kanála (1 je v poriadku)
NOTE #1,S,Bzapamätá si miesto v súbore (sektor a bajt)
POINT #1,S,Bvráti sa na zapamätané miesto
XIO príkaz,#1,0,0,"D:MENO"zvláštne operácie zariadenia: premenovať, zmazať, zamknúť
LPRINT čovypíše riadok na tlačiareň, bez OPEN

Celý program

Súbor examples/files.abas zapíše tri riadky do súboru a prečíta ich späť:

Atari BASIC
10 REM Files: writing and reading
20 DIM L$(40)
30 OPEN #1,8,0,"D:NOTES.TXT"
40 PRINT #1;"First line"
50 PRINT #1;"Second line"
60 PRINT #1;12345
70 CLOSE #1
80 OPEN #1,4,0,"D:NOTES.TXT"
90 TRAP 140
100 INPUT #1,L$
110 PRINT "Read: ";L$
120 GOTO 100
140 CLOSE #1
150 PRINT "End of the file, error ";PEEK(195)

Preklad a spustenie

Simulátor má disketu D: len v pamäti – súbor v nej vydrží do konca behu, čo na vyskúšanie stačí:

Basic26 files.abas --sim

V emulátore potrebuje program skutočnú disketu a na nej DOS – program, ktorý na Atari s disketami pracuje. Voľba --atr vyrobí obraz diskety s DOS-om, uloží naň preložený program tak, aby sa po zapnutí spustil sám, a --run z tej diskety emulátor naštartuje:

Basic26 files.abas --atr files.atr --run

Viac o disketách je v kapitole 41.

Čo uvidíš

Read: First line
Read: Second line
Read: 12345
End of the file, error 136

Ako to funguje

Čísla v súbore

Číslo zapísané cez PRINT #1;N sa číta cez INPUT #1,N. Viac čísel na jednom riadku oddeľ čiarkou, ktorú zapíšeš sám: PRINT #1;A;",";B a potom INPUT #1,A,B.

Znak z klávesnice

Zariadenie K: vráti kód ATASCII stlačeného klávesu a čaká, kým nejaký príde – bez RETURN a bez toho, aby sa znak objavil na obrazovke:

Atari BASIC
10 OPEN #2,4,0,"K:"
20 PRINT "Press a key"
30 GET #2,K
40 PRINT "You pressed ";CHR$(K);" (code ";K;")"
50 CLOSE #2

Na rozdiel od PEEK(764) z kapitoly 22 dostaneš skutočný znak.

Tlačiareň

LPRINT "text" pošle riadok na tlačiareň. Robí to isté ako OPEN #7,8,0,"P:", PRINT #7;"text", CLOSE #7. Emulátor tlač ukladá do súboru.

XIO: operácie so súbormi

PríkazČo robí
XIO 32,#1,0,0,"D:OLD.TXT,NEW.TXT"premenuje súbor
XIO 33,#1,0,0,"D:NOTES.TXT"zmaže súbor
XIO 35,#1,0,0,"D:NOTES.TXT"zamkne súbor proti zmazaniu
XIO 36,#1,0,0,"D:NOTES.TXT"odomkne

Kanál za XIO musí byť zavretý. Tieto operácie robí DOS, takže ich skúšaj v emulátore s disketou, nie v simulátore. Turbo-BASIC XL má na ne obyčajné príkazy RENAME, DELETE, LOCK, UNLOCK a DIR (kapitola 37).

Časté chyby

Čo sa staloČo sa stane
súbor na čítanie neexistujeERROR- 170 AT LINE 80
zariadenie neexistuje, alebo v emulátore chýba DOSERROR- 130
OPEN kanála, ktorý je už otvorenýERROR- 129
PRINT #1 alebo INPUT #1 na neotvorenom kanáliERROR- 133
čítanie za koncom súboruERROR- 136
čítanie zo súboru otvoreného na zápisERROR- 131; opačne 135
disketa je plnáERROR- 162
chýba CLOSE po zápisekoniec súboru sa na disketu dostane až na konci programu; po RESET alebo vypnutí nikdy

Chyby od 128 vyššie neprichádzajú z BASICu, ale z operačného systému a DOS-u. Všetky sú v prílohe C.

Vyskúšaj si

  1. Pripíš do NOTES.TXT štvrtý riadok režimom 9 a prečítaj súbor znova.
  2. Ulož do súboru desať čísel z poľa a prečítaj ich späť do iného poľa.
  3. Napíš program, ktorý sa spýta na meno a pri ďalšom spustení (v emulátore, s tou istou disketou) ťa ním pozdraví. Ak súbor ešte nie je, chybu 170 zachyť cez TRAP.

Zhrnutie

Späť: 23. Strojový kód · Ďalej: 25. Príkazy editora