VolksForth/sources/cpm/SIMPFILE.FB.src

69 lines
4.4 KiB
Plaintext
Raw Normal View History

2020-06-20 16:59:14 +00:00
Screen 0 not modified
0 \\ Simple Files 11Nov86
1
2 Wenn volksFORTH im Direktzugriff Disketten bearbeitet, ist es
3 trotzdem wuenschenswert eine Art File-Struktur zu besitzen.
4 Dieses File enthaelt eine einfache Implementation eines
5 Filesystems. Der/die Programmierer/in muss selbst die Direktory
6 auf dem laufenden halten: in ihr sind die Start-Bloecke des
7 entsprechenden Diskettenteils gespeichert.
8 Sogar eine Hierarchie von Direktories laesst sich so relisieren.
9
10 Vorgestellt wurde dieses FileSystem von Georg Rehfeld und auch
11 von ihm fuer volksFORTH implementiert (ultraFORTH auf dem C64).
12
13
14
15
Screen 1 not modified
0 \ simple files 12feb86
1
2 \needs search .( search missing) \\
3
4 | Variable (dir : dir (dir @ ; : root 0 (dir ! ; root
5
6 | : read" ( -- n)
7 Ascii " word count dup >r dir block b/blk search
8 0= abort" not found" r> + >in push >in !
9 bl dir block b/blk (word number drop ;
10
11 : load" read" dir + load ; : dir" read" (dir +! ;
12 : list" read" dir + list ;
13
14 \ 1 +load \ Only if file" is needed
15
Screen 2 not modified
0 \ simple files 01feb86
1
2 | : snap ( n0 -- n1) $20 / 3 max $20 * ;
3 : file" ( n --)
4 Ascii " word count 2dup dir block b/blk search
5 IF + nip
6 ELSE drop dir block b/blk -trailing nip snap $20 +
7 dup b/blk 1- > abort" directory full"
8 2dup + >r dir block + swap cmove r>
9 THEN snap $18 + >r
10 dir - extend under dabs <# # # # #
11 base @ $0A = IF Ascii & ELSE Ascii $ THEN hold
12 rot 0< IF Ascii - ELSE bl THEN hold #>
13 r> dir block + swap cmove update ;
14
15
Screen 3 not modified
0 \ dir load" 11feb86
1
2 \needs search .( search missing) \\
3
4 0 Constant dir
5
6 : load" ( -- )
7 Ascii " word count dup >r dir block b/blk search
8 0= abort" not found" r> +
9 >in @ blk @ rot >in ! dir blk !
10 bl word number drop -rot blk ! >in ! load ;
11
12
13
14
15