aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/spp/rpp/ratlibr/maksub.r
diff options
context:
space:
mode:
Diffstat (limited to 'unix/boot/spp/rpp/ratlibr/maksub.r')
-rw-r--r--unix/boot/spp/rpp/ratlibr/maksub.r34
1 files changed, 34 insertions, 0 deletions
diff --git a/unix/boot/spp/rpp/ratlibr/maksub.r b/unix/boot/spp/rpp/ratlibr/maksub.r
new file mode 100644
index 00000000..6dd5e049
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibr/maksub.r
@@ -0,0 +1,34 @@
+include defs
+
+# maksub --- make substitution string in sub
+
+ integer function maksub (arg, from, delim, sub)
+ character arg (MAXARG), delim, sub (MAXPAT)
+ integer from
+
+ character esc, type
+
+ integer i, j, junk
+ integer addset
+
+ j = 1
+ for (i = from; arg (i) != delim & arg (i) != EOS; i = i + 1)
+ if (arg (i) == AND) {
+ junk = addset (DITTO, sub, j, MAXPAT)
+ junk = addset (0, sub, j, MAXPAT)
+ }
+ else if (arg (i) == ESCAPE & type (arg (i + 1)) == DIGIT) {
+ i = i + 1
+ junk = addset (DITTO, sub, j, MAXPAT)
+ junk = addset (arg (i) - DIG0, sub, j, MAXPAT)
+ }
+ else
+ junk = addset (esc (arg, i), sub, j, MAXPAT)
+ if (arg (i) != delim) # missing delimiter
+ maksub = ERR
+ else if (addset (EOS, sub, j, MAXPAT) == NO) # no room
+ maksub = ERR
+ else
+ maksub = i
+ return
+ end