Magic Disk 64

home to index to html: MD8908-KURSE-BASIC_KURS_TEIL_7-1_:_VON_ADAM_UND_EVA...(TEIL_7).html
 BASIC-Kurs:"Von Adam und Eva" (Teil 7) 
 -------------------------------------- 
 Hallöchen da draußen ! Weiter gehts in 
unserem Basickurs. Nachdem wir nun  auch
schon ein bißchen  Musik  machen  können
mit unserem 64er, wollen wir uns in die-
sem Monat einmal um die  Dateiverwaltung
und die Programmierung der  Floppy  küm-
mern. Gleichzeitig lernen Sie dann  auch
noch  etwas  über  das  Ansteuern  eines
Druckers, da diese beiden Themen nämlich
sehr nahe  beieinander  liegen  und  die
Programmierung  von  BASIC   aus   sogar
(fast) gleich ist. Man braucht halt  nur
noch ein paar Backgroundinformationen zu
den einzelnen Geräten. Begeben  wir  uns
nun also in die Außenwelt unseres C64 in
die Welt der Peripherie...              
Beginnen wir mit der Floppy. Die Befehle
LOAD  und  SAVE  brauche  ich  Ihnen  ja
bestimmt nicht mehr  zu  erklären.  Wenn
Sie die nicht kennen würden, würden  Sie
ja diesen Kurs gar nicht lesen können.  
Zu LOAD bleibt nur zu sagen,  daß  es  2
Arten gibt, diesen Befehl  zu  benutzen:
Die  eine  Möglichkeit  kennen  Sie  be-
stimmt. Nachdem Sie  ein  BASIC-Programm
mit    dem    Befehl    SAVE"PROGRAMM",8
gespeichert hatten, konnten Sie es immer
wieder  mit  LOAD"PROGRAMM",8   in   den
Basicspeicher  Ihres  64ers  laden.  Wie
ich  schon  im  5.  Teil  dieses  Kurses
erwähnte, ist das der Bereich  von  2048
bis 40960. Ein BASIC-Programm wird  also
immer an die Adresse 2048  und  folgende
geladen. Wenn Sie allerdings einmal  ein
Maschinenprogramm  haben,  das  an  eine
andere  Speicheradresse  geladen  werden
soll, so müssen Sie LOAD  folgendermaßen
benutzen :                              
LOAD"PROGRAMM",8,1                      
Wir haben also an das ",8" noch ein ",1"
angehängt. Dieser  Appendix  teilt  LOAD
mit, daß nun an  eine  absolute  Adresse
geladen wird. Das heißt, an eine Adresse
die in dem File schon angegeben wird.   
Dies kann von Nutzen sein, wenn wir  zum
Beispiel Grafikdaten an  eine  bestimmte
Adresse im Speicher  laden  wollen.  Ich
werde in dem diesem Kurs  anschließenden
Grafikkurs  hierauf  noch  einmal  näher
eingehen.                               
Im übrigen gibt es auch noch einen  wei-
teren Befehl, der mit LOAD nahe verwandt
ist. Ich spreche von dem  VERIFY-Befehl.
Diesen benutzen  Sie  ebenso  wie  LOAD,
nämlich:                                
VERIFY"PROGRAMM",8                      
Dieser ist nur in Verbindung von  BASIC-
Programmen  sinnvoll,  daher  auch  kein
",1" am Ende.                           
VERIFY macht nun nichts anderes als  ein
Programm auf der Diskette mit  dem  sich
im Speicher befindlichen  BASIC-Programm
zu vergleichen. Sie können hiermit  also
prüfen, ob auf der Diskette eine  andere
Version des Programms  vorliegt.  Sollte
das der Fall sein, so meldet sich VERIFY
mit "VERIFY ERROR ?" zurück.            
Andernfalls schreibt es einfach nur  ein
"OK" auf den Bildschirm. Das Programm im
Speicher, ebenso wie das  auf  der  Dis-
kette, bleiben jedoch komplett erhalten.
Es wird somit also NICHTS  an  den  Pro-
grammen verändert!                      
So. Nach diesem  kleinen  "Vorgeplänkel"
wollen wir uns  nun  um  die  "seriösen"
Anwendungen in BASIC  zusammen  mit  der
Floppy kümmern. Es besteht nämlich  auch
die Möglichkeit, Daten, wie zum Beispiel
Variablen, DIREKT in ein File zu schrei-
ben und sie hieraus  wieder  auszulesen.
Dies ist sehr sinnvoll,  wenn  man  eine
Anwendung schreiben möchte, die  irgend-
welche  Werte  zwischenspeichern   soll,
oder wenn Sie bei einem Spiel die  High-
scoreliste der Nachwelt  erhalten  möch-
ten.                                    
Damit wir dieses Problem jedoch  richtig
angehen können, muß ich erst etwas  wei-
ter ausholen und  Sie  einmal  über  die
Ein-/Ausgabe in BASIC aufklären.        
Alle Geräte, die an Ihrem  64er  hängen,
haben, wie Sie vielleicht wissen, eigene
Gerätenummern. Die Floppy  zum  Beipsiel
die 8, wie man das am LOAD-Befehl  sehen
kann. Das ",8" gibt ihm nämlich an,  daß
er von der Floppy  laden  soll.  Wollten
Sie von der Datasette laden  (heutzutage
nur noch von wenigen benutzt), so müßten
Sie dies mit einem ",1" kenntlich machen
(also LOAD"PROGRAMM",1). Hier einmal ei-
ne Liste aller möglichen Gerätenummern: 
Nummer Gerät                            
----------------------------------------
0 Tastatur                              
1 Datasette                             
2 RS232 - Serielle Schnittstele am User-
  Port für Datenfernübertragung (DFÜ)   
