aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boot/includer.boot12
-rw-r--r--src/boot/scanner.boot20
-rw-r--r--src/boot/strap/includer.clisp14
-rw-r--r--src/boot/strap/scanner.clisp20
-rw-r--r--src/boot/strap/tokens.clisp68
-rw-r--r--src/boot/strap/translator.clisp6
-rw-r--r--src/boot/tokens.boot7
-rw-r--r--src/boot/translator.boot6
-rw-r--r--src/interp/alql.boot8
-rw-r--r--src/interp/as.boot14
-rw-r--r--src/interp/bc-util.boot6
-rw-r--r--src/interp/br-con.boot2
-rw-r--r--src/interp/br-data.boot28
-rw-r--r--src/interp/br-op1.boot2
-rw-r--r--src/interp/br-op2.boot2
-rw-r--r--src/interp/br-saturn.boot40
-rw-r--r--src/interp/br-search.boot44
-rw-r--r--src/interp/br-util.boot12
-rw-r--r--src/interp/c-doc.boot102
-rw-r--r--src/interp/database.boot6
-rw-r--r--src/interp/format.boot2
-rw-r--r--src/interp/functor.boot8
-rw-r--r--src/interp/g-util.boot6
-rw-r--r--src/interp/guess.boot10
-rw-r--r--src/interp/ht-root.boot22
-rw-r--r--src/interp/ht-util.boot6
-rw-r--r--src/interp/htcheck.boot4
-rw-r--r--src/interp/i-output.boot12
-rw-r--r--src/interp/i-syscmd.boot70
-rw-r--r--src/interp/i-util.boot2
-rw-r--r--src/interp/incl.boot8
-rw-r--r--src/interp/int-top.boot6
-rw-r--r--src/interp/interop.boot2
-rw-r--r--src/interp/intfile.boot2
-rw-r--r--src/interp/mark.boot8
-rw-r--r--src/interp/match.boot24
-rw-r--r--src/interp/msgdb.boot6
-rw-r--r--src/interp/newfort.boot16
-rw-r--r--src/interp/osyscmd.boot2
-rw-r--r--src/interp/pathname.boot2
-rw-r--r--src/interp/pf2atree.boot8
-rw-r--r--src/interp/pf2sex.boot10
-rw-r--r--src/interp/pspad1.boot4
-rw-r--r--src/interp/pspad2.boot8
-rw-r--r--src/interp/record.boot10
-rw-r--r--src/interp/scan.boot20
-rw-r--r--src/interp/server.boot2
-rw-r--r--src/interp/showimp.boot2
-rw-r--r--src/interp/slam.boot2
-rw-r--r--src/interp/sys-utility.boot6
-rw-r--r--src/interp/topics.boot4
-rw-r--r--src/interp/trace.boot2
-rw-r--r--src/interp/word.boot12
53 files changed, 373 insertions, 354 deletions
diff --git a/src/boot/includer.boot b/src/boot/includer.boot
index 0e316b6f..3f976b28 100644
--- a/src/boot/includer.boot
+++ b/src/boot/includer.boot
@@ -86,7 +86,7 @@ shoeNotFound fn ==
shoeReadLispString(s,n) ==
l:=# s
n >= l => nil
- READ_-FROM_-STRING strconc ( "(", SUBSTRING(s,n,l-n) ,")")
+ READ_-FROM_-STRING strconc ( "(", subString(s,n,l-n) ,")")
-- read a line from stream
shoeReadLine stream ==
@@ -143,11 +143,11 @@ lineCharacter p ==
shoePackageStartsAt (lines,sz,name,stream)==
bStreamNull stream => [[],['nullstream]]
a := CAAR stream
- #a >= 8 and SUBSTRING(a,0,8)='")package" =>
+ #a >= 8 and subString(a,0,8)='")package" =>
shoePackageStartsAt([CAAR stream,:lines],sz,name,rest stream)
#a < sz =>
shoePackageStartsAt(lines, sz,name,rest stream)
- SUBSTRING(a,0,sz)=name and (#a>sz and not shoeIdChar(a.sz)) =>
+ subString(a,0,sz)=name and (#a>sz and not shoeIdChar(a.sz)) =>
[lines,stream]
shoePackageStartsAt(lines,sz,name,rest stream)
@@ -260,7 +260,7 @@ shoePrefix?(prefix,whole) ==
good:=true
for i in 0..#prefix-1 for j in 0.. while good repeat
good:= prefix.i = whole.j
- good => SUBSTRING(whole,#prefix,nil)
+ good => subString(whole,#prefix)
good
shoePlainLine?(s) ==
@@ -286,8 +286,8 @@ shoeBiteOff x==
n:=STRPOSL('" ",x,0,true)
n = nil => false
n1:=STRPOSL ('" ",x,n,nil)
- n1 = nil => [SUBSTRING(x,n,nil),'""]
- [SUBSTRING(x,n,n1-n),SUBSTRING(x,n1,nil)]
+ n1 = nil => [subString(x,n),'""]
+ [subString(x,n,n1-n),subString(x,n1)]
shoeFileName x==
a:=shoeBiteOff x
diff --git a/src/boot/scanner.boot b/src/boot/scanner.boot
index 62e44f22..9745bae6 100644
--- a/src/boot/scanner.boot
+++ b/src/boot/scanner.boot
@@ -145,7 +145,7 @@ shoeAccumulateLines(s,string)==
a:=STRPOS('";",command,0,nil)
a=>
shoeAccumulateLines($r,
- strconc(string,SUBSTRING(command,0,a-1)))
+ strconc(string,subString(command,0,a-1)))
shoeAccumulateLines($r,strconc(string,command))
shoeAccumulateLines($r,string)
[s,:string]
@@ -280,12 +280,12 @@ shoeStartsNegComment()==
shoeNegComment()==
n := $n
$n := $sz
- shoeLeafNegComment SUBSTRING($ln,n,nil)
+ shoeLeafNegComment subString($ln,n)
shoeComment()==
n := $n
$n := $sz
- shoeLeafComment SUBSTRING($ln,n,nil)
+ shoeLeafComment subString($ln,n)
shoePunct()==
sss := shoeMatch($ln,$n)
@@ -329,11 +329,11 @@ shoeS()==
mn=$sz =>
$n:=$sz
SoftShoeError([$linepos,:$n],'"quote added")
- SUBSTRING($ln,n,nil)
+ subString($ln,n)
mn = strsym =>
$n:=mn+1
- SUBSTRING($ln,n,mn-n)
- str := SUBSTRING($ln,n,mn-n)
+ subString($ln,n,mn-n)
+ str := subString($ln,n,mn-n)
$n := mn+1
a := shoeEsc()
b :=
@@ -363,8 +363,8 @@ shoeW(b)==
endid := shoeIdEnd($ln,$n)
endid=l or QENUM($ln,endid) ~= shoeESCAPE =>
$n := endid
- [b,SUBSTRING($ln,n1,endid-n1)]
- str := SUBSTRING($ln,n1,endid-n1)
+ [b,subString($ln,n1,endid-n1)]
+ str := subString($ln,n1,endid-n1)
$n := endid+1
a := shoeEsc()
bb :=
@@ -392,8 +392,8 @@ shoeInteger1(zro) ==
$n := $n+1
$n=l or QENUM($ln,$n)~=shoeESCAPE =>
n = $n and zro => '"0"
- SUBSTRING($ln,n,$n-n)
- str := SUBSTRING($ln,n,$n-n)
+ subString($ln,n,$n-n)
+ str := subString($ln,n,$n-n)
$n := $n+1
a := shoeEsc()
bb := shoeInteger1(zro)
diff --git a/src/boot/strap/includer.clisp b/src/boot/strap/includer.clisp
index 06904a5b..0956df6b 100644
--- a/src/boot/strap/includer.clisp
+++ b/src/boot/strap/includer.clisp
@@ -24,7 +24,7 @@
(COND
((NOT (< |n| |l|)) NIL)
(T (READ-FROM-STRING
- (CONCAT '|(| (SUBSTRING |s| |n| (- |l| |n|)) '|)|))))))))
+ (CONCAT '|(| (|subString| |s| |n| (- |l| |n|)) '|)|))))))))
(DEFUN |shoeReadLine| (|stream|) (READ-LINE |stream| NIL NIL))
@@ -90,13 +90,13 @@
(T (SETQ |a| (CAAR |stream|))
(COND
((AND (NOT (< (LENGTH |a|) 8))
- (STRING= (SUBSTRING |a| 0 8) ")package"))
+ (STRING= (|subString| |a| 0 8) ")package"))
(|shoePackageStartsAt| (CONS (CAAR |stream|) |lines|)
|sz| |name| (CDR |stream|)))
((< (LENGTH |a|) |sz|)
(|shoePackageStartsAt| |lines| |sz| |name|
(CDR |stream|)))
- ((AND (EQUAL (SUBSTRING |a| 0 |sz|) |name|)
+ ((AND (EQUAL (|subString| |a| 0 |sz|) |name|)
(< |sz| (LENGTH |a|))
(NOT (|shoeIdChar| (ELT |a| |sz|))))
(LIST |lines| |stream|))
@@ -246,7 +246,7 @@
(SETQ |i| (+ |i| 1))
(SETQ |j| (+ |j| 1))))
(COND
- (|good| (SUBSTRING |whole| (LENGTH |prefix|) NIL))
+ (|good| (|subString| |whole| (LENGTH |prefix|)))
(T |good|)))))))
(DEFUN |shoePlainLine?| (|s|)
@@ -292,9 +292,9 @@
((NULL |n|) NIL)
(T (SETQ |n1| (STRPOSL " " |x| |n| NIL))
(COND
- ((NULL |n1|) (LIST (SUBSTRING |x| |n| NIL) ""))
- (T (LIST (SUBSTRING |x| |n| (- |n1| |n|))
- (SUBSTRING |x| |n1| NIL))))))))))
+ ((NULL |n1|) (LIST (|subString| |x| |n|) ""))
+ (T (LIST (|subString| |x| |n| (- |n1| |n|))
+ (|subString| |x| |n1|))))))))))
(DEFUN |shoeFileName| (|x|)
(PROG (|c| |a|)
diff --git a/src/boot/strap/scanner.clisp b/src/boot/strap/scanner.clisp
index 1319d3c9..15ae2e96 100644
--- a/src/boot/strap/scanner.clisp
+++ b/src/boot/strap/scanner.clisp
@@ -146,7 +146,7 @@
(COND
(|a| (|shoeAccumulateLines| |$r|
(CONCAT |string|
- (SUBSTRING |command| 0
+ (|subString| |command| 0
(- |a| 1)))))
(T (|shoeAccumulateLines| |$r|
(CONCAT |string| |command|)))))))
@@ -299,7 +299,7 @@
(PROGN
(SETQ |n| |$n|)
(SETQ |$n| |$sz|)
- (|shoeLeafNegComment| (SUBSTRING |$ln| |n| NIL))))))
+ (|shoeLeafNegComment| (|subString| |$ln| |n|))))))
(DEFUN |shoeComment| ()
(PROG (|n|)
@@ -308,7 +308,7 @@
(PROGN
(SETQ |n| |$n|)
(SETQ |$n| |$sz|)
- (|shoeLeafComment| (SUBSTRING |$ln| |n| NIL))))))
+ (|shoeLeafComment| (|subString| |$ln| |n|))))))
(DEFUN |shoePunct| ()
(PROG (|sss|)
@@ -366,10 +366,10 @@
(COND
((EQUAL |mn| |$sz|) (SETQ |$n| |$sz|)
(|SoftShoeError| (CONS |$linepos| |$n|) "quote added")
- (SUBSTRING |$ln| |n| NIL))
+ (|subString| |$ln| |n|))
((EQUAL |mn| |strsym|) (SETQ |$n| (+ |mn| 1))
- (SUBSTRING |$ln| |n| (- |mn| |n|)))
- (T (SETQ |str| (SUBSTRING |$ln| |n| (- |mn| |n|)))
+ (|subString| |$ln| |n| (- |mn| |n|)))
+ (T (SETQ |str| (|subString| |$ln| |n| (- |mn| |n|)))
(SETQ |$n| (+ |mn| 1)) (SETQ |a| (|shoeEsc|))
(SETQ |b|
(COND
@@ -404,8 +404,8 @@
((OR (EQUAL |endid| |l|)
(NOT (EQL (QENUM |$ln| |endid|) |shoeESCAPE|)))
(SETQ |$n| |endid|)
- (LIST |b| (SUBSTRING |$ln| |n1| (- |endid| |n1|))))
- (T (SETQ |str| (SUBSTRING |$ln| |n1| (- |endid| |n1|)))
+ (LIST |b| (|subString| |$ln| |n1| (- |endid| |n1|))))
+ (T (SETQ |str| (|subString| |$ln| |n1| (- |endid| |n1|)))
(SETQ |$n| (+ |endid| 1)) (SETQ |a| (|shoeEsc|))
(SETQ |bb| (COND (|a| (|shoeW| T)) (T (LIST |b| ""))))
(LIST (OR (ELT |bb| 0) |b|) (CONCAT |str| (ELT |bb| 1)))))))))
@@ -443,8 +443,8 @@
(NOT (EQL (QENUM |$ln| |$n|) |shoeESCAPE|)))
(COND
((AND (EQUAL |n| |$n|) |zro|) "0")
- (T (SUBSTRING |$ln| |n| (- |$n| |n|)))))
- (T (SETQ |str| (SUBSTRING |$ln| |n| (- |$n| |n|)))
+ (T (|subString| |$ln| |n| (- |$n| |n|)))))
+ (T (SETQ |str| (|subString| |$ln| |n| (- |$n| |n|)))
(SETQ |$n| (+ |$n| 1)) (SETQ |a| (|shoeEsc|))
(SETQ |bb| (|shoeInteger1| |zro|)) (CONCAT |str| |bb|)))))))
diff --git a/src/boot/strap/tokens.clisp b/src/boot/strap/tokens.clisp
index 45c988f4..01f54c47 100644
--- a/src/boot/strap/tokens.clisp
+++ b/src/boot/strap/tokens.clisp
@@ -15,6 +15,11 @@
(OR (ALPHANUMERICP |x|)
(MEMBER |x| (LIST (|char| '|'|) (|char| '?) (|char| '%)))))
+(DEFUN |subString| (|s| |f| &OPTIONAL (|n| NIL))
+ (COND
+ ((NULL |n|) (SUBSEQ |s| |f|))
+ (T (SUBSEQ |s| |f| (+ |f| |n|)))))
+
(DEFCONSTANT |shoeKeyWords|
(LIST (LIST "and" 'AND) (LIST "by" 'BY) (LIST "case" 'CASE)
(LIST "catch" 'CATCH) (LIST "cross" 'CROSS)
@@ -47,14 +52,14 @@
(RETURN
(PROGN
(SETQ |KeyTable| (MAKE-HASHTABLE 'CVEC))
- (LET ((|bfVar#1| |shoeKeyWords|) (|st| NIL))
+ (LET ((|bfVar#2| |shoeKeyWords|) (|st| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#1|)
- (PROGN (SETQ |st| (CAR |bfVar#1|)) NIL))
+ ((OR (ATOM |bfVar#2|)
+ (PROGN (SETQ |st| (CAR |bfVar#2|)) NIL))
(RETURN NIL))
(T (HPUT |KeyTable| (CAR |st|) (CADR |st|))))
- (SETQ |bfVar#1| (CDR |bfVar#1|))))
+ (SETQ |bfVar#2| (CDR |bfVar#2|))))
|KeyTable|))))
(DEFPARAMETER |shoeKeyTable| (|shoeKeyTableCons|))
@@ -95,17 +100,17 @@
((< (LENGTH (ELT |u| |k|)) |l|) (RETURN NIL))
(T (SETQ |k| (+ |k| 1)))))
(SETQ |v| (MAKE-ARRAY (+ |n| 1)))
- (LET ((|bfVar#2| (- |k| 1)) (|i| 0))
+ (LET ((|bfVar#3| (- |k| 1)) (|i| 0))
(LOOP
(COND
- ((> |i| |bfVar#2|) (RETURN NIL))
+ ((> |i| |bfVar#3|) (RETURN NIL))
(T (SETF (ELT |v| |i|) (ELT |u| |i|))))
(SETQ |i| (+ |i| 1))))
(SETF (ELT |v| |k|) |s|)
- (LET ((|bfVar#3| (- |n| 1)) (|i| |k|))
+ (LET ((|bfVar#4| (- |n| 1)) (|i| |k|))
(LOOP
(COND
- ((> |i| |bfVar#3|) (RETURN NIL))
+ ((> |i| |bfVar#4|) (RETURN NIL))
(T (SETF (ELT |v| (+ |i| 1)) (ELT |u| |i|))))
(SETQ |i| (+ |i| 1))))
(SETF (ELT |d| |h|) |v|)
@@ -128,14 +133,14 @@
(T (SETF (ELT |a| |i|) |b|)))
(SETQ |i| (+ |i| 1))))
|a|))
- (LET ((|bfVar#4| |l|) (|s| NIL))
+ (LET ((|bfVar#5| |l|) (|s| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#4|)
- (PROGN (SETQ |s| (CAR |bfVar#4|)) NIL))
+ ((OR (ATOM |bfVar#5|)
+ (PROGN (SETQ |s| (CAR |bfVar#5|)) NIL))
(RETURN NIL))
(T (|shoeInsert| |s| |d|)))
- (SETQ |bfVar#4| (CDR |bfVar#4|))))
+ (SETQ |bfVar#5| (CDR |bfVar#5|))))
|d|))))
(DEFPARAMETER |shoeDict| (|shoeDictCons|))
@@ -152,31 +157,31 @@
((> |i| 255) (RETURN NIL))
(T (BVEC-SETELT |a| |i| 0)))
(SETQ |i| (+ |i| 1))))
- (LET ((|bfVar#5| |listing|) (|k| NIL))
+ (LET ((|bfVar#6| |listing|) (|k| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#5|)
- (PROGN (SETQ |k| (CAR |bfVar#5|)) NIL))
+ ((OR (ATOM |bfVar#6|)
+ (PROGN (SETQ |k| (CAR |bfVar#6|)) NIL))
(RETURN NIL))
(T (COND
((NOT (|shoeStartsId| (ELT |k| 0)))
(BVEC-SETELT |a| (QENUM |k| 0) 1)))))
- (SETQ |bfVar#5| (CDR |bfVar#5|))))
+ (SETQ |bfVar#6| (CDR |bfVar#6|))))
|a|))))
(DEFPARAMETER |shoePun| (|shoePunCons|))
(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
- (LET ((|bfVar#6| (LIST 'NOT 'LENGTH)) (|i| NIL))
+ (LET ((|bfVar#7| (LIST 'NOT 'LENGTH)) (|i| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#6|) (PROGN (SETQ |i| (CAR |bfVar#6|)) NIL))
+ ((OR (ATOM |bfVar#7|) (PROGN (SETQ |i| (CAR |bfVar#7|)) NIL))
(RETURN NIL))
(T (SETF (GET |i| 'SHOEPRE) T)))
- (SETQ |bfVar#6| (CDR |bfVar#6|)))))
+ (SETQ |bfVar#7| (CDR |bfVar#7|)))))
(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
- (LET ((|bfVar#7| (LIST (LIST 'SHOEEQ '=) (LIST 'TIMES '*)
+ (LET ((|bfVar#8| (LIST (LIST 'SHOEEQ '=) (LIST 'TIMES '*)
(LIST 'REM '|rem|) (LIST 'QUO '|quo|)
(LIST 'PLUS '+) (LIST 'IS '|is|)
(LIST 'ISNT '|isnt|) (LIST 'AND '|and|)
@@ -187,13 +192,13 @@
(|i| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#7|) (PROGN (SETQ |i| (CAR |bfVar#7|)) NIL))
+ ((OR (ATOM |bfVar#8|) (PROGN (SETQ |i| (CAR |bfVar#8|)) NIL))
(RETURN NIL))
(T (SETF (GET (CAR |i|) 'SHOEINF) (CADR |i|))))
- (SETQ |bfVar#7| (CDR |bfVar#7|)))))
+ (SETQ |bfVar#8| (CDR |bfVar#8|)))))
(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
- (LET ((|bfVar#8|
+ (LET ((|bfVar#9|
(LIST (LIST '+ 0) (LIST '|gcd| 0) (LIST '|lcm| 1)
(LIST 'STRCONC "") (LIST '|strconc| "")
(LIST 'CONCAT "") (LIST 'MAX (- 999999))
@@ -206,13 +211,13 @@
(|i| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#8|) (PROGN (SETQ |i| (CAR |bfVar#8|)) NIL))
+ ((OR (ATOM |bfVar#9|) (PROGN (SETQ |i| (CAR |bfVar#9|)) NIL))
(RETURN NIL))
(T (SETF (GET (CAR |i|) 'SHOETHETA) (CDR |i|))))
- (SETQ |bfVar#8| (CDR |bfVar#8|)))))
+ (SETQ |bfVar#9| (CDR |bfVar#9|)))))
(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
- (LET ((|bfVar#9|
+ (LET ((|bfVar#10|
(LIST (LIST '|abs| 'ABS) (LIST '|abstractChar| 'CODE-CHAR)
(LIST '|alphabetic?| 'ALPHA-CHAR-P)
(LIST '|alphanumeric?| 'ALPHANUMERICP)
@@ -248,6 +253,7 @@
(LIST '|setIntersection| 'INTERSECTION)
(LIST '|setPart| 'SETELT) (LIST '|setUnion| 'UNION)
(LIST '|strconc| 'CONCAT) (LIST '|string?| 'STRINGP)
+ (LIST '|subSequence| 'SUBSEQ)
(LIST '|substitute| 'SUBST)
(LIST '|substitute!| 'NSUBST)
(LIST '|symbol?| 'SYMBOLP)
@@ -266,13 +272,13 @@
(|i| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#9|) (PROGN (SETQ |i| (CAR |bfVar#9|)) NIL))
+ ((OR (ATOM |bfVar#10|) (PROGN (SETQ |i| (CAR |bfVar#10|)) NIL))
(RETURN NIL))
(T (SETF (GET (CAR |i|) 'SHOERENAME) (CDR |i|))))
- (SETQ |bfVar#9| (CDR |bfVar#9|)))))
+ (SETQ |bfVar#10| (CDR |bfVar#10|)))))
(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
- (LET ((|bfVar#10| (LIST (LIST '|setName| 0) (LIST '|setLabel| 1)
+ (LET ((|bfVar#11| (LIST (LIST '|setName| 0) (LIST '|setLabel| 1)
(LIST '|setLevel| 2) (LIST '|setType| 3)
(LIST '|setVar| 4) (LIST '|setLeaf| 5)
(LIST '|setDef| 6) (LIST '|aGeneral| 4)
@@ -301,8 +307,8 @@
(|i| NIL))
(LOOP
(COND
- ((OR (ATOM |bfVar#10|) (PROGN (SETQ |i| (CAR |bfVar#10|)) NIL))
+ ((OR (ATOM |bfVar#11|) (PROGN (SETQ |i| (CAR |bfVar#11|)) NIL))
(RETURN NIL))
(T (SETF (GET (CAR |i|) 'SHOESELFUNCTION) (CADR |i|))))
- (SETQ |bfVar#10| (CDR |bfVar#10|)))))
+ (SETQ |bfVar#11| (CDR |bfVar#11|)))))
diff --git a/src/boot/strap/translator.clisp b/src/boot/strap/translator.clisp
index 51bfd7d4..e37043e5 100644
--- a/src/boot/strap/translator.clisp
+++ b/src/boot/strap/translator.clisp
@@ -725,7 +725,7 @@
(RETURN
(PROGN
(SETQ |n| (SEARCH |str| |s| :FROM-END T))
- (COND ((NULL |n|) |s|) (T (SUBSTRING |s| 0 |n|)))))))
+ (COND ((NULL |n|) |s|) (T (|subString| |s| 0 |n|)))))))
(DEFUN DEFUSE (|fn|)
(PROG (|infn|)
@@ -1087,7 +1087,7 @@
(|shoeFindName2| |fn| |name| |a|)))
(SETQ |filename|
(COND
- ((< 8 (LENGTH |name|)) (SUBSTRING |name| 0 8))
+ ((< 8 (LENGTH |name|)) (|subString| |name| 0 8))
(T |name|)))
(COND (|a| (FUNCALL |f| (CONCAT "/tmp/" |filename|))) (T NIL))))))
@@ -1100,7 +1100,7 @@
(|lines| (SETQ |filename|
(COND
((< 8 (LENGTH |name|))
- (SUBSTRING |name| 0 8))
+ (|subString| |name| 0 8))
(T |name|)))
(SETQ |filename|
(CONCAT "/tmp/" |filename| ".boot"))
diff --git a/src/boot/tokens.boot b/src/boot/tokens.boot
index 08b5854c..6247a0b3 100644
--- a/src/boot/tokens.boot
+++ b/src/boot/tokens.boot
@@ -46,6 +46,12 @@ shoeStartsId x ==
shoeIdChar x ==
alphanumeric? x or x in [char "'", char "?", char "%"]
+++ return the sub-string of `s' starting from `f'.
+++ When non-nil, `n' designates the length of the sub-string.
+subString(s,f,n == nil) ==
+ n = nil => subSequence(s,f)
+ subSequence(s,f,f + n)
+
++ Table of Boot keywords and their token name.
shoeKeyWords == [ _
['"and","AND"] , _
@@ -307,6 +313,7 @@ for i in [ _
["setUnion", "UNION"] , _
["strconc", "CONCAT"] , _
["string?", "STRINGP"] ,_
+ ["subSequence", "SUBSEQ"] , _
["substitute", "SUBST"] , _
["substitute!", "NSUBST"] , _
["symbol?", "SYMBOLP"] , _
diff --git a/src/boot/translator.boot b/src/boot/translator.boot
index 085e6755..c8d9452f 100644
--- a/src/boot/translator.boot
+++ b/src/boot/translator.boot
@@ -473,7 +473,7 @@ shoeAddStringIfNec(str,s)==
shoeRemoveStringIfNec(str,s)==
n := SEARCH(str,s,KEYWORD::FROM_-END,true)
n = nil => s
- SUBSTRING(s,0,n)
+ subString(s,0,n)
-- DEFUSE prints the definitions not used and the words used and
-- not defined in the input file and common lisp.
@@ -634,14 +634,14 @@ shoeGeneralFC(f,name,fn)==
$GenVarCounter := 0
infn:=shoeAddbootIfNec fn
a:= shoeOpenInputFile(a,infn,shoeFindName2(fn,name, a))
- filename:= if # name > 8 then SUBSTRING(name,0,8) else name
+ filename:= if # name > 8 then subString(name,0,8) else name
a => FUNCALL(f, strconc('"/tmp/",filename))
nil
shoeFindName2(fn,name,a)==
lines:=shoeFindLines(fn,name,a)
lines =>
- filename:= if # name > 8 then SUBSTRING(name,0,8) else name
+ filename:= if # name > 8 then subString(name,0,8) else name
filename := strconc('"/tmp/",filename,'".boot")
shoeOpenOutputFile(stream, filename,
for line in lines repeat shoeFileLine (line,stream))
diff --git a/src/interp/alql.boot b/src/interp/alql.boot
index 56358a87..0ab02f07 100644
--- a/src/interp/alql.boot
+++ b/src/interp/alql.boot
@@ -44,16 +44,16 @@ stringMatches?(pattern,subject) ==
FIXP basicMatch?(pattern,subject) => true
false
alqlGetKindString(x) ==
- x.0 = char 'a or x.0 = char 'o => SUBSTRING(dbPart(x,5,1),0,1)
- SUBSTRING(x,0,1)
+ x.0 = char 'a or x.0 = char 'o => subString(dbPart(x,5,1),0,1)
+ subString(x,0,1)
alqlGetOrigin(x) ==
field :=dbPart(x,5,1)
k := charPosition(char '_(,field,2)
- SUBSTRING(field,1,k-1)
+ subString(field,1,k-1)
alqlGetParams(x) ==
field :=dbPart(x,5,1)
k := charPosition(char '_(,field,2)
- SUBSTRING(field,k,nil)
+ subString(field,k,nil)
diff --git a/src/interp/as.boot b/src/interp/as.boot
index b21ad225..b64de57f 100644
--- a/src/interp/as.boot
+++ b/src/interp/as.boot
@@ -313,14 +313,14 @@ asyDocumentation con ==
[:u,['constructor,[nil,comments]]]
asyExtractDescription str ==
- k := STRPOS('"Description:",str,0,nil) => asyExtractDescription SUBSTRING(str,k + 12,nil)
- k := STRPOS('"Author:",str,0,nil) => asyExtractDescription SUBSTRING(str,0,k)
+ k := STRPOS('"Description:",str,0,nil) => asyExtractDescription subString(str,k + 12)
+ k := STRPOS('"Author:",str,0,nil) => asyExtractDescription subString(str,0,k)
str
trimComments str ==
str = nil or str = '"" => '""
m := MAXINDEX str
- str := SUBSTRING(str,0,m)
+ str := subString(str,0,m)
trimString str
asyExportAlist con ==
@@ -705,7 +705,7 @@ asyAbbreviation(id,n) == chk(id,main) where --> n = number of arguments
parts := asySplit(name,MAXINDEX name)
newname := strconc/[asyShorten x for x in parts]
#newname < 8 => INTERN newname
- tryname := SUBSTRING(name,0,7)
+ tryname := subString(name,0,7)
not createAbbreviation tryname => INTERN UPCASE tryname
nil
chk(conname,abb) ==
@@ -731,9 +731,9 @@ asyGetAbbrevFromComments con ==
asyExtractAbbreviation str ==
not (k:= STRPOS('"Abbrev: ",str,0,nil)) => NIL
- str := SUBSTRING(str, k+8, nil)
+ str := subString(str, k+8)
k := STRPOS($stringNewline, str,0,nil)
- k => SUBSTRING(str, 0, k)
+ k => subString(str, 0, k)
str
asyShorten x ==
@@ -750,7 +750,7 @@ asySplit(name,end) ==
k := 0
for i in 1..end while lowerCase? name.i repeat k := i
k := k + 1
- [SUBSTRING(name,0,k),:asySplit(SUBSTRING(name,k,nil),end-k)]
+ [subString(name,0,k),:asySplit(subString(name,k),end-k)]
createAbbreviation s ==
if string? s then s := INTERN s
diff --git a/src/interp/bc-util.boot b/src/interp/bc-util.boot
index e542e9b3..6c2531dc 100644
--- a/src/interp/bc-util.boot
+++ b/src/interp/bc-util.boot
@@ -52,7 +52,7 @@ bcMkFunction(name,arg,args) ==
bcString2HyString2 s ==
(string? s) and (s.0 = char '_") =>
len := #s
- strconc('"\_"", SUBSTRING(s, 1, len-2), '"\_"")
+ strconc('"\_"", subString(s, 1, len-2), '"\_"")
s
bcString2HyString s == s
@@ -99,8 +99,8 @@ bcString2WordList s == fn(s,0,MAXINDEX s) where
k := or/[j for j in i..n | s.j ~= char '_ ]
null integer? k => nil
l := bcFindString(s,k + 1,n,char '_ )
- null integer? l => [SUBSTRING(s,k,nil)]
- [SUBSTRING(s,k,l-k),:fn(s,l + 1,n)]
+ null integer? l => [subString(s,k)]
+ [subString(s,k,l-k),:fn(s,l + 1,n)]
bcwords2liststring u ==
diff --git a/src/interp/br-con.boot b/src/interp/br-con.boot
index 9c2ff3f7..6ac7cef4 100644
--- a/src/interp/br-con.boot
+++ b/src/interp/br-con.boot
@@ -175,7 +175,7 @@ kdPageInfo(name,abbrev,nargs,conform,signature,file?) ==
htSayStandard '"\indentrel{2}"
if nargs > 0 then kPageArgs(conform,signature)
htSayStandard '"\indentrel{-2}"
- if name.(#name-1) = char "&" then name := SUBSEQ(name, 0, #name-1)
+ if name.(#name-1) = char "&" then name := subSequence(name, 0, #name-1)
--sourceFileName := dbSourceFile INTERN name
sourceFileName := getConstructorSourceFileFromDB INTERN name
filename := extractFileNameFromPath sourceFileName
diff --git a/src/interp/br-data.boot b/src/interp/br-data.boot
index 0ff40dcd..b63560da 100644
--- a/src/interp/br-data.boot
+++ b/src/interp/br-data.boot
@@ -118,7 +118,7 @@ buildLibdbConEntry conname ==
conComments :=
LASSOC('constructor,$doc) is [[=nil,:r]] => libdbTrim concatWithBlanks r
'""
- argpart:= SUBSTRING(form2HtString ['f,:argl],1,nil)
+ argpart:= subString(form2HtString ['f,:argl],1)
sigpart:= libConstructorSig $conform
header := strconc($kind,PNAME conname)
buildLibdbString [header,#argl,$exposed?,sigpart,argpart,abb,conComments]
@@ -161,8 +161,8 @@ writedb(u) ==
TERPRI $outStream
addPatchesToLongLines(s,n) ==
- #s > n => strconc(SUBSTRING(s,0,n),
- addPatchesToLongLines(strconc('"--",SUBSTRING(s,n,nil)),n))
+ #s > n => strconc(subString(s,0,n),
+ addPatchesToLongLines(strconc('"--",subString(s,n)),n))
s
buildLibOps oplist == for [op,sig,:pred] in oplist repeat buildLibOp(op,sig,pred)
@@ -216,7 +216,7 @@ buildLibAttrs attrlist ==
buildLibAttr(name,argl,pred) ==
--attributes AKname\#\args\conname\pred\comments (K is U or C)
header := strconc('"a",STRINGIMAGE name)
- argPart:= SUBSTRING(form2LispString ['f,:argl],1,nil)
+ argPart:= subString(form2LispString ['f,:argl],1)
pred := SUBLISLIS(rest $conform,$FormalMapVariableList,pred)
predString := (pred = 'T => '""; form2LispString pred)
header := strconc('"a",STRINGIMAGE name)
@@ -263,11 +263,11 @@ dbReadComments(n) ==
FILE_-POSITION(instream,n)
line := READLINE instream
k := dbTickIndex(line,1,1)
- line := SUBSTRING(line,k + 1,nil)
+ line := subString(line,k + 1)
while not EOFP instream and (x := READLINE instream) and
(k := MAXINDEX x) and (j := dbTickIndex(x,1,1)) and (j < k) and
x.(j := j + 1) = char '_- and x.(j := j + 1) = char '_- repeat
- xtralines := [SUBSTRING(x,j + 1,nil),:xtralines]
+ xtralines := [subString(x,j + 1),:xtralines]
SHUT instream
strconc(line, strconc/nreverse xtralines)
@@ -307,17 +307,17 @@ dbSplitLibdb() ==
dbSplit(line,n,k) ==
k := charPosition($tick,line,k + 1)
- n = 1 => [SUBSTRING(line,0,k),:dbSpreadComments(SUBSTRING(line,k + 1,nil),0)]
+ n = 1 => [subString(line,0,k),:dbSpreadComments(subString(line,k + 1),0)]
dbSplit(line,n - 1,k)
dbSpreadComments(line,n) ==
line = '"" => nil
k := charPosition(char '_-,line,n + 2)
- k >= MAXINDEX line => [SUBSTRING(line,n,nil)]
+ k >= MAXINDEX line => [subString(line,n)]
line.(k + 1) ~= char '_- =>
u := dbSpreadComments(line,k)
- [strconc(SUBSTRING(line,n,k - n),first u),:rest u]
- [SUBSTRING(line,n,k - n),:dbSpreadComments(SUBSTRING(line,k,nil),0)]
+ [strconc(subString(line,n,k - n),first u),:rest u]
+ [subString(line,n,k - n),:dbSpreadComments(subString(line,k),0)]
--============================================================================
-- Build Glossary
@@ -380,7 +380,7 @@ spreadGlossText(line) ==
--where XXX is the file position of key1
--this is because grepping will only pick up the first 512 characters
line = '"" => nil
- MAXINDEX line > 500 => [SUBSTRING(line,0,500),:spreadGlossText(SUBSTRING(line,500,nil))]
+ MAXINDEX line > 500 => [subString(line,0,500),:spreadGlossText(subString(line,500))]
[line]
getGlossLines instream ==
@@ -409,8 +409,8 @@ getGlossLines instream ==
lastLineHadTick := false
text := [strconc(last,fill,line),:rest text]
lastLineHadTick := true
- keys := [SUBSTRING(line,0,n),:keys]
- text := [SUBSTRING(line,n + 1,nil),:text]
+ keys := [subString(line,0,n),:keys]
+ text := [subString(line,n + 1),:text]
ASSOCRIGHT listSort(function GLESSEQP,[[DOWNCASE key,key,:def] for key in keys for def in text])
--this complication sorts them after lower casing the keys
@@ -433,7 +433,7 @@ mkUsersHashTable() == --called by buildDatabase (database.boot)
$usersTb
getDefaultPackageClients con == --called by mkUsersHashTable
- catname := INTERN SUBSTRING(s := PNAME con,0,MAXINDEX s)
+ catname := INTERN subString(s := PNAME con,0,MAXINDEX s)
for [catAncestor,:.] in childrenOf([catname]) repeat
pakname := INTERN strconc(PNAME catAncestor,'"&")
if getCDTEntry(pakname,true) then acc := [pakname,:acc]
diff --git a/src/interp/br-op1.boot b/src/interp/br-op1.boot
index 2740fb17..c3ea7a5a 100644
--- a/src/interp/br-op1.boot
+++ b/src/interp/br-op1.boot
@@ -846,7 +846,7 @@ dbExpandOpAlistIfNecessary(htPage,opAlist,which,needOrigins?,condition?) ==
packageSymbol := false
domform := htpProperty(htPage,'domname) or htpProperty(htPage,'conform)
if isDefaultPackageName opOf domform then
- catname := intern SUBSTRING(s := PNAME opOf domform,0,MAXINDEX s)
+ catname := intern subString(s := PNAME opOf domform,0,MAXINDEX s)
packageSymbol := second domform
domform := [catname,:rest rest domform] --skip first argument ($)
docTable:= dbDocTable domform
diff --git a/src/interp/br-op2.boot b/src/interp/br-op2.boot
index 3eff1ceb..3dc6086a 100644
--- a/src/interp/br-op2.boot
+++ b/src/interp/br-op2.boot
@@ -149,7 +149,7 @@ dbGetFormFromDocumentation(op,sig,x) ==
(stringPrefix?('"\spad{",doc) and (k := 6) or
stringPrefix?('"\s{",doc) and (k := 3)) =>
n := charPosition($charRbrace,doc,k)
- s := SUBSTRING(doc,k,n - k)
+ s := subString(doc,k,n - k)
parse := ncParseFromString s
parse is [=op,:.] and #parse = #sig => parse
nil
diff --git a/src/interp/br-saturn.boot b/src/interp/br-saturn.boot
index 362aee5d..3807efaa 100644
--- a/src/interp/br-saturn.boot
+++ b/src/interp/br-saturn.boot
@@ -249,33 +249,33 @@ writeSaturn(line) ==
true
repeat (k := k + 1)
k > n => writeSaturnPrint(line)
- segment := SUBSTRING(line,0,k)
+ segment := subString(line,0,k)
writeSaturnPrint(segment)
code = 1 =>
writeSaturnPrint('"\\")
- writeSaturn SUBSTRING(line,k + 2, nil)
+ writeSaturn subString(line,k + 2)
code = 2 =>
writeSaturnPrint('" &")
- writeSaturn SUBSTRING(line,k + 4, nil)
+ writeSaturn subString(line,k + 4)
code = 3 =>
writeSaturnPrint('"\item")
- writeSaturn SUBSTRING(line,k + 5,nil)
+ writeSaturn subString(line,k + 5)
code = 4 =>
writeSaturnPrint('"\newline")
- writeSaturn SUBSTRING(line,k + 8,nil)
+ writeSaturn subString(line,k + 8)
code = 5 =>
writeSaturnPrint('"\table{")
$marg := $marg + 3
- writeSaturnTable SUBSTRING(line,k + 7,nil)
+ writeSaturnTable subString(line,k + 7)
code = 6 =>
i := charPosition(char '_},line,k + 4)
- tabCode := SUBSTRING(line,k, i - k + 1)
+ tabCode := subString(line,k, i - k + 1)
writeSaturnPrint tabCode
- line := SUBSTRING(line,i + 1, nil)
+ line := subString(line,i + 1)
writeSaturn line
code = 7 =>
saturnTERPRI()
- writeSaturn SUBSTRING(line, k + 2,nil)
+ writeSaturn subString(line, k + 2)
code = 8 =>
i :=
substring?('"\beginmenu", line,k) => k + 9
@@ -283,18 +283,18 @@ writeSaturn(line) ==
charPosition(char '_},line,k)
if char '_[ = line.(i + 1) then
i := charPosition(char '_], line, i + 2)
- beginCode := SUBSTRING(line,k, i - k + 1)
+ beginCode := subString(line,k, i - k + 1)
writeSaturnPrint(beginCode)
- line := SUBSTRING(line,i + 1,nil)
+ line := subString(line,i + 1)
writeSaturn line
code = 9 =>
i :=
substring?('"\endmenu",line,k) => k + 7
substring?('"\endscroll",line,k) => k + 9
charPosition(char '_},line,k)
- endCode := SUBSTRING(line,k, i - k + 1)
+ endCode := subString(line,k, i - k + 1)
writeSaturnPrint(endCode)
- line := SUBSTRING(line,i + 1,nil)
+ line := subString(line,i + 1)
$marg := $marg - 3
writeSaturn line
systemError code
@@ -346,11 +346,11 @@ writeSaturnTable line ==
close:= charPosition(char "}",line,0)
open < close =>
close := findBalancingBrace(line,open + 1,MAXINDEX line,0) or error '"no balancing brace"
- writeSaturnPrint SUBSTRING(line,0,close + 1)
- writeSaturnTable SUBSTRING(line,close + 1,nil)
+ writeSaturnPrint subString(line,0,close + 1)
+ writeSaturnTable subString(line,close + 1)
$marg := $marg - 3
- writeSaturnPrint SUBSTRING(line,0,close + 1)
- writeSaturn SUBSTRING(line, close + 1,nil)
+ writeSaturnPrint subString(line,0,close + 1)
+ writeSaturn subString(line, close + 1)
findBalancingBrace(s,k,n,level) ==
k > n => nil
@@ -454,7 +454,7 @@ saturnTranText x ==
error nil
isMenuItemStyle? s ==
- 15 = STRING_<('"\menuitemstyle{", s) => SUBSTRING(s,15,(MAXINDEX s) - 15)
+ 15 = STRING_<('"\menuitemstyle{", s) => subString(s,15,(MAXINDEX s) - 15)
nil
getCallBack callTail ==
@@ -1500,7 +1500,7 @@ unTab s ==
unTab1 s ==
STRING_<('"\tab{", s) = 5 and (k := charPosition(char '_}, s, 4)) =>
- SUBSTRING(s, k + 1, nil)
+ subString(s, k + 1)
s
satBreak() ==
@@ -1721,7 +1721,7 @@ screenLocalLine(line, conlist) ==
k = char 'o or k = char 'a =>
s := dbPart(line,5,1)
k := charPosition(char '_(,s,1)
- SUBSTRING(s,1,k - 1)
+ subString(s,1,k - 1)
dbName line
MEMQ(con, conlist)
diff --git a/src/interp/br-search.boot b/src/interp/br-search.boot
index 6e68d9a6..b17045a2 100644
--- a/src/interp/br-search.boot
+++ b/src/interp/br-search.boot
@@ -184,7 +184,7 @@ pmPreparse s == hn fn(s,0,#s) where--stupid insertion of chars to get correct pa
hn x == SUBLISLIS('(and or not),'("and" "or" "not"),x)
fn(s,n,siz) == --main function: s is string, n is origin
n = siz => '""
- i := firstNonDelim(s,n) or return SUBSTRING(s,n,nil)
+ i := firstNonDelim(s,n) or return subString(s,n)
j := firstDelim(s,i + 1) or siz
t := gn(s,i,j - 1)
middle :=
@@ -193,11 +193,11 @@ pmPreparse s == hn fn(s,0,#s) where--stupid insertion of chars to get correct pa
t.0 = char '_" => t
j < siz - 1 and s.j = char '_( => t
strconc('"_"",t,'"_"")
- strconc(SUBSTRING(s,n,i - n),middle,fn(s,j,siz))
+ strconc(subString(s,n,i - n),middle,fn(s,j,siz))
gn(s,i,j) == --replace each underscore by 4 underscores!
n := or/[k for k in i..j | s.k = $charUnderscore] =>
- strconc(SUBSTRING(s,i,n - i + 1),$charUnderscore,gn(s,n + 1,j))
- SUBSTRING(s,i,j - i + 1)
+ strconc(subString(s,i,n - i + 1),$charUnderscore,gn(s,n + 1,j))
+ subString(s,i,j - i + 1)
firstNonDelim(s,n) == or/[k for k in n..MAXINDEX s | not isFilterDelimiter? s.k]
firstDelim(s,n) == or/[k for k in n..MAXINDEX s | isFilterDelimiter? s.k]
@@ -259,8 +259,8 @@ mkGrepPattern1(x,:options) == --called by mkGrepPattern (and grepConstructName?)
h(sl,nil)
g s == --remove "*"s around pattern for text match
not ('w in $options) => s
- if s.0 = char '_* then s := SUBSTRING(s,1,nil)
- if s.(k := MAXINDEX s) = char '_* then s := SUBSTRING(s,0,k)
+ if s.0 = char '_* then s := subString(s,1)
+ if s.(k := MAXINDEX s) = char '_* then s := subString(s,0,k)
s
h(sl,res) == --helper for wild cards
sl is [s,:r] => h(r,[$wild1,s,:res])
@@ -271,13 +271,13 @@ mkGrepPattern1(x,:options) == --called by mkGrepPattern (and grepConstructName?)
strconc/nreverse res
remUnderscores s ==
(k := charPosition(char $charUnderscore,s,0)) < MAXINDEX s =>
- strconc(SUBSTRING(s,0,k),'"[",s.(k + 1),'"]",
- remUnderscores(SUBSTRING(s,k + 2,nil)))
+ strconc(subString(s,0,k),'"[",s.(k + 1),'"]",
+ remUnderscores(subString(s,k + 2)))
s
split(s,char) ==
max := MAXINDEX s + 1
f := -1
- [SUBSTRING(s,i,f-i)
+ [subString(s,i,f-i)
while ((i := f + 1) <= max) and (f := charPosition(char,s,i))]
charPosition(c,t,startpos) == --honors underscores
n := # t
@@ -369,7 +369,7 @@ looksLikeDomainForm x ==
spadSys(x) == --called by \spadsyscom{x}
s := PNAME x
- if s.0 = char '_) then s := SUBSTRING(s,1,nil)
+ if s.0 = char '_) then s := subString(s,1)
form := ncParseFromString s or
systemError ['"Argument: ",s,'" to spadType won't parse"]
htSystemCommands PNAME opOf form
@@ -527,7 +527,7 @@ genSearchUniqueCount(u) ==
lastid := id
count
-dbGetName line == SUBSTRING(line,1,charPosition($tick,line,1) - 1)
+dbGetName line == subString(line,1,charPosition($tick,line,1) - 1)
pluralSay(count,singular,plural,:options) ==
item := (options is [x,:options] => x; '"")
@@ -570,8 +570,8 @@ docSearch1(filter,doc) ==
removeSurroundingStars filter ==
key := STRINGIMAGE filter
- if key.0 = char '_* then key := SUBSTRING(key,1,nil)
- if key.(max := MAXINDEX key) = char '_* then key := SUBSTRING(key,0,max)
+ if key.0 = char '_* then key := subString(key,1)
+ if key.(max := MAXINDEX key) = char '_* then key := subString(key,0,max)
key
showNamedDoc([kind,:lines],index) ==
@@ -594,7 +594,7 @@ stripOffSegments(s,n) ==
while n > 0 and progress = true repeat
n := n - 1
k := charPosition(char '_`,s,0)
- new := SUBSTRING(s,k + 1,nil)
+ new := subString(s,k + 1)
#new < #s => s := new
progress := false
n = 0 => s
@@ -884,7 +884,7 @@ mkDetailedGrepPattern(kind,name,nargs,argOrSig) == main where
m > 6 and a.(m-5) = char '_[ and a.(m-4) = char "^"
and a.(m-3) = $tick and a.(m-2) = char '_]
and a.(m-1) = char '_* and a.m = $tick
- => simp SUBSTRING(a,0,m-5)
+ => simp subString(a,0,m-5)
a
replaceGrepStar s ==
@@ -892,19 +892,19 @@ replaceGrepStar s ==
final := MAXINDEX s
i := charPosition(char '_*,s,0)
i > final => s
- strconc(SUBSTRING(s,0,i),'"[^`]*",replaceGrepStar SUBSTRING(s,i + 1,nil))
+ strconc(subString(s,0,i),'"[^`]*",replaceGrepStar subString(s,i + 1))
standardizeSignature(s) == underscoreDollars
s.0 = char '_( => s
k := STRPOS('"->",s,0,nil) or return s --will fail except perhaps on constants
s.(k - 1) = char '_) => strconc('"(",s)
- strconc('"(",SUBSTRING(s,0,k),'")",SUBSTRING(s,k,nil))
+ strconc('"(",subString(s,0,k),'")",subString(s,k))
underscoreDollars(s) == fn(s,0,MAXINDEX s) where
fn(s,i,n) ==
i > n => '""
- (m := charPosition(char '_$,s,i)) > n => SUBSTRING(s,i,nil)
- strconc(SUBSTRING(s,i,m - i),'"___$",fn(s,m + 1,n))
+ (m := charPosition(char '_$,s,i)) > n => subString(s,i)
+ strconc(subString(s,i,m - i),'"___$",fn(s,m + 1,n))
--=======================================================================
-- I/O Code
@@ -933,8 +933,8 @@ dbGetCommentOrigin line ==
--Comment lines have format [dcpxoa]xxxxxx`ccccc... where
--x's give pointer into libdb, c's are comments
firstPart := dbPart(line,1,-1)
- key := INTERN SUBSTRING(firstPart,0,1) --extract this and throw away
- address := SUBSTRING(firstPart, 1, nil) --address in libdb
+ key := INTERN subString(firstPart,0,1) --extract this and throw away
+ address := subString(firstPart, 1) --address in libdb
instream := OPEN grepSource key --this always returns libdb now
FILE_-POSITION(instream,readInteger address)
line := READLINE instream
@@ -988,7 +988,7 @@ dbUnpatchLines lines == --concatenate long lines together, skip blank lines
#line = 0 => 'skip --skip blank lines
acc :=
line.0 = dash and line.1 = dash =>
- [strconc(first acc,SUBSTRING(line,2,nil)),:rest acc]
+ [strconc(first acc,subString(line,2)),:rest acc]
[line,:acc]
-- following call to nreverse needed to keep lines properly sorted
nreverse acc ------> added by BMT 12/95
diff --git a/src/interp/br-util.boot b/src/interp/br-util.boot
index 518ace12..a20f39c1 100644
--- a/src/interp/br-util.boot
+++ b/src/interp/br-util.boot
@@ -190,7 +190,7 @@ lisp2HT u == ['"_'",:fn u] where fn u ==
args2HtString(x,:options) ==
null x => '""
emList := IFCAR options
- SUBSTRING(form2HtString(['f,:x],emList),1,nil)
+ subString(form2HtString(['f,:x],emList),1)
quickForm2HtString(x) ==
atom x => STRINGIMAGE x
@@ -372,7 +372,7 @@ asharpConstructors() ==
extractFileNameFromPath s == fn(s,0,#s) where
fn(s,i,m) ==
k := charPosition(char '_/,s,i)
- k = m => SUBSTRING(s,i,nil)
+ k = m => subString(s,i)
fn(s,k + 1,m)
bcOpTable(u,fn) ==
@@ -609,12 +609,12 @@ dbKind line == line.0
dbKindString kind == LASSOC(kind,$dbKindAlist)
-dbName line == escapeString SUBSTRING(line,1,charPosition($tick,line,1) - 1)
+dbName line == escapeString subString(line,1,charPosition($tick,line,1) - 1)
dbAttr line == strconc(dbName line,escapeString dbPart(line,4,0))
dbPart(line,n,k) == --returns part n of line (n=1,..) beginning in column k
- n = 1 => SUBSTRING(line,k + 1,charPosition($tick,line,k + 1) - k - 1)
+ n = 1 => subString(line,k + 1,charPosition($tick,line,k + 1) - k - 1)
dbPart(line,n - 1,charPosition($tick,line,k + 1))
dbXParts(line,n,m) ==
@@ -623,7 +623,7 @@ dbXParts(line,n,m) ==
dbParts(line,n,m) == --split line into n parts beginning in column m
n = 0 => nil
- [SUBSTRING(line,m,-m + (k := charPosition($tick,line,m))),
+ [subString(line,m,-m + (k := charPosition($tick,line,m))),
:dbParts(line,n - 1,k + 1)]
dbConname(line) == dbPart(line,5,1)
@@ -634,7 +634,7 @@ dbNewConname(line) == --dbName line unless kind is 'a or 'o => name in 5th pos.
(kind := line.0) = char 'a or kind = char 'o =>
conform := dbPart(line,5,1)
k := charPosition(char '_(,conform,1)
- SUBSTRING(conform,1,k - 1)
+ subString(conform,1,k - 1)
dbName line
dbTickIndex(line,n,k) == --returns index of nth tick in line starting at k
diff --git a/src/interp/c-doc.boot b/src/interp/c-doc.boot
index 6e5fb843..4e4460fc 100644
--- a/src/interp/c-doc.boot
+++ b/src/interp/c-doc.boot
@@ -375,7 +375,7 @@ checkRecordHash u ==
HPUT($glossHash,htname,[first entry,:[[$name,:$origin],:rest entry]])
else if x is '"\spadsys" and (u := checkLookForLeftBrace IFCDR u) and (u := IFCDR u) then
s := checkGetStringBeforeRightBrace u
- if s.0 = char '_) then s := SUBSTRING(s,1,nil)
+ if s.0 = char '_) then s := subString(s,1)
parse := checkGetParse s
null parse => checkDocError ['"Unparseable \spadtype: ",s]
not member(opOf parse,$currentSysList) =>
@@ -409,8 +409,8 @@ checkGetParse s == ncParseFromString removeBackslashes s
removeBackslashes s ==
s = '"" => '""
(k := charPosition($charBack,s,0)) < #s =>
- k = 0 => removeBackslashes SUBSTRING(s,1,nil)
- strconc(SUBSTRING(s,0,k),removeBackslashes SUBSTRING(s,k + 1,nil))
+ k = 0 => removeBackslashes subString(s,1)
+ strconc(subString(s,0,k),removeBackslashes subString(s,k + 1))
s
++ returns the arity (as known to the global DB) of the functor
@@ -440,7 +440,7 @@ checkIsValidType form == main where
checkGetLispFunctionName s ==
n := #s
(k := charPosition(char '_|,s,1)) and k < n and
- (j := charPosition(char '_|,s,k + 1)) and j < n => SUBSTRING(s,k + 1,j-k-1)
+ (j := charPosition(char '_|,s,k + 1)) and j < n => subString(s,k + 1,j-k-1)
checkDocError ['"Ill-formed lisp expression : ",s]
'illformed
@@ -530,7 +530,7 @@ checkTrimCommented line ==
k = 0 => '""
--remarks beginning with %% are comments
k >= n - 1 or line.(k + 1) ~= char '_% => line
- k < #line => SUBSTRING(line,0,k)
+ k < #line => subString(line,0,k)
line
htcharPosition(char,line,i) ==
@@ -604,14 +604,14 @@ checkIndentedLines(u, margin) ==
k = -1 =>
verbatim => u2 := [:u2, $charFauxNewline]
u2 := [:u2, '"\blankline "]
- s := SUBSTRING(x, k, nil)
+ s := subString(x, k)
s = '"\begin{verbatim}" =>
verbatim := true
u2 := [:u2, s]
s = '"\end{verbatim}" =>
verbatim := false
u2 := [:u2, s]
- verbatim => u2 := [:u2, SUBSTRING(x, margin, nil)]
+ verbatim => u2 := [:u2, subString(x, margin)]
margin = k => u2 := [:u2, s]
u2 := [:u2, strconc('"\indented{",STRINGIMAGE(k-margin),'"}{",checkAddSpaceSegments(s,0),'"}")]
u2
@@ -650,16 +650,16 @@ checkGetArgs u ==
NOT string? u => nil
m := MAXINDEX u
k := firstNonBlankPosition(u)
- k > 0 => checkGetArgs SUBSTRING(u,k,nil)
+ k > 0 => checkGetArgs subString(u,k)
stringPrefix?('"\spad{",u) =>
k := getMatchingRightPren(u,6,char '_{,char '_}) or m
- checkGetArgs SUBSTRING(u,6,k-6)
+ checkGetArgs subString(u,6,k-6)
(i := charPosition(char '_(,u,0)) > m => nil
(u . m) ~= char '_) => nil
while (k := charPosition($charComma,u,i + 1)) < m repeat
- acc := [trimString SUBSTRING(u,i + 1,k - i - 1),:acc]
+ acc := [trimString subString(u,i + 1,k - i - 1),:acc]
i := k
- nreverse [SUBSTRING(u,i + 1,m - i - 1),:acc]
+ nreverse [subString(u,i + 1,m - i - 1),:acc]
checkGetMargin lines ==
while lines repeat
@@ -682,7 +682,7 @@ checkAddIndented(x,margin) ==
k := firstNonBlankPosition x
k = -1 => '"\blankline "
margin = k => x
- strconc('"\indented{",STRINGIMAGE(k-margin),'"}{",checkAddSpaceSegments(SUBSTRING(x,k,nil),0),'"}")
+ strconc('"\indented{",STRINGIMAGE(k-margin),'"}{",checkAddSpaceSegments(subString(x,k),0),'"}")
checkAddSpaceSegments(u,k) ==
m := MAXINDEX u
@@ -691,8 +691,8 @@ checkAddSpaceSegments(u,k) ==
j := i
while (j := j + 1) < m and u.j = (char '_ ) repeat 'continue
n := j - i --number of blanks
- n > 1 => strconc(SUBSTRING(u,0,i),'"\space{",
- STRINGIMAGE n,'"}",checkAddSpaceSegments(SUBSTRING(u,i + n,nil),0))
+ n > 1 => strconc(subString(u,0,i),'"\space{",
+ STRINGIMAGE n,'"}",checkAddSpaceSegments(subString(u,i + n),0))
checkAddSpaceSegments(u,j)
checkTrim($x,lines) == main where
@@ -711,11 +711,11 @@ checkTrim($x,lines) == main where
k
trim(s) ==
k := wherePP(s)
- return SUBSTRING(s,k + 2,nil)
+ return subString(s,k + 2)
m := MAXINDEX s
n := k + 2
for j in (k + 2)..m while s.j = $charBlank repeat (n := n + 1)
- SUBSTRING(s,n,nil)
+ subString(s,n)
checkExtract(header,lines) ==
while lines repeat
@@ -729,7 +729,7 @@ checkExtract(header,lines) ==
margin := k
firstLines :=
(k := firstNonBlankPosition(u,j + 1)) ~= -1 =>
- [SUBSTRING(u,j + 1,nil),:rest lines]
+ [subString(u,j + 1),:rest lines]
rest lines
--now look for another header; if found skip all rest of these lines
acc := nil
@@ -854,7 +854,7 @@ checkAddBackSlashes s ==
char = $charBack => k := k + 2
MEMQ(char,$charEscapeList) => return (insertIndex := k)
k := k + 1
- insertIndex => checkAddBackSlashes strconc(SUBSTRING(s,0,insertIndex),$charBack,s.k,SUBSTRING(s,insertIndex + 1,nil))
+ insertIndex => checkAddBackSlashes strconc(subString(s,0,insertIndex),$charBack,s.k,subString(s,insertIndex + 1))
s
checkAddSpaces u ==
@@ -905,9 +905,9 @@ checkIeEgfun x ==
x.(k + 1) = $charPeriod and x.(k + 3) = $charPeriod and
(x.k = char 'i and x.(k + 2) = char 'e and (key := '"that is")
or x.k = char 'e and x.(k + 2) = char 'g and (key := '"for example")) =>
- firstPart := (k > 0 => [SUBSTRING(x,0,k)]; nil)
- result := [:firstPart,'"\spadignore{",SUBSTRING(x,k,4),'"}",
- :checkIeEgfun SUBSTRING(x,k+4,nil)]
+ firstPart := (k > 0 => [subString(x,0,k)]; nil)
+ result := [:firstPart,'"\spadignore{",subString(x,k,4),'"}",
+ :checkIeEgfun subString(x,k+4)]
result
checkSplit2Words u ==
@@ -945,14 +945,14 @@ checkSplitBackslash x ==
(k := charPosition($charBack,x,0)) < m =>
m = 1 or alphabetic?(x . (k + 1)) => --starts with a backslash so..
(k := charPosition($charBack,x,1)) < m => --..see if there is another
- [SUBSTRING(x,0,k),:checkSplitBackslash SUBSTRING(x,k,nil)] -- yup
+ [subString(x,0,k),:checkSplitBackslash subString(x,k)] -- yup
[x] --no, just return line
k = 0 => --starts with backspace but x.1 is not a letter; break it up
- [SUBSTRING(x,0,2),:checkSplitBackslash SUBSTRING(x,2,nil)]
- u := SUBSTRING(x,0,k)
- v := SUBSTRING(x,k,2)
+ [subString(x,0,2),:checkSplitBackslash subString(x,2)]
+ u := subString(x,0,k)
+ v := subString(x,k,2)
k + 1 = m => [u,v]
- [u,v,:checkSplitBackslash SUBSTRING(x,k + 2,nil)]
+ [u,v,:checkSplitBackslash subString(x,k + 2)]
[x]
checkSplitPunctuation x ==
@@ -963,22 +963,22 @@ checkSplitPunctuation x ==
lastchar = $charPeriod and x.(m - 1) = $charPeriod =>
m = 1 => [x]
m > 3 and x.(m-2) = $charPeriod =>
- [:checkSplitPunctuation SUBSTRING(x,0,m-2),'"..."]
- [:checkSplitPunctuation SUBSTRING(x,0,m-1),'".."]
+ [:checkSplitPunctuation subString(x,0,m-2),'"..."]
+ [:checkSplitPunctuation subString(x,0,m-1),'".."]
lastchar = $charPeriod or lastchar = $charSemiColon or lastchar = $charComma
- => [SUBSTRING(x,0,m),lastchar]
- m > 1 and x.(m - 1) = $charQuote => [SUBSTRING(x,0,m - 1),SUBSTRING(x,m-1,nil)]
+ => [subString(x,0,m),lastchar]
+ m > 1 and x.(m - 1) = $charQuote => [subString(x,0,m - 1),subString(x,m-1)]
(k := charPosition($charBack,x,0)) < m =>
k = 0 =>
m = 1 or HGET($htMacroTable,x) or alphabetic? x.1 => [x]
- v := SUBSTRING(x,2,nil)
- [SUBSTRING(x,0,2),:checkSplitPunctuation v]
- u := SUBSTRING(x,0,k)
- v := SUBSTRING(x,k,nil)
+ v := subString(x,2)
+ [subString(x,0,2),:checkSplitPunctuation v]
+ u := subString(x,0,k)
+ v := subString(x,k)
[:checkSplitPunctuation u,:checkSplitPunctuation v]
(k := charPosition($charDash,x,1)) < m =>
- u := SUBSTRING(x,k + 1,nil)
- [SUBSTRING(x,0,k),$charDash,:checkSplitPunctuation u]
+ u := subString(x,k + 1)
+ [subString(x,0,k),$charDash,:checkSplitPunctuation u]
[x]
checkSplitOn(x) ==
@@ -995,9 +995,9 @@ checkSplitOn(x) ==
l := rest l
null l => [x]
k = -1 => [char]
- k = 0 => [char,SUBSTRING(x,1,nil)]
- k = MAXINDEX x => [SUBSTRING(x,0,k),char]
- [SUBSTRING(x,0,k),char,:checkSplitOn SUBSTRING(x,k + 1,nil)]
+ k = 0 => [char,subString(x,1)]
+ k = MAXINDEX x => [subString(x,0,k),char]
+ [subString(x,0,k),char,:checkSplitOn subString(x,k + 1)]
checkBalance u ==
@@ -1133,7 +1133,7 @@ checkTransformFirsts(opname,u,margin) ==
open = char '_[ and (close := char '_]) or
open = char '_( and (close := char '_)) =>
k := getMatchingRightPren(u,j + 1,open,close)
- namestring ~= (firstWord := SUBSTRING(u,0,i)) =>
+ namestring ~= (firstWord := subString(u,0,i)) =>
checkDocError ['"Improper first word in comments: ",firstWord]
u
null k =>
@@ -1141,43 +1141,43 @@ checkTransformFirsts(opname,u,margin) ==
then checkDocError ['"Missing close bracket on first line: ", u]
else checkDocError ['"Missing close parenthesis on first line: ", u]
u
- strconc('"\spad{",SUBSTRING(u,0,k + 1),'"}",SUBSTRING(u,k + 1,nil))
+ strconc('"\spad{",subString(u,0,k + 1),'"}",subString(u,k + 1))
k := checkSkipToken(u,j,m) or return u
- infixOp := INTERN SUBSTRING(u,j,k - j)
+ infixOp := INTERN subString(u,j,k - j)
not GETL(infixOp,'Led) => --case 3
- namestring ~= (firstWord := SUBSTRING(u,0,i)) =>
+ namestring ~= (firstWord := subString(u,0,i)) =>
checkDocError ['"Improper first word in comments: ",firstWord]
u
#(p := PNAME infixOp) = 1 and (open := p.0) and
(close := LASSOC(open,$checkPrenAlist)) => --have an open bracket
l := getMatchingRightPren(u,k + 1,open,close)
if l > MAXINDEX u then l := k - 1
- strconc('"\spad{",SUBSTRING(u,0,l + 1),'"}",SUBSTRING(u,l + 1,nil))
- strconc('"\spad{",SUBSTRING(u,0,k),'"}",SUBSTRING(u,k,nil))
+ strconc('"\spad{",subString(u,0,l + 1),'"}",subString(u,l + 1))
+ strconc('"\spad{",subString(u,0,k),'"}",subString(u,k))
l := checkSkipBlanks(u,k,m) or return u
n := checkSkipToken(u,l,m) or return u
namestring ~= PNAME infixOp =>
checkDocError ['"Improper initial operator in comments: ",infixOp]
u
- strconc('"\spad{",SUBSTRING(u,0,n),'"}",SUBSTRING(u,n,nil)) --case 5
+ strconc('"\spad{",subString(u,0,n),'"}",subString(u,n)) --case 5
true => -- not alphabetic? u.0 =>
i := checkSkipToken(u,0,m) or return u
- namestring ~= (firstWord := SUBSTRING(u,0,i)) =>
+ namestring ~= (firstWord := subString(u,0,i)) =>
checkDocError ['"Improper first word in comments: ",firstWord]
u
- prefixOp := INTERN SUBSTRING(u,0,i)
+ prefixOp := INTERN subString(u,0,i)
not GETL(prefixOp,'Nud) =>
u ---what could this be?
j := checkSkipBlanks(u,i,m) or return u
u.j = char '_( => --case 4
j := getMatchingRightPren(u,j + 1,char '_(,char '_))
j > m => u
- strconc('"\spad{",SUBSTRING(u,0,j + 1),'"}",SUBSTRING(u,j + 1,nil))
+ strconc('"\spad{",subString(u,0,j + 1),'"}",subString(u,j + 1))
k := checkSkipToken(u,j,m) or return u
- namestring ~= (firstWord := SUBSTRING(u,0,i)) =>
+ namestring ~= (firstWord := subString(u,0,i)) =>
checkDocError ['"Improper first word in comments: ",firstWord]
u
- strconc('"\spad{",SUBSTRING(u,0,k),'"}",SUBSTRING(u,k,nil))
+ strconc('"\spad{",subString(u,0,k),'"}",subString(u,k))
getMatchingRightPren(u,j,open,close) ==
count := 0
diff --git a/src/interp/database.boot b/src/interp/database.boot
index 43ca1697..d7e98938 100644
--- a/src/interp/database.boot
+++ b/src/interp/database.boot
@@ -692,7 +692,7 @@ getOplistWithUniqueSignatures(op,pairlis,signatureAlist) ==
--% Exposure Group Code
dropPrefix(fn) ==
- member(fn.0,[char "?",char "-",char "+"]) => SUBSTRING(fn,1,nil)
+ member(fn.0,[char "?",char "-",char "+"]) => subString(fn,1)
fn
--moved to util.lisp
@@ -717,8 +717,8 @@ dropPrefix(fn) ==
--++ p := STRPOS('" ",x,1,NIL)
--++ null p =>
--++ throwKeyedMsg("S2IZ0069B",[namestring egFile,x])
---++ n := object2Identifier SUBSTRING(x,0,p)
---++ x := dropLeadingBlanks SUBSTRING(x,p+1,NIL)
+--++ n := object2Identifier subString(x,0,p)
+--++ x := dropLeadingBlanks subString(x,p+1)
--++ # x = 0 =>
--++ throwKeyedMsg("S2IZ0069B",[namestring egFile,x])
--++ egFiles := [[n,:object2Identifier x],:egFiles]
diff --git a/src/interp/format.boot b/src/interp/format.boot
index 3f496411..c780041c 100644
--- a/src/interp/format.boot
+++ b/src/interp/format.boot
@@ -629,7 +629,7 @@ isInternalFunctionName(op) ==
table := MAKETRTTABLE('"0123456789",NIL)
s := STRPOSL(table,op',1,true)
null(s) or s > e => NIL
- SUBSTRING(op',s,e-s)
+ subString(op',s,e-s)
application2String(op,argl, linkInfo) ==
null argl =>
diff --git a/src/interp/functor.boot b/src/interp/functor.boot
index c8ab1c8a..77dee1b1 100644
--- a/src/interp/functor.boot
+++ b/src/interp/functor.boot
@@ -890,10 +890,10 @@ splitEncodedFunctionName(encodedName, sep) ==
null (p2 := STRPOS(sep0, encodedName, p1+1, '"*")) => 'inner
-- This is picked up in compile for inner functions in partial compilation
null (p3 := STRPOS(sep, encodedName, p2+1, '"*")) => nil
- s1 := SUBSTRING(encodedName, 0, p1)
- s2 := SUBSTRING(encodedName, p1+1, p2-p1-1)
- s3 := SUBSTRING(encodedName, p2+1, p3-p2-1)
- s4 := SUBSTRING(encodedName, p3+1, nil)
+ s1 := subString(encodedName, 0, p1)
+ s2 := subString(encodedName, p1+1, p2-p1-1)
+ s3 := subString(encodedName, p2+1, p3-p2-1)
+ s4 := subString(encodedName, p3+1)
[s1, s2, s3, s4]
mkRepititionAssoc l ==
diff --git a/src/interp/g-util.boot b/src/interp/g-util.boot
index 93aac9dc..9737c712 100644
--- a/src/interp/g-util.boot
+++ b/src/interp/g-util.boot
@@ -1005,7 +1005,7 @@ dropLeadingBlanks str ==
if SCHAR(str,i) ~= char " " then nb := i
else i := i + 1
nb = 0 => str
- nb => SUBSTRING(str,nb,NIL)
+ nb => subString(str,nb)
'""
concat(:l) == concatList l
@@ -1273,7 +1273,7 @@ leftTrim s ==
k < 0 => s
s.0 = $blank =>
for i in 0..k while s.i = $blank repeat (j := i)
- SUBSTRING(s,j + 1,nil)
+ subString(s,j + 1)
s
rightTrim s == -- assumed a non-empty string
@@ -1281,7 +1281,7 @@ rightTrim s == -- assumed a non-empty string
k < 0 => s
s.k = $blank =>
for i in k..0 by -1 while s.i = $blank repeat (j := i)
- SUBSTRING(s,0,j)
+ subString(s,0,j)
s
pp x ==
diff --git a/src/interp/guess.boot b/src/interp/guess.boot
index b7d2e000..16eaef47 100644
--- a/src/interp/guess.boot
+++ b/src/interp/guess.boot
@@ -73,12 +73,12 @@ wordsOfString1(s,j) ==
tailWords:=
upperCase? s.(k+1) =>
n:= or/[i for i in (k+2)..(MAXINDEX(s)-1)|not upperCase? s.i]
- null n => [SUBSTRING(s,k,nil)]
- n > k+1 => [SUBSTRING(s,k,n-k-1),:wordsOfString1(s,n-1)]
+ null n => [subString(s,k)]
+ n > k+1 => [subString(s,k,n-k-1),:wordsOfString1(s,n-1)]
m := or/[i for i in (k+2)..(MAXINDEX(s)-1) | upperCase? s.i] =>
- [SUBSTRING(s,k,m-k),:wordsOfString1(s,m)]
- [SUBSTRING(s,k,nil)]
- k > j+1 => [SUBSTRING(s,j,k-j),:tailWords]
+ [subString(s,k,m-k),:wordsOfString1(s,m)]
+ [subString(s,k)]
+ k > j+1 => [subString(s,j,k-j),:tailWords]
tailWords
nil
diff --git a/src/interp/ht-root.boot b/src/interp/ht-root.boot
index 595bf4c9..928f6f4a 100644
--- a/src/interp/ht-root.boot
+++ b/src/interp/ht-root.boot
@@ -146,7 +146,7 @@ htGlossPage(htPage,pattern,tryAgain?) ==
null lines =>
tryAgain? and #pattern > 0 =>
(pattern.(k := MAXINDEX(pattern))) = char 's =>
- htGlossPage(htPage,SUBSTRING(pattern,0,k),true)
+ htGlossPage(htPage,subString(pattern,0,k),true)
upperCase? pattern.0 =>
htGlossPage(htPage,DOWNCASE pattern,false)
errorPage(htPage,['"Sorry",nil,['"\centerline{",:heading,'"}"]])
@@ -155,7 +155,7 @@ htGlossPage(htPage,pattern,tryAgain?) ==
htSay('"\beginscroll\beginmenu")
for line in lines repeat
tick := charPosition($tick,line,1)
- htSay('"\item{\em \menuitemstyle{}}\tab{0}{\em ",escapeString SUBSTRING(line,0,tick),'"} ",SUBSTRING(line,tick + 1,nil))
+ htSay('"\item{\em \menuitemstyle{}}\tab{0}{\em ",escapeString subString(line,0,tick),'"} ",subString(line,tick + 1))
htSay '"\endmenu "
htSay '"\endscroll\newline "
htMakePage [['bcLinks,['"Search",'"",'htGlossSearch,nil]]]
@@ -168,18 +168,18 @@ gatherGlossLines(results,defstream) ==
for keyline in results repeat
--keyline := READLINE instream
n := charPosition($tick,keyline,0)
- keyAndTick := SUBSTRING(keyline,0,n + 1)
- byteAddress := string2Integer SUBSTRING(keyline,n + 1,nil)
+ keyAndTick := subString(keyline,0,n + 1)
+ byteAddress := string2Integer subString(keyline,n + 1)
FILE_-POSITION(defstream,byteAddress)
line := READLINE defstream
k := charPosition($tick,line,1)
- pointer := SUBSTRING(line,0,k)
- def := SUBSTRING(line,k + 1,nil)
+ pointer := subString(line,0,k)
+ def := subString(line,k + 1)
xtralines := nil
while not EOFP defstream and (x := READLINE defstream) and
- (j := charPosition($tick,x,1)) and (nextPointer := SUBSTRING(x,0,j))
+ (j := charPosition($tick,x,1)) and (nextPointer := subString(x,0,j))
and (nextPointer = pointer) repeat
- xtralines := [SUBSTRING(x,j + 1,nil),:xtralines]
+ xtralines := [subString(x,j + 1),:xtralines]
acc := [strconc(keyAndTick,def, strconc/nreverse xtralines),:acc]
reverse acc
@@ -271,11 +271,11 @@ mkUnixPattern s ==
u := mkUpDownPattern s
starPositions := reverse [i for i in 1..(-1 + MAXINDEX u) | u.i = $wild]
for i in starPositions repeat
- u := strconc(SUBSTRING(u,0,i),'".*",SUBSTRING(u,i + 1,nil))
+ u := strconc(subString(u,0,i),'".*",subString(u,i + 1))
if u.0 ~= $wild then u := strconc('"[^a-zA-Z]",u)
- else u := SUBSTRING(u,1,nil)
+ else u := subString(u,1)
if u.(k := MAXINDEX u) ~= $wild then u := strconc(u,'"[^a-zA-Z]")
- else u := SUBSTRING(u,0,k)
+ else u := subString(u,0,k)
u
diff --git a/src/interp/ht-util.boot b/src/interp/ht-util.boot
index f7b3b6b9..ccb4c3f3 100644
--- a/src/interp/ht-util.boot
+++ b/src/interp/ht-util.boot
@@ -137,8 +137,8 @@ htpLabelFilteredInputString(htPage, label) ==
replacePercentByDollar s == fn(s,0,MAXINDEX s) where
fn(s,i,n) ==
i > n => '""
- (m := charPosition(char "%",s,i)) > n => SUBSTRING(s,i,nil)
- strconc(SUBSTRING(s,i,m - i),'"$",fn(s,m + 1,n))
+ (m := charPosition(char "%",s,i)) > n => subString(s,i)
+ strconc(subString(s,i,m - i),'"$",fn(s,m + 1,n))
htpSetLabelInputString(htPage, label, val) ==
-- value user typed as input string on page
@@ -403,7 +403,7 @@ templateParts template ==
null string? template => template
i := SEARCH('"%l", template)
null i => template
- [SUBSEQ(template, 0, i), : SUBSEQ(template, i+2)]
+ [subSequence(template, 0, i), : subSequence(template, i+2)]
htMakeDoneButton(message, func) ==
bcHt '"\newline\vspace{1}\centerline{"
diff --git a/src/interp/htcheck.boot b/src/interp/htcheck.boot
index 48f8f07f..088fc2b2 100644
--- a/src/interp/htcheck.boot
+++ b/src/interp/htcheck.boot
@@ -100,13 +100,13 @@ buildHtMacroTable() ==
getHtMacroItem line ==
not stringPrefix?('"\newcommand{",line) => nil
k := charPosition(char '_},line,11)
- command := SUBSTRING(line,12,k - 12)
+ command := subString(line,12,k - 12)
numOfArgs :=
m := #line
i := charPosition(char '_[,line,k)
i = m => 0
j := charPosition(char '_],line,i + 1)
- digitString := SUBSTRING(line,i + 1,j - i - 1)
+ digitString := subString(line,i + 1,j - i - 1)
and/[digit? digitString.i for i in 0..MAXINDEX digitString]
=> readInteger digitString
return nil
diff --git a/src/interp/i-output.boot b/src/interp/i-output.boot
index f064be78..d4ddf4df 100644
--- a/src/interp/i-output.boot
+++ b/src/interp/i-output.boot
@@ -1601,12 +1601,12 @@ outputNumber(start,linelength,num) ==
linelength:=linelength-1
while # num > linelength repeat
if $collectOutput then
- $outputLines := [strconc(blnks, SUBSTRING(num,0,linelength),under),
+ $outputLines := [strconc(blnks, subString(num,0,linelength),under),
:$outputLines]
else
sayALGEBRA [blnks,
- SUBSTRING(num,0,linelength),under]
- num := SUBSTRING(num,linelength,NIL)
+ subString(num,0,linelength),under]
+ num := subString(num,linelength)
if firsttime then
blnks:=strconc(blnks,'" ")
linelength:=linelength-1
@@ -1621,11 +1621,11 @@ outputString(start,linelength,str) ==
else blnks := '""
while # str > linelength repeat
if $collectOutput then
- $outputLines := [strconc(blnks, SUBSTRING(str,0,linelength)),
+ $outputLines := [strconc(blnks, subString(str,0,linelength)),
:$outputLines]
else
- sayALGEBRA [blnks, SUBSTRING(str,0,linelength)]
- str := SUBSTRING(str,linelength,NIL)
+ sayALGEBRA [blnks, subString(str,0,linelength)]
+ str := subString(str,linelength)
if $collectOutput then
$outputLines := [strconc(blnks, str), :$outputLines]
else
diff --git a/src/interp/i-syscmd.boot b/src/interp/i-syscmd.boot
index 60af6ca7..3618d556 100644
--- a/src/interp/i-syscmd.boot
+++ b/src/interp/i-syscmd.boot
@@ -142,7 +142,7 @@ unAbbreviateKeyword x ==
x' :=selectOptionLC(x,$SYSCOMMANDS,'commandErrorIfAmbiguous)
if not x' then
x' := 'system
- SETQ(LINE, strconc('")system ", SUBSTRING(LINE, 1, #LINE-1)))
+ SETQ(LINE, strconc('")system ", subString(LINE, 1, #LINE-1)))
$currentLine := LINE
selectOption(x',commandsForUserLevel $systemCommands,
'commandUserLevelError)
@@ -204,11 +204,11 @@ commandAmbiguityError(kind,x,u) ==
getSystemCommandLine() ==
p := STRPOS('")",$currentLine,0,NIL)
- line := if p then SUBSTRING($currentLine,p,NIL) else $currentLine
+ line := if p then subString($currentLine,p) else $currentLine
maxIndex:= MAXINDEX line
for i in 0..maxIndex while (line.i ~= " ") repeat index:= i
if index=maxIndex then line := '""
- else line := SUBSTRING(line,index+2,nil)
+ else line := subString(line,index+2)
line
------------ start of commands ------------------------------------------
@@ -562,9 +562,9 @@ compileAsharpCmd1 args ==
pathType = '"ao" =>
-- want to strip out -Fao
(p := STRPOS('"-Fao", $asharpCmdlineFlags, 0, NIL)) =>
- p = 0 => SUBSTRING($asharpCmdlineFlags, 5, NIL)
- strconc(SUBSTRING($asharpCmdlineFlags, 0, p), '" ",
- SUBSTRING($asharpCmdlineFlags, p+5, NIL))
+ p = 0 => subString($asharpCmdlineFlags, 5)
+ strconc(subString($asharpCmdlineFlags, 0, p), '" ",
+ subString($asharpCmdlineFlags, p+5))
$asharpCmdlineFlags
$asharpCmdlineFlags
@@ -1687,10 +1687,10 @@ writeInputLines(fn,initial) ==
for j in 1..maxn while not done repeat
k := 1 + maxn - j
MEMQ(vec.k,breakChars) =>
- svec := strconc(SUBSTRING(vec,0,k+1),UNDERBAR)
+ svec := strconc(subString(vec,0,k+1),UNDERBAR)
lineList := [svec,:lineList]
done := true
- vec := SUBSTRING(vec,k+1,NIL)
+ vec := subString(vec,k+1)
n := # vec
-- in case we can't find a breaking point
if not done then n := 0
@@ -2617,7 +2617,7 @@ processSynonymLine line ==
for i in 0..mx repeat
line.i = " " =>
return (for j in (i+1)..mx repeat
- line.j ~= " " => return (SUBSTRING (line, j, nil)))
+ line.j ~= " " => return (subString(line, j)))
[key, :value]
@@ -2800,13 +2800,13 @@ removeUndoLines u == --called by writeInputLines
for y in tails u repeat
(x := first y).0 = char '_) =>
stringPrefix?('")undo",s := trimString x) => --parse "undo )option"
- s1 := trimString SUBSTRING(s,5,nil)
+ s1 := trimString subString(s,5)
if s1 ~= '")redo" then
m := charPosition(char '_),s1,0)
code :=
m < MAXINDEX s1 => s1.(m + 1)
char 'a
- s2 := trimString SUBSTRING(s1,0,m)
+ s2 := trimString subString(s1,0,m)
n :=
s1 = '")redo" => 0
s2 ~= '"" => undoCount readInteger s2
@@ -2818,7 +2818,7 @@ removeUndoLines u == --called by writeInputLines
for y in tails nreverse u repeat
(x := first y).0 = char '_> =>
code := x . 1 --code = a,b, or r
- n := readInteger SUBSTRING(x,2,nil) --n = number of undo steps
+ n := readInteger subString(x,2) --n = number of undo steps
y := rest y --kill >n line
while y repeat
c := first y
@@ -2917,7 +2917,7 @@ printLabelledList(ls,label1,label2,prefix,patterns) ==
sayMessage [label1,'"-defined ",label2,'" satisfying patterns:",
'"%l",'" ",'"%b",:blankList patterns,'"%d"]
for [syn,:comm] in ls repeat
- if SUBSTRING(syn,0,1) = '"|" then syn := SUBSTRING(syn,1,NIL)
+ if subString(syn,0,1) = '"|" then syn := subString(syn,1,NIL)
if syn = '"%i" then syn := '"%i "
wid := MAX(30 - (entryWidth syn),1)
sayBrightly concat('"%b",prefix,syn,'"%d",
@@ -3061,21 +3061,21 @@ processSynonyms() ==
fill := '""
if p
then
- line := SUBSTRING(LINE,p,NIL)
- if p > 0 then fill := SUBSTRING(LINE,0,p)
+ line := subString(LINE,p)
+ if p > 0 then fill := subString(LINE,0,p)
else
p := 0
line := LINE
to := STRPOS ('" ", line, 1, nil)
if to then to := to - 1
- synstr := SUBSTRING (line, 1, to)
+ synstr := subString(line, 1, to)
syn := STRING2ID_-N (synstr, 1)
null (fun := LASSOC (syn, $CommandSynonymAlist)) => NIL
fun := eval fun -- fun may have been a suspension
to := STRPOS('")",fun,1,NIL)
if to and to ~= #(fun)-1 then
- opt := strconc('" ",SUBSTRING(fun,to,NIL))
- fun := SUBSTRING(fun,0,to-1)
+ opt := strconc('" ",subString(fun,to))
+ fun := subString(fun,0,to-1)
else opt := '" "
if # synstr > # fun then
for i in (# fun)..(# synstr) repeat
@@ -3093,8 +3093,8 @@ tabsToBlanks s ==
k := charPosition($charTab,s,0)
n := #s
k < n =>
- k = 0 => tabsToBlanks SUBSTRING(s,1,nil)
- strconc(SUBSTRING(s,0,k),$charBlank, tabsToBlanks SUBSTRING(s,k + 1,nil))
+ k = 0 => tabsToBlanks subString(s,1)
+ strconc(subString(s,0,k),$charBlank, tabsToBlanks subString(s,k + 1))
s
doSystemCommand string ==
@@ -3102,7 +3102,7 @@ doSystemCommand string ==
LINE: fluid := string
processSynonyms()
string := LINE
- string:=SUBSTRING(string,1,nil)
+ string:=subString(string,1)
string = '"" => nil
tok:=getFirstWord(string)
tok =>
@@ -3128,14 +3128,14 @@ handleNoParseCommands(unab, string) ==
if (null spaceIndex) then
sayKeyedMsg("S2IV0005", NIL)
nil
- else npboot(SUBSEQ(string, spaceIndex+1))
+ else npboot(subSequence(string, spaceIndex+1))
unab = "system" =>
if (null spaceIndex) then
sayKeyedMsg("S2IV0005", NIL)
nil
else npsystem(unab, string)
unab = "synonym" =>
- npsynonym(unab, (null spaceIndex => '""; SUBSEQ(string, spaceIndex+1)))
+ npsynonym(unab, (null spaceIndex => '""; subSequence(string, spaceIndex+1)))
null spaceIndex =>
FUNCALL unab
unab in '( quit _
@@ -3146,7 +3146,7 @@ handleNoParseCommands(unab, string) ==
sayKeyedMsg("S2IV0005", NIL)
nil
funName := INTERN strconc('"np",STRING unab)
- FUNCALL(funName, SUBSEQ(string, spaceIndex+1))
+ FUNCALL(funName, subSequence(string, spaceIndex+1))
npboot str ==
@@ -3163,7 +3163,7 @@ stripLisp str ==
(char str.c0) ~= (char lispStr.c1) =>
return nil
strIndex := c0+1
- SUBSEQ(str, strIndex)
+ subSequence(str, strIndex)
nplisp str ==
@@ -3174,12 +3174,12 @@ npsystem(unab, str) ==
spaceIndex := SEARCH('" ", str)
null spaceIndex =>
sayKeyedMsg('"S2IZ0080", [str])
- sysPart := SUBSEQ(str, 0, spaceIndex)
+ sysPart := subSequence(str, 0, spaceIndex)
-- The following is a hack required by the fact that unAbbreviateKeyword
-- returns the word "system" for unknown words
null SEARCH(sysPart, STRING unab) =>
sayKeyedMsg('"S2IZ0080", [sysPart])
- command := SUBSEQ(str, spaceIndex+1)
+ command := subSequence(str, spaceIndex+1)
runCommand command
npsynonym(unab, str) ==
@@ -3193,7 +3193,7 @@ tokTran tok ==
#tok = 0 => nil
isIntegerString tok => READ_-FROM_-STRING tok
STRING tok.0 = '"_"" =>
- SUBSEQ(tok, 1, #tok-1)
+ subSequence(tok, 1, #tok-1)
INTERN tok
tok
@@ -3216,11 +3216,11 @@ splitIntoOptionBlocks str ==
if STRING str.i = '")" and not inString
then parenCount := parenCount - 1
STRING str.i = '")" and not inString and parenCount = -1 =>
- block := stripSpaces SUBSEQ(str, blockStart, i)
+ block := stripSpaces subSequence(str, blockStart, i)
blockList := [block, :blockList]
blockStart := i+1
parenCount := 0
- blockList := [stripSpaces SUBSEQ(str, blockStart), :blockList]
+ blockList := [stripSpaces subSequence(str, blockStart), :blockList]
nreverse blockList
dumbTokenize str ==
@@ -3235,12 +3235,12 @@ dumbTokenize str ==
previousSpace := false
STRING str.i = '" " and not inString =>
previousSpace => nil
- token := stripSpaces SUBSEQ(str, tokenStart, i)
+ token := stripSpaces subSequence(str, tokenStart, i)
tokenList := [token, :tokenList]
tokenStart := i+1
previousSpace := true
previousSpace := false
- tokenList := [stripSpaces SUBSEQ(str, tokenStart), :tokenList]
+ tokenList := [stripSpaces subSequence(str, tokenStart), :tokenList]
nreverse tokenList
handleParsedSystemCommands(unabr, optionList) ==
@@ -3252,8 +3252,8 @@ handleParsedSystemCommands(unabr, optionList) ==
parseSystemCmd opt ==
spaceIndex := SEARCH('" ", opt)
spaceIndex =>
- commandString := stripSpaces SUBSEQ(opt, 0, spaceIndex)
- argString := stripSpaces SUBSEQ(opt, spaceIndex)
+ commandString := stripSpaces subSequence(opt, 0, spaceIndex)
+ argString := stripSpaces subSequence(opt, spaceIndex)
command := tokTran commandString
pform := parseFromString argString
[command, pform]
@@ -3273,7 +3273,7 @@ handleTokensizeSystemCommands(unabr, optionList) ==
getFirstWord string ==
spaceIndex := SEARCH('" ", string)
null spaceIndex => string
- stripSpaces SUBSEQ(string, 0, spaceIndex)
+ stripSpaces subSequence(string, 0, spaceIndex)
ltrace l == trace l
diff --git a/src/interp/i-util.boot b/src/interp/i-util.boot
index 1d423706..6563be32 100644
--- a/src/interp/i-util.boot
+++ b/src/interp/i-util.boot
@@ -73,7 +73,7 @@ MKPROMPT() ==
strconc(STRINGIMAGE $interpreterFrameName,
'" (",STRINGIMAGE $IOindex,'") -> ")
strconc(STRINGIMAGE $interpreterFrameName,
- '" [", SUBSTRING(CURRENTTIME(),8,NIL),'"] [",
+ '" [", subString(CURRENTTIME(),8),'"] [",
STRINGIMAGE $IOindex, '"] -> ")
diff --git a/src/interp/incl.boot b/src/interp/incl.boot
index fbfdec71..c5d84db6 100644
--- a/src/interp/incl.boot
+++ b/src/interp/incl.boot
@@ -136,7 +136,7 @@ incCommandTail(s, info) ==
incDrop(n, b) ==
n >= #b => ""
- SUBSTRING(b,n,nil)
+ subString(b,n)
inclFname(s, info) == incFileName incCommandTail(s, info)
@@ -148,12 +148,12 @@ incBiteOff x ==
else
n1:=STRPOSL ('" ",x,n,nil)
if null n1 -- all nonspaces
- then [SUBSTRING(x,n,nil),'""]
- else [SUBSTRING(x,n,n1-n),SUBSTRING(x,n1,nil)]
+ then [subString(x,n),'""]
+ else [subString(x,n,n1-n),subString(x,n1)]
incTrunc (n,x)==
if #x>n
- then SUBSTRING(x,0,n)
+ then subString(x,0,n)
else x
incFileName x == first incBiteOff x
diff --git a/src/interp/int-top.boot b/src/interp/int-top.boot
index f4c0240b..e7db6a29 100644
--- a/src/interp/int-top.boot
+++ b/src/interp/int-top.boot
@@ -162,7 +162,7 @@ intloopReadConsole(b, n)==
not $leanMode and printPrompt()
intloopReadConsole('"", c)
a:=strconc(b,a)
- ncloopEscaped a => intloopReadConsole(SUBSEQ(a, 0, (# a) - 1),n)
+ ncloopEscaped a => intloopReadConsole(subSequence(a, 0, #a - 1),n)
c := intloopProcessString(a, n)
not $leanMode and printPrompt()
intloopReadConsole('"", c)
@@ -182,7 +182,7 @@ intloopPrefix?(prefix,whole) ==
spaces := spaces + 1
else leading := false
spaces = wlen => nil
- if good then SUBSTRING(whole,spaces,nil) else good
+ if good then subString(whole,spaces) else good
intloopProcess(n,interactive,s)==
@@ -418,7 +418,7 @@ ncloopPrefix?(prefix,whole) ==
good:=true
for i in 0..#prefix-1 for j in 0.. while good repeat
good:= prefix.i = whole.j
- if good then SUBSTRING(whole,#prefix,nil) else good
+ if good then subString(whole,#prefix) else good
$ncmPhase := NIL
diff --git a/src/interp/interop.boot b/src/interp/interop.boot
index e900dabe..97c27601 100644
--- a/src/interp/interop.boot
+++ b/src/interp/interop.boot
@@ -111,7 +111,7 @@ StringToCompStr(str) ==
strconc(str, charString abstractChar 0)
CompStrToString(str) ==
- SUBSTRING(str, 0, (# str - 1))
+ subString(str, 0, #str - 1)
-- local garbage ends
runOldAxiomFunctor(:allArgs) ==
diff --git a/src/interp/intfile.boot b/src/interp/intfile.boot
index b362c134..bb09a699 100644
--- a/src/interp/intfile.boot
+++ b/src/interp/intfile.boot
@@ -46,7 +46,7 @@ shoeIntern (s)==
f:=first s
# f < 8 => shoeIntern rest s
f.0=char " " =>shoeIntern rest s
- a:=INTERN SUBSTRING (f,0,8)
+ a:=INTERN subString(f,0,8)
[b,c]:= shoeStrings rest s
SETF(GET (a,"MSGS"),b)
shoeIntern c
diff --git a/src/interp/mark.boot b/src/interp/mark.boot
index ba127ef7..e1fa19b0 100644
--- a/src/interp/mark.boot
+++ b/src/interp/mark.boot
@@ -518,7 +518,7 @@ markOrigName x ==
s := PNAME op
k := charPosition(char '_;, s, 0)
k > MAXINDEX s => nil
- origName := INTERN SUBSTRING(s, k + 1, nil)
+ origName := INTERN subString(s, k + 1)
property(op, 'ORIGNAME) := origName
REMPROP(op,'PNAME)
markOrigName op
@@ -1250,7 +1250,7 @@ changeToEqualEqual lines ==
while (m := m + 1) <= N and alphabetic? (x . m) repeat nil
m = n + 2 => nil
not upperCase? (x . (n + 4)) => nil
- word := INTERN SUBSTRING(x, n + 4, m - n - 4)
+ word := INTERN subString(x, n + 4, m - n - 4)
expandedWord := macroExpand(word,$e)
not (word in '(Record Union Mapping)
or getConstructorFormFromDB opOf expandedWord) => nil
@@ -1275,10 +1275,10 @@ moveImportsAfterDefinitions lines ==
m < 0 => nil
((n := charPosition($blank ,x,1 + m)) < N) and
substring?('"== ", x, n+1) =>
- name := SUBSTRING(x, m, n - m)
+ name := subString(x, m, n - m)
defineAlist := [[name, :i], :defineAlist]
(k := leadingSubstring?('"import from ",x, 0)) =>
- importAlist := [[SUBSTRING(x,k + 12,nil), :i], :importAlist]
+ importAlist := [[subString(x,k + 12), :i], :importAlist]
-- pp defineAlist
-- pp importAlist
for [name, :i] in defineAlist repeat
diff --git a/src/interp/match.boot b/src/interp/match.boot
index 2411f599..aee99c37 100644
--- a/src/interp/match.boot
+++ b/src/interp/match.boot
@@ -104,19 +104,19 @@ patternCheck pattern == main where
-- pp c
$oldWild :local := $wildCard
$wildCard := c
- pattern := mknew(pattern,first u,rest u,SUBSTRING(pattern,0,first u))
+ pattern := mknew(pattern,first u,rest u,subString(pattern,0,first u))
-- sayBrightlyNT ['"Replacing pattern by"]
-- pp pattern
pattern
mknew(old,i,r,new) ==
new := strconc(new,old.(i + 1)) --add underscored character to string
- null r => strconc(new,subWild(SUBSTRING(old,i + 2,nil),0))
+ null r => strconc(new,subWild(subString(old,i + 2),0))
mknew(old,first r,rest r,
- strconc(new,subWild(SUBSTRING(old,i + 2,(first r) - i - 1),i + 1)))
+ strconc(new,subWild(subString(old,i + 2,(first r) - i - 1),i + 1)))
subWild(s,i) ==
(k := charPosition($oldWild,s,i)) < #s =>
- strconc(SUBSTRING(s,i,k - i),$wildCard,subWild(s,k + 1))
- SUBSTRING(s,i,nil)
+ strconc(subString(s,i,k - i),$wildCard,subWild(s,k + 1))
+ subString(s,i)
pos(c,s) ==
i := 0
n := MAXINDEX s
@@ -152,14 +152,14 @@ basicMatch?(pattern,target) ==
if p ~= 0 then
-- pattern does not begin with a wild card
ans := 0
- s := SUBSTRING(pattern,0,p) --[pattern.i for i in 0..p-1]
+ s := subString(pattern,0,p) --[pattern.i for i in 0..p-1]
not substring?(s,target,0) => return false
else if n = 1 then return 0
i := p -- starting position for searching the target
q := charPosition($wildCard,pattern,p+1)
ltarget := #target
while q ~= n repeat
- s := SUBSTRING(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
+ s := subString(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
i := stringPosition(s,target,i)
if null ans then ans := stringPosition(s,target,p)
-- for patterns beginning with wildcard, ans gives position of first match
@@ -170,7 +170,7 @@ basicMatch?(pattern,target) ==
returnFlag => false
if p ~= q-1 then
-- pattern does not end with a wildcard
- s := SUBSTRING(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
+ s := subString(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
if not suffix?(s,target) then return false
if null ans then ans := 1 --pattern is a word preceded by a *
ans
@@ -187,19 +187,19 @@ matchAnySegment?(pattern,target,k,nc) == --k = start position; nc=#chars or NIL
null nc => true
m <= k + nc - n
if k ~= 0 and nc then
- target := SUBSTRING(target,k,nc)
+ target := subString(target,k,nc)
k := 0
if p ~= 0 then
-- pattern does not begin with a wild card
ans := 0
- s := SUBSTRING(pattern,0,p) --[pattern.i for i in 0..p-1]
+ s := subString(pattern,0,p) --[pattern.i for i in 0..p-1]
not substring?(s,target,k) => return false
else if n = 1 then return true
i := p + k -- starting position for searching the target
q := charPosition($wildCard,pattern,p+1)
ltarget := #target
while q ~= n repeat
- s := SUBSTRING(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
+ s := subString(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
i := stringPosition(s,target,i)
if i = ltarget then return (returnFlag := true)
i := i + #s
@@ -208,7 +208,7 @@ matchAnySegment?(pattern,target,k,nc) == --k = start position; nc=#chars or NIL
returnFlag => false
if p ~= q-1 then
-- pattern does not end with a '&
- s := SUBSTRING(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
+ s := subString(pattern,p+1,q-p-1) --[pattern.i for i in (p+1..q-1)]
if not suffix?(s,target) then return false
if null ans then ans := 1 --pattern is a word preceded by a *
true
diff --git a/src/interp/msgdb.boot b/src/interp/msgdb.boot
index 6d7ed990..9d650bd6 100644
--- a/src/interp/msgdb.boot
+++ b/src/interp/msgdb.boot
@@ -179,7 +179,7 @@ substituteSegmentedMsg(msg,args) ==
-- x is a special case
(n > 2) and c = char "%" and x.1 = char "k" =>
- l := NCONC(nreverse pkey SUBSTRING(x,2,NIL),l)
+ l := NCONC(nreverse pkey subString(x,2),l)
-- ?name gets replaced by '"Push PF10" or '"Type >b (enter)"
(x.0 = char "?") and n > 1 and (v := pushOrTypeFuture(INTERN x,nil)) =>
@@ -581,7 +581,7 @@ brightPrint0(x,out == $OutputStream) ==
-- it without the backslash.
STRINGLENGTH x > 1 and x.0 = char "\" and x.1 = char "%" =>
- sayString(SUBSTRING(x,1,NIL),out)
+ sayString(subString(x,1),out)
x = '"%l" =>
sayNewLine(out)
for i in 1..$MARG repeat sayString('" ",out)
@@ -642,7 +642,7 @@ blankIndicator x ==
if IDENTP x then x := PNAME x
not string? x or MAXINDEX x < 1 => nil
x.0 = char '% and x.1 = char 'x =>
- MAXINDEX x > 1 => readInteger SUBSTRING(x,2,nil)
+ MAXINDEX x > 1 => readInteger subString(x,2)
1
nil
diff --git a/src/interp/newfort.boot b/src/interp/newfort.boot
index 4280503c..a31aefe2 100644
--- a/src/interp/newfort.boot
+++ b/src/interp/newfort.boot
@@ -320,8 +320,8 @@ fortran2Lines1 f ==
-- legal format. MCD
if (ll < $fortLength) and (ll + sff) > $fortLength then
spaceLeft := $fortLength - ll
- line := strconc(line,SUBSEQ(ff,0,spaceLeft))
- ff := SUBSEQ(ff,spaceLeft)
+ line := strconc(line,subSequence(ff,0,spaceLeft))
+ ff := subSequence(ff,spaceLeft)
lines := [line,:lines]
ll := $fortIndent
line := contPref
@@ -619,7 +619,7 @@ fortFormatLabelledIfGoto(switch,label1,label2) ==
labString := STRINGIMAGE label1
for i in #(labString)..5 repeat labString := strconc(labString,'" ")
lines := fortran2Lines nreverse [:nreverse l,'"IF(",:r]
- lines := [strconc(labString,SUBSEQ(first lines,6)),:rest lines]
+ lines := [strconc(labString,subSequence(first lines,6)),:rest lines]
checkLines lines
fortFormatIf(switch) ==
@@ -796,7 +796,7 @@ fortPre1 e ==
imags := ['"%i","%i"]
member(e, imags) => ['"CMPLX",fortPre1(0),fortPre1(1)]
-- other special objects
- STRINGIMAGE(e).0 = "%" => SUBSEQ(STRINGIMAGE e,1)
+ STRINGIMAGE(e).0 = char "%" => subSequence(STRINGIMAGE e,1)
atom e => e
[op, :args] := e
member(op,["**" , '"**"]) =>
@@ -854,11 +854,11 @@ checkPrecision e ==
string?(e) and codePoint CHAR(e,0) = 34 => e
e := delete(char " ",STRINGIMAGE e)
$fortranPrecision = "double" =>
- iPart := SUBSEQ(e,0,(period:=POSITION(char ".",e))+1)
- expt := if ePos := POSITION(char "E",e) then SUBSEQ(e,ePos+1) else "0"
+ iPart := subSequence(e,0,(period:=POSITION(char ".",e))+1)
+ expt := if ePos := POSITION(char "E",e) then subSequence(e,ePos+1) else "0"
rPart :=
- ePos => SUBSEQ(e,period+1,ePos)
- period+1 < # e => SUBSEQ(e,period+1)
+ ePos => subSequence(e,period+1,ePos)
+ period+1 < # e => subSequence(e,period+1)
"0"
strconc(iPart,rPart,'"D",expt)
e
diff --git a/src/interp/osyscmd.boot b/src/interp/osyscmd.boot
index 264bc3e2..c8623bbf 100644
--- a/src/interp/osyscmd.boot
+++ b/src/interp/osyscmd.boot
@@ -43,7 +43,7 @@ InterpExecuteSpadSystemCommand string ==
ExecuteInterpSystemCommand string ==
string := intProcessSynonyms(string)
$currentLine:local:=string
- string:=SUBSTRING(string,1,nil)
+ string:=subString(string,1)
string = '"" => nil
doSystemCommand string
diff --git a/src/interp/pathname.boot b/src/interp/pathname.boot
index 5887354a..3a741db8 100644
--- a/src/interp/pathname.boot
+++ b/src/interp/pathname.boot
@@ -115,7 +115,7 @@ newMKINFILENAM(infile) ==
if fn = '"*" or fn = '"NIL" then sayKeyedMsg("S2IL0016",NIL)
else sayKeyedMsg("S2IL0003",[namestring file])
ans := queryUserKeyedMsg("S2IL0017",NIL)
- if (#(ans) > 0) and ('")" = SUBSTRING(ans,0,1)) then n := 2
+ if (#(ans) > 0) and ('")" = subString(ans,0,1)) then n := 2
else n := 1
nfn := UPCASE STRING2ID_-N(ans,n)
(nfn = 0) or (nfn = 'QUIT) =>
diff --git a/src/interp/pf2atree.boot b/src/interp/pf2atree.boot
index 42453835..8bbd29be 100644
--- a/src/interp/pf2atree.boot
+++ b/src/interp/pf2atree.boot
@@ -417,15 +417,15 @@ pfSequence2Atree0(seqList, pf) ==
-- float2Atree num ==
-- eIndex := SEARCH('"e", num)
-- mantPart :=
--- eIndex => SUBSEQ(num, 0, eIndex)
+-- eIndex => subSequence(num, 0, eIndex)
-- num
--- expPart := (eIndex => READ_-FROM_-STRING SUBSEQ(num, eIndex+1); 0)
+-- expPart := (eIndex => READ_-FROM_-STRING subSequence(num, eIndex+1); 0)
-- dotIndex := SEARCH('".", mantPart)
-- intPart :=
--- dotIndex => READ_-FROM_-STRING SUBSEQ(mantPart, 0, dotIndex)
+-- dotIndex => READ_-FROM_-STRING subSequence(mantPart, 0, dotIndex)
-- READ_-FROM_-STRING mantPart
-- fracPartString :=
--- dotIndex => SUBSEQ(mantPart, dotIndex+1)
+-- dotIndex => subSequence(mantPart, dotIndex+1)
-- '"0"
-- bfForm := MAKE_-FLOAT(intPart, READ_-FROM_-STRING fracPartString,
-- # fracPartString, expPart)
diff --git a/src/interp/pf2sex.boot b/src/interp/pf2sex.boot
index 1d7b6fb8..d00e4cd7 100644
--- a/src/interp/pf2sex.boot
+++ b/src/interp/pf2sex.boot
@@ -185,7 +185,7 @@ pfLiteral2Sex pf ==
MULTIPLE_-VALUE_-BIND(part1 pos1,
readInteger(txt,KEYWORD::JUNK_-ALLOWED,true),
if pos1 = #txt then part1
- else readInteger(SUBSTRING(txt,pos1+1,nil),
+ else readInteger(subString(txt,pos1+1),
KEYWORD::RADIX, part1))
type = 'string or type = 'char =>
pfLiteralString pf
@@ -385,15 +385,15 @@ pfSequence2Sex0 seqList ==
float2Sex num ==
eIndex := SEARCH('"e", num)
mantPart :=
- eIndex => SUBSEQ(num, 0, eIndex)
+ eIndex => subSequence(num, 0, eIndex)
num
- expPart := (eIndex => READ_-FROM_-STRING SUBSEQ(num, eIndex+1); 0)
+ expPart := (eIndex => READ_-FROM_-STRING subSequence(num, eIndex+1); 0)
dotIndex := SEARCH('".", mantPart)
intPart :=
- dotIndex => READ_-FROM_-STRING SUBSEQ(mantPart, 0, dotIndex)
+ dotIndex => READ_-FROM_-STRING subSequence(mantPart, 0, dotIndex)
READ_-FROM_-STRING mantPart
fracPartString :=
- dotIndex => SUBSEQ(mantPart, dotIndex+1)
+ dotIndex => subSequence(mantPart, dotIndex+1)
'"0"
bfForm := MAKE_-FLOAT(intPart, READ_-FROM_-STRING fracPartString,
# fracPartString, expPart)
diff --git a/src/interp/pspad1.boot b/src/interp/pspad1.boot
index a9d40822..a89253f9 100644
--- a/src/interp/pspad1.boot
+++ b/src/interp/pspad1.boot
@@ -152,8 +152,8 @@ mkCommentLines [.,n,.,s] ==
breakComments s ==
n:= containsString(s,PNAME "ENDOFLINECHR") =>
- #s>n+12 => [SUBSTRING(s,0,n),:breakComments SUBSTRING(s,n+12,NIL)]
- [SUBSTRING(s,0,n)]
+ #s>n+12 => [subString(s,0,n),:breakComments subString(s,n+12)]
+ [subString(s,0,n)]
[s]
containsString(x,y) ==
diff --git a/src/interp/pspad2.boot b/src/interp/pspad2.boot
index c5bf7aa8..6f23df70 100644
--- a/src/interp/pspad2.boot
+++ b/src/interp/pspad2.boot
@@ -496,9 +496,9 @@ consComments(s,plusPlus) ==
while (m := MAXINDEX s) >= columnsLeft repeat
k := or/[i for i in (columnsLeft - 1)..1 by -1 | s.i = $charBlank]
k := (k => k + 1; columnsLeft)
- piece := SUBSTRING(s,0,k)
+ piece := subString(s,0,k)
formatDoCommentLine [plusPlus,piece]
- s := SUBSTRING(s,k,nil)
+ s := subString(s,k)
formatDoCommentLine [plusPlus,s]
undent()
$m
@@ -508,7 +508,7 @@ consCommentsTran s ==
k := or/[i for i in 0..(m - 7) | substring?('"\spad{",s,i)] =>
r := charPosition(char '_},s,k + 6)
r = m + 1 => s
- strconc(SUBSTRING(s,0,k),'"`",SUBSTRING(s,k+6,r-k-6),'"'",consCommentsTran SUBSTRING(s,r+1,nil))
+ strconc(subString(s,0,k),'"`",subString(s,k+6,r-k-6),'"'",consCommentsTran subString(s,r+1))
s
formatDoCommentLine line ==
@@ -564,7 +564,7 @@ string2PrintImage s ==
ident2PrintImage s ==
m := MAXINDEX s
- if m > 1 and s.(m - 1) = $underScore then s := strconc(SUBSTRING(s,0,m-1),s.m)
+ if m > 1 and s.(m - 1) = $underScore then s := strconc(subString(s,0,m-1),s.m)
u:= GETSTR (2*# s)
if not (alphabetic? s.0 or s.0 = char "$") then SUFFIX('__,u)
u:= SUFFIX(s.0,u)
diff --git a/src/interp/record.boot b/src/interp/record.boot
index 7313b81c..c67d1922 100644
--- a/src/interp/record.boot
+++ b/src/interp/record.boot
@@ -238,14 +238,14 @@ htFile2InputFile(pathname,:option) ==
htCommandToInputLine s == fn(s,0) where fn(s,init) ==
--similar to htTrimAtBackSlash except removes all \
k := or/[i for i in init..MAXINDEX s | s.i = char '_\] =>
- member(s.(k + 1),[char 'f,char 'b]) => SUBSTRING(s,init,k - init)
- strconc(SUBSTRING(s,init,k - init),fn(s,k + 1))
- SUBSTRING(s,init,nil)
+ member(s.(k + 1),[char 'f,char 'b]) => subString(s,init,k - init)
+ strconc(subString(s,init,k - init),fn(s,k + 1))
+ subString(s,init)
htTrimAtBackSlash s ==
backslash := char '_\
k := or/[i for i in 0..MAXINDEX s | s.i = backslash
- and member(s.(i + 1),[char 'f,char 'b])] => SUBSTRING(s,0,k - 1)
+ and member(s.(i + 1),[char 'f,char 'b])] => subString(s,0,k - 1)
s
htMkPath(directory,name,typ) ==
@@ -269,7 +269,7 @@ recordAndPrintTest md == --called by recordAndPrint
x is [y,:r] =>
y.(k := MAXINDEX y) = char '__ =>
u := fn r
- [strconc(SUBSTRING(y,0,k),'" ",first u),:rest u]
+ [strconc(subString(y,0,k),'" ",first u),:rest u]
[y,:fn r]
x
output := nreverse $mkTestOutputStack -- set by maPrin
diff --git a/src/interp/scan.boot b/src/interp/scan.boot
index 4aacb056..be05beec 100644
--- a/src/interp/scan.boot
+++ b/src/interp/scan.boot
@@ -291,7 +291,7 @@ lineoftoks(s)==
toks := []
a := incPrefix?('"command",1,$ln)
a =>
- $ln := SUBSTRING($ln,8,nil)
+ $ln := subString($ln,8)
b := dqUnit constoken($ln,$linepos,["command",$ln],0)
[[[b,s]],:$r]
while $n<$sz repeat
@@ -428,12 +428,12 @@ startsNegComment?()==
scanNegComment()==
n := $n
$n := $sz
- lfnegcomment SUBSTRING($ln,n,nil)
+ lfnegcomment subString($ln,n)
scanComment()==
n := $n
$n := $sz
- lfcomment SUBSTRING($ln,n,nil)
+ lfcomment subString($ln,n)
scanPunct()==
sss := subMatch($ln,$n)
@@ -482,12 +482,12 @@ scanS()==
$n:=$sz
ncSoftError([$linepos,:lnExtraBlanks $linepos+$n],
"S2CN0001",[])
- SUBSTRING($ln,n,nil)
+ subString($ln,n)
mn = strsym =>
$n:=mn+1
- SUBSTRING($ln,n,mn-n)
+ subString($ln,n,mn-n)
--escape is found first
- str := SUBSTRING($ln,n,mn-n)-- before escape
+ str := subString($ln,n,mn-n)-- before escape
$n := mn+1
a := scanEsc() -- case of end of line when false
b :=
@@ -527,9 +527,9 @@ scanW(b)== -- starts pointing to first char
endid=l or QENUM($ln,endid) ~= ESCAPE =>
-- not escaped
$n:=endid
- [b,SUBSTRING($ln,n1,endid-n1)] -- l overflows
+ [b,subString($ln,n1,endid-n1)] -- l overflows
-- escape and endid ~= l
- str := SUBSTRING($ln,n1,endid-n1)
+ str := subString($ln,n1,endid-n1)
$n := endid+1
a := scanEsc()
bb :=
@@ -559,9 +559,9 @@ spleI1(dig,zro) ==
$n := $n+1
$n = l or QENUM($ln,$n) ~= ESCAPE =>
n = $n and zro => '"0"
- SUBSTRING($ln,n,$n-n)
+ subString($ln,n,$n-n)
-- escaped
- str:=SUBSTRING($ln,n,$n-n)
+ str:=subString($ln,n,$n-n)
$n:=$n+1
a:=scanEsc()
bb:=spleI1(dig,zro)-- escape, anyno spaces are ignored
diff --git a/src/interp/server.boot b/src/interp/server.boot
index b1b6658f..cf7a6a01 100644
--- a/src/interp/server.boot
+++ b/src/interp/server.boot
@@ -152,7 +152,7 @@ parseAndEvalStr string ==
parseAndEvalStr1 string ==
string.0 = char ")" =>
- doSystemCommand SUBSEQ(string, 1)
+ doSystemCommand subSequence(string, 1)
processInteractive(ncParseFromString string, NIL)
protectedEVAL x ==
diff --git a/src/interp/showimp.boot b/src/interp/showimp.boot
index f7456994..f60160d8 100644
--- a/src/interp/showimp.boot
+++ b/src/interp/showimp.boot
@@ -81,7 +81,7 @@ showImp(dom,:options) ==
u := SORTBY('CDDR,defexports)
while u repeat
[.,.,:key] := first u
- defop := INTERN(SUBSTRING((s := PNAME first key),0,MAXINDEX s))
+ defop := INTERN(subString((s := PNAME first key),0,MAXINDEX s))
domainForm := [defop,:CDDR key]
sayBrightly ["Default functions from",:bright form2String domainForm,'":"]
u := showDomainsOp1(u,key)
diff --git a/src/interp/slam.boot b/src/interp/slam.boot
index 82d234c6..cc71b84b 100644
--- a/src/interp/slam.boot
+++ b/src/interp/slam.boot
@@ -108,7 +108,7 @@ isRecurrenceRelation(op,body,minivectorName) ==
diffSlot := or/[i for i in 0.. for x in $minivector | EQ(x,diffCell)]
or return nil
--Check general term for references to just the k previous values
- sharpPosition := readInteger SUBSTRING(sharpArg,1,nil)
+ sharpPosition := readInteger subString(sharpArg,1)
al:= mkDiffAssoc(op,generalTerm,k,sharpPosition,sharpArg,diffSlot,minivectorName)
null al => false
"$failed" in al => false
diff --git a/src/interp/sys-utility.boot b/src/interp/sys-utility.boot
index f113444f..e4722a68 100644
--- a/src/interp/sys-utility.boot
+++ b/src/interp/sys-utility.boot
@@ -372,5 +372,11 @@ writeByteToStreamSocket(s,b) ==
makeByteBuffer(n,b == 0) ==
MAKE_-ARRAY(n,KEYWORD::ELEMENT_-TYPE,"%Byte",KEYWORD::INITIAL_-ELEMENT,b)
+++ return the sub-string of `s' starting from `f'.
+++ When non-nil, `n' designates the length of the sub-string.
+subString(s,f,n == nil) ==
+ n = nil => subSequence(s,f)
+ subSequence(s,f,f + n)
+
quoteForm t ==
["QUOTE",t]
diff --git a/src/interp/topics.boot b/src/interp/topics.boot
index 656a7dee..e02eeaee 100644
--- a/src/interp/topics.boot
+++ b/src/interp/topics.boot
@@ -100,7 +100,7 @@ mkTopicHashTable() == --given $groupAssoc = ((extended .
line := trimString line --3-n ...
m := MAXINDEX line -- (blank line) ...
line.m ~= (char '_:) => systemError('"wrong heading")
- con := INTERN SUBSTRING(line,0,m)
+ con := INTERN subString(line,0,m)
alist := [lst while not EOFP instream and
not (blankLine? (line := READLINE instream)) and
line.0 ~= char '_- for i in 1..
@@ -137,7 +137,7 @@ string2OpAlist s ==
upperCase? s.k => nil --skip constructor names
k := 0
while (k := skipBlanks(s,k,m)) repeat
- acc := [INTERN SUBSTRING(s,k,-k + (k := charPosition(char '_ ,s,k + 1))),:acc]
+ acc := [INTERN subString(s,k,-k + (k := charPosition(char '_ ,s,k + 1))),:acc]
acc := nreverse acc
--now add defaults
if u := getDefaultProps first acc then acc := [first acc,:u,:rest acc]
diff --git a/src/interp/trace.boot b/src/interp/trace.boot
index 3ccfa57a..28fa8cb1 100644
--- a/src/interp/trace.boot
+++ b/src/interp/trace.boot
@@ -641,7 +641,7 @@ letPrint3(x,xval,printfn,currentFunction) ==
getAliasIfTracedMapParameter(x,currentFunction) ==
isSharpVarWithNum x =>
aliasList:= get(currentFunction,'alias,$InteractiveFrame) =>
- aliasList.(STRING2PINT_-N(SUBSTRING(PNAME x,1,NIL),1)-1)
+ aliasList.(STRING2PINT_-N(subString(PNAME x,1,NIL),1)-1)
x
getBpiNameIfTracedMap(name) ==
diff --git a/src/interp/word.boot b/src/interp/word.boot
index 16e26324..fc553899 100644
--- a/src/interp/word.boot
+++ b/src/interp/word.boot
@@ -99,7 +99,7 @@ getListOfFunctionNames(fnames) ==
stream:= DEFIOSTREAM(['(MODE . INPUT),['FILE,fn,'DIRECT,'_*]],80,0)
while (not PLACEP (x:= readLine stream)) repeat
(s := # x) < 26 => 'iterate
- res:= [SUBSTRING(x,26,NIL),:res]
+ res:= [subString(x,26),:res]
SHUT stream
res
@@ -112,12 +112,12 @@ wordsOfString1(s,j) ==
tailWords:=
isBreakCharacter s.(k+1) =>
n:= or/[i for i in (k+2)..(MAXINDEX(s)-1)|not isBreakCharacter s.i]
- null n => [SUBSTRING(s,k,nil)]
- n > k+1 => [SUBSTRING(s,k,n-k-1),:wordsOfString1(s,n-1)]
+ null n => [subString(s,k)]
+ n > k+1 => [subString(s,k,n-k-1),:wordsOfString1(s,n-1)]
m := or/[i for i in (k+2)..(MAXINDEX(s)-1) | isBreakCharacter s.i] =>
- [SUBSTRING(s,k,m-k),:wordsOfString1(s,m)]
- [SUBSTRING(s,k,nil)]
- k > j+1 => [SUBSTRING(s,j,k-j),:tailWords]
+ [subString(s,k,m-k),:wordsOfString1(s,m)]
+ [subString(s,k)]
+ k > j+1 => [subString(s,j,k-j),:tailWords]
tailWords
nil