mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-06-14 00:29:45 +00:00
4424 lines
174 KiB
Plaintext
4424 lines
174 KiB
Plaintext
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ Directory 13.5.87 ccclv8feb89
|
||
|
||
listbufs 2
|
||
frei 3-4
|
||
fehlerbehandlung-test 5-11 kw
|
||
fehlerbehandlung-funktioniert 12-19
|
||
fehlerbeh 6 20-26
|
||
frei 27
|
||
SKIP[ ]SKIP 28
|
||
frei 29-32
|
||
fehlerbeh. mit tabort" 33-37
|
||
fehler (err in quit.. 38-44
|
||
backup ..R/W 45-53
|
||
frei 54-59
|
||
Terminal 60
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ listbufs clv14mar88
|
||
|
||
|
||
: listbufs prev
|
||
BEGIN @ dup WHILE \ liste
|
||
cr dup u. dup 2+ @ 1+
|
||
IF dup 2+ 2+ @ blk/drv /mod
|
||
u. ." :" u. THEN
|
||
stop? UNTIL drop ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ fehlerbeh. test clv24nov87
|
||
|
||
.( fehlerbeh EXITS FAILS ;THEN ) cr
|
||
.( 1.5 scr + 2 scr ueberdefinieren)
|
||
|
||
: repare ['] (error errorhandler !
|
||
[ ' quit >body dup @ ]
|
||
Literal Literal !
|
||
[ ' abort" >body dup @ ]
|
||
Literal Literal !
|
||
[ ' error" >body 2+ @ >body dup @ ]
|
||
Literal Literal ! ;
|
||
: old repare
|
||
['] repare >name 4 - (forget save quit
|
||
;
|
||
|
||
1 5 +thru
|
||
6 +load \ beispiel
|
||
|
||
' throw errorhandler !
|
||
' nquit ' quit >body ! \ patch
|
||
' n(abort" ' (abort" >body !
|
||
' n(err" ' error" >body 2+ @ >body !
|
||
save quit
|
||
|
||
\ ep eClrS throw catch clv19nov87
|
||
|
||
( | ) User ep 0 ep !
|
||
( | ) User eClrS eClrS on
|
||
|
||
( | ) : throw
|
||
ep @ rp! r> ep ! r>
|
||
[ last @ name> >body ] Literal >r >r ;
|
||
\ rstack: ... throw catchAdr
|
||
\ ' throw errorhandler !
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ (error Abort" Error" clv16nov87
|
||
|
||
: n(error ( string -- )
|
||
standardi/o
|
||
space here .name count type space ?cr
|
||
blk @ ?dup IF scr ! >in @ r# ! THEN
|
||
eClrS @ IF clearstack THEN quit ;
|
||
|
||
\\
|
||
: (abort" "lit swap
|
||
IF eClrS on errorhandler perform exit
|
||
THEN drop ; restrict
|
||
|
||
| : (err" "lit swap
|
||
IF eClrS off errorhandler perform exit
|
||
THEN drop ; restrict
|
||
|
||
: Abort" compile (abort" ," ;
|
||
immediate restrict
|
||
|
||
: Error" compile (err" ," ;
|
||
immediate restrict
|
||
|
||
|
||
|
||
\ clv16nov87
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ FAILS clv16nov87
|
||
|
||
Create: unfails r> ep ! rdrop ;
|
||
Create: unexits r> ep ! ;
|
||
|
||
: (fails ( --)
|
||
r> dup 2+ >r ep @ >r rp@ ep !
|
||
unfails >r
|
||
dup @ + >r ; restrict
|
||
|
||
: (exits ( --)
|
||
r> dup 2+ >r ep @ >r rp@ ep !
|
||
unexits >r
|
||
dup @ + >r ; restrict
|
||
\ branchtarget & catchpart follows
|
||
\ rstack: ... adr oldep uncatch cont
|
||
\ ep ---^
|
||
|
||
: FAILS compile (fails >mark -1 ;
|
||
immediate restrict
|
||
: EXITS compile (exits >mark -1 ;
|
||
immediate restrict
|
||
: ;THEN compile exit [compile] THEN ;
|
||
immediate restrict
|
||
|
||
\ quit clv16nov87
|
||
\ patches:
|
||
|
||
: n(abort" rdrop "lit swap
|
||
IF eClrS on errorhandler perform exit
|
||
THEN drop ; restrict
|
||
|
||
| : n(err" rdrop "lit swap
|
||
IF eClrS off errorhandler perform exit
|
||
THEN drop ; restrict
|
||
: nquit rdrop r0 @ rp! [compile] [
|
||
FAILS n(error THEN 'quit ;
|
||
\ installs toplevel errorhandling
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ fehlerbeh. beispiel clv17nov87
|
||
|
||
: devon ." device ist on " ;
|
||
: devoff ." device ist off " ;
|
||
|
||
: mistake? ." Fehler=y " key capital
|
||
Ascii Y = abort" aborted" ;
|
||
|
||
: tf ." t-1 " devon
|
||
FAILS ." t-f " devoff ;THEN
|
||
." t-2 " mistake?
|
||
." t-3 " devoff ;
|
||
|
||
: te ." t-1 " devon
|
||
EXITS ." t-f " devoff ;THEN
|
||
." t-2 " mistake? ." t-3 " ;
|
||
|
||
|
||
: t cr ." mit FAILS:" tf cr tf cr
|
||
cr ." mit EXITS:" te cr te ;
|
||
|
||
|
||
|
||
|
||
|
||
\ fehlerbeh. 2 clv07feb88
|
||
|
||
.( fehlerbeh EXITS #FAILS END ) cr
|
||
.( 4 scr + 1 scr ueberdefinieren)
|
||
|
||
|
||
1 5 +thru
|
||
6 7 +thru \ beispiel
|
||
|
||
' noop errorhandler !
|
||
' nquit ' quit >body ! \ patch
|
||
' n(abort" ' (abort" >body !
|
||
' n(err" ' error" >body 2+ @ >body !
|
||
save quit
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
(c) clv 1988
|
||
|
||
\ pointer and rstack-handl. clv07feb88
|
||
|
||
( | ) User ep \ error-return-pointer
|
||
User err err off \ error-message
|
||
User eClr eClr off \ error-clearstack
|
||
|
||
|
||
Create: uncatch r> r> ep ! rp! ;
|
||
|
||
( |) Variable catchrp
|
||
|
||
: <catch r> rp@ catchrp ! >r ; restrict
|
||
|
||
: catch> r> ep @ >r rp@ ep !
|
||
catchrp @ >r uncatch >r >r ; restrict
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ throw (exits (fails clv07feb88
|
||
|
||
: throw rdrop err @ 0= ?exit
|
||
ep @ rp! r> ep ! ; restrict
|
||
|
||
: (exits r> dup 2+ >r <catch catch>
|
||
dup @ + >r ; restrict
|
||
|
||
: (fails r> <catch dup 2+ >r catch>
|
||
dup @ + >r ; restrict
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ (#fails clv07feb88
|
||
|
||
: move>r ( from count--) r> -rot
|
||
rp@ over - under rp! cmove >r ;
|
||
restrict
|
||
: r>move ( to count--) r> -rot
|
||
under rp@ -rot cmove rp@ + rp! >r ;
|
||
restrict
|
||
|
||
create: getargs
|
||
s0 @ r> - sp! sp@ r@ 1+ 2* r>move ;
|
||
|
||
: (#fails ( ..args.. n--..args..)
|
||
>r r@ sp@ s0 @ swap -
|
||
sp@ r> 2+ 2*
|
||
( .args. n depth from bytes)
|
||
r> <catch dup 2+ >r -rot move>r
|
||
nip nip getargs >r catch>
|
||
dup @ + >r ; restrict
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ FAILS EXITS #FAILS END clv07feb88
|
||
|
||
: EXITS compile (exits >mark -1 ;
|
||
immediate restrict
|
||
: FAILS [compile] BEGIN compile (fails
|
||
>mark -1 2swap ;
|
||
immediate restrict
|
||
: #FAILS ( n--)
|
||
[compile] BEGIN compile (#fails
|
||
>mark -1 2swap ;
|
||
immediate restrict
|
||
: END dup 2 = IF 2drop THEN
|
||
abs 1 ?pairs
|
||
compile throw >resolve ;
|
||
immediate restrict
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ (error (abort" quit clv07feb88
|
||
|
||
: n(error standardi/o space here .name
|
||
err @ count type space ?cr err off
|
||
blk @ ?dup IF scr ! >in @ r# ! THEN
|
||
eClr @ IF clearstack THEN quit ;
|
||
|
||
: n(abort" rdrop "lit swap
|
||
IF err ! eClr on
|
||
errorhandler perform throw THEN
|
||
drop ; restrict
|
||
|
||
| : n(err" rdrop "lit swap
|
||
IF err ! eClr off
|
||
errorhandler perform throw THEN
|
||
drop ; restrict
|
||
|
||
: nquit rdrop r0 @ rp! [compile] [
|
||
FAILS n(error END 'quit ;
|
||
\ installs toplevel errorhandling
|
||
|
||
|
||
\\ die RDROP sind nur wg. Patch
|
||
|
||
|
||
\ fehlerbeh. beispiel clv19nov87
|
||
|
||
: devon ." device ist on " ;
|
||
: devoff ." device ist off " ;
|
||
|
||
: mistake? ." Fehler=y " key capital
|
||
Ascii Y = abort" aborted" ;
|
||
|
||
: tf ." t-1 " devon
|
||
FAILS ." t-f " devoff END
|
||
." t-2 " mistake?
|
||
." t-3 " devoff ;
|
||
|
||
: te ." t-1 " devon
|
||
EXITS ." t-f " devoff END
|
||
." t-2 " mistake? ." t-3 " ;
|
||
|
||
|
||
: t cr ." mit FAILS:" tf cr tf cr
|
||
cr ." mit EXITS:" te cr te ;
|
||
|
||
|
||
|
||
|
||
|
||
\ fhler test #FAILS clv07feb88
|
||
|
||
\ Fuer Neugierige:
|
||
: .rs r0 @ rp@
|
||
DO cr I dup . ." :" @ dup .
|
||
dup 2- @ uncatch 2- @ =
|
||
IF ." -" 2- ELSE @ THEN >name .name
|
||
2 +LOOP ;
|
||
|
||
|
||
: .stack ." Stack:" .s ;
|
||
: action ( n1 n2 n3--nSum)
|
||
." action:" .stack + + mistake? ;
|
||
|
||
: t#fails 1 2 3
|
||
3 #FAILS ." F:" .stack
|
||
." retry=y?" key Ascii y -
|
||
UNTIL END
|
||
action ." successfull:" .stack drop ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ EH:LOADs exception handling clv24feb88
|
||
|
||
User ep \ error-return-pointer
|
||
User err err off \ error-message
|
||
|
||
|
||
|
||
1 3 +thru \ throw EXITS #FAILS RETRY
|
||
4 +load \ patches (abort" (err" quit
|
||
\ 5 7 +thru \ beispiel
|
||
|
||
|
||
save quit
|
||
|
||
|
||
|
||
\\ (c) 1988 volksFORTH83-Autoren
|
||
in der Forth-Gesellschaft e.V.
|
||
|
||
enwickelt von Claus Vogt, 1988
|
||
unter ultraFORTH83 Vs 3.8 auf CBM +4
|
||
|
||
Thanks to Klaus Schleisiek and TLC-Lisp
|
||
|
||
|
||
\ EH:returnstack catch-throw clv24feb88
|
||
|
||
: <rstack r> rp@ >r >r ; restrict
|
||
|
||
: ,r ( u--)
|
||
r> r> rot >r >r >r ; restrict
|
||
|
||
: rmove ( adr u --)
|
||
r> r> rp@ 3 pick - rp!
|
||
rp@ -rot >r >r swap cmove ; restrict
|
||
|
||
Create: unstack r> rp! ;
|
||
Create: uncatch r> r> ep ! rp! ;
|
||
: rstack> r> unstack >r >r ; restrict
|
||
|
||
: catch> r> r> ep @ >r rp@ ep ! >r
|
||
uncatch >r >r ; restrict
|
||
|
||
: throw err @
|
||
IF ep @ rp! r> ep ! ELSE rdrop THEN
|
||
; restrict
|
||
|
||
: ?throw ( flag--)
|
||
IF rdrop throw THEN ; restrict
|
||
|
||
\ EH:(exits (fails (#fails clv24feb88
|
||
|
||
: (exits \ frame to be executed after
|
||
\ error or exit
|
||
r> err @ IF err dup push off THEN
|
||
dup 2+ >r <rstack catch>
|
||
dup @ + >r ; restrict
|
||
|
||
: (fails \ frame executes after error
|
||
r> <rstack dup 2+ ,r catch>
|
||
dup @ + >r ; restrict
|
||
|
||
Create: getargs \ restore:
|
||
s0 @ r> 2* - sp! \ stack-pointer
|
||
sp@ rp@ swap r@ 1+ 2* cmove \ values
|
||
r> 2* rp@ + rp! ; \ returnstack
|
||
|
||
: (#fails ( u*args u--u*args)
|
||
>r sp@ r> \ saves also arguments
|
||
r> <rstack dup 2+ ,r
|
||
-rot under 2* rmove ,r
|
||
depth ,r getargs ,r catch>
|
||
dup @ + >r ; restrict
|
||
|
||
|
||
\ EH:FAILS EXITS #FAILS RETRY clv24feb88
|
||
|
||
: EXITS compile (exits >mark -1
|
||
; immediate restrict
|
||
|
||
: FAILS compile (fails >mark -1
|
||
; immediate restrict
|
||
|
||
: #FAILS ( n--)
|
||
compile (#fails >mark -1
|
||
; immediate restrict
|
||
|
||
: RETRY compile branch over 2- <resolve
|
||
[compile] THEN
|
||
; immediate restrict
|
||
|
||
\\ use:
|
||
|
||
EXITS ... throw THEN ...
|
||
|
||
(#)FAILS ... ?throw ... RETRY ...
|
||
|
||
don't use: IF ... ELSE ... RETRY !!!!
|
||
|
||
|
||
\ EH:(error (abort" quit clv24feb88
|
||
|
||
' noop errorhandler !
|
||
|
||
| : err! ( flag--) rdrop "lit swap
|
||
IF dup err ! errorhandler perform drop
|
||
throw THEN drop ; restrict
|
||
|
||
: n(abort" rdrop ( * ) err! ; restrict
|
||
' n(abort" ' (abort" >body !
|
||
|
||
: n(err" rdrop ( * ) err! ; restrict
|
||
' error" >body 2+ @ | Alias (err"
|
||
' n(err" ' (err" >body !
|
||
|
||
: .err space here .name
|
||
err @ count type space ?cr ;
|
||
: nquit rdrop ( * ) r0 @ rp!
|
||
FAILS standardi/o .err
|
||
blk @ ?dup IF scr ! >in @ r# ! THEN
|
||
err @ 2- @ ['] (err" -
|
||
IF clearstack THEN
|
||
RETRY err off [compile] [ 'quit ;
|
||
' nquit ' quit >body !
|
||
|
||
\ EH:sample.. clv24feb88
|
||
|
||
: devon ." aktion begonnen " cr ;
|
||
: devoff ." aktion beendet " cr ;
|
||
|
||
|
||
: .ok ." alles erfolgreich" cr ;
|
||
: .handle ." Ausnahmebehandlung: " ;
|
||
: .stack ." Stack:" .s cr ;
|
||
|
||
: ?y? ( --flag)
|
||
." =y " key capital Ascii Y =
|
||
dup 0= IF del del ." n " THEN cr ;
|
||
|
||
: ok? ." Fehler?" ?y? abort" abbruch" ;
|
||
|
||
: retry? ( --flag) ." nochmal?" ?y? ;
|
||
|
||
: action ( n1 n2 n3--nSum)
|
||
devon
|
||
.stack + + ok?
|
||
devoff ;
|
||
|
||
|
||
|
||
\ EH:..sample clv24feb88
|
||
|
||
: tf ." t-1 " devon
|
||
FAILS .handle devoff throw THEN
|
||
." t-2 " ok?
|
||
." t-3 " devoff .ok ;
|
||
|
||
: te ." t-1 " devon
|
||
EXITS .handle devoff throw THEN
|
||
." t-2 " ok? .ok ;
|
||
|
||
: t# 1111 2222 3333
|
||
3 #FAILS .handle .stack
|
||
retry? 0= ?throw cr RETRY
|
||
action .ok .stack drop ;
|
||
|
||
|
||
|
||
: test 0 #FAILS cr cr ." alles" retry?
|
||
0= ?throw cr RETRY
|
||
cr ." mit FAILS:" cr tf cr
|
||
cr ." mit EXITS:" cr te cr
|
||
cr ." mit #FAILS:" cr t# cr ;
|
||
|
||
|
||
\ EH:ouput of returnstack clv24feb88
|
||
|
||
\ Fuer Neugierige:
|
||
|
||
: tab at? &22 umax at ;
|
||
|
||
: ?.n ( adr string--)
|
||
swap >name ?dup
|
||
IF swap count type tab .name
|
||
rdrop exit THEN drop ; restrict
|
||
|
||
: ?.name ( adr--)
|
||
dup 2- " pfa of" ?.n
|
||
dup 2- @ " " ?.n
|
||
dup 4 - @ " data of" ?.n
|
||
tab ." ???" ;
|
||
|
||
: .rs r0 @ rp@ \ gibt rstack aus
|
||
DO cr I 6 u.r I @ 6 u.r space
|
||
I @ ?.name drop 2 +LOOP
|
||
cr ep @ 6 u.r ." ep ! " ;
|
||
|
||
|
||
|
||
|
||
\ SKIP[ ]SKIP clv13feb88
|
||
|
||
: ]SKIP 4 ?pairs >resolve ] ;
|
||
|
||
: SKIP[ reveal compile branch >mark 4
|
||
[compile] [ ;
|
||
immediate restrict
|
||
|
||
|
||
|
||
\\
|
||
|
||
: t ." hier t"
|
||
|
||
SKIP[ : t2 ." hier t2 " ;
|
||
]SKIP ." hier noch t" ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ fehlerbeh. 4 clv22feb88
|
||
|
||
\ mit tabort"
|
||
\ nur Studie, da nicht patchbar
|
||
\ Beispiel wie gehabt
|
||
|
||
1 3 +thru \ EXITS #FAILS END
|
||
4 +load \ systemaenderungen
|
||
|
||
\\ Veraenderungen im System:
|
||
|
||
errorhandler wird leider gestrichen
|
||
quit abort" (abort" error" (err" anders
|
||
(error wird in quit integriert
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ pointer and rstack-handl. clv22feb88
|
||
|
||
User ep ep off \ Error-Ret-Ptr
|
||
|
||
Create: uncatch r> r> ep ! rp! ;
|
||
|
||
( |) Variable catchrp
|
||
|
||
: <catch r> rp@ catchrp ! 0 >r >r ;
|
||
restrict
|
||
|
||
: catch> r> ep @ >r rp@ ep !
|
||
catchrp @ >r uncatch >r >r ; restrict
|
||
|
||
: move>r ( from count--) r> -rot
|
||
rp@ over - under rp! cmove >r ;
|
||
restrict
|
||
|
||
: r>move ( to count--) r> -rot
|
||
under rp@ -rot cmove rp@ + rp! >r ;
|
||
restrict
|
||
|
||
|
||
|
||
|
||
\ throw (exits (fails (#fails clv22feb88
|
||
|
||
| : rdo ( pfa--pfa) r> swap 2+ >r >r ;
|
||
| : rskip ( pfa--) rdrop dup @ + >r ;
|
||
|
||
: (exits rdo rskip ; restrict
|
||
|
||
: EXITS compile (exits >mark -1 ;
|
||
immediate restrict
|
||
|
||
: (fails
|
||
r> <catch rdo catch> rskip ; restrict
|
||
|
||
: (#fails ( ..args.. n--..args..)
|
||
>r r@ sp@ s0 @ swap -
|
||
sp@ r> 2+ 2*
|
||
( .args. n depth from bytes)
|
||
r> <catch rdo -rot move>r
|
||
nip nip
|
||
EXITS s0 @ r> - sp!
|
||
sp@ r@ 1+ 2* r>move exit THEN
|
||
catch> rskip ; restrict
|
||
|
||
|
||
|
||
\ FAILS #FAILS END clv22fclv22feb88
|
||
|
||
: FAILS [compile] BEGIN compile (fails
|
||
>mark -1 2swap ;
|
||
immediate restrict
|
||
: #FAILS ( n--)
|
||
[compile] BEGIN compile (#fails
|
||
>mark -1 2swap ;
|
||
immediate restrict
|
||
: END dup 2 = IF 2drop THEN
|
||
abs 1 ?pairs >resolve ;
|
||
immediate restrict
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ (error (abort" quit clv22feb88
|
||
|
||
: throw rdrop r> 2- \ points to tabort"
|
||
ep @ 2- rp! r> 2- ! \ error-exit-pfa
|
||
r> ep ! ; restrict
|
||
|
||
: (tabort" throw ; restrict
|
||
: (terr" throw ; restrict
|
||
|
||
: abort" ( flag -- )
|
||
[compile] IF compile (tabort" ,"
|
||
[compile] THEN ; immediate restrict
|
||
: error" ( flag -- )
|
||
[compile] IF compile (terr" ,"
|
||
[compile] THEN ; immediate restrict
|
||
|
||
: quit r0 @ rp! \ kann ev weg
|
||
FAILS standardi/o space here .name
|
||
r> dup 2+ count type space
|
||
dup ." at:" u. ?cr
|
||
blk @ ?dup IF scr ! >in @ r# ! THEN
|
||
['] (tabort" = IF clearstack THEN
|
||
REPEAT THEN
|
||
[compile] [ 'quit ;
|
||
|
||
\ fehlerbeh. 5 clv23feb88
|
||
|
||
\ (errror in quit, User: ep / err
|
||
|
||
1 3 +thru \ EXITS #FAILS END
|
||
4 +load \ patches (abort" (err" quit
|
||
5 6 +thru \ beispiel
|
||
|
||
\\ ab hier wird gepatched:
|
||
: -!- dup @ -rot , , , ;
|
||
Variable patches
|
||
' noop errorhandler -!-
|
||
' nquit ' quit >body -!-
|
||
' n(abort" ' (abort" >body -!-
|
||
' n(err" ' error" >body 2+ @ >body -!-
|
||
here patches !
|
||
|
||
: patch patches @ patches 2+
|
||
DO I 2 + @ I @ ! 6 +LOOP ;
|
||
: unpatch patches @ patches 2+
|
||
DO I 4 + @ I @ ! 6 +LOOP ;
|
||
\\ patch save quit
|
||
\\ unpatch ' ep >name 4 - (forget save
|
||
0 +load
|
||
|
||
\ pointer and rstack-handl. clv23feb88
|
||
|
||
( | ) User ep \ error-return-pointer
|
||
User err err off \ points to message
|
||
|
||
|
||
Create: uncatch r> r> ep ! rp! ;
|
||
|
||
( |) Variable catchrp
|
||
|
||
: <catch r> rp@ catchrp ! >r ; restrict
|
||
|
||
: catch> r> ep @ >r rp@ ep !
|
||
catchrp @ >r uncatch >r >r ; restrict
|
||
|
||
: move>r ( from count--) r> -rot
|
||
rp@ over - under rp! cmove >r ;
|
||
restrict
|
||
|
||
: r>move ( to count--) r> -rot
|
||
under rp@ -rot cmove rp@ + rp! >r ;
|
||
restrict
|
||
|
||
|
||
|
||
\ throw (exits (fails (#fails clv07feb88
|
||
|
||
: throw rdrop err @ 0= ?exit
|
||
ep @ rp! r> ep ! ; restrict
|
||
|
||
: (exits r> dup 2+ >r <catch catch>
|
||
dup @ + >r ; restrict
|
||
|
||
: (fails r> <catch dup 2+ >r catch>
|
||
dup @ + >r ; restrict
|
||
|
||
create: getargs
|
||
s0 @ r> - sp! sp@ r@ 1+ 2* r>move ;
|
||
|
||
: (#fails ( ..args.. n--..args..)
|
||
>r r@ sp@ s0 @ swap -
|
||
sp@ r> 2+ 2*
|
||
( .args. n depth from bytes)
|
||
r> <catch dup 2+ >r -rot move>r
|
||
nip nip getargs >r catch>
|
||
dup @ + >r ; restrict
|
||
|
||
|
||
|
||
|
||
\ FAILS EXITS #FAILS END clv07feb88
|
||
|
||
: EXITS compile (exits >mark -1 ;
|
||
immediate restrict
|
||
: FAILS [compile] BEGIN compile (fails
|
||
>mark -1 2swap ;
|
||
immediate restrict
|
||
: #FAILS ( n--)
|
||
[compile] BEGIN compile (#fails
|
||
>mark -1 2swap ;
|
||
immediate restrict
|
||
: END dup 2 = IF 2drop THEN
|
||
abs 1 ?pairs
|
||
compile throw >resolve ;
|
||
immediate restrict
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ (error (abort" quit clv23feb88
|
||
|
||
| : err! ( flag--)
|
||
rdrop ( deletes (ABORT" ) "lit swap
|
||
IF err !
|
||
errorhandler perform throw THEN
|
||
drop ; restrict
|
||
|
||
: n(abort" rdrop err! ; restrict
|
||
: n(err" rdrop err! ; restrict
|
||
|
||
: .err space here .name
|
||
err @ count type space
|
||
." AT:" err @ u. ?cr ;
|
||
|
||
: nquit rdrop r0 @ rp!
|
||
FAILS standardi/o .err
|
||
blk @ ?dup IF scr ! >in @ r# ! THEN
|
||
err @ 2- @ ['] (abort" =
|
||
IF clearstack THEN
|
||
REPEAT THEN
|
||
err off [compile] [ 'quit ;
|
||
|
||
\\ die RDROP sind nur wg. Patch
|
||
|
||
\ fehlerbeh. beispiel clv07feb88
|
||
|
||
: devon ." device ist on " ;
|
||
: devoff ." device ist off " ;
|
||
|
||
: mistake? ." Fehler=y " key capital
|
||
Ascii Y = abort" aborted" ;
|
||
|
||
: tf ." t-1 " devon
|
||
FAILS ." t-f " devoff END
|
||
." t-2 " mistake?
|
||
." t-3 " devoff ;
|
||
|
||
: te ." t-1 " devon
|
||
EXITS ." t-f " devoff END
|
||
." t-2 " mistake? ." t-3 " ;
|
||
|
||
|
||
: t cr ." mit FAILS:" tf cr tf cr
|
||
cr ." mit EXITS:" te cr te ;
|
||
|
||
|
||
|
||
|
||
|
||
\ fhler test #FAILS clv07feb88
|
||
|
||
\ Fuer Neugierige:
|
||
: .rs r0 @ rp@
|
||
DO cr I dup . ." :" @ dup .
|
||
dup 2- @ uncatch 2- @ =
|
||
IF ." -" 2- ELSE @ THEN >name .name
|
||
2 +LOOP ;
|
||
|
||
|
||
: .stack ." Stack:" .s ;
|
||
: action ( n1 n2 n3--nSum)
|
||
." action:" .stack + + mistake? ;
|
||
|
||
: t#fails 1 2 3
|
||
3 #FAILS ." F:" .stack
|
||
." retry=y?" key Ascii y -
|
||
UNTIL END
|
||
action ." successfull:" .stack drop ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ uniR/W clv15mar88
|
||
|
||
\ Zum Kopieren Disk/Tape
|
||
|
||
\needs Code .( ?!! Code !!?) quit
|
||
\needs s#>t+s (16 $46ee Alias s#>t+s C)
|
||
\needs 2@ : 2@ dup 2+ @ swap @ ;
|
||
|
||
1 6 +thru \ diverse r/w's
|
||
7 8 +thru \ backup
|
||
|
||
' uniR/W Is r/w
|
||
' patch-sbufs ' save-buffers >body !
|
||
|
||
: uniIni supertape r/wf on virInit ;
|
||
uniIni
|
||
' uniIni ' drvinit >body !
|
||
|
||
save
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ tapeR/W clv14mar88
|
||
|
||
: nofile ( f--) abort" nofile" ;
|
||
| Create blk. ," blk."
|
||
Variable r/wf r/wf on
|
||
|
||
\ greift auf interne Block-struktur!!!
|
||
\ blk $ffff laedt naechsten block
|
||
|
||
: ?r/wf ( rw/f--) dup r/wf @ -
|
||
IF ." Press stop" key drop THEN r/wf ! ;
|
||
|
||
: tapeR/W ( adr blk file r/wf -- flag)
|
||
swap nofile dup ?r/wf
|
||
IF swap dup 2- 2- blk. count bload
|
||
over 2- off \ no flags
|
||
over - b/blk -
|
||
abort" block-crash"
|
||
over true = IF 2drop false exit THEN
|
||
2- 2- @ 2dup -
|
||
IF ." not" u. ." ! " u.
|
||
true exit THEN 2drop
|
||
ELSE drop dup 2- 2- swap b/blk +
|
||
blk. count bsave THEN false ;
|
||
|
||
\ blk# nofile ?dev clv14mar88
|
||
|
||
\ : blk# ( --blk) prev @ 2+ 2+ @ ;
|
||
|
||
$FFB1 >label LISTEN $FF93 >label SECOND
|
||
$FFAE >label UNLSN
|
||
| Code (dev?
|
||
sp x) lda
|
||
$90 stx (16 $ae sta rom C) LISTEN jsr
|
||
\ wg. Fehler im Betr.syst.
|
||
$60 # lda SECOND jsr UNLSN jsr
|
||
0 # ldx 1 # ldy (16 ram C)
|
||
$90 lda
|
||
sp x) sta sp )y sta Next jmp end-code
|
||
|
||
: dev? ( dev -- flag)
|
||
i/o lock (dev? 0= i/o unlock ;
|
||
|
||
\\
|
||
: ?device ( dev --)
|
||
dev? ?exit
|
||
buffers unlock
|
||
true abort" no device" ;
|
||
|
||
|
||
\ leer clv14mar88
|
||
|
||
\ simuliert mehrere Laufwerke auf Drv#0
|
||
|
||
Variable #drv
|
||
Variable lastdrv
|
||
|
||
: virInit 4 0
|
||
DO I 8 + dev? 0=
|
||
IF I #drv ! leave THEN LOOP
|
||
lastdrv on ;
|
||
|
||
: virDrv ( drv--)
|
||
dup 1 #drv @ uwithin
|
||
IF (drv ! exit THEN
|
||
(drv off lastdrv @ over -
|
||
IF cr ." Insert disk#" dup u.
|
||
lastdrv ! key THEN drop ;
|
||
|
||
: virBlk ( blk--blkOnDrv)
|
||
blk/drv /mod virDrv ;
|
||
|
||
|
||
|
||
|
||
\ diskR/W clv14mar88
|
||
|
||
| $100 Constant b/sek
|
||
|
||
: 1551r/w ( adr blk file r/wf -- flag)
|
||
swap nofile -rot virBlk
|
||
diskopen IF drop nip exit THEN
|
||
0 swap 2* 2* 4 bounds
|
||
DO drop 2dup I rot
|
||
IF s#>t+s readsector
|
||
ELSE s#>t+s writesector THEN
|
||
>r b/sek + r> dup IF LEAVE THEN
|
||
LOOP -rot 2drop diskclose ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ dirR/W clv15mar88
|
||
|
||
\ Benutzt blk als Laufwerksnummer
|
||
|
||
: dirR/W ( adr blk file r/wf -- flag)
|
||
-rot nofile virDrv ( adr r/wf)
|
||
diskopen IF drop exit THEN
|
||
3 0 \ Directorie nur $300 lang !!
|
||
DO ( adr r/wf) 2dup
|
||
IF &18 I readsector
|
||
ELSE &18 I writesector THEN
|
||
IF 2drop false false leave THEN
|
||
swap b/sek + swap LOOP
|
||
drop 0= diskclose ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ uniR/W clv15mar88
|
||
|
||
4 Constant tape
|
||
$f Constant dir
|
||
|
||
: info 2 pick IF ." r:" ELSE ." w:" THEN
|
||
2dup 3 u.r ." :" 3 u.r 10 spaces
|
||
cr $91 ( CurUp ) con! ;
|
||
|
||
: uniR/W ( adr blk file r/wf -- flag)
|
||
2 pick blk/drv /mod info
|
||
dir case?
|
||
IF tape case? IF tapeR/W exit THEN
|
||
-rot 3 roll drop dirR/W exit THEN
|
||
|
||
tape case?
|
||
IF $ff = IF rot drop true -rot THEN
|
||
tapeR/W exit THEN
|
||
dup 4 u< IF drop drop 1551r/w exit THEN
|
||
drop drop ramR/W ;
|
||
|
||
|
||
|
||
|
||
|
||
\ sort-buffers clv15mar88
|
||
|
||
: du> ( d1 d2 --flag)
|
||
rot 2dup -
|
||
IF u< nip nip exit THEN
|
||
drop drop u> ;
|
||
| : swap? ( adr--flag)
|
||
@ dup 2+ @ -1 =
|
||
IF drop false exit THEN
|
||
dup 2+ 2@ rot @ 2+ 2@ du> ;
|
||
| : swapbufs ( adr--)
|
||
dup @ dup @ dup @ >r swap r>
|
||
over ! over ! over ! drop ;
|
||
|
||
: sort-buffers prev
|
||
BEGIN dup @ @ 0= IF drop exit THEN
|
||
dup swap?
|
||
IF swapbufs prev ELSE @ THEN REPEAT ;
|
||
|
||
: patch-sbufs
|
||
sort-buffers
|
||
[ ' save-buffers >body @ , ] ;
|
||
|
||
|
||
|
||
\ backup clv14mar88
|
||
|
||
|
||
: backup ( fromDrv toDrv--)
|
||
lastdrv on
|
||
over dir >drive
|
||
over dir >drive copy
|
||
>r >r
|
||
0 r@ >drive
|
||
blk/drv 1- r> >drive
|
||
0 r> >drive convey ;
|
||
|
||
|
||
\\
|
||
Drv 0..3: reelle/virtuelle Disks
|
||
Drv 4 : tape-DEVICE
|
||
Drv 15 : Directories
|
||
|
||
\\
|
||
supertape 0 4 backup \ Disk-->Tape
|
||
supertape 4 0 backup \ Tape-->Disk
|
||
|
||
0 1 backup \ Disk-->Disk
|
||
|
||
|
||
leer clv14mar88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
leer clv02feb88
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM:Terminal Loadscreen cclv28feb89
|
||
|
||
|
||
|
||
|
||
|
||
1 &11 +thru \ serial interface
|
||
&12 +load \ cbm ascii conversion
|
||
&13 +load \ tx more than byte
|
||
&14 +load \ dumb terminal
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM:Serielle Schnittstelle clv28feb89
|
||
|
||
|
||
| Variable INT \ location of interrupt
|
||
|
||
| $fd00 Constant Port@ \ 6551
|
||
| $fd10 Constant uport@ \ cts-port
|
||
| Variable ctrl
|
||
| $314 Constant sint@
|
||
| sint@ @ >Label oldSint
|
||
| $fcbe >Label intEnd \ system-depend
|
||
\ interrupt end routine
|
||
|
||
Create Queue 0 , $80 allot
|
||
|
||
|
||
|
||
\\ 0 1 2 130 byte adr
|
||
len out 128-byte-queue
|
||
len ::= number of characters queued
|
||
out ::= relative address of next
|
||
output character
|
||
(len+out)mod 128 = relative address
|
||
of first byte empty
|
||
|
||
\ TM:Serielle Schnittstelle clv8feb89
|
||
|
||
: tx ( c -- ) port@ c! ;
|
||
|
||
: tx? ( -- f )
|
||
port@ 1+ c@ $10 and 0<>
|
||
uport@ c@ $02 and 0<>
|
||
and ;
|
||
|
||
\\
|
||
|
||
| Label no 0 # lda
|
||
| Label pushaa sp 2dec sp )y sta
|
||
puta jmp end-code
|
||
|
||
Code tx? ( -- f )
|
||
port@ 1+ lda $10 # and no beq \ ok?
|
||
uport@ lda $02 # and no beq \ cts?
|
||
| Label yes $ff # lda pushaa bne
|
||
end-code
|
||
|
||
Code tx ( c -- )
|
||
port@ sta pop jmp end-code
|
||
|
||
|
||
\ TM:Serielle Schnittstelle clv28feb89
|
||
|
||
: +dtr port@ 2+ dup c@ 1 or swap c! ;
|
||
|
||
: -dtr port@ 2+ dup c@ $fe and swap c! ;
|
||
|
||
: +rts port@ 2+ dup c@ $04 or swap c! ;
|
||
|
||
: -rts port@ 2+ dup c@ $f3 and swap c! ;
|
||
|
||
\\
|
||
|
||
Code +dtr
|
||
port@ 2+ lda $1 # or port@ 2+ sta
|
||
next jmp end-code
|
||
|
||
Code -dtr
|
||
port@ 2+ lda $fe # and port@ 2+ sta
|
||
next jmp end-code
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM:Serielle Schnittstelle clv8feb89
|
||
|
||
| Label s-int
|
||
port@ 1+ lda
|
||
0>= ?[ oldSint jmp ]?
|
||
$08 # and 0= ?[ intEnd jmp ]?
|
||
tya pha
|
||
queue lda $68 # cmp
|
||
0>= ?[ port@ 2+ lda $f2 # and
|
||
port@ 2+ sta ]? \ -dtr -rts
|
||
clc queue 1+ adc
|
||
$7f # and tay queue inc
|
||
port@ lda queue 2+ ,y sta
|
||
pla tay intEnd jmp end-code
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM:Serielle Schnittstelle clv8feb89
|
||
|
||
: rx? ( -- f ) queue c@ ;
|
||
Code sei sei next jmp end-code
|
||
Code cli cli next jmp end-code
|
||
|
||
: rx ( -- c )
|
||
queue c@ 0=
|
||
IF +dtr +rts BEGIN queue c@ UNTIL
|
||
THEN
|
||
sei queue dup 1+ c@ + 2+ c@
|
||
-1 queue +! 1 queue 1+ +! cli ;
|
||
|
||
\\
|
||
Code rx? ( -- f )
|
||
queue lda pushaa jmp end-code
|
||
|
||
Code rx ( -- c )
|
||
queue lda
|
||
0= ?[ port@ 2+ lda 5 # or
|
||
port@ 2+ sta \ +dtr +rts
|
||
[[ queue lda 0<> ?] ]?
|
||
sei queue 1+ ldy queue 2+ ,y lda
|
||
queue dec queue 1+ inc
|
||
cli push0a jmp end-code
|
||
\ TM:Serielle Schnittstelle clv228feb89
|
||
|
||
: s-init s-int sint@ ! \ new interrupt
|
||
ctrl @ port@ 2+ ! +dtr +rts ;
|
||
|
||
: bye 0 port@ 2+ c! bye ;
|
||
\ -dtr -rts -rxint
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ clv228feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM: ctrl: clv228feb89
|
||
|
||
| : ctrl: ( adr 8b -- ) Create not c, ,
|
||
does> ( 8b -- )
|
||
Create dup c@ c, 1+ @ , c,
|
||
does> dup c@ over 1+ @ c@ and
|
||
over 3+ c@ or swap 1+ @ c! ;
|
||
|
||
\ The only meta-defining-word I ever saw
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM: baudrate clclv8feb89
|
||
|
||
| ctrl 1+ %00011111 ctrl: bd:
|
||
|
||
$11 bd: 50baud
|
||
$12 bd: 75baud
|
||
$13 bd: 110baud
|
||
$14 bd: 135baud
|
||
$15 bd: 150baud
|
||
$16 bd: 300baud
|
||
$17 bd: 600baud
|
||
$18 bd: 1200baud
|
||
$19 bd: 1800baud
|
||
$1a bd: 2400baud
|
||
$1b bd: 3600baud
|
||
$1c bd: 4800baud
|
||
$1d bd: 7200baud
|
||
$1e bd: 9600baud
|
||
$1f bd: 19200baud
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM: bits stopbits clv228feb89
|
||
|
||
| ctrl 1+ %01100000 ctrl: ln:
|
||
|
||
$00 ln: 8bits
|
||
$20 ln: 7bits
|
||
$40 ln: 6bits
|
||
$60 ln: 5bits
|
||
|
||
| ctrl 1+ %10000000 ctrl: st:
|
||
|
||
$80 st: 1stop
|
||
$00 st: xstop
|
||
|
||
\\ xStop gives: 8 bit+1 parity -> 1stop
|
||
5 bit+0 parity -> 1.5
|
||
other -> 2stop
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM: parity clv228feb89
|
||
|
||
| ctrl %11100000 ctrl: pa:
|
||
|
||
$00 pa: noParity
|
||
$80 pa: oddParity
|
||
$c0 pa: evenParity
|
||
$a0 pa: 1Parity
|
||
$e0 pa: 0Parity
|
||
|
||
| ctrl %00010000 ctrl: ec:
|
||
|
||
$10 ec: +echo \ only if -rts !!
|
||
$00 ec: -echo
|
||
|
||
|
||
\\ 1parity means:
|
||
send and receive high parity
|
||
but no parity-check
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ TM: cbm>asc asc>cbm cclv28feb89
|
||
|
||
: cbm>asc ( c -- c' )
|
||
dup $41 $5b uwithin
|
||
IF $20 + exit THEN
|
||
dup $61 $7b uwithin
|
||
IF $60 + exit THEN
|
||
dup $c1 $db uwithin
|
||
IF $7f and exit THEN
|
||
$dc case? IF $7c exit THEN
|
||
$7c case? IF $dc exit THEN
|
||
$14 case? IF $08 exit THEN
|
||
$08 case? IF $14 exit THEN ;
|
||
|
||
: asc>cbm ( c -- c' )
|
||
dup $41 $5b uwithin
|
||
IF $80 or exit THEN
|
||
dup $61 $7b uwithin
|
||
IF $20 - exit THEN
|
||
dup $c1 $db uwithin
|
||
IF $60 - exit THEN
|
||
$dc case? IF $7c exit THEN
|
||
$7c case? IF $dc exit THEN
|
||
$14 case? IF $08 exit THEN
|
||
$08 case? IF $14 exit THEN ;
|
||
\ TM: txType txblocks clv28feb89
|
||
|
||
$1a Constant #EOF
|
||
|
||
| : ?break key? abort" ***aborted***" ;
|
||
|
||
|
||
| : ?tx ( c -- )
|
||
BEGIN ?break tx? UNTIL
|
||
cbm>asc #EOF case? IF $ff THEN tx ;
|
||
|
||
: txType ( adr count -- )
|
||
bounds DO I c@ ?tx LOOP ;
|
||
|
||
: txblocks ( fromBlk toBlk -- )
|
||
2dup u> abort" nein!" s-init
|
||
1+ swap DO I block b/blk txType LOOP
|
||
#EOF ?tx ;
|
||
|
||
: txDisk 0 $a9 txBlocks ;
|
||
|
||
|
||
|
||
|
||
|
||
\ TM: dumb Terminal clclv8feb89
|
||
|
||
\ Sample for an easy Terminal
|
||
|
||
\needs #LF $0a Constant #LF
|
||
|
||
| : ?rx pause rx? 0= ?exit rx asc>cbm
|
||
#LF case? IF cr exit THEN
|
||
#CR case? IF row 0 at exit THEN
|
||
#BS case? IF del exit THEN emit ;
|
||
|
||
|
||
| : ?tx ( c --)
|
||
cbm>asc BEGIN ?rx tx? UNTIL tx ;
|
||
|
||
300baud noparity 1stop 8bits -echo
|
||
|
||
: dumb s-init
|
||
BEGIN BEGIN ?rx key? UNTIL
|
||
key $1b case? IF -dtr exit THEN
|
||
#cr case? IF #CR ?tx #LF THEN
|
||
?tx REPEAT ;
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv20may87
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
clv8feb89
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\\ zu fehlerbeh. clv16nov87
|
||
|
||
ziel:
|
||
CATCH (catch ---+
|
||
... ... !
|
||
TO branch -- ! ---+
|
||
uncatch <-+ !
|
||
... ... !
|
||
ENDCATCH throw !
|
||
uncatch <------+
|
||
|
||
|
||
|
||
ONERROR (catch ----+
|
||
branch --- ! --+
|
||
uncatch <--+ !
|
||
... ... !
|
||
ENDONERROR throw <------+
|
||
... ...
|
||
( ; macht uncatch )
|
||
|
||
|
||
|
||
|
||
|
||
\\ zu fehler clv16nov87
|
||
|
||
TRY <#> put#
|
||
(catch --
|
||
<word> <word>
|
||
branch --
|
||
uncatch
|
||
... ...
|
||
RETRY get
|
||
branch --
|
||
unstack
|
||
uncatch
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
( .status push load clv20may87
|
||
|
||
|
||
Defer .status ' noop Is .status
|
||
|
||
| Create pull 0 ] r> r> ! ;
|
||
|
||
: push ( addr -- )
|
||
r> swap dup >r @ >r pull >r >r ;
|
||
restrict
|
||
|
||
: load ( blk --)
|
||
?dup 0= ?exit blk push blk !
|
||
>in push >in off
|
||
.status interpret ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|