1 \ @(#) strings.fth 98/01/26 1.2
\r
2 \ String support for PForth
\r
4 \ Copyright Phil Burk 1994
\r
6 ANEW TASK-STRINGS.FTH
\r
8 : -TRAILING ( c-addr u1 -- c-addr u2 , strip trailing blanks )
\r
12 2dup 1- chars + c@ bl =
\r
20 \ Structure of string table
\r
22 CREATE ( #strings #chars_max -- )
\r
25 DOES> ( index -- $addr )
\r
26 dup @ ( get #chars )
\r
30 \ Compare two strings
\r
31 : $= ( $1 $2 -- flag , true if equal )
\r
36 IF rot drop 0 -rot LEAVE
\r
42 : TEXT= ( addr1 addr2 count -- flag )
\r
47 IF rot drop 0 -rot LEAVE
\r
53 : TEXT=? ( addr1 count addr2 -- flag , for JForth compatibility )
\r
57 : $MATCH? ( $string1 $string2 -- flag , case INsensitive )
\r
62 : INDEX ( $string char -- false | address_char true , search for char in string )
\r
65 DO over i + c@ over =
\r
67 over i + rot rot LEAVE
\r
74 : $APPEND.CHAR ( $string char -- ) \ ugly stack diagram
\r
75 over count chars + c!
\r
79 \ ----------------------------------------------
\r
80 : ($ROM) ( index address -- $string )
\r
81 ( -- index address )
\r
83 DO dup c@ 1+ + aligned
\r
87 : $ROM ( packed array of strings, unalterable )
\r
88 CREATE ( <name> -- )
\r
89 DOES> ( index -- $string ) ($rom)
\r
92 : TEXTROM ( packed array of strings, unalterable )
\r
93 CREATE ( <name> -- )
\r
94 DOES> ( index -- address count ) ($rom) count
\r
97 \ -----------------------------------------------
\r