Subversion Repositories Kolibri OS

Rev

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

  1. \ $Id: zstring.f,v 1.1 2003/01/18 09:02:11 anfilat Exp $
  2. \ ã«ì-áâப¨. ’¥å­®«®£¨ï ¢§ïâ  ¨§ ~yz\common.f
  3.  
  4. \ Š®¯¨àã¥â áâபã addr u ¯®  ¤à¥áã z. ‚ ª®­¥æ áâப¨ § ¯¨á뢠¥â 0
  5. : CZMOVE ( a # z --) 2DUP + >R SWAP CMOVE R> 0 SWAP C! ;
  6.  
  7. : ALITERAL  R> COUNT OVER + 1+ >R ;
  8.  
  9. \ VOCABULARY ZStrSupport
  10. \ GET-CURRENT ALSO ZStrSupport DEFINITIONS
  11.  
  12. USER toadr  USER fromadr  USER counter
  13. : zchar ( --c/0) counter @ 1 <
  14.   IF 0 ELSE -1 counter +! fromadr @ C@ fromadr 1+! THEN ;
  15. : unchar  counter 1+! -1 fromadr +! ;
  16. : c> ( c--) toadr @ C!  toadr 1+! ;
  17. : escape ( c--c )
  18.   DUP [CHAR] n = IF DROP 10 ELSE
  19.     DUP [CHAR] r = IF DROP 13 ELSE
  20.       DUP [CHAR] t = IF DROP 9 ELSE
  21.        DUP [CHAR] b = IF DROP 8 ELSE
  22.         DUP [CHAR] q = IF DROP [CHAR] " ELSE
  23.          DUP [ CHAR 0 1- ] LITERAL OVER < SWAP [ CHAR 9 1+ ] LITERAL < AND IF
  24.            [CHAR] 0 -
  25.            BEGIN ( n) zchar DUP
  26.              [ CHAR 0 1- ] LITERAL OVER < SWAP [ CHAR 9 1+ ] LITERAL < AND
  27.            WHILE
  28.              ( n c) [CHAR] 0 - SWAP 10 * +
  29.            REPEAT
  30.            0<> IF unchar THEN
  31.          THEN
  32.        THEN
  33.       THEN
  34.      THEN
  35.    THEN
  36.  THEN
  37. ;
  38. : ESC-CZMOVE ( a # to --)
  39.  toadr ! counter ! fromadr !
  40.  BEGIN
  41.    zchar
  42.    DUP [CHAR] \ = IF DROP zchar escape THEN
  43.  DUP c> 0= UNTIL ;
  44.  
  45.  
  46. \ SET-CURRENT
  47.  
  48. : Z\LITERAL ( addr u -- \ a) \ ¢ ०¨¬¥ ¨­â¥à¯à¥â æ¨¨ ¢®§¢à é ¥â  ¤à¥á
  49. \ ¡ãä¥à  ¢ ¤¨­ ¬¨ç¥áª®© ¯ ¬ïâ¨. ãä¥à ¦¥« â¥«ì­® ®á¢®¡®¤¨âì
  50.  STATE @ IF
  51.    POSTPONE ALITERAL
  52.    HERE 1+ DUP >R ESC-CZMOVE
  53.    R@ ASCIIZ> NIP 2+ DUP ALLOT 2- R> 1- C!
  54.  ELSE
  55.    DUP 1+ ALLOCATE THROW DUP >R ESC-CZMOVE R>
  56.  THEN
  57. ; IMMEDIATE
  58.  
  59. : ZLITERAL ( addr u -- \ a)
  60.  STATE @ IF
  61.    POSTPONE ALITERAL
  62.    DUP C,
  63.    HERE SWAP DUP ALLOT MOVE 0 C,
  64.  ELSE
  65.    DUP 1+ ALLOCATE THROW DUP >R CZMOVE R>
  66.  THEN
  67. ; IMMEDIATE
  68.  
  69. \ ‘®§¤ ¥â áâபã, ®ª ­ç¨¢ îéãîáï ­ã«¥¬
  70. : Z" ( -->") [CHAR] " PARSE [COMPILE] ZLITERAL ; IMMEDIATE
  71.  
  72. \ ‘®§¤ ¥â 0-áâபã, ¯à¨ í⮬ ¯à¥®¡à §ã¥â ¥¥ ¯® C-¯à ¢¨« ¬.
  73. : Z\" ( -->") [CHAR] " PARSE [COMPILE] Z\LITERAL ; IMMEDIATE
  74.  
  75. \ PREVIOUS
  76.