Magic Disk 64

home to index to text: MD9203-KURSE-FLOPPY-KURS_1-B_.txt

* User-Dateien ( USR) Diese Dateien sind speziell für die direkte Floppyprogrammierung gedacht. Da die 1541 ja über einen eigenen Prozessor verfügt kann dieser auch direkt in Maschinensprache programmiert werden. Legt man nun ein Assemblerprogramm in einem USR-File ab, so kann dieses von der Floppy direkt in ihren eigenen Arbeitsspeicher geladen, und dort von ihr ausgeführt werden.

* Deleted Files ( DEL) Mit der Kennung " DEL" werden Files markiert, 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 ' unbelegt' 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 gekennzeichneter Eintrag ist normalerweise im Directory nicht sichtbar. Wie das dennoch 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 SEQund REL-Dateien sollen nun in diesem und dem nächsten Teil dieses 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 Reihenfolge, mit der wir Daten in ein solches 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) equentielle Datei. Andere mögliche Filetypen wären " R" für relative," P" für Programm-, oder aber auch " U" für Userdateien. Die " P" Angabe nimmt dabei eine Sonderstellung ein. Da sie der am häufigsten 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 funktioniert 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 Bezeichnung der Datenoperation, die durchgeführt werden soll. Im Beispiel benutzten 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 Diskette angelegt wird.
Nachdem im obigen Beispiel eine sequentielle Datei zum Scheiben geöffnet wurde, können wir Daten mittels des PRINT#- Befehls in sie hineinschreiben.
Dies kann in BASIC auf verschiedenste Arten geschehen, die Betriebssystemroutine des PRINT#- Befehls passt sich automatisch den Variablentypen an ( wie Sie sehen wurden in obigem Beispiel String-, Floatund Integerveriablen geschrieben) . 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 Beispiel 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 Diskette 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 Endmarkierung eines Wertes heranzieht. Einzelne Bytes liest man mit der GET#- Funktion, die ja sowieso immer nur ein einzelnes Byte einliest. Hier ein Beispiel, 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öchte man sie wieder in echte Byte-Werte umwandeln, muß man die ASC-Funktion wiefolgt 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 Fileprogrammierung unbedingt anmerken sollten ist, daß die Daten eben " sequentiell", also hintereinander, in einem File liegen. 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 aussehen mag, wie Sie im nächsten Monat bei der relativen Dateiverwaltung festellen werden.
Haargenau so, wie wir ein SEQ-File gelesen und geschrieben haben, können Sie mit PRG-Files hantieren. Sie müssen lediglich 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" Sekundäradressen 0 und 1 . Wie ich obig schon beschrieben hatte, können wir damit der Floppy gleich schon mitteilen, daß wir ein PRG-File lesen oder schreiben wollen. Die explizite Angabe ", P, R" oder ", P, W" entfällt. Die Sekundäradresse 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# schreiben. Ebenso müssen Sie Ihre Files natürlich 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 ( besonders 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 dahin ein allzeit " Gut Hack",

                       Uli Basters (ub).

Valid HTML 4.0 Transitional Valid CSS!