( ८¡à §®¢ ¨¥ ç¨á«®¢ëå «¨â¥à «®¢ ¯à¨ ¨â¥à¯à¥â 樨.
-¥§ ¢¨á¨¬ë¥ ®¯à¥¤¥«¥¨ï.
Copyright [C] 1992-1999 A.Cherezov ac@forth.org
८¡à §®¢ ¨¥ ¨§ 16-à §à冷£® ¢ 32-à §àï¤ë© ª®¤ - 1995-96££
¥¢¨§¨ï - á¥âï¡àì 1999
)
: ?LITERAL1 ( T -> ... )
\ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
0 0 ROT COUNT
OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
>NUMBER ." N{" 2DUP TYPE ." }"
DUP 1 > IF -2001 THROW THEN \ ABORT" -?"
IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??"
R> IF DNEGATE THEN
[COMPILE] 2LITERAL
ELSE DROP D>S
R> IF NEGATE THEN
[COMPILE] LITERAL
THEN
;
: ?SLITERAL1 ( c-addr u -> ... )
\ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
0 0 2SWAP
OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
>NUMBER
DUP 1 > IF -2001 THROW THEN \ ABORT" -?"
IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??"
R> IF DNEGATE THEN
[COMPILE] 2LITERAL
ELSE DROP D>S
R> IF NEGATE THEN
[COMPILE] LITERAL
THEN
;
: HEX-LITERAL ( T -> ... )
BASE @ >R HEX
0 0 ROT COUNT 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL
R> BASE !
;
: HEX-SLITERAL ( T -> ... )
BASE @ >R HEX
0 0 2SWAP 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL
R> BASE !
;
: ?LITERAL2 ( c-addr -- ... )
( à áè¨à¥ë© ¢ ਠâ ?LITERAL1:
¥á«¨ áâப - ¥ ç¨á«®, â® ¯ëâ ¥¬áï âà ªâ®¢ âì ¥ñ
ª ª ¨¬ï ä ©« ¤«ï ¢â®-INCLUDED)
DUP COUNT 2 MIN S" 0x" COMPARE 0=
IF HEX-LITERAL EXIT THEN
DUP >R ['] ?LITERAL1 CATCH
IF DROP R> COUNT
OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( ã¡à « ª ¢ë窨, ¥á«¨ ¥áâì)
2DUP + 0 SWAP C!
['] INCLUDED CATCH
DUP 2 = OVER 3 = OR ( ä ©« ¥ ©¤¥ ¨«¨ ¯ãâì ¥ ©¤¥ )
IF -2003 THROW \ ABORT" -???"
ELSE THROW THEN
ELSE RDROP
THEN
;
: ?SLITERAL2 ( c-addr u -- ... )
( à áè¨à¥ë© ¢ ਠâ ?SLITERAL1:
¥á«¨ áâப - ¥ ç¨á«®, â® ¯ëâ ¥¬áï âà ªâ®¢ âì ¥ñ
ª ª ¨¬ï ä ©« ¤«ï ¢â®-INCLUDED)
2DUP 2 MIN S" 0x" COMPARE 0=
IF HEX-SLITERAL EXIT THEN
2DUP 2>R ['] ?SLITERAL1 CATCH
IF 2DROP 2R>
OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( ã¡à « ª ¢ë窨, ¥á«¨ ¥áâì)
2DUP + 0 SWAP C!
['] INCLUDED CATCH
DUP 2 = OVER 3 = OR ( ä ©« ¥ ©¤¥ ¨«¨ ¯ãâì ¥ ©¤¥ )
IF -2003 THROW \ ABORT" -???"
ELSE THROW THEN
ELSE 2R> 2DROP
THEN
;