mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-22 20:34:07 +00:00
527 lines
25 KiB
Plaintext
527 lines
25 KiB
Plaintext
.OP
|
||
.HE Das Fileinterface volksFORTH - CP/M 2.2 Seite #
|
||
|
||
Fileinterface f}r das volksFORTH83
|
||
__________________________________
|
||
auf CP/M Komputern
|
||
__________________
|
||
|
||
Wie geht es los?
|
||
________________
|
||
|
||
Bevor Sie das Glossar lesen, sollten Sie diese kleine Einf}hrung lesen
|
||
und auf einer leeren Diskette die Beispiele ausprobieren.
|
||
|
||
Wie erzeuge ich ein File, in das ich ein Programm eingeben kann?
|
||
________________________________________________________________
|
||
|
||
Geben Sie bitte folgendes ein:
|
||
MAKEFILE test.scr
|
||
Das File test.scr wird auf der Diskette erzeugt, auf dem Sie das Forth
|
||
gebootet haben.
|
||
Als n{chstes sch{tzen Sie bitte ab, wie lang Ihr Programm etwa wird.
|
||
Beachten Sie dabei bitte, da~ der Screen 0 eines Files f}r Hinweise zur
|
||
Handhabung Ihres Programms und der Screen 1 f}r einen sog. Loadscreen
|
||
(das ist ein Screen, der den Rest des File l{dt) reserviert sind. Wollen
|
||
Sie also z.B. 3 Screens Programm eingeben, so mu~ das File 5 Screens lang
|
||
sein; Sie geben also ein:
|
||
5 MORE
|
||
Fertig! Sie haben jetzt ein File, das die Screens 0..4 enth{lt. Geben Sie
|
||
jetzt
|
||
1 L
|
||
ein. Sie editieren jetzt den Screen 1 Ihres neuen Files test.scr. Sie
|
||
k|nnen, falls der Platz nicht ausreicht, Ihr File sp{ter einfach mit MORE
|
||
verl{ngern. Ein File kann leider nicht verk}rzt werden.
|
||
|
||
Wie spreche ich ein bereits auf der Diskette vorhandenes File an?
|
||
_________________________________________________________________
|
||
|
||
Das geht noch einfacher. Geben Sie einfach den Filenamen ein. Reagiert
|
||
das System mit der Meldung "Haeh?", so kennt das Forth dieses File noch
|
||
nicht. Sie m}ssen in diesem Fall das Wort USE vor dem Filenamen eingeben,
|
||
also z.B.
|
||
USE test.scr
|
||
Jetzt k|nnen Sie wie oben beschrieben mit 1 L (oder einer anderen Zahl)
|
||
das File editieren, Das Wort USE erzeugt }brigens im Forthsystem das Wort
|
||
TEST.SCR, falls es noch nicht vorhanden war. Wissen Sie also nicht mehr,
|
||
ob Sie ein File schon benutzt haben, so k|nnen Sie mit WORDS nachsehen
|
||
oder das Wort USE voranstellen.
|
||
|
||
Wie erzeuge ich ein File auf einem vorgegebenem Laufwerk, z.B. A: ?
|
||
___________________________________________________________________
|
||
|
||
Durch Voranstellen des Laufwerks etwa:
|
||
MAKEFILE a:test.scr
|
||
Oder durch Eingabe von
|
||
A:
|
||
Hierbei wird A: zum aktuellen Laufwerk gemacht. Files ohne Laufwerks
|
||
angabe werden immer auf dem aktuellen Laufwerk erzeugt.
|
||
.PA
|
||
|
||
0) Allgemeines
|
||
______________
|
||
|
||
Im folgenden wird die Benutzung des Fileinterfaces beschrieben. Dieses
|
||
Fileinterface benutzt die Files des CP/M.
|
||
Benutzt man ein File von Forth aus, so wird es in Bl|cke zu je 1024 Bytes
|
||
aufgeteilt, die in gewohnter Wiese anzusprechen sind. Dies trifft auch f}r
|
||
Files zu, die nicht vom Forth aus erzeugt wurden. Als Konvention wird vor
|
||
geschlagen, da~ Files, die Forth-Screens, also Quelltexte, enthalten, mit .SCR
|
||
erweitert werden. Files, die Daten enthalten, die nicht unmittelbar lesbar
|
||
sind, sollten auf .BLK enden.
|
||
|
||
Zum Umschalten vom Filesystem auf Direktzugriff und umgekehrt gibt es das
|
||
Wort:
|
||
|
||
DIRECT ( -- ) "direct"
|
||
Schaltet auf Direktzugriff um. Auf den Filezugriff schalten wir durch das
|
||
Nennen eines Filenamens.
|
||
|
||
|
||
1) Die Laufwerkswahl
|
||
____________________
|
||
|
||
Files werden immer auf dem aktuellen Laufwerk erzeugt, solange der Filename
|
||
nicht ausdr}cklich ein anderes Laufwerk vorsieht. Als Betriebssystemname wird
|
||
dann der vollst{ndige Filename eingetragen, also mit eindeutig festgelegtem
|
||
Laufwerk.
|
||
Zum [ndern des aktuellen Laufwerks stehen die folgenden Worte zur Verf}gung:
|
||
|
||
A: ( -- ) "a-colon"
|
||
Macht Diskettenstation A: zum aktuellen Laufwerk entsprechend der
|
||
Funktion im CCP. Siehe SETDRIVE.
|
||
|
||
B: ( -- ) "b-colon"
|
||
Macht Diskettenstation B: zum aktuellen Laufwerk entsprechend der
|
||
Funktion im CCP. Siehe SETDRIVE.
|
||
|
||
SETDRIVE ( n -- ) "setdrive"
|
||
Macht die Diskettenstation mit der Nummer n zum aktuellen Laufwerk. Hier
|
||
bei entspricht n=0 der Diskstation A, n=1 der Diskstation B usw.
|
||
|
||
Um sich den Inhalt einer Diskette anzusehen, gibt es die Worte:
|
||
|
||
FILES ( -- ) "files"
|
||
Listet den Inhalt des aktuellen Laufwerks (siehe SETDRIVE) auf dem Bild
|
||
schirm auf. Dieses Wort, zusammen mit dem Wort FILES" entspricht dem
|
||
Kommando DIR des CCP. In anderen volksFORTH-Filesystemen wird DIR benutzt
|
||
um Direktories umzuschalten (MS-DOS, GEM-DOS).
|
||
|
||
FILES" ( -- ) "files-quote"
|
||
Benutzt in der Form
|
||
FILES" cccc"
|
||
Listet die Files auf, deren Name cccc ist. Der String cccc darf die
|
||
bekannten Wildcards ('?','*') sowie eine Laufwerksbezeichnung enthalten.
|
||
Wird kein Laufwerk angegeben, so werden die Files des aktuellen Laufwerks
|
||
ausgegeben.
|
||
|
||
|
||
.PA
|
||
2) Files
|
||
________
|
||
|
||
Files bestehen aus einem Forthname und einem Betriebssystemnamen, die nicht
|
||
}bereinstimmen m}ssen.
|
||
Ist das Forthwort, unter dem ein File zugreifbar ist, gemeint, so wird im
|
||
folgenden vom Forthfile gesprochen. Ist das File auf der Diskette gemeint, das
|
||
vom CP/M-BDOS verwaltet wird, so wird vom DOS-File gesprochen. Durch das
|
||
Nennen des Forthnamens wird das Forthfile (und das zugeh|rige DOS-File) zum
|
||
aktuellen File, auf das sich alle Operationen wir LIST, LOAD. CONVEY usw.
|
||
beziehen. Beim Bekanntmachen des Files mit USE, MAKEFILE und ASSIGN u.a. wird
|
||
das File auf dem aktuellen Laufwerk gesucht, wenn kein Laufwerk im Namen
|
||
angegeben wird. Danach darf das aktuelle Laufwerk beliebig ge{ndert werden,
|
||
ohne da~ das File dann auf einem anderen Laufwerk gesucht wird. Mit FORTHFILES
|
||
k|nnen die aktuellen Zuordnungen zwischen Forthfile und DOS-File angezeigt
|
||
werden.
|
||
|
||
FILE ( -- ) "file"
|
||
Wird in der Form:
|
||
FILE <name>
|
||
benutzt.
|
||
Erzeugt ein Forthwort mit Name <name>. Wird <name> sp{ter ausgef}hrt, so
|
||
vermerkt es sich als aktuelles File. Ebenso vermerkt es sich als
|
||
FROMFILE, was f}r CONVEY wichtig ist. Einem Forthfile wird mit MAKE oder
|
||
ASSIGN ein DOS-File zugeordnet.
|
||
|
||
MAKE ( -- ) "make"
|
||
Wird in der Form :
|
||
MAKE cccc
|
||
benutzt. Erzeugt ein DOS-File mit Namen cccc auf dem aktuellen (oder
|
||
angegebenem Laufwerk) und ordnet es dem aktuellen Forthfile zu. Das File
|
||
wird auch gleich ge|ffnet. Es hat die L{nge Null (siehe MORE).
|
||
Beispiel FILE ausgabe
|
||
ausgabe MAKE test.scr
|
||
erzeugt ein Forthwort AUSGABE und ein File mit dem Namen A:TEST.SCR.
|
||
(Angenommen A: ist aktuelles Laufwerk.) Alle Operationen wie LOAD, LIST
|
||
usw. beziehen sich nun auf den entsprechenden Screen in A:TEST.SCR.
|
||
Beachten Sie bitte, da~ dieses File noch leer ist, und daher eine Fehler
|
||
bedingung besteht, wenn Zugriffsoperationen ausgef}hrt werden sollen.
|
||
|
||
MAKEFILE ( -- ) "makefile"
|
||
Wird in der folgender Form benutzt:
|
||
MAKEFILE <name>
|
||
Erzeugt ein Forthfile mit dem Namen <NAME> und erzeugt abschlie~end ein
|
||
DOS-File mit demselben Namen (und eindeutiger Laufwerksangabe). Die
|
||
folgende Sequenz w}rde genau dasselber bewirken:
|
||
FILE <name>
|
||
<name> MAKE <name>
|
||
|
||
SAVEFILE ( addr len -- ) "savefile"
|
||
Wird in der folgenden Form benutzt:
|
||
SAVEFILE <name>
|
||
Schreibt den String, der an der Adresse addr begint und die L{nge len hat
|
||
als File mit dem Namen <name> auf die Diskette.
|
||
|
||
KILLFILE ( -- ) "killfile"
|
||
L|scht das aktuelle File. Unsch|n, da dann das Forthfile noch existiert,
|
||
das Dosfile aber gel|scht ist, soda~ es bei dem n{chsten Diskettenzugriff
|
||
einen Fehler gibt, wenn nicht ein anderes File angew{hlt wird.
|
||
.pa
|
||
ASSIGN ( -- ) "assign"
|
||
Wird in der Form
|
||
ASSIGN cccc
|
||
benutzt. Ordnet dem aktuellen File das DOS-File mit Namen cccc (mit
|
||
eindeutiger Laufwerksangabe) zu. Eine Fehlerbedingung besteht, wenn das
|
||
File nicht gefunden werden kann.
|
||
|
||
USE ( -- ) "use"
|
||
Dieses Wort ist das wichtigste Wort zum Ausw{hlen von Files.
|
||
____________________________________________________________
|
||
|
||
Es wird in der folgenden Form benutzt:
|
||
USE <name>
|
||
Dieses Wort macht das File mit Namen <NAME> zum aktuellen File, auf das
|
||
sich LOAD, LIST usw. beziehen. Es erzeugt ein Forthfile mit Namen <NAME>,
|
||
falls der Name noch nicht vorhanden war. Anschlie~end wird das File auf
|
||
dem aktuellen (oder angegebenem) Laufwerk gesucht. Wird das File nicht
|
||
gefunden, so wird eine Fehlermeldung ausgegeben. Das (automatisch)
|
||
erzeugte Forthfile verbleibt im Dictionary und mu~ ggf. mit FORGET
|
||
vergessen werden.
|
||
|
||
CLOSE ( -- ) "close"
|
||
Schlie~t das aktuelle File. Dabei wird das Inhaltsverzeichnis (Directory)
|
||
der Diskette aktualisiert. Es werden die zu diesem File geh|renden
|
||
ge{nderten Bl|cke auf Diskette zur}ckgeschrieben und alle zu diesem File
|
||
geh|renden Bl|cke in den Block-Puffern gel|scht.
|
||
|
||
OPEN ( -- ) "open"
|
||
Offnet das aktuelle File. Eine Fehlerbedingung besteht, wenn das File
|
||
nicht gefunden werden kann. Die Benutzung dieses Wortes ist in den
|
||
meisten F{llen }berfl}ssig, da Files automatisch bei einem Zugriff
|
||
ge|ffnet werden.
|
||
|
||
EMPTYFILE ( -- ) "emptyfile"
|
||
K}rzt das aktuelle File auf die L{nge null.
|
||
|
||
FROM ( -- ) "from"
|
||
Wird in der folgenden Form benutzt:
|
||
FROM <name>
|
||
<name> ist der Name eines Forthfile, aus dem beim Aufruf von CONVEY und
|
||
COPY Bl|cke herauskopiert werden sollen.
|
||
|
||
Beispiel: filea 1 FROM fileb 3 COPY
|
||
|
||
Kopiert den Block 1 aus FILEB auf den Block 3 von FILEA.
|
||
Dieses Wort benutzt USE und das File auszuw{hlen. Das bedeutet, da~ FILEB
|
||
automatisch als Forthfile angelegt wird, wenn es noch nicht im System
|
||
vorhanden ist.
|
||
.pa
|
||
LOADFROM ( n -- ) "loadfrom"
|
||
Wird in der folgenden Form benutzt:
|
||
LOADFROM <name>
|
||
<name> ist der Name eines Forthfiles, aus dem der Block n geladen wird.
|
||
|
||
Beispiel: 15 LOADFROM filea
|
||
|
||
L{dt den Block 15 aus FILEA. Dieses Wort ist wichtig, wenn w{hrend des
|
||
Ladens eines Files Teile eines anderen Files geladen werden sollen.
|
||
Dieses Wort benutzt USE, um FILEA zu selektieren. Das bedeutet, da~ auto
|
||
matisch ein Forthfile mit Namen FILEA erzeugt wird, falls es im System
|
||
noch nicht vorhanden war.
|
||
Beachten Sie bitte, da~ dieses Wort nichts mit FROM oder FROMFILE zu tun
|
||
hat, obwohl es {hnlich hei~t!
|
||
|
||
INCLUDE ( -- ) "include"
|
||
Wird in der folgenden Form benutzt:
|
||
INCLUDE <name>
|
||
<name> ist der Name eines Forthfiles, das vollst{ndig geladen wird. Dabei
|
||
ist Voraussetzung, da~ auf Screen 1 dieses Files Anweisungen stehen, die
|
||
zum Laden aller Screens dieses Files f}hren. Siehe auch LOADFROM.
|
||
|
||
CAPACITY ( -- u ) "capacity"
|
||
u ist die L{nge des aktuellen Files in Forth-Bl|cken (1024 Bytes).
|
||
Beachten Sie bitte, da~ die L{nge des Files um eins gr|~er ist als die
|
||
Nummer des letzten Blocks, da der Block 0 mitgez{hlt wird.
|
||
|
||
FORTHFILES ( -- ) "forthfiles"
|
||
Druckt eine Liste aller Forthfiles, zusammen mit den Namen der zuge
|
||
h|rigen DOS-Files, deren L{nge und deren Status (ge|ffnet / geschlossen).
|
||
|
||
FROMFILE ( -- addr ) "fromfile"
|
||
Addr ist die Adresse einer Variablen, die auf das Forth-File zeigt, aus
|
||
dem COPY und CONVEY Bl|cke lesen. Siehe auch FROM. Bei Nennen eines
|
||
Forthfiles wird diese Variable gesetzt.
|
||
|
||
LOADFILE ( -- addr ) "loadfile"
|
||
Addr ist die Adresse einer Variablen, die auf das Forthfile zeigt, das
|
||
gerade geladen wird. Diese Variable wird bei Aufruf von LOAD, THRU usw.
|
||
auf das aktuelle File gesetzt.
|
||
|
||
ISFILE ( -- addr ) "isfile"
|
||
Addr ist die Adresse einer Variablen, die auf das aktuelle Forthfile
|
||
zeigt. Sie wird bei Ausf}hrung eines Forthfiles gesetzt.
|
||
|
||
FILE? ( -- ) "file-question"
|
||
Druckt den Namen des aktuellen Forthfiles.
|
||
|
||
MORE ( n -- ) "more"
|
||
Verl{ngert das aktuelle File um n Screens. Die Screens werden hinten
|
||
angeh{ngt. Anschlie~end wird das File geschloseen.
|
||
|
||
EOF ( -- f) "end-of-file"
|
||
f ist ein Flag, das wahr ist, falls }ber das Ende des Files hinausgelesen
|
||
wurde. f ist falsch, falls auf den zuletzt gelesenen Block noch weitere
|
||
folgen.
|
||
|
||
.PA
|
||
3) Verschiedenes
|
||
________________
|
||
|
||
Beim Vergessen eines Forth-Files mit Hilfe von FORGET, EMPTY usw. werden
|
||
automatisch alle Blockpuffer, die aus diesem File stammen, gel|scht, und,
|
||
wenn sie ge{ndert waren, auf die Diskette zur}ckgeschrieben. Das File wird
|
||
anschlie~end geschlossen.
|
||
|
||
Bei Verwendung von FLUSH werden alle Files geschlossen. FLUSH sollte VOR jedem
|
||
Diskettenwechsel ausgef}hrt werden, und zwar nicht nur, um die ge{nderten
|
||
Bl|cke zur}ckzuschreiebn, sondern auch damit alle Files geschlossen werden.
|
||
Sind n{mlich Files gleichen Namens auf der neuen Diskette vorhanden, so wird
|
||
sonst eine abweichende L{nge des neuen Files vom Forth nicht erkannt.
|
||
Nach dem Diskettenwechsel verlangt CP/M das "einloggen" der neuen Diskette.
|
||
Dies geschieht mit DOS RESET. Wenn dies vergessen wird, so erh{lt man nach
|
||
einem Schreibversuch auf die neue Diskette "BDOS-ERROR ON xx R/O" und landet
|
||
zu allem ]berflu~ im CCP. Warum?? Fragen Sie Digital Research!
|
||
|
||
Bei Verwendung von VIEW wird automatisch das richtige File ge|ffnet.
|
||
|
||
|
||
.PA
|
||
4) CP/M 2.2. interne Worte des Filesystems (Implementation)
|
||
|
||
In diesem Abschnitt findet sich das Glossary f}r die Worte, die zur
|
||
Implementation des Filesystems benutzt werden. Da das Filesystem noch
|
||
recht neu ist, sind noch fast alle Namen sichtbar. Das kann sich aber
|
||
{ndern, wenn klar ist, welche Worte man nicht mehr benutzt.
|
||
Im Glossary wird oft von Forth-FCB (File-Control-Block) gesprochen. Das
|
||
sind Speicherbereiche, mit denen Files beschrieben werden. Auch CP/M
|
||
kennt FCBs. Die CP/M Filefunktionen erwarten alle einen DOS-FCB zur
|
||
Beschreibung der Files. Die Worte, die diese Funktionen ausl|sen erwarten
|
||
aber einen Forth-FCB, die im volksFORTH-Filesystem }bliche Beschreibung
|
||
von Files. Wenn die Gefahr der Verwechselung besteht, so wird ausdr}ck
|
||
lich von Forth-FCBs und DOS-FCBs gesprochen. Allgemein ist mit der Angabe
|
||
von FCB ein Forth-FCB gemeint. Seine Struktur ist aus dem Quelltext
|
||
ersichtlich. (Befehlsfolge: DOS VIEW B/FCB)
|
||
|
||
!fcb ( fcb -- ) "store-f-c-b"
|
||
Interpretiert das als n{chstes in der Eingabe sthende Wort als Filename
|
||
und weist es dem fcb zu.
|
||
|
||
!name ( addr len fcb -- ) "store-name"
|
||
addr gibt die Anfangsadresse eines Strings an, der die L{nge len hat und
|
||
einen Filenamen enth{lt. Dieser Name wird in den fcb eingetragen.
|
||
Enth{lt er keine Laufwerksangabe, so wird das aktuelle Laufwerk benutzt
|
||
und in den FCB geschrieben.
|
||
|
||
(capacity ( forthfcb -- n ) "paren-capacity"
|
||
n ist die Filegr|~e des durch forthfcb beschrieben Files in Forth-
|
||
Bl|cken.
|
||
|
||
(close ( fcb -- ) "paren-close"
|
||
Schlie~t das File, das durch fcb beschrieben wird. Schreibt alle
|
||
ver{nderten Bl|cke dieses Files auf die Diskette zur}ck und l|scht alle
|
||
Bl|cke dieses Files in den Blockpuffern.
|
||
|
||
(closefile ( forthfcb -- f ) "paren-closefile"
|
||
Schlie~t das durch den Forth-FCB angegebene File. f=$FF bedeutet, da~ das
|
||
File nicht gefunden werden konnte. (Siehe CP/M Operating System Manual)
|
||
|
||
(createfile ( forthfcb -- f ) "paren-createfile"
|
||
Erzeugt ein File, das durch den angegebenen Forth-FCB beschrieben wird.
|
||
f=$FF bedeutet, da~ im Inhaltsverzeichnis der Diskette kein Platz mehr
|
||
ist. (Siehe CP/M Operating System Manual)
|
||
|
||
(dir ( addr len -- ) "paren-dir"
|
||
addr ist die Anfangsadresse eines Strings der L{nge len, der ein
|
||
Suchmuster enth{lt. (dir zeigt die Files an, die auf dieses suchmuster
|
||
passen. Siehe SEARCH0, SEARCHNEXT, FILES, FILES".
|
||
|
||
(file-read ( forthfcb -- f ) "paren-file-read"
|
||
Liest den im Record-Feld des angegebenen Forth-FCB's bestimten Sektor in
|
||
den Sektorpuffer ein. f<>0 bedeutet, da~ Daten fehlen.
|
||
(Siehe CP/M Operating System Manual)
|
||
|
||
(file-write ( forthfcb -- f ) "paren-file-write"
|
||
Schreibt den Sektorpuffer auf den im Record-Feld des angegebenen Forth-
|
||
FCB's bestimten Sektor. f<>0 bedeutet, da~ die Diskette voll ist.
|
||
(Siehe CP/M Operating System Manual)
|
||
.pa
|
||
(killfile ( forthfcb -- f ) "paren-killfile"
|
||
L|scht das durch den Forth-FCB angegebene File. f=$FF bedeutet, da~ das
|
||
File nicht gefunden werden konnte. (Siehe CP/M Operating System Manual)
|
||
|
||
(makeview ( -- n ) "paren-make-view"
|
||
n ist eine Zahl die aus dem momentanen Block (BLK) und dem aktuellen File
|
||
(LOADFILE) berechnet wird. Sie wird in das VIEW-Feld einer neuen
|
||
Definition geschrieben, und dient dazu sp{ter mit VIEW den Definitions-
|
||
Ort zu bestimmen.
|
||
|
||
(open ( fcb -- ) "paren-open"
|
||
\ffnet das durch den FCB angegebene File und tr{gt dessen L{nge ein.
|
||
Meldet einen Fehler, falls das File nicht gefunden werden konnte.
|
||
|
||
(openfile ( forthfcb -- f ) "paren-open-file"
|
||
\ffnet das durch den Forth-FCB angegebene File. f=$FF bedeutet, da~ das
|
||
File nicht gefunden werden konnte. (Siehe CP/M Operating System Manual)
|
||
|
||
(read-seq ( forthfcb -- f ) "paren-read-sequential"
|
||
Liest den n{chsten Sektor aus dem durch den Forth-FCB angegebene File in
|
||
den Sektorpuffer ein. f<>0 bedeutet, da~ keine Daten mehr zur Verf}gung
|
||
stehen.
|
||
(Siehe CP/M Operating System Manual)
|
||
|
||
(view ( viewblk -- blk' ) "paren-view"
|
||
blk' ist die relative Blocknummer zum Anfang des in viewblk enthaltenen
|
||
Files. viewblock hat die Form: fffffffbbbbbbbbb. Wobei f Bits f}r die
|
||
Filenummer, b Bits f}r den Block angeben. Das File wird von (VIEW auto
|
||
matisch ge|ffnet.
|
||
|
||
(write-seq ( forthfcb -- f ) "paren-write-sequential"
|
||
Schreibt den n{chsten Sektor aus dem Sektorpuffer in das durch den Forth-
|
||
FCB angegebene File. f<>0 bedeutet, da~ die Diskette voll ist.
|
||
(Siehe CP/M Operating System Manual)
|
||
|
||
.buffers ( -- ) "dot-buffers"
|
||
Gibt eine Liste der Block-puffer aus, die angibt, welchen Block aus
|
||
welchem File die Puffer enthalten, und ob sie als UPDATEd markiert sind.
|
||
|
||
.dosfile ( fcb -- ) "dot-dosfile"
|
||
Gibt den Dos-Namen des durch fcb angegebenen Files aus.
|
||
|
||
.fcb ( fcb -- ) "dot-f-c-b"
|
||
Gibt den Forth-Namen, den Dos-Namen, die Filegr|~e und den Status
|
||
(ge|ffnet / geschlossen ) des durch fcb angegebenen Files aus.
|
||
|
||
.file ( fcb -- ) "dot-file"
|
||
Gibt den Forth-Namen des durch fcb angegebenen Files aus.
|
||
|
||
b/fcb ( -- n ) "bytes-per-f-c-b"
|
||
n gibt an, wieviele Bytes ein Forth-FCB belegt.
|
||
|
||
b/rec ( -- n ) "bytes-per-record"
|
||
n gibt an, wieviele Bytes in die Sektoren passen, die vom Betriebssystem
|
||
benutzt werden. Bei CP/M 2.2 sind dies 128 Bytes.
|
||
.pa
|
||
bdos ( arg fun# -- res ) "bdos"
|
||
Veranla~t einen Sprung ins BDOS. fun# ist der Wert, der ins C-Register
|
||
geladen wird, die Nummer der aufzurufenden Funktion. arg ist der Wert,
|
||
der ins DE-Register geladen werden soll, und res ist der Wert, der vom
|
||
BDOS im A-Register zur}ckgeliefert wird. CP/M BDOS-Aufrufe sind im
|
||
Operating System Manual beschrieben.
|
||
|
||
createfile ( fcb -- ) "createfile"
|
||
Erzeugt ein File, da~ durch den FCB beschrieben wird. Meldet einen
|
||
Fehler, falls dies nicht m|glich ist.
|
||
|
||
default-buffer ( -- addr ) "default-buffer"
|
||
addr ist die Adresse des Standard Sektorpuffers des BDOS.
|
||
|
||
Dos ( -- ) "dos"
|
||
Das Vocabulary, indem die meisten Definitionen des Filesystems gemacht
|
||
werden.
|
||
|
||
dos-error? ( n -- f ) "dos-error-question"
|
||
f ist TRUE, wenn n=$FF ist, denn das ist das Kennzeichen des BDOS f}r
|
||
einen Fehler.
|
||
|
||
drive ( forthfcb -- addr ) "drive"
|
||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, unter der das
|
||
Laufwerk eingetragen ist.
|
||
|
||
extension ( forthfcb -- addr ) "extension"
|
||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der die
|
||
Extension beginnt.
|
||
|
||
fcb0 ( -- addr ) "f-c-b-zero"
|
||
addr ist die Adresse, des vom CCP-benutzten Standard-File-Control-Blocks,
|
||
so ver{ndert, da~ er einen Forth-FCB halten kann.
|
||
|
||
file-link ( -- addr ) "file-link"
|
||
addr ist die Adresse einer User-Variablen, die auf den Anfang der Forth-
|
||
file-liste zeigt.
|
||
|
||
file-r/w ( buffer block fcb r/wf -- f ) "file-r-w"
|
||
Liest oder schreibt einen Forth-Block von der / auf die Diskette.
|
||
r/wf gibt an, ob gelesen (rw/f<>FALSE) oder geschrieben (rw/f=FALSE)
|
||
werden soll.
|
||
block ist die Nummer des Blocks, buffer die Adresse des Puffers.
|
||
fcb bestimmt, ob ein File benutzt wird (fcb<>0 ist dann die Adresse
|
||
eines FCB) oder ob im Direktzugriff gearbeitet werden soll (fcb=0).
|
||
f ist TRUE, falls ein Fehler aufgetreten ist. Vergleiche R/W.
|
||
|
||
filename ( forthfcb -- addr ) "filename"
|
||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der der
|
||
Filename beginnt.
|
||
|
||
filenamelen ( -- n ) "filenamelen"
|
||
n gibt die L{nge der im Betriebssystem benutzten Filenamen an. Bei CP/M
|
||
sind dies 11 Zeichen (8 Name + 3 Extension)
|
||
|
||
fileno ( forthfcb -- addr ) "file-number"
|
||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der die
|
||
Filenummer abgelegt ist.
|
||
.pa
|
||
filesize ( forthfcb -- addr ) "filesize"
|
||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der die
|
||
Filegr|~e (in Sectoren) abgelegt ist.
|
||
|
||
in-range ( block fcb -- ) "in-range"
|
||
Testet, ob der Forth-Block block in dem durch fcb angegebenen File liegt,
|
||
und gibt eine Fehlermeldung aus, falls dies nicht der Fall ist.
|
||
|
||
|
||
opened ( forthfcb -- addr ) "opened"
|
||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der das open-
|
||
Flag abgelegt ist.
|
||
|
||
read-seq ( -- ) "read-sequential"
|
||
Liest den n{chsten Sektor aus dem aktuellen File in den Sektorpuffer und
|
||
liefert einen Fehler, falls dies nicht m|glich ist.
|
||
|
||
rec/blk ( -- n ) "bytes-per-record"
|
||
n gibt an, wieviele logische CP/M-Sectoren (128 Bytes) in einen Forth-
|
||
Block passen. Nach dem Forth-83 Standard ist ein Forth-Block 1024 Bytes
|
||
gro~, B/REC ist dann also 8.
|
||
|
||
record ( forthfcb -- addr ) "record"
|
||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der der
|
||
Recordz{hler f}r Random-Access-Files beginnt.
|
||
|
||
reset ( -- ) "reset"
|
||
Initialisiert das Diskettensystem des BDOS. Mu~ nach einem Disketten
|
||
wechsel benutzt werden! (Siehe CP/M Operating System Manual)
|
||
|
||
search0 ( forthfcb -- f ) "search-zero"
|
||
Sucht im Inhaltsverzeichnis der Diskette nach dem ersten Vorkommen, des
|
||
durch den Forth-FCB angegebenen Files. f=$FF bedeutet, da~ das File nicht
|
||
gefunden werden konnte.
|
||
(Siehe CP/M Operating System Manual)
|
||
|
||
searchnext ( forthfcb -- f ) "serach-next"
|
||
Sucht im Inhaltsverzeichnis der Diskette nach dem n{chsten Vorkommen, des
|
||
durch den Forth-FCB angegebenen Files. f=$FF bedeutet, da~ das File nicht
|
||
gefunden werden konnte.
|
||
(Siehe CP/M Operating System Manual)
|
||
|
||
setdma ( dma -- ) "set-d-m-a"
|
||
dma ist die Adresse des Sektorpuffers, der beim n{chsten Diskettenzugriff
|
||
benutzt werden soll (Siehe CP/M Operating System Manual)
|
||
|
||
size ( forthfcb -- ) "size"
|
||
Berechnet die Filegr|~e in dem durch den Forth-FCB beschriebenen File und
|
||
tr{gt sie in das Feld record ein. (Siehe CP/M Operating System Manual)
|
||
|
||
tab ( -- ) "tab"
|
||
Geht auf die n{chste Tabulatorposition (alle 20 Spalten).
|
||
|
||
write-seq ( -- ) "write-sequential"
|
||
Schreibt einen Sektor aus dem Sektorpuffer als n{chsten Sektor des
|
||
aktuellen Files und meldet einen Fehler, falls dies nicht m|glich ist. |