3 Bildschirm                            
4 Drucker 1                             
5 Drucker 2 (am Drucker selbst einstell-
  bar)                                  
8 Diskettenlaufwerk 0 (normal)          
9,10,11 Weitere Diskettenlaufwerke      
Der C64 ist nun so  ausgelegt,  daß  man
ihm zuerst einmal sagen muß, mit welchem
der oben erwähnten Geräte  man  arbeiten
möchte. Dies geschieht in BASIC mit  dem
OPEN-Befehl. OPEN ist englisch und heißt
"Öffne".  Es  heißt  nämlich  auch,  man
"öffnet" einen sogenannten Filekanal für
ein Gerät.                              
Damit  man  nun  mit  mehreren   Geräten
gleichzeitig arbeiten kann, ohne hierbei
jedesmal den Kanal wieder neu öffnen  zu
müssen, kann man jeden Filekanal mit ei-
ner eigenen Nummer zwischen  1  und  127
versehen, die  dann  quasi  als  Kennung
dient, wenn  man  auf  einen  Kanal  zu-
greift. Tun Sie dies, so weiß unser  C64
gleich, mit welchem Gerät er zu kommuni-
zieren hat und handhabt dies  dann  auch
entspechend, da alle Geräte ja in  einer
besonderen Art und Weise "bedient"  sein
wollen. Diese Filenummern muß  man  also
ebenfalls dem OPEN-Befehl  mit  auf  den
Weg geben,  damit  er  die  Gerätenummer
auch  der  richtigen  (Erkennungs-)File-
nummer zuordnet. Bei einem  Drucker  zum
Beispiel (mit der Geräteadresse 4)  sähe
das dann etwa folgendermaßen aus:       
OPEN 1,4                                
Schon hätten wir einen Filekanal für den
Drucker eröffnet, an den wir  nun  Daten
senden könnten. Hierzu  wird  dann  eine
kleine Abwandlung  unseres  mittlerweile
altbekannten PRINT-Befehls benutzt - der
PRINT#-Befehl. Das Doppelkreuz (#)  hier
ist sehr wichtig,  da  BASIC  sonst  die
beiden  Befehle  ja  nicht  auseinander-
halten könnte - PRINT ohne "#"  gibt  ja
ausschließlich auf den Bilschirm aus.   
Daß PRINT  "drucke"  heißt,  wissen  Sie
mittlerweile   ja   auch   schon.    Das
Doppelkreuz  ist  eine   im   englischen
allgemein   bekannte    Abkürzung    für
"Nummer". Die komlette  Übersetzung  von
PRINT# wäre  demnach  also  "Drucke  auf
Nummer".   Diese   Nummer    wird    nun
anschließend angegeben  und  stellt  die
oben erwähnte  Filenummer  dar.  Um  nun
also Daten  an  den  Drucker  zu  senden
müßten  wir,  nachdem   wir   den   oben
erwähnten    OPEN-Befehl    durchgeführt
haben, folgendes schreiben:             
PRINT#1,"Das ist eine Datenausgabe"     
Hier haben wir einmal eine Zeichenkette,
wie auch bei  PRINT  durch  Gänsefüßchen
eingeklammert, ausgegeben. Ebenso können
Sie hier jedoch auch mit  Variablen  ar-
beiten, etwa so:                        
PRINT#1,a$                              
PRINT#1,x                               
PRINT#1,z%                              
Beim Zugriff auf die  Floppy  ist  diese
Vorgehenweise nun  genau  dieselbe.  Wir
müssen zuerst  einen  Kanal  öffnen  und
können  anschließend  mit  PRINT#  Daten
übergeben. Allerdings  müssen  wir  hier
wieder ein wenig unterscheiden, denn die
Floppy kann nämlich in  zwei  Richtungen
bedient   werden;   zum   einen   "Daten
schreiben",  hierzu  benutzt  man   dann
PRINT#, und zum anderen "Daten Lesen".  
Da brauchen wir dann einen neuen Befehl,
doch hierzu später. Zuerst einmal müssen
wir einen Filekanal für die Floppy  öff-
nen. Dies ist leider nicht mehr ganz  so
einfach wie beim Drucker (daher auch zu-
erst das Beispiel  mit  selbigem),  denn
der OPEN-Befehl verlangt für die  Floppy
mehr Parameter als nur File- und Geräte-
nummer. Da wäre nämlich zunächst  einmal
noch  die  sogenannte  "Sekundäradresse"
und dann noch ein  entsprechender  File-
name, damit das Laufwerk auch weiß,  mit
welchem File wir arbeiten wollen.       
Kommen wir zunächst einmal zur Sekundär-
adresse. Diese gibt an, auf  welche  Art
und Weise wir Daten verarbeiten möchten.
Sie wird in Form  einen  Zahl  angegeben
und bezeichnet damit vorher  vereinbarte
Funktionen. Die Floppy akzeptiert insge-
samt 16 Sekundäradressen,  die  folgende
Funktionen belegen:                     
Sekundäradresse Funktion                
----------------------------------------
0 Daten Lesen (LOAD)                    
1 Daten Schreiben (SAVE)                
2-14 Daten Lesen ODER schreiben         
15 Sek.adresse für Befehlskanal         
Für uns sind im Augenblick nur die  Num-
mern von 2 bis 14 wichtig,  die  anderen
werde ich Ihnen später erklären.        
Zuerst muß ich Sie noch ein  wenig  über
die verschiedenen Filearten  der  Floppy
auflären. Es gibt derer fünf, von  denen
wir allerdings nur  2  benutzen  werden.
Jede der verschiedenen Arten wird in der
Fileliste einer Diskette, dem  sogenann-
ten  Directory  (LOAD"$",8),  mit  einem
kleinen Kürzel versehen, so daß man  er-
kennt, welche Fileart man vor sich  hat.
Programme haben zum Beispiel  immer  das
Kürzel "PRG". Das kennen Sie ja bestimmt
aus vielen Directories.  Hier  nun  eine
Liste aller weiteren Filearten:         
1.) PRG - PRoGramm.  Diese  Fileart  ist
    eigens für Programme reserviet.  Die
    Datenbytes, die an  die  Floppy  ge-
    sandt werden,werden in sequentieller
    Reihenfolge, also ein Byte nach  dem
    anderen, gespeichert. Das PRG-Kürzel
    gibt an, daß man  das  Programm  mit
    LOAD  in  den  Speicher  des   64ers
    laden kann. Alle Programme, die  Sie
    mit   SAVE   abspeichern,   erhalten
    ebenfalls  dieses   Filekürzel   zur
    Erkennung.                          
