* User-Dateien (USR)
Diese Dateien sind speziell für die di-
rekte Floppyprogrammierung gedacht. Da
die 1541 ja über einen eigenen Prozessor
verfügt kann dieser auch direkt in Ma-
schinensprache programmiert werden. Legt
man nun ein Assemblerprogramm in einem
USR-File ab, so kann dieses von der
Floppy direkt in ihren eigenen Arbeits-
speicher geladen, und dort von ihr aus-
geführt werden.
* Deleted Files (DEL)
Mit der Kennung "DEL" werden Files mar-
kiert, die von der Diskette gelöscht
wurden. Die Floppy löscht nun ein File
nicht wirklich, sondern sie versieht den
File-Eintrag im Directory einfach mit
der DEL-Kennung und gibt die vom File
belegten Blocks schlichtweg als 'unbe-
legt' wieder frei. Das bedeutet, daß ein
File nach seiner Löschung auch immer
wieder restauriert werden kann, solange
man keine neuen Daten auf die Diskette
geschrieben hat. Ein mit DEL gekenn-
zeichneter Eintrag ist normalerweise im
Directory nicht sichtbar. Wie das den-
noch möglich ist, und wie man ein
gelöschtes File wieder retten kann, soll
und auch in einer der nächsten Ausgaben
dieses Kurses beschäftigen.
DIE PROGRAMMIERUNG SEQUENTIELLER DATEIEN
Speziell die SEQ- und REL-Dateien sollen
nun in diesem und dem nächsten Teil die-
ses Kurses zum Zuge kommen. Beginnen wir
mit der Programmierung sequentieller
Files.
Wie oben schon erwähnt, liegen in SEQ
und PRG Dateien die Daten sequentiell,
also Byte hinter Byte, vor. In der Rei-
henfolge, mit der wir Daten in ein sol-
ches File hineinschreiben, müssen wir
sie auch wieder auslesen. Die Vorgehens-
weise hierbei ist denkabr einfach.
Zunächst wollen wir einmal ein File
schreiben. Hierzu müssen wir lediglich
ein SEQ-File zum Schreiben öffnen und
dann mittels des PRINT#-Befehls Daten
hineinschreiben. Hierzu ein Beispiel:
OPEN 1,8,2,"DATEN,S,W"
PRINT#1,ZA
PRINT#1,a$
PRINT#1,x%
PRINT#1,CHR$(0);CHR$(40);
CLOSE 1
Hier öffnen wir zunächst einmal ein File
mit dem Namen "DATEN". Innerhalb der
Namensangabe verlangt die Floppy nun
noch eine Spezifizierung des File-Typs
und der Datenoperation (Lesen oder
Schreiben) die durchgeführt werden soll.
Das "S" steht dabei für eine (S)equen-
tielle Datei. Andere mögliche Filetypen
wären "R" für relative, "P" für Pro-
gramm-, oder aber auch "U" für Userda-
teien. Die "P" Angabe nimmt dabei eine
Sonderstellung ein. Da sie der am häu-
figsten benutzte Filetyp ist, muß sie
nicht explizit angegeben werden. Wenn
keine Typenangabe gemacht ist, nimmt die
Floppy automatisch an, daß es sich um
eine "PRG"-Datei handelt. Dies funktio-
niert jedoch nur, wenn eine der beiden
Sekundäradressen 0 oder 1 benutzt wurde.
Dazu gleich mehr.
Direkt nach dem Filetyp kommt, ebenfalls
durch ein Komma getrennt, eine Bezeich-
nung der Datenoperation, die durch-
geführt werden soll. Im Beispiel benutz-
ten wir die Operation "W", was für (W-
)rite=schreiben steht. Insgesamt sind
hier aber drei verschiedene Operanden
möglich:
(R)ead - zum Lesen einer Datei
(W)rite - zum Schreiben einer Datei
(A)ppend - zum Anhängen an eine alte
Datei
Die "A"-Option entspricht im Prinzip der
"W"-Option. Daten werden in einem File
gespeichert, jedoch mit dem Unterschied,
daß diese Daten an eine schon bestehende
Datei angehängt werden, und nicht etwa
wie bei "W" eine neue Datei auf der Dis-
kette angelegt wird.
Nachdem im obigen Beispiel eine sequen-
tielle Datei zum Scheiben geöffnet wur-
de, können wir Daten mittels des
PRINT#-Befehls in sie hineinschreiben.
Dies kann in BASIC auf verschiedenste
Arten geschehen, die Betriebssystemrou-
tine des PRINT#-Befehls passt sich auto-
matisch den Variablentypen an (wie Sie
sehen wurden in obigem Beispiel String-,
Float- und Integerveriablen geschrie-
ben). Möchte man ein "echtes" Zeichen in
ein File schreiben, so benutzt man in
der Regel die CHR$-Funktion, die nur
einzelne Bytes schreibt, in obigem Bei-
spiel die Bytes mit den Werten 0 und 40.
Wichtig ist die Angabe eines Semikolons
nach der CHR$-Ausgabe. Dies bedeutet
nämlich, wie beim normalen PRINT-Befehl
auch, daß nach der "Ausgabe" auf Disket-
te die nächste Ausgabe direkt folgen
soll. Andernfalls hängt BASIC nämlich
automatisch ein "Carriage Return" (CR,
ASCII-Wert 13) an die Ausgabe an. Bei
der Ausgabe von "reinen" Bytes kann dies
hinderlich sein, weshalb man bei CHR$-
Ausgaben in der Regel ein ";" mitangibt.
BASIC-Variablen MÖSSEN ohne Semikolon
ausgegeben werden, da der INPUT#-Befehl,
mit dem man die geschriebenen Daten spä-
ter wieder lesen muß das CR als Endmar-
kierung eines Wertes heranzieht. Einzel-
ne Bytes liest man mit der GET#-
Funktion, die ja sowieso immer nur ein
einzelnes Byte einliest. Hier ein Bei-
spiel, das die obig geschriebene Datei
wieder einliest:
OPEN 1,8,2,"DATEN,S,R"
INPUT#1,ZA
INPUT#1,A$
INPUT#1,x%
GET#1,Z1$: GET#1,Z2$
CLOSE 1
Die zwei einzelnen Zeichen aus obigem
Beispiel sind nun in den String-
Variablen Z1$ und Z2$ gespeichert. Möch-
te man sie wieder in echte Byte-Werte
umwandeln, muß man die ASC-Funktion wie-
folgt benutzen:
Z1%=ASC(Z1$)
Z2%=ASC(Z2$)
Wie Sie sehen, haben wir diesmal auch
beim OPEN-Befehl die "R"-Angabe gemacht,
damit die Floppy weiß, daß wir Daten
lesen wollen.
Was Sie bei der sequentilellen Filepro-
grammierung unbedingt anmerken sollten
ist, daß die Daten eben "sequentiell",
also hintereinander, in einem File lie-
gen. Sie müssen sie demnach haargenau in
der Reihenfolge wieder einlesen, mit der
Sie sie geschrieben haben. Dies ist gar
nicht so selbstverständlich wie es aus-
sehen mag, wie Sie im nächsten Monat bei
der relativen Dateiverwaltung festellen
werden.
Haargenau so, wie wir ein SEQ-File gele-
sen und geschrieben haben, können Sie
mit PRG-Files hantieren. Sie müssen le-
diglich das "S" im Filenamen beim OPEN-
Befehl in ein "P" abändern. Ansonsten
ändert sich nichts.
Pfiffig bei der Arbeit mit PRG-Files ist
nun die Anwendung der "besonderen" Se-
kundäradressen 0 und 1. Wie ich obig
schon beschrieben hatte, können wir da-
mit der Floppy gleich schon mitteilen,
daß wir ein PRG-File lesen oder schrei-
ben wollen. Die explizite Angabe ",P,R"
oder ",P,W" entfällt. Die Sekundäradres-
se 0 steht für "PRG-File lesen", die
Adresse 1 für "PRG-File schreiben". Hier
einfach einmal zwei Beispiele:
"OPEN 1,8,0,"MEINEDATEI"
(Üffnet das PRG-File "MEINEDATEI" zum
lesen)
"OPEN 1,8,1,"MEINEDATEI"
(Üffnet das PRG-File "MEINEDATEI" zum
schreiben)
Nun können Sie ganz normal mit INPUT#
und GET# lesen, bzw, mit PRINT# schrei-
ben. Ebenso müssen Sie Ihre Files natür-
lich wieder wie gewohnt mit CLOSE
schließen.
Die Verkürzung über die Sekundäradressen
wird häufig in Kopierprogrammen benutzt,
weil man so nicht noch umständlich den
Filenamen-Appendix anzuhängen hat (be-
sonders in Assembler eine zwar einfache,
aber lästige Arbeit).
Das war es dann für diesen Monat. Im
nächsten Monat wollen wir und dann an
die relative Dateiverwaltung wagen, die
zwar komplizierter zu Programmieren ist,
mit der jedoch auch sehr flexibel und
schnell gearbeitet werden kann. Bis da-
hin ein allzeit "Gut Hack",
Uli Basters (ub).