* 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).