| \ idea: Gerald Wodni |
\ idea: Gerald Wodni |
| |
|
| : addr? ( addr -- flag ) |
: addr? ( addr -- flag ) |
| TRY @ IFERROR 2drop false nothrow ELSE drop true THEN ENDTRY ; |
TRY c@ IFERROR 2drop false nothrow ELSE drop true THEN ENDTRY ; |
| |
|
| : string? ( addr u -- flag ) |
: string? ( addr u -- flag ) |
| TRY bounds ?DO I c@ bl < IF -1 throw THEN LOOP |
TRY dup #80 u> throw bounds ?DO I c@ bl < IF -1 throw THEN LOOP |
| IFERROR 2drop drop false nothrow ELSE true THEN ENDTRY ; |
IFERROR 2drop drop false nothrow ELSE true THEN ENDTRY ; |
| |
|
| : .string. ( addr u -- ) |
: .string. ( addr u -- ) |
| |
|
| : smart.s. ( n -- ) |
: smart.s. ( n -- ) |
| smart.s-skip @ smart.s-skip off IF drop EXIT THEN |
smart.s-skip @ smart.s-skip off IF drop EXIT THEN |
| over r> i swap >r - pick 2dup string? IF |
over r> i swap >r - |
| |
dup 1 = IF false ELSE pick 2dup string? THEN IF |
| .string. smart.s-skip on |
.string. smart.s-skip on |
| ELSE drop dup addr? IF .addr. |
ELSE drop dup addr? IF .addr. |
| ELSE . THEN |
ELSE . THEN |