Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ( à¥®¡à §®¢ ­¨¥ ç¨á«®¢ëå «¨â¥à «®¢ ¯à¨ ¨­â¥à¯à¥â æ¨¨.
  2.   Ž‘-­¥§ ¢¨á¨¬ë¥ ®¯à¥¤¥«¥­¨ï.
  3.   Copyright [C] 1992-1999 A.Cherezov ac@forth.org
  4.   à¥®¡à §®¢ ­¨¥ ¨§ 16-à §à來®£® ¢ 32-à §àï¤­ë© ª®¤ - 1995-96££
  5.   ¥¢¨§¨ï - ᥭâï¡àì 1999
  6. )
  7.  
  8. : ?LITERAL1 ( T -> ... )
  9.   \ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
  10.   0 0 ROT COUNT
  11.   OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
  12.   >NUMBER ." N{" 2DUP TYPE ." }"
  13.   DUP 1 > IF -2001 THROW THEN \ ABORT" -?"
  14.   IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??"
  15.        R> IF DNEGATE THEN
  16.        [COMPILE] 2LITERAL
  17.   ELSE DROP D>S
  18.        R> IF NEGATE THEN
  19.        [COMPILE] LITERAL
  20.   THEN
  21. ;
  22. : ?SLITERAL1 ( c-addr u -> ... )
  23.   \ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
  24.   0 0 2SWAP
  25.   OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
  26.   >NUMBER
  27.   DUP 1 > IF -2001 THROW THEN \ ABORT" -?"
  28.   IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??"
  29.        R> IF DNEGATE THEN
  30.        [COMPILE] 2LITERAL
  31.   ELSE DROP D>S
  32.        R> IF NEGATE THEN
  33.        [COMPILE] LITERAL
  34.   THEN
  35. ;
  36. : HEX-LITERAL ( T -> ... )
  37.   BASE @ >R HEX
  38.   0 0 ROT COUNT 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL
  39.   R> BASE !
  40. ;
  41. : HEX-SLITERAL ( T -> ... )
  42.   BASE @ >R HEX
  43.   0 0 2SWAP 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL
  44.   R> BASE !
  45. ;
  46.  
  47. : ?LITERAL2 ( c-addr -- ... )
  48.   ( à áè¨à¥­­ë© ¢ à¨ ­â ?LITERAL1:
  49.     ¥á«¨ áâப  - ­¥ ç¨á«®, â® ¯ëâ ¥¬áï âࠪ⮢ âì ¥ñ
  50.     ª ª ¨¬ï ä ©«  ¤«ï  ¢â®-INCLUDED)
  51.   DUP COUNT 2 MIN S" 0x" COMPARE 0=
  52.   IF HEX-LITERAL EXIT THEN
  53.   DUP >R ['] ?LITERAL1 CATCH
  54.   IF   DROP R> COUNT
  55.        OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( ã¡à « ª ¢ë窨, ¥á«¨ ¥áâì)
  56.        2DUP + 0 SWAP C!
  57.        ['] INCLUDED CATCH
  58.        DUP 2 = OVER 3 = OR ( ä ©« ­¥ ­ ©¤¥­ ¨«¨ ¯ãâì ­¥ ­ ©¤¥­ )
  59.        IF -2003 THROW \ ABORT"  -???"
  60.        ELSE THROW THEN
  61.   ELSE RDROP
  62.   THEN
  63. ;
  64. : ?SLITERAL2 ( c-addr u -- ... )
  65.   ( à áè¨à¥­­ë© ¢ à¨ ­â ?SLITERAL1:
  66.     ¥á«¨ áâப  - ­¥ ç¨á«®, â® ¯ëâ ¥¬áï âࠪ⮢ âì ¥ñ
  67.     ª ª ¨¬ï ä ©«  ¤«ï  ¢â®-INCLUDED)
  68.   2DUP 2 MIN S" 0x" COMPARE 0=
  69.   IF HEX-SLITERAL EXIT THEN
  70.   2DUP 2>R ['] ?SLITERAL1 CATCH
  71.   IF   2DROP 2R>
  72.        OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( ã¡à « ª ¢ë窨, ¥á«¨ ¥áâì)
  73.        2DUP + 0 SWAP C!
  74.        ['] INCLUDED CATCH
  75.        DUP 2 = OVER 3 = OR ( ä ©« ­¥ ­ ©¤¥­ ¨«¨ ¯ãâì ­¥ ­ ©¤¥­ )
  76.        IF -2003 THROW \ ABORT"  -???"
  77.        ELSE THROW THEN
  78.   ELSE 2R> 2DROP
  79.   THEN
  80. ;
  81.