From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- amforth-6.5/common/lib/forth2012/string/search.frt | 23 ++++++++++++++++++++++ amforth-6.5/common/lib/forth2012/string/split.frt | 15 ++++++++++++++ .../common/lib/forth2012/string/trailing.frt | 10 ++++++++++ 3 files changed, 48 insertions(+) create mode 100644 amforth-6.5/common/lib/forth2012/string/search.frt create mode 100644 amforth-6.5/common/lib/forth2012/string/split.frt create mode 100644 amforth-6.5/common/lib/forth2012/string/trailing.frt (limited to 'amforth-6.5/common/lib/forth2012/string') 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 ; diff --git a/amforth-6.5/common/lib/forth2012/string/split.frt b/amforth-6.5/common/lib/forth2012/string/split.frt new file mode 100644 index 0000000..c627ed3 --- /dev/null +++ b/amforth-6.5/common/lib/forth2012/string/split.frt @@ -0,0 +1,15 @@ +\ Newsgroups: comp.lang.forth +\ Date: Sat, 21 Jun 2014 13:48:57 -0700 (PDT) +\ From: Julian Fondren +\ slightly modified for amforth (rdrop, false) + +\ split a string at the first occurance + +\ #require 2over.frt +\ #require search.frt + +: split ( 'string' 'separator' -- 'before' 'after' -1 | 0 ) + dup >r 2over 2swap search 0= if 2drop 2drop r> drop 0 exit then + 2>r r@ - 2r> r> /string true +; + diff --git a/amforth-6.5/common/lib/forth2012/string/trailing.frt b/amforth-6.5/common/lib/forth2012/string/trailing.frt new file mode 100644 index 0000000..51e709d --- /dev/null +++ b/amforth-6.5/common/lib/forth2012/string/trailing.frt @@ -0,0 +1,10 @@ + + +: -trailing ( c_addr u1 -- c_addr u2 ) \ string dash-trailing +\ Adjust the string specified by {c-addr, u1} to remove all +\ trailing spaces. {u2} is the length of the modified string. + begin + dup + while + 1- 2dup + c@ bl <> + until 1+ then ; -- cgit v1.2.3