2.) SEQ - SEQuenz.  Diese  Fileart  wird
    genauso  wie  PRG  gehandhabt.   Die
    Daten folgen also Byte für Byte  auf
    der  Diskette,  mit   dem   einzigen
    Unterschied,  daß  Sie  diese  Daten
    NICHT mit LOAD laden können. Es  ist
    quasi  ein   Erkennungszeichen   für
    Datenfiles von Programmen, aus denen
    auf diese Files zugegriffen wird.   
3.) REL - RELatives File. Relative Files
    sind  Files,  in   denen   bestimmte
    Datenblöcke,  sogenannte  "Records",
    gespeichert sind. Duch Angabe  einer
    Recordnummer wird NUR dieser  Record
    geladen, und nicht das ganze File.  
    Reltive Files werden auch "Files mit
    Wahlfreiem Zugriff genannt" und sind
    sehr  häufig  bei  Dateiverwaltungs-
    programmen  zu  finden,   da   durch
    diese  Fileart  schnell  auf   einen
    bestimmten   Datensatz   zugegriffen
    werden kann, ohne gleich  die  ganze
    Datei zu  durchforsten.  Leider  ist
    sie nicht sehr einfach in  BASIC  zu
    Programmieren, weshalb  wir  sie  an
    dieser Stelle auch  nicht  behandeln
    werden.                             
