Magic Disk 64

home to index to html: MD9203-KURSE-FLOPPY-KURS_1-B_.html
* 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).



Valid HTML 4.0 Transitional Valid CSS!