aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/lib/forth2012/string/search.frt
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
commit67d25d837ac55f28a366c0a3b262e439a6e75fc3 (patch)
treedf7715c7724c5935ab87c807f3b8b4ef529315e3 /amforth-6.5/common/lib/forth2012/string/search.frt
parente0d6784e89dba33226c0edb815bb974486fa7c48 (diff)
Add AmForth
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 ;