mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-25 10:30:57 +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.
|