4.) DEL  -  DELeted.  Files  mit  diesem
    Kürzel sehen Sie in der  Regel  NIE,
    da  diese  Fileart   lediglich   für
    floppyinterne Anwendungen reserviert
    ist.  Sie  gibt  an,  daß  ihr  File
    gelöscht wurde, daß also die von ihm
    belegten   Datenblöcke    auf    der
    Diskette   wieder   benutzt   werden
    können.                             
5.) USR -  USeR  File.  Der  Aufbau  ist
    derselbe wie bei PRG  und  SEQ.  USR
    gibt lediglich an,  daß  das  hierin
    gespeicherte Programm  NUR  von  der
    Floppy ausführbar ist, also für  uns
    uninteressant.                      
Wir wollen uns hier nur mit  den  ersten
beiden  Arten   beschäftigen.   Zunächst
einmal die SEQuenz-Dateien. Wie Sie oben
ja schon lesen konnten ist diese Fileart
für Daten im Allgemeinen reserviert. Daß
wir das mit den  Filearten  zuerst  noch
klären mußten ist  deshalb  wichtig,  da
diese Angabe beim OPEN-Befehl  ebenfalls
mitangegeben werden muß. Dies  geschieht
zusammen mit dem Filenamen. Hier  einmal
ein Beispiel, damit Sie wissen  wie  das
öffnen  eines  Kanals  für  die   Floppy
aussieht:                               
 OPEN 1,8,2,"HIGHSCORE,S,W"             
