Subversion Repositories Kolibri OS

Rev

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

  1.  
  2. REQUIRE [DEFINED] lib/include/tools.f
  3.  
  4. \ Ðàñïå÷àòàòü ñïèñîê ñëîâàðåé.
  5. : VOCS
  6.         VOC-LIST
  7.         BEGIN @ DUP WHILE
  8.                 DUP CELL+ VOC-NAME.
  9.                 DUP 3 CELLS + @ \ wid ïðåäêà
  10.                 ?DUP IF ."  defined in "  VOC-NAME.
  11.                      ELSE ."  is the main vocabulary"
  12.                      THEN CR
  13.         REPEAT
  14.         DROP
  15. ;
  16.  
  17. 0x200 VALUE MAX-WORD-SIZE
  18.  
  19. C" NEAR_NFA" FIND NIP 0=
  20. [IF] : NEAR_NFA ( addr -- NFA addr | 0 addr ) DUP  WordByAddr DROP 1- SWAP
  21.         2DUP 1000 - U< IF NIP 0 SWAP THEN ;
  22. [THEN]
  23.  
  24. \ Opposite to CDR, might be slow!
  25.  \ It does not take wordlists into account.
  26. : NextNFA ( nfa1 -- nfa2 | 0 )
  27.     NEAR_NFA SWAP >R
  28.     BEGIN
  29.       1+ NEAR_NFA ( nfa addr )
  30.       OVER 0 >
  31.       ROT R@ <> AND
  32.       OVER R@ - MAX-WORD-SIZE > OR
  33.     UNTIL
  34.  
  35.     DUP R> - MAX-WORD-SIZE >
  36.     IF DROP 0
  37.     ELSE  NEAR_NFA DROP
  38.     THEN
  39. ;
  40.  
  41. : NFAInVoc? ( nfa voc -- f )
  42.     @ \ last nfa
  43.     BEGIN  ( nfa 'nfa )
  44.      DUP
  45.    WHILE
  46.      2DUP = IF 2DROP TRUE EXIT THEN
  47.      CDR
  48.    REPEAT 2DROP 0
  49. ;
  50.  
  51. : VocByNFA ( nfa -- wid | 0 )
  52.    VOC-LIST
  53.    BEGIN @ DUP WHILE ( nfa voc )
  54.           2DUP CELL+ NFAInVoc?
  55.           IF
  56.              NIP CELL+ EXIT
  57.           THEN
  58.    REPEAT
  59.    2DROP 0
  60. ;
  61.