aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/lib/forth2012/string/search.frt
blob: 36c03396f2e6a89f5134a5401e1e6a7d46793cf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

\ mostly from gforth. Minor modifications however..

: str= ( c-addr1 u1 c-addr2 u2 -- f ) \ gforth
    compare 0= ;

: string-prefix? ( c-addr1 u1 c-addr2 u2 -- f ) \ gforth
    \ Is c-addr2 u2 a prefix of c-addr1 u1 ?
    tuck 2>r min 2r> str= ;

: >= < 0= ;

: search ( c-addr1 u1 c-addr2 u2 -- c-addr3 u3 flag ) \ string
    2>r 2dup
    begin
    dup r@ >= \ 2r@ nip >=
    while
    2dup 2r@ string-prefix? if
        2swap 2drop 2r> 2drop true exit
    then
    1 /string
    repeat
    2drop 2r> 2drop 0 ;