Dabei ist:                              
1 - die Filenummer                      
8 - die Geräteadresse (Floppy)          
2 - die Sekundäradresse                 
HIGHSCORE - der eigentliche Filename    
S - die Fileart                         
W - die Betriebsart                     
Sie sehen also, zuerst  kommen  die  uns
bisher schon bekannten  Parameter  dran,
also   Filenummer   und   Geräteadresse.
Anschließend, mit einem Komma  vom  Rest
getrennt, folgt die Sekundäradresse,  in
unserem Beispiel die 2. Sie könnten  na-
türlich auch alle anderen Nummern von  2
bis 14 benutzen, dies wäre  kein  Unter-
schied. Jetzt  jedoch  zum  Filenamen  -
nachdem Sie auch diesen mit einem  Komma
vom  Rest  abgehoben  haben  folgt,   in
Gänsefüßchen  gesetzt,  der  eigentliche
Filename. Wie Sie jedoch  sehen,  werden
zusammen  mit  dem  Filenamen   noch   2
weitere Parameter übergeben. Da wäre zum
einen die Fileart,  markiert  durch  den
Buchstaben  "S"  und  zum  anderen   die
Betriebsart, hier  in  unserem  Beispiel
durch den Buchstaben "W" dargestellt.   
Beide  Parameter   werden   wieder   mit
Kommata vom Filenamen abgetrennt,  wobei
allerdings zu beachten  ist,  daß  beide
sich  zusammen  mit   dem   eigentlichen
Filenamen   in    dem    Filename-String
befinden, so  daß  die  Parameter  NAME,
FILE-  und  BETRIEBSART"  alle  in   EIN
Gänsefüßchenpaar gefaßt sind.           
Wie Sie vielleicht schon erraten  haben,
bezeichet das "S"  die  Fileart  SEQenz.
Wir haben hier  also  ein  sequentielles
File geöffnet.  Bei  einem  Programmfile
hätten  wir  hier  ein   "P"   einsetzen
müssen. Nun zur Betriebsartkennung.  Der
Buchstabe "W" im Beispiel oben steht für
"Write",  zu  Deutsch  "Schreibe".   Der
Kanal wurde also zum Schreiben geöffnet.
Die Floppy erwartet nun,  daß  Daten  an
sie gesandt werden, die sie dann auf die
Diskette   in   das   angegebene    File
schreibt. Für uns heißt das nun, daß wir
mit Hile von PRINT# jetzt Daten auf  den
Kanal 1 schicken können  und  diese  auf
Diskette gespeichert werden. Senden  wir
doch einfach einmal etwas an die Floppy:
na$="Fritz Meier"                       
sc=100000                               
PRINT#1,"Highscoreliste"                
PRINT#1,pl$                             
PRINT#1,sc                              
Hier haben wir  nun  den  Highscore  von
Fritz  Meier  abgespeichert,  der   sich
auf 100000  Punkte  beläuft,  indem  wir
die verschiedenen Werte erst  einmal  in
Variablen definierten  und  anschließend
nacheinander  (sequentiell  !)  an   die
Floppy  gesendet   haben.   Sie   hätten
natürlich   die   Daten   auch    dirket
schreiben können, wobei der  String  na$
in Gänsefüßchen hätte stehen müssen  und
die Zahl ohne, so wie das bei dem String
"HIGHSCRORELISTE" zu sehen ist.  Wichtig
ist, daß Sie jedes  einzelne  Datum  mit
einem EINZIGEN PRINT#-Befehl senden, und
nicht etwa von Kommata  getrennt  -  wie
man    das    vielleicht    nach     der
Parametertrennung   bei   OPEN    denken
könnte.  Diese  Kommatrennung  ist  zwar
auch  möglich,  doch  bewirkt  Sie  hier
etwas anderes, wozu  ich  später  kommen
werde. Außerdem könnten Sie  mit  Komma-
trennung später die Daten nicht mehr  so
einfach einlesen, doch hierzu  ebenfalls
später mehr.                            
Unsere Daten wären  jetzt  also  an  die
Floppy geschickt und somit  gespeichert.
Den Filekanal brauchen wir  jetzt  nicht
mehr. Deshalb müssen wir ihn zuerst noch
wieder schließen, bevor wir  fortfahren.
Dies ist sehr sehr wichtig, da wir somit
nicht nur den Computer  entlasten,  weil
der sich jetzt auch nicht mehr den Kanal
"merken" muß, der mit der Floppy zu  tun
hat, sondern  durch  ein  Schließen  des
Kanals veranlassen wir gleichzeitig auch
die Floppy das File komplett und richtig
auf der Diskette anzulegen.  Das  heißt,
daß sie jetzt auch den  Eintrag  in  der
Fileliste der Diskette machen und diesem
Eintrag  auch  die  entspechenden  Daten
zuweisen kann. Das Schließen  eines  Ka-
nals wird in BASIC mit dem Befehl  CLOSE
durchgeführt.  Als  Parameter   benötigt
CLOSE  lediglich  die   Filenummer,   in
unserem Fall also die 1:                
CLOSE 1                                 
Nun haben wir  also  das  File  komplett
angelegt.  Schauen  Sie   doch   einfach
einmal ins Directory -  hier  sehen  Sie
nun ein weiteres File, das etwa so  aus-
sieht:                                  
1     "HIGHSCORE" SEQ                   
Der CLOSE-Befehl muß übrigens  ebenfalls
beim Drucker, wie auch bei allen Geräten
bei denen Sie vorher einen Filekanal mit
OPEN  öffneten,  angewandt  werden.  Ich
hatte dies vorhin nur nicht erwähnt,  da
es mir zunächst einmal um  die  Funktion
von OPEN ging.                          
Um die Fortsetzung dieses Kurses zu  le-
sen, wählen Sie bitte den  zweiten  Teil
des Basic-Kurses an.                    
Valid HTML 4.0 Transitional Valid CSS!