Moontalk server and client (provided by many parties)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- require util.4th
- require logger.4th
-
- \ The standard output will only be redirected in application code,
- \ not globally in gforth.
-
- \ We always log to a file but we have an optional hook.
-
- true variable! (stdout)
- true variable! (stdout-logger)
- true variable! (stdout-hook)
-
- : oldtype type ;
- : oldemit emit ;
-
- defer (emit)
- defer (type)
-
- : type ( str -- )
- (stdout) @ IF 2dup oldtype THEN
- (stdout-logger) @ IF 2dup logger.log THEN
- (stdout-hook) @ IF 2dup (type) THEN
- 2drop ;
-
- create (emit-buffer) 1 chars allot
- : emit ( c -- )
- (emit-buffer) c! (emit-buffer) 1 chars type ;
-
- : ." ( "str" -- )
- [char] " parse
- state @ IF
- ]] sliteral type [[
- ELSE
- type
- THEN ; immediate
- : space ( -- ) bl emit ;
- : cr ( -- ) 10 emit ;
- : . ( n -- )
- to-string type bl emit ;
- : .s ( -- )
- ." < " depth . ." > "
- depth 0> IF
- depth 0
- BEGIN 2dup > WHILE 1+ rot >r REPEAT
- drop 0
- BEGIN 2dup > WHILE 1+ r> dup . -rot REPEAT
- 2drop
- THEN ;
-
- : stdout ( flag -- ) (stdout) ! ;
- : stdout-logger ( flag -- ) (stdout-logger) ! ;
- : stdout-hook ( flag -- ) (stdout-hook) ! ;
-
- : stdout-hook-reset ( -- )
- ['] drop IS (emit)
- ['] 2drop is (type) ;
-
- : stdout-hook-emit ( xt -- )
- \ xt ( c -- )
- is (emit) ;
-
- : stdout-hook-type ( xt -- )
- \ xt ( str -- )
- is (type) ;
-
- stdout-hook-reset
|