| 2dup r@ read-file throw over <> abort" could not read whole file" |
2dup r@ read-file throw over <> abort" could not read whole file" |
| r> close-file throw ; |
r> close-file throw ; |
| |
|
| : slurp-fid { fid -- addr u } \ gforth |
: slurp-fid ( fid -- addr u ) \ gforth |
| \G @var{addr u} is the content of the file @var{fid} |
\G @var{addr u} is the content of the file @var{fid} |
| |
{ fid } |
| 0 0 begin ( awhole uwhole ) |
0 0 begin ( awhole uwhole ) |
| dup 1024 + dup >r extend-mem ( anew awhole uwhole R: unew ) |
dup 1024 + dup >r extend-mem ( anew awhole uwhole R: unew ) |
| rot r@ fid read-file throw ( awhole uwhole uread R: unew ) |
rot r@ fid read-file throw ( awhole uwhole uread R: unew ) |
| : compile-literal ( n -- ) |
: compile-literal ( n -- ) |
| postpone literal ; |
postpone literal ; |
| |
|
| |
: compile-compile-literal ( n -- ) |
| |
compile-literal postpone compile-literal ; |
| |
|
| |
: compile-2literal ( n1 n2 -- ) |
| |
postpone 2literal ; |
| |
|
| |
: compile-compile-2literal ( n1 n2 -- ) |
| |
compile-2literal postpone compile-2literal ; |
| |
|
| : [[ ( -- ) |
: [[ ( -- ) |
| \G switch from postpone state to compile state |
\G switch from postpone state to compile state |
| \ this is only a marker; it is never really interpreted |
\ this is only a marker; it is never really interpreted |
| compile-only-error ; immediate |
compile-only-error ; immediate |
| |
|
| : postponer ( c-addr u -- ) |
[ifdef] compiler1 |
| |
: postponer1 ( c-addr u -- ... xt ) |
| 2dup find-name dup if ( c-addr u nt ) |
2dup find-name dup if ( c-addr u nt ) |
| nip nip name>comp |
nip nip name>comp |
| 2dup [comp'] [[ d= if |
2dup [comp'] [[ d= if |
| 2drop ['] compiler is parser |
2drop ['] compiler1 is parser1 ['] noop |
| else |
else |
| postpone, |
['] postpone, |
| endif |
endif |
| else |
else |
| drop |
drop |
| 2dup snumber? dup if |
2dup 2>r snumber? dup if |
| 0> IF |
0> IF |
| swap postpone literal postpone compile-literal |
['] compile-compile-2literal |
| |
ELSE |
| |
['] compile-compile-literal |
| THEN |
THEN |
| postpone Literal postpone compile-literal |
2rdrop |
| 2drop |
|
| ELSE |
ELSE |
| drop no.extensions |
drop 2r> no.extensions |
| THEN |
THEN |
| then ; |
then ; |
| |
|
| : ]] ( -- ) |
: ]] ( -- ) |
| \ switch into postpone state |
\ switch into postpone state |
| ['] postponer is parser state on ; immediate restrict |
['] postponer1 is parser1 state on ; immediate restrict |
| |
|
| |
[then] |
| |
|
| \ f.rdp |
\ f.rdp |
| |
|
| ur nd - 1- dup { beforep } fsign + nexp 0 max >= and if |
ur nd - 1- dup { beforep } fsign + nexp 0 max >= and if |
| \ fixed-point notation |
\ fixed-point notation |
| c-addr ur beforep nexp - dup { befored } '0 push-right |
c-addr ur beforep nexp - dup { befored } '0 push-right |
| |
befored 1+ ur >= if \ <=1 digit left, will be pushed out by '.' |
| |
rf fabs f2* 0.1e nd s>d d>f f** f> if \ round last digit |
| |
'1 c-addr befored + 1- c! |
| |
endif |
| |
endif |
| c-addr beforep 1- befored min dup { beforez } 0 max bl fill |
c-addr beforep 1- befored min dup { beforez } 0 max bl fill |
| fsign if |
fsign if |
| '- c-addr beforez 1- 0 max + c! |
'- c-addr beforez 1- 0 max + c! |