forked from KolibriOS/kolibrios
09488af869
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
81 lines
2.4 KiB
Plaintext
81 lines
2.4 KiB
Plaintext
( �८¡à §®¢ ¨¥ ç¨á«®¢ëå «¨â¥à «®¢ ¯à¨ ¨â¥à¯à¥â 樨.
|
|
Ž‘-¥§ ¢¨á¨¬ë¥ ®¯à¥¤¥«¥¨ï.
|
|
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
|
|
;
|