mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-29 21:49:17 +00:00
1259 lines
77 KiB
Forth
1259 lines
77 KiB
Forth
\ *** Block No. 0 Hexblock 0
|
||
\\ *** File-Interface *** 25may86we
|
||
|
||
Dieses File enth„lt das File-Interface.
|
||
Damit wird der Zugriff auf normale GEM-Dos Files m”glich. Wenn
|
||
ein File mit USE benutzt wird, beziehen sich alle Worte, die
|
||
mit dem Massenspeicher arbeiten, auf dieses File. Ebenfalls un-
|
||
terst<EFBFBD>tzt das File-Interface Subdirectories, sogar mit mehr
|
||
M”glichkeiten als unter GEM-Dos.
|
||
|
||
Da es normalerweise im Direktzugriff geladen wird, m<EFBFBD>ssen die
|
||
View-Felder der Worte anschliežend gepatched werden
|
||
(s. STARTUP.SCR)
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 1 Hexblock 1
|
||
\ File interface load and patch block 13oct86we
|
||
|
||
Onlyforth
|
||
|
||
1 3 +thru \ savesystem, always needed
|
||
4 $21 +thru \ Fileinterface
|
||
|
||
' (makeview Is makeview
|
||
' remove-files Is custom-remove
|
||
' filer/w Is r/w
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 2 Hexblock 2
|
||
\ File functions for save-system cas20130105
|
||
|
||
: arguments ( n -- )
|
||
depth 1- > abort" not enough Parameters" ;
|
||
|
||
| Code (createfile ( C$ -- handle )
|
||
0 # A7 -) move \ normal file, no protection
|
||
SP )+ D6 move D6 reg) A0 lea .l A0 A7 -) move
|
||
.w $3C # A7 -) move 1 trap 8 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
| Code (closefile ( handle -- f )
|
||
SP )+ A7 -) move
|
||
$3E # A7 -) move 1 trap 4 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
\ *** Block No. 3 Hexblock 3
|
||
\ write into file cas20130105
|
||
|
||
| Code (filewrite ( buff len handle -- n )
|
||
SP )+ D0 move .l D2 clr .w SP )+ D2 move
|
||
SP )+ D6 move D6 reg) A0 lea
|
||
.l A0 A7 -) move \ buffer adress
|
||
D2 A7 -) move \ buffer length
|
||
.w D0 A7 -) move \ handle
|
||
$40 # A7 -) move \ call WRITE
|
||
1 trap $0C # A7 adda
|
||
D0 SP -) move \ errorflag, num written Bytes
|
||
Next end-code
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 4 Hexblock 4
|
||
\ save-system cas20130105
|
||
|
||
: save-system save flush \ Filename follows
|
||
bl word count dup 0= abort" missing filename"
|
||
over + off (createfile dup >r 0< abort" no device "
|
||
$601A 0 ! align here $1C - $04 ! 0 , 0 ,
|
||
0 here r@ (filewrite here - abort" write error"
|
||
r> (closefile 0< abort" close error" ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 5 Hexblock 5
|
||
\ disk errors 13oct86we
|
||
|
||
Vocabulary Dos Dos also definitions
|
||
|
||
| ' 2- Alias body> \ just for style
|
||
|
||
|
||
|
||
|
||
|
||
| : 2digits ( n -- adr len )
|
||
base push decimal extend <# # # #> ;
|
||
|
||
| 0 Constant #adr
|
||
\ will hold the adr of "00" in following abort" ..."
|
||
|
||
\ *** Block No. 6 Hexblock 6
|
||
\ disk errors cas20130105
|
||
|
||
: .diskerror ( -n -- ) negate
|
||
&13 case? abort" disk is proteced"
|
||
&33 case? abort" file not found"
|
||
&34 case? abort" path not found"
|
||
&36 case? abort" access denied"
|
||
&37 case? abort" illegal handle#"
|
||
&46 case? abort" illegal drive num"
|
||
2digits #adr swap cmove
|
||
true [ here 2+ ( adress of counted string ) ]
|
||
abort" Dos-Error #00"
|
||
[ count + 2- ' #adr >body ! ( adr of "00") ] ;
|
||
|
||
: ?diskabort ( -n -- ) dup 0< IF .diskerror THEN drop ;
|
||
|
||
\ *** Block No. 7 Hexblock 7
|
||
\ File control block structure 09sep86we
|
||
|
||
| : Fcbyte ( n len -- n' ) \ defining word for fcb contents
|
||
Create over c, + does> c@ + ;
|
||
|
||
&25 Constant filenamelen \ only SHORT pathes will fit !
|
||
| 0 2 Fcbyte nextfile \ link to next file
|
||
filenamelen Fcbyte filename \ name of file
|
||
4 Fcbyte filesize \ size in Bytes , low..high
|
||
2 Fcbyte filehandle \ handle from GEMdos
|
||
2 Fcbyte fileno \ fileno. for VIEW
|
||
Constant b/fcb \ bytes per file
|
||
|
||
: handle ( -- n ) isfile@ filehandle @ ;
|
||
|
||
\ *** nextfile must be the first field !
|
||
\ *** Block No. 8 Hexblock 8
|
||
\ position into block 13oct86we
|
||
|
||
Code lseek ( d handle n -- d' )
|
||
SP )+ A7 -) move SP )+ A7 -) move .l SP )+ A7 -) move
|
||
.w $42 # A7 -) move 1 trap $0A # A7 adda
|
||
.l D0 SP -) move Next end-code
|
||
|
||
: position ( d handle -- f )
|
||
0 lseek 0< ?exit drop false ;
|
||
|
||
: position? ( handle -- d )
|
||
0 0 rot 1 lseek dup 0< IF ?diskabort THEN ;
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 9 Hexblock 9
|
||
\ read and write a memory area cas20130105
|
||
|
||
Code (fileread ( buff len handle -- n )
|
||
SP )+ D0 move .l D2 clr .w SP )+ D2 move
|
||
SP )+ D6 move D6 reg) A0 lea
|
||
.l A0 A7 -) move \ buffer adress
|
||
D2 A7 -) move \ buffer length
|
||
.w D0 A7 -) move \ handle
|
||
$3F # A7 -) move \ call READ
|
||
1 trap $0C # A7 adda
|
||
D0 SP -) move \ errorflag or bytes read
|
||
Next end-code
|
||
|
||
' (filewrite Alias (filewrite
|
||
|
||
|
||
\ *** Block No. 10 Hexblock A
|
||
\ (open-file setdta 26oct86we
|
||
|
||
Code (openfile ( C$ -- handle )
|
||
2 # A7 -) move
|
||
SP )+ D6 move D6 reg) A0 lea .l A0 A7 -) move
|
||
.w $3D # A7 -) move 1 trap 8 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
Create dta &44 allot
|
||
|
||
Code setdta ( addr -- )
|
||
SP )+ D6 move D6 reg) A0 lea .l A0 A7 -) move
|
||
.w $1A # A7 -) move 1 trap 6 A7 addq Next end-code
|
||
|
||
' (closefile Alias (closefile
|
||
' (createfile Alias (createfile
|
||
\ *** Block No. 11 Hexblock B
|
||
\ search for files 03oct86we
|
||
|
||
Code search0 ( C$ attr -- f ) \ search for first file
|
||
SP )+ A7 -) move SP )+ D6 move D6 reg) A0 lea
|
||
.l A0 A7 -) move .w $4E # A7 -) move 1 trap 8 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
Code searchnext ( -- f ) \ search for next file
|
||
$4F # A7 -) move 1 trap 2 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 12 Hexblock C
|
||
\ Create a subdir bp 11 oct 86
|
||
|
||
Code (makedir ( C$ -- f ) \ Create a subdir
|
||
$39 # D1 move
|
||
Label long-adr
|
||
SP )+ D6 move D6 reg) A0 lea .l A0 A7 -) move
|
||
.w D1 A7 -) move 1 trap 6 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
Code (setdir ( C$ -- f )
|
||
$3B # D1 move long-adr bra end-code
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 13 Hexblock D
|
||
\ select drive 09sep86we
|
||
|
||
Code setdrive ( n -- )
|
||
SP )+ A7 -) move
|
||
$0E # A7 -) move 1 trap 4 A7 addq Next end-code
|
||
|
||
Code getdrive ( -- n )
|
||
$19 # A7 -) move 1 trap 2 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
Code getdir ( addr n -- f ) \ n is drive, string in addr
|
||
SP )+ A7 -) move SP )+ D6 move D6 reg) A0 lea
|
||
.l A0 A7 -) move .w $47 # A7 -) move 1 trap 8 A7 addq
|
||
D0 SP -) move Next end-code
|
||
|
||
|
||
\ *** Block No. 14 Hexblock E
|
||
\ file sizes b30aug86we
|
||
|
||
: (capacity ( fcb -- n) \ calculates size in blocks
|
||
filesize 2@ 2dup or 0= IF drop exit THEN
|
||
b/blk um/mod swap IF 1+ THEN ; \ add 1 block for rest
|
||
|
||
| : in-range ( block fcb -- f) \ makes sure, block is in file
|
||
(capacity u< not &36 * ; \ Errorcode -&36
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 15 Hexblock F
|
||
\ read and write into files bp 11 oct 86
|
||
|
||
| : set-pos ( block handle -- f)
|
||
>r b/blk um* r> position ;
|
||
|
||
| : fileaccess ( buff block fcb -- buff len handle/ errorcode)
|
||
2dup in-range ?dup IF >r 2drop drop r> rdrop exit THEN
|
||
filehandle @ under set-pos
|
||
?dup IF >r 2drop r> rdrop exit THEN
|
||
b/blk swap ;
|
||
|
||
| : fileread ( buff block fcb -- ff / errorcode )
|
||
fileaccess (fileread dup 0> IF drop false THEN ;
|
||
|
||
| : filewrite ( buff block fcb -- ff / errorcode )
|
||
fileaccess (filewrite dup 0> IF drop false THEN ;
|
||
\ *** Block No. 16 Hexblock 10
|
||
\ twiggling the file variables bp 11 oct 86
|
||
|
||
: scan-name ( C$ -- adr len') \ length of "C"-string
|
||
$1000 over swap 0 scan drop over - ;
|
||
|
||
: .file ( fcb --) \ print only filename
|
||
?dup 0= IF ." DIRECT ! " exit THEN body> >name .name ;
|
||
|
||
: .fcb ( fcb -- ) \ print filename
|
||
dup filehandle @ 2 .r dup filesize 2@ 6 d.r 3 spaces
|
||
dup .file 2 spaces filename scan-name type ;
|
||
|
||
: !files ( fcb -- ) \ set file and isfile
|
||
dup isfile ! fromfile ! ;
|
||
|
||
|
||
\ *** Block No. 17 Hexblock 11
|
||
\ PATHes bp 11 oct 86
|
||
|
||
| &30 Constant pathlen \ max. len of all pathes
|
||
|
||
Variable pathes pathlen allot \ counted string of pathes
|
||
pathes off
|
||
|
||
: pathes? ( -- ) \ print a list of the pathes
|
||
cr 3 spaces pathes count type ;
|
||
|
||
: setpath ( adr len --) \ set's the list of pathes
|
||
pathlen min pathes place
|
||
Ascii ; pathes count + c! pathes c@ 1+ pathes c! ;
|
||
|
||
\\ PATH : see elsewhere in this file
|
||
|
||
\ *** Block No. 18 Hexblock 12
|
||
\ search for files bp 11 oct 86
|
||
|
||
Variable workspace &64 allot \ place for c$
|
||
|
||
| : try.path ( adr len fcb attr -- f )
|
||
2swap workspace swap 2dup + >r move
|
||
swap filename r> filenamelen cmove
|
||
workspace swap search0 0= ;
|
||
|
||
| : makec$ ( adr len -- c$ ) \ make adr len to a c$
|
||
workspace swap 2dup + >r move
|
||
r> off ( make a c$ ) workspace ;
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 19 Hexblock 13
|
||
\ " bp 11 oct 86
|
||
|
||
| Variable sfile \ "dirty" variable
|
||
| 7 Constant defaultattr \ find all filetypes
|
||
|
||
| : path@ ( adr len -- adr len1 adr len2) \ isolate a path
|
||
Ascii ; skip 2dup 2dup Ascii ; scan nip - ;
|
||
|
||
: (searchfile ( fcb -- ff/ C$ f) \ search for file in path
|
||
sfile ! pathes count \ and in act. directory
|
||
BEGIN path@ sfile @ defaultattr try.path
|
||
IF 2drop workspace true exit THEN
|
||
Ascii ; scan dup 0= UNTIL nip ;
|
||
|
||
: searchfile ( fcb -- C$ ) \ file was found in path
|
||
(searchfile ?exit -&33 ?diskabort ;
|
||
\ *** Block No. 20 Hexblock 14
|
||
\ open a file, filer/w b26oct86we
|
||
|
||
| : @length ( -- d) dta &26 + 2@ ;
|
||
| : copylength ( fcb --) @length rot filesize 2! ;
|
||
|
||
: (open ( fcb --) \ open file
|
||
dup filehandle @ IF drop exit THEN
|
||
dta setdta dup searchfile over copylength (openfile
|
||
dup ?diskabort swap filehandle ! ;
|
||
|
||
Forth definitions
|
||
|
||
: capacity ( -- n)
|
||
isfile@ ?dup IF dup (open (capacity exit THEN blk/drv ;
|
||
|
||
Dos definitions
|
||
\ *** Block No. 21 Hexblock 15
|
||
\ filer/w, Create a file bp 11 oct 86
|
||
|
||
: filer/w ( buff block fcb f -- f)
|
||
over 0= IF STr/w exit THEN
|
||
over (open
|
||
IF fileread ELSE filewrite THEN dup ?diskabort ;
|
||
|
||
: createfile ( fcb --) \ create a file in fcb
|
||
dup filename (createfile dup ?diskabort
|
||
over filehandle ! 0 0 rot filesize 2!
|
||
offset off ;
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 22 Hexblock 16
|
||
\ store names for files bp 11 oct 86
|
||
|
||
| : !name ( adr len --) \ store name in record
|
||
2dup erase >r name count
|
||
dup r> < not abort" string too long"
|
||
>r swap r> cmove ;
|
||
|
||
: !fcb ( fcb --) \ next word is filename
|
||
dup filehandle off filename filenamelen !name ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 23 Hexblock 17
|
||
\ print dta and directory 26oct86we
|
||
|
||
| : .dtaname ( addr --) \ addr is addr of name
|
||
dup BEGIN dup c@ ?dup WHILE emit 1+ REPEAT
|
||
- &15 + spaces ;
|
||
|
||
: .dta ( --) \ print contents of dta
|
||
cr dta &21 + c@ $10 and
|
||
IF Ascii D ELSE bl THEN emit space
|
||
dta &30 + .dtaname @length &10 d.r ;
|
||
|
||
: (dir ( attr adr len --) \ given a match string
|
||
makec$ swap dta setdta search0
|
||
BEGIN 0= WHILE stop? 0= WHILE .dta searchnext REPEAT ;
|
||
|
||
|
||
\ *** Block No. 24 Hexblock 18
|
||
\ primitives for fcb's bp 18May86
|
||
|
||
User file-link file-link off \ list thru files
|
||
|
||
| : #file ( -- n) \ View number of next file
|
||
file-link @ dup IF fileno @ THEN 1+ ;
|
||
|
||
|
||
: forthfiles ( --) \ print a list of :
|
||
file-link @ \ forthword,filename,handle,len
|
||
BEGIN dup WHILE
|
||
cr dup .fcb @ stop? UNTIL drop ;
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 25 Hexblock 19
|
||
\ Close a file bp 18May86
|
||
|
||
| ' save-buffers >body $C + @ Alias backup
|
||
|
||
| : filebuffer? ( fcb -- fcb bufaddr/flag)
|
||
prev BEGIN @ dup WHILE 2dup 2+ @ = UNTIL ;
|
||
|
||
| : flushfile ( fcb -- ) \ flush file buffers
|
||
BEGIN filebuffer? ?dup WHILE
|
||
dup backup emptybuf REPEAT drop ;
|
||
|
||
: (close ( fcb --) \ close file in fcb
|
||
dup flushfile
|
||
filehandle dup @ ?dup 0= IF drop exit THEN swap off
|
||
(closefile -$41 case? ?exit ?diskabort ;
|
||
|
||
\ *** Block No. 26 Hexblock 1A
|
||
\ Create fcb's bp 11 oct 86
|
||
|
||
Forth definitions
|
||
|
||
|
||
: File ( -- ) \ Create a fcb
|
||
Create here b/fcb allot dup b/fcb erase
|
||
#file over fileno !
|
||
file-link @ over file-link ! swap !
|
||
does> !files ;
|
||
|
||
: direct 0 !files ; \ switch to direct access
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 27 Hexblock 1B
|
||
\ flush buffers & misc. bp 8jun86
|
||
|
||
: flush ( --) flush file-link
|
||
BEGIN @ ?dup WHILE dup (close REPEAT ;
|
||
|
||
: file? isfile@ .file ; \ print current file
|
||
|
||
: list ( n --)
|
||
3 spaces file? list ;
|
||
|
||
: path ( -- ) \ this is a smart word !
|
||
name count
|
||
dup 0= IF 2drop pathes? exit THEN
|
||
dup 1 = IF over c@ Ascii ; =
|
||
IF 2drop pathes off exit THEN THEN
|
||
setpath ;
|
||
\ *** Block No. 28 Hexblock 1C
|
||
\ File Interface User words 26oct86we
|
||
|
||
| : isfile? ( adr -- adr f) \ is adr a fcb ?
|
||
file-link BEGIN @ dup 0= ?exit 2dup 2- = UNTIL drop true ;
|
||
|
||
| : ?isfile@ isfile@ body>
|
||
isfile? 0= abort" not in direct mode" >body ;
|
||
|
||
: open ?isfile@ (open offset off ;
|
||
: close ?isfile@ (close ;
|
||
: assign close isfile@ !fcb open ;
|
||
: make ?isfile@ dup !fcb createfile ;
|
||
|
||
: use >in @ name find \ create a fcb if not present !
|
||
IF isfile? IF execute drop exit THEN THEN drop
|
||
dup >in ! File dup >in ! ' execute >in ! assign ;
|
||
\ *** Block No. 29 Hexblock 1D
|
||
\ File Interface User words bp 11 oct 86
|
||
|
||
: makefile >in @ file dup >in ! ' execute >in ! make ;
|
||
|
||
: from isfile push use ; \ sets only fromfile
|
||
: loadfrom ( n --) \ load 1 scr from file
|
||
isfile push fromfile push use load close ;
|
||
: include 1 loadfrom ;
|
||
|
||
: eof ( -- f) \ end of file ?
|
||
isfile@ dup filehandle @ position?
|
||
rot filesize 2@ d= ;
|
||
|
||
: files $10 " *.*" count (dir ;
|
||
: files" $10 Ascii " word count (dir ;
|
||
|
||
\ *** Block No. 30 Hexblock 1E
|
||
\ extend files bp 11 oct 86
|
||
|
||
| : >fileend isfile@ filesize 2@ handle position
|
||
?diskabort ;
|
||
|
||
| : addsize isfile@ filesize dup 2@ b/blk 0 d+ rot 2! ;
|
||
|
||
| : addblock ( n --) \ add block n to file
|
||
buffer b/blk 2dup bl fill >fileend handle (filewrite
|
||
dup ?diskabort b/blk -
|
||
IF close abort" Disk voll" THEN addsize ;
|
||
|
||
: (more ( n --)
|
||
capacity swap bounds ?DO I addblock LOOP ;
|
||
|
||
: more ( n --) ?isfile@ (open (more close ;
|
||
\ *** Block No. 31 Hexblock 1F
|
||
\ make,kill and set directories bp 11 oct 86
|
||
|
||
| : dir$ ( -- adr ) name count makec$ ;
|
||
|
||
: makedir dir$ (makedir ?diskabort ;
|
||
|
||
: dir name count
|
||
0 case? IF getdrive 2dup 1+ getdir ?diskabort
|
||
cr 3 spaces Ascii A + emit ." :"
|
||
scan-name type exit THEN
|
||
makec$ (setdir ?diskabort ;
|
||
|
||
| : driveset Create c, Does> c@ setdrive ;
|
||
0 driveset A: 1 driveset B: 2 driveset C: 3 driveset D:
|
||
|
||
|
||
\ *** Block No. 32 Hexblock 20
|
||
\ words for VIEWing bcas20130105
|
||
|
||
| $200 Constant viewoffset \ max. &512 kbyte long files
|
||
|
||
| : (makeview ( -- n) \ calc. view field for a name
|
||
blk @ dup 0= ?exit
|
||
loadfile @ ?dup IF fileno @ viewoffset * + THEN ;
|
||
|
||
: (view ( blk -- blk') \ select file and leave block
|
||
dup 0= ?exit
|
||
viewoffset u/mod file-link
|
||
BEGIN @ dup WHILE 2dup fileno @ = UNTIL
|
||
dup searchfile drop \ file not found : abort
|
||
!files drop ;
|
||
|
||
|
||
\ *** Block No. 33 Hexblock 21
|
||
\ ugly FORGETing of files bp 11 oct 86
|
||
|
||
: remove? ( dic symb addr -- dic symb addr f)
|
||
dup heap? IF 2dup u> exit THEN 2 pick over 1+ u< ;
|
||
|
||
| : remove-files ( dic symb -- dic symb) \ flush files !
|
||
isfile @ remove? nip IF 0 !files THEN
|
||
fromfile @ remove? nip IF fromfile off THEN
|
||
file-link
|
||
BEGIN @ ?dup WHILE remove? IF dup (close THEN REPEAT
|
||
file-link remove ;
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 34 Hexblock 22
|
||
\ convey for files bp 11 oct 86
|
||
|
||
| : togglefiles ( -- ) \ changes isfile and fromfile
|
||
isfile@ fromfile @ isfile ! fromfile ! ;
|
||
|
||
: convey ( [blk1 blk2] [to.blk --)
|
||
3 arguments >r 2dup swap - >r
|
||
togglefiles dup capacity 1- >
|
||
togglefiles r> r@ + capacity 1- >
|
||
or abort" wrong range!"
|
||
r> convey ;
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 35 Hexblock 23
|
||
\ print a list of all blocks bp 9Apr86
|
||
|
||
: .blocks
|
||
prev BEGIN @ ?dup WHILE stop? abort" stopped"
|
||
cr dup u. dup 2+ @ dup 1+
|
||
IF ." Block :" over 4+ @ 5 .r
|
||
." File : " [ Dos ] .file
|
||
dup 6 + @ 0< IF ." updated" THEN
|
||
ELSE ." Block empty" drop THEN REPEAT ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 36 Hexblock 24
|
||
\ create a file of direct blocks bcas20130105
|
||
|
||
Dos also
|
||
|
||
| File outfile
|
||
|
||
: blocks>file ( from to -- ) \ name of file follows
|
||
?isfile@ -rot outfile make
|
||
1+ swap ?DO I over (block b/blk handle (filewrite
|
||
b/blk - abort" write error"
|
||
LOOP close isfile ! ;
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 37 Hexblock 25
|
||
bp 4oct86
|
||
|
||
|
||
|
||
|
||
|
||
MAKEVIEW erzeugt aus ISFILE und BLK das Viewfeld
|
||
CUSTOM-REMOVE erlaubt das FORGETten von eig. Datenstrukturen
|
||
R/W setzt Forthbl”cke in Disksektoren um ....
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 38 Hexblock 26
|
||
13oct86we
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 39 Hexblock 27
|
||
13oct86we
|
||
|
||
ARGUMENTS liefert etwas Sicherheit ...
|
||
|
||
|
||
(CREATEFILE erzeugt ein File, dessen Namen in C$ steht, im
|
||
aktuellen oder im durch den Pfadnamen angegebenen Directory.
|
||
HANDLE ist die Handle des Files oder ein Fehlerflag.
|
||
Es wird immer ein "ganz normales" File erzeugt.
|
||
|
||
(CLOSEFILE Schliežt das File mit der Handle HANDLE. Dabei
|
||
sollten alle TOS-Buffer zur<EFBFBD>ckgeschrieben und das Directory
|
||
gesichert werden. F ist ein Fehlerflag. Die Handle ist
|
||
anschliežend ung<EFBFBD>ltig.
|
||
|
||
|
||
\ *** Block No. 40 Hexblock 28
|
||
13oct86we
|
||
|
||
(FILEWRITE schreibtLEN Bytes in das File HANDLE. Die Bytes
|
||
werden ab Adresse BUFF im Speicher geholt.
|
||
N ist die Zahl der geschriebenen Bytes oder eine
|
||
Fehlernummer, wenn N zwischen -66 und -1 liegt.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 41 Hexblock 29
|
||
cas20130105
|
||
|
||
SAVE-SYSTEM speichert ein FORTH-System im aktuellen Zustand auf
|
||
Diskette ab.
|
||
|
||
Voodoo-Code f<EFBFBD>r den GEMDOS-Fileheader; keine Relokatinsinfos
|
||
|
||
Mit SAVE-SYSTEM lassen sich eigene Arbeitssysteme oder auch
|
||
Applikationen erstellen, denen man ihre FORTH-Herkunft nicht
|
||
mehr ansieht.
|
||
Stellen Sie ein System nach Ihren W<EFBFBD>nschen zusammen, und spei-
|
||
chern Sie es dann mit SAVE-SYSTEM MYPROG.PRG ab.
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 42 Hexblock 2A
|
||
13oct86we
|
||
|
||
DOS enth„lt die "unwichtigen" Worte des
|
||
Fileinterfaces
|
||
|
||
BODY> ( cfa -- pfa ) Kompilationsadresse in
|
||
Parameterfeldadresse umwandeln ...
|
||
|
||
|
||
|
||
Diese Worte werden f<EFBFBD>r die <EFBFBD>ble Patcherei in .diskabort benutzt.
|
||
Nur so kann die Dos-Fehlernummer in der abort" -Meldung unter-
|
||
gebracht werden. Bei einer Ausgabe mit . w„re keine Umleitung
|
||
<EFBFBD>ber ERRORHANDLER m”glich.
|
||
|
||
|
||
\ *** Block No. 43 Hexblock 2B
|
||
13oct86we
|
||
|
||
-n ist die Fehlernummer; es wird der zugeh”rige Text ausgedruckt
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Ist die Fehlernummer nicht in den CASE-Anweisungen zu finden,
|
||
wird Dos-Error # ausgegeben. Die Fehlernummer wird dann in
|
||
den abort" String gepatched. Dieses Verfahren ist zwar „užerst
|
||
h„žlich, nichtsdestoweniger aber sehr effektiv.
|
||
|
||
Pr<EFBFBD>ft, ob ein Fehler vorliegt und druckt ggf. den Text aus und
|
||
ABORTed anschliežend.
|
||
\ *** Block No. 44 Hexblock 2C
|
||
bp 4oct86
|
||
|
||
Definierendes Wort f<EFBFBD>r die Benamsung der Felder eines
|
||
File control blocks ( FCB bzw. FILE in den Stackkommentaren)
|
||
|
||
|
||
Zeiger auf den n„chsten FCB
|
||
Platz f<EFBFBD>r max. 24 Zeichen f<EFBFBD>r den TOS-Filenamen
|
||
L„nge des Files in Bytes
|
||
Handlenummer, die das TOS beim ™ffnen eines Files liefert.
|
||
Eine eigene Nummer, die in das VIEW-Feld eingetragen wird.
|
||
L„nge eines FCB wird auch berechnet...
|
||
|
||
Liefert die Handle des aktuellen Files. Null, falls das
|
||
File nicht offen .
|
||
|
||
\ *** Block No. 45 Hexblock 2D
|
||
bp 4oct86
|
||
|
||
LSEEK N ist ein Flag, das angibt, ob relativ zum
|
||
Fileanfang, zum Fileende oder zur aktuellen Position im File
|
||
positioniert werden soll. HANDLE ist die Handle des Files, in
|
||
dem positioniert wird und D die neue Position im File.
|
||
D' ist die neue Position.
|
||
POSITION positioniert auf das Byte d, gez„hlt vom Anfang
|
||
des Files mit der Handle HANDLE .
|
||
|
||
POSITION? liefert die Position des zuletzt gelesenen,
|
||
geschriebenen oder mit POSITION bzw. LSEEK angew„hlten Bytes.
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 46 Hexblock 2E
|
||
13oct86we
|
||
|
||
FILEREAD liest LEN Bytes aus dem File HANDLE. Die Bytes
|
||
werden ab Adresse BUFF im Speicher abgelegt.
|
||
N ist die Zahl der gelesenen Bytes oder eine Fehlernummer,
|
||
wenn N zwischen -66 und -1 liegt.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Das headerlose (FILEWRITE bekommt nun einen Header im Vocabulary
|
||
Dos.
|
||
|
||
\ *** Block No. 47 Hexblock 2F
|
||
26oct86we
|
||
|
||
OPENFILE ™ffnet ein File. Der Name steht im String C$.
|
||
C$ ist durch ein $00-Byte begrenzt. HANDLE ist die diesem
|
||
File zugeordnete Handle oder eine Fehlernummer.
|
||
|
||
|
||
|
||
DTA ist ein 44 Byte grožer Buffer, in dem einige
|
||
Fileinformationen vom GEMDOS gehalten werden.
|
||
SETDTA ADDR ist die Adresse der 'disk transfer area'.
|
||
|
||
|
||
|
||
(CLOSEFILE und (CREATEFILE erhalten Header im Vocabulary Dos.
|
||
|
||
\ *** Block No. 48 Hexblock 30
|
||
13oct86we
|
||
|
||
SEARCH0 SEARCH0 sucht ein File. C$ ist der Name des File
|
||
mit Pfad usw. . C$ wird, wie immer, durch ein $00-Byte
|
||
begrenzt. ATTR ist ein Attributwort, das z.B. bestimmt, ob
|
||
auch Subdirectories gefunden werden. F ist ein Fehlerflag.
|
||
Die DTA enth„lt anschliežend Filenamen, -l„nge usw.
|
||
SEARCHNEXT sucht das n„chste File mit dem bei SEARCH0
|
||
angegeben Namen...
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 49 Hexblock 31
|
||
13oct86we
|
||
|
||
(MAKEDIR erzeugt „hnlich (CREATEFILE ein Subdirectory.
|
||
C$ ist der Name des Directories, F ist ein Fehlerflag.
|
||
|
||
|
||
|
||
|
||
|
||
(SETDIR setzt das durch C$ angegeben Subdirectory als
|
||
das "Aktuelle", auf das sich alle Such- und "Erzeugungs-"
|
||
operationen ohne eigenen Pfadnamen beziehen.
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 50 Hexblock 32
|
||
bp 4oct86
|
||
|
||
SETDRIVE N ist die Nummer des aktuellen Laufwerkes, auf
|
||
das sich alle Operationen ohne eigenen Pfadnamen beziehen.
|
||
Vergleiche (SETDIR. Laufwerk A: hat die Nummer 0 !
|
||
|
||
GETDRIVE N ist die Nummer des bei SETDRIVE genannten
|
||
Laufwerks.
|
||
|
||
|
||
GETDIR Das durch (SETDIR gesetzte Subdirectory wird
|
||
ab Adresse ADDR als C$ im Speicher abgelegt. N ist die Nummer
|
||
des Laufwerkes ( Laufwerk A: hat die Nummer 1 !!!! ), denn
|
||
verschiedene Laufwerke k”nnen verschiedene aktuelle Sub-
|
||
directories haben.
|
||
|
||
\ *** Block No. 51 Hexblock 33
|
||
bp 4oct86
|
||
|
||
(CAPACITY FCB ist die Adresse des FCB des Files, von
|
||
dem die L„nge in Blocks bestimmt werden soll. N ist dann
|
||
die Zahl der Bl”cke in diesem File.
|
||
|
||
IN-RANGE pr<EFBFBD>ft, ob sich ein Block mit der Nummer BLOCK
|
||
im File FCB befindet. Ist das nicht der Fall, wird als
|
||
Fehlernummer -36 geliefert. Siehe auch ?DISKABORT
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 52 Hexblock 34
|
||
13oct86we
|
||
|
||
SET-POS positioniert im File mit der Handle HANDLE auf
|
||
den Anfangs des Blocks BLOCK. F ist ein Fehlerflag.
|
||
|
||
FILEACCESS wird in FILEREAD und FILEWRITE ben”tigt.
|
||
|
||
|
||
|
||
|
||
|
||
FILEREAD liest den Block BLOCK an die Adresse BUFF aus
|
||
dem File FCB. Hinterl„žt eine Fehlernummer.
|
||
|
||
FILEWRITE <EFBFBD>berschreibt den Block BLOCK mit den Daten ab
|
||
Adresse BUFF im File FCB. Hinterl„žt eine Fehlernummer.
|
||
\ *** Block No. 53 Hexblock 35
|
||
bp 4oct86
|
||
|
||
SCAN-NAME 'LEN ist die L„nge eines durch ein $00-Byte
|
||
begrenzten C$.
|
||
|
||
.FILE druckt den Forthnamen des Files mit der Adresse
|
||
FCB.
|
||
|
||
.FCB druckt Forthnamen, TOS-Namen, Handle und L„nge
|
||
des Files mit der Adresse FCB aus.
|
||
|
||
!FILES setzt die Variable ISFILE und FROMFILE (darin
|
||
steht das File, aus dem bei COPY und CONVEY gelesen wird)
|
||
auf das File mit der Adresse FCB.
|
||
|
||
|
||
\ *** Block No. 54 Hexblock 36
|
||
bp 4oct86
|
||
|
||
PATHES Hier ist Platz f<EFBFBD>r den durch SETPATH angegeben
|
||
String, der die Namen der zu durchsuchenden Laufwerke und
|
||
Directories enth„lt.
|
||
PATHES? Druckt den Inhalt von PATHES aus.
|
||
|
||
SETPATH Setzt PATHES auf den String ab der Adresse ADR,
|
||
dessen L„nge LEN ist. Anschliežend wird noch ein ; angef<EFBFBD>gt,
|
||
um auch den letzten Path korrekt zu beenden.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 55 Hexblock 37
|
||
bp 4oct86
|
||
|
||
WORKSPACE Hier wird aus File- und Pathnamen ein C$
|
||
zusammengebastelt.
|
||
|
||
TRY.PATH ADR und LEN enthalten den Pfadnamen (aus
|
||
PATHES mit PATH@ extrahiert), FCB ist die Adresse des Files
|
||
und ATTR ein Attribut (siehe SEARCH0). Aus Pfadnamen und FCB
|
||
wird in WORKSPACE ein String zusammengebastelt, der dann mit
|
||
SEARCH0 gesucht wird. F gibt an, ob wir erfolgreich waren.
|
||
|
||
MAKEC$ konvertiert einen durch ADR und LEN definierten
|
||
String in einen C$ (durch ein $00-Byte begrenzt) und
|
||
hinterl„žt dessen Adresse.
|
||
|
||
|
||
\ *** Block No. 56 Hexblock 38
|
||
bp 4oct86
|
||
|
||
SFILE enth„lt die Adresse des FCB des gesuchten Files.
|
||
DEFAULTATTR enstpricht "Suche alle Files, egal welches ATTR"
|
||
|
||
PATH@ extrahiere aus dem noch nicht zum Suchen verwen-
|
||
deten Teil von PATHES, der durch ADR und LEN angegeben wird,
|
||
den n„chsten zu durchsuchenden Pfad ADR LEN1.
|
||
(SEARCHFILE durchsucht alle in PATHES stehenden Pfade nach
|
||
dem in FCB stehenden Filenamen. Aufgeh”rt wird, wenn das File
|
||
gefunden wurde oder alle Pfade durchsucht wurden.
|
||
Am Schluž wird auch der leere Pfad (L„nge Null) durchsucht,
|
||
der dem aktuellen Directory (siehe SETDIR) entspricht.
|
||
|
||
SEARCHFILE Sucht das File FCB in allen Pfaden und im akt.
|
||
Directory. Hinterlassen wird der vollst„ndige Pfad des Files.
|
||
\ *** Block No. 57 Hexblock 39
|
||
bp 4oct86
|
||
|
||
@LENGTH holt die L„nge des zuletzt gefundenen Files
|
||
COPYLENGTH kopiert die L„nge des zuletzt gefundenen Files
|
||
in den Fcb FCB.
|
||
(OPEN ”ffnet das durch FCB angegebene File
|
||
und speichert LEN dort die Handle und L„nge. Dazu muž es
|
||
nat<EFBFBD>rlich erst gesucht werden, denn nur dann steht die L„nge
|
||
in der DTA.
|
||
|
||
|
||
|
||
CAPACITY N ist die Zahl der Bl”cke im aktuellen (durch
|
||
ISFILE angegeben) File. Ist ISFILE Null, so wird die Kapazit„t
|
||
der Diskette im Direktzugriff angegeben.
|
||
|
||
\ *** Block No. 58 Hexblock 3A
|
||
bp 4oct86
|
||
|
||
FILER/W ist das zentrale Wort f<EFBFBD>r den Zugriff auf Files.
|
||
BUFF ist die Adresse des Blocks BLOCK im Speicher, FCB die
|
||
Nummer des Files (0 heižt Direktzugriff) und R/W gibt an, in
|
||
welcher Richtung die Daten zu transportieren sind.
|
||
F ist true, falls ein Fehler auftrat.
|
||
|
||
CREATEFILE erzeugt ein File, dessen Name im Fcb FCB steht.
|
||
Handle und Filel„nge werden korrigiert.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 59 Hexblock 3B
|
||
bp 4oct86
|
||
|
||
!NAME speichert einen auf !NAME folgenden String
|
||
ab Adresse ADR mit maximaler L„nge LEN im Speicher ab.
|
||
Der String wird durch $00-Bytes begrenzt.
|
||
|
||
|
||
!FCB speichert einen auf !FCB folgenden String im
|
||
Fcb FCB ab. Die Handle wird gel”scht, weil das
|
||
so zugewiesene File noch nicht ge”ffnet worden ist.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 60 Hexblock 3C
|
||
13oct86we
|
||
|
||
.DTANAME druckt den Filenamen, er ab Adresse d in der DTA
|
||
steht, linksb<EFBFBD>ndig in einem Feld der Breite 15 aus.
|
||
|
||
|
||
.DTA druckt den Inhalt der DTA formattiert aus.
|
||
Zun„chst wird ein "D" ausgegeben, das anzeigt, ob es sich
|
||
um ein Subdirectory handelt, anschliežend der Name gefolgt
|
||
von der L„nge des Files.
|
||
|
||
(DIR druckt alle Files aus, auf die der String ADR
|
||
LEN und das Attribut ATTR "passt". Die Ausgabe kann wie
|
||
<EFBFBD>blich angehalten und abgebrochen werden.
|
||
|
||
|
||
\ *** Block No. 61 Hexblock 3D
|
||
bp 4oct86
|
||
|
||
FILE-LINK enth„lt einen Zeiger auf den FCB des
|
||
zuletzt definierten Files.
|
||
#FILE N ist die Nummer, die in das Viewfeld des
|
||
n„chsten zu definierenden Files eingetragen werden soll.
|
||
|
||
|
||
FORTHFILES druckt die Forth- und TOS-Namen mit Handle und
|
||
L„nge aller definierten Files aus. Dazu wird FILE-LINK
|
||
benutzt. Die Ausgabe kann wie <EFBFBD>blich angehalten oder beendet
|
||
werden.
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 62 Hexblock 3E
|
||
bp 4oct86
|
||
|
||
FILEBUFFER? guckt nach, ob zu dem File FCB noch ein Block-
|
||
puffer exisitiert. Liefert false, falls keiner vorhanden ist.
|
||
|
||
FLUSHFILE sichert alle zum File FCB geh”renden Blockpuffer
|
||
auf dem Massenspeicher und l”scht sie anschliežend.
|
||
|
||
|
||
(CLOSE sichert alle Blockpuffer, schliežt anschliežend
|
||
das File, falls es nicht schon geschlossen war und ignoriert
|
||
den Fehler mit der Nummer -65, weil der so oft auftritt...
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 63 Hexblock 3F
|
||
bp 4oct86
|
||
|
||
FILE ist ein definierendes Wort, daž einen FCB
|
||
erzeugt. Wird der FCB sp„ter ausgef<EFBFBD>hrt, so tr„gt er sich
|
||
als aktuelles File und als FROMFILE ein.
|
||
|
||
|
||
|
||
DIRECT ein "spezieller FCB" f<EFBFBD>r den Direktzugriff.
|
||
Der Direktzugriff ist immer dann interessant, wenn man
|
||
einen Diskmonitor braucht, ihn aber gerade verliehen hat...
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 64 Hexblock 40
|
||
bp 4oct86
|
||
|
||
FLUSH schliežt zus„tzlich alle Files..
|
||
|
||
|
||
FILE? druckt den Namen des aktuellen Files aus.
|
||
|
||
LIST druckt zus„tzlich den Filenamen aus...
|
||
|
||
|
||
PATH druckt PATHES aus oder
|
||
l”scht PATHES oder
|
||
setzt PATHES auf einen anderen String.
|
||
|
||
|
||
|
||
\ *** Block No. 65 Hexblock 41
|
||
13oct86we
|
||
|
||
ISFILE? F ist wahr, falls ADR die Kompilationsadresse
|
||
eines FCB ist (also durch FILE erzeugt wurde...).
|
||
|
||
?ISFILE@ steht in ISFILE <EFBFBD>berhaupt ein File ?
|
||
|
||
OPEN ”ffnet das aktuelle File.
|
||
CLOSE schliežt es.
|
||
ASSIGN Anderer Filename in aktuellen FCB eintragen.
|
||
MAKE Neu erzeugter Filename in aktuellen FCB..
|
||
|
||
USE Erzeuge FCB (mit Filenamen !), falls Name nicht
|
||
schon vorhanden. Wenn Name vorhanden, pr<EFBFBD>fe ob es File ist.
|
||
Trage dann FCB in ISFILE ein.
|
||
|
||
\ *** Block No. 66 Hexblock 42
|
||
13oct86we
|
||
|
||
MAKEFILE erzeugt FCB und File gleichen Namens.
|
||
|
||
FROM setzt FROMFILE f<EFBFBD>r COPY und CONVEY
|
||
LOADFROM l„dt den Screen N vom File, dessen Name auf
|
||
LOADFROM folgt. z.B. 1 loadfrom forth_83.scr
|
||
INCLUDE l„dt den Loadscreen des Files...
|
||
|
||
EOF F ist wahr, falls wir am Ende des Files
|
||
angekommen sind.
|
||
|
||
|
||
FILES liefert Inhaltsverzeichnis des akt. Directories.
|
||
FILES" erlaubt Pfad- und Filenamen
|
||
|
||
\ *** Block No. 67 Hexblock 43
|
||
bp 4oct86
|
||
|
||
>FILEEND springe ans Ende des aktuellen Files
|
||
|
||
|
||
ADDSIZE erh”ht die L„ngenangabe im aktuellen FCB um
|
||
1024 Bytes.
|
||
ADDBLOCK f<EFBFBD>gt den Block N am Fileende an.
|
||
Aužerdem wird ein leerer Buffer mit dieser Nummer angelegt.
|
||
|
||
|
||
|
||
(MORE f<EFBFBD>gt n Bl”cke am Fileende an.
|
||
|
||
MORE Wie (MORE, jedoch etwas Sicherheit..
|
||
|
||
\ *** Block No. 68 Hexblock 44
|
||
13oct86we
|
||
|
||
DIR$ ADR ist die Adresse eines auf DIR$ folgenden C$.
|
||
|
||
MAKEDIR erzeugt ein Directory mit dem folgenden Namen..
|
||
|
||
DIR gibt, falls kein Name folgt, das aktuelle Lauf-
|
||
werk und Subdirectory aus. Folgt ein Name, so wird er als
|
||
das neue aktuelle Directory an das TOS <EFBFBD>bergeben.
|
||
|
||
|
||
|
||
A: B: C: D: Kurzformen f<EFBFBD>r SETDRIVE.
|
||
|
||
|
||
|
||
\ *** Block No. 69 Hexblock 45
|
||
13oct86we
|
||
|
||
VIEWOFFSET teilt das 16-Bit Viewfeld in ein Feld mit der
|
||
Filenummer und ein Feld mit der Blocknummer. Die unteren 9
|
||
Bits sind f<EFBFBD>r die Blocknummer reserviert.
|
||
(MAKEVIEW macht aus BLK und der Nummer des geladenen Files
|
||
LOADFILE eine 16-Bit Zahl, die von CREATE dann als Viewfeld
|
||
hinterlegt wird.
|
||
(VIEW zerlegt den Inhalt BLK eines Viewfeldes in
|
||
Filenummer und Blocknummer BLK' . Der zur Filenummer
|
||
geh”rende FCB wird gesucht, und falls gefunden, in ISFILE
|
||
und FROMFILE eingetragen. Kann kein FCB gefunden werden,
|
||
so wird eine Fehlermeldung ausgegeben.
|
||
|
||
|
||
|
||
\ *** Block No. 70 Hexblock 46
|
||
bp 4oct86
|
||
|
||
REMOVE? DIC (SYMB) ist die Adresse im Dictionary (HEAP),
|
||
oberhalb (unterhalb, der Heap w„chst von oben nach unten !)
|
||
derer alle Worte vergessen werden m<EFBFBD>ssen. F gibt an, ob
|
||
ADDR innerhalb des zu vergessenden Intervalls liegt.
|
||
|
||
REMOVE-FILES guckt nach, ob ISFILE oder FROMFILE vergessen
|
||
werden. Ist das der Fall, so werden sie auf den Direktzugriff
|
||
umgeschaltet.
|
||
Anschliežend werden alle zu vergessenden Files geschlossen
|
||
und aus der Liste aller Files FILE-LINK entfernt.
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 71 Hexblock 47
|
||
bp 4oct86
|
||
|
||
TOGGLEFILES vertauscht ISFILE und FROMFILE.
|
||
|
||
|
||
CONVEY pr<EFBFBD>ft, ob die zu bewegenden Bl”cke vorhanden
|
||
sind und bewegt sie ggf.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 72 Hexblock 48
|
||
13oct86we
|
||
|
||
.BLOCKS listet den Inhalt der Blockpuffer auf.
|
||
Angegeben werden Adresse, Blocknummer und Filename sowie,
|
||
ob der Block geUPDATEd wurde.
|
||
|
||
Bei der Entwicklung des Fileinterfaces war das ein n<EFBFBD>tzliches
|
||
Hilfsmittel.
|
||
|
||
|
||
Dieser und der n„chste Screen werden normalerweise vom Load-
|
||
screen nicht mitkompiliert.
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 73 Hexblock 49
|
||
13oct86we
|
||
|
||
|
||
|
||
|
||
|
||
Mit BLOCKS>FILE l„žt sich eine Folge von Diskettenbl”cken in
|
||
einem File ablegen. Damit k”nnen Disketten, die bisher im
|
||
Direktzugriff benutzt worden sind, auf das Fileinterface um-
|
||
gestellt werden.
|
||
|
||
|
||
|
||
|
||
|
||
|