aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/lib/forth2012/string/search.frt
diff options
context:
space:
mode:
Diffstat (limited to 'amforth-6.5/common/lib/forth2012/string/search.frt')
-rw-r--r--amforth-6.5/common/lib/forth2012/string/search.frt23
1 files changed, 23 insertions, 0 deletions
diff --git a/amforth-6.5/common/lib/forth2012/string/search.frt b/amforth-6.5/common/lib/forth2012/string/search.frt
new file mode 100644
index 0000000..36c0339
--- /dev/null
+++ b/amforth-6.5/common/lib/forth2012/string/search.frt
@@ -0,0 +1,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 ;