aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/spp/rpp/rpprat/balpar.r
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /unix/boot/spp/rpp/rpprat/balpar.r
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'unix/boot/spp/rpp/rpprat/balpar.r')
-rw-r--r--unix/boot/spp/rpp/rpprat/balpar.r40
1 files changed, 40 insertions, 0 deletions
diff --git a/unix/boot/spp/rpp/rpprat/balpar.r b/unix/boot/spp/rpp/rpprat/balpar.r
new file mode 100644
index 00000000..8e0388b8
--- /dev/null
+++ b/unix/boot/spp/rpp/rpprat/balpar.r
@@ -0,0 +1,40 @@
+#-h- balpar 854 local 12/01/80 15:53:46
+# balpar - copy balanced paren string
+ include defs
+
+ subroutine balpar
+
+ character t, token (MAXTOK)
+ character gettok, gnbtok
+
+ integer nlpar
+
+ if (gnbtok (token, MAXTOK) != LPAREN) {
+ call synerr ("missing left paren.")
+ return
+ }
+ call outstr (token)
+ nlpar = 1
+ repeat {
+ t = gettok (token, MAXTOK)
+ if (t == SEMICOL | t == LBRACE | t == RBRACE | t == EOF) {
+ call pbstr (token)
+ break
+ }
+ if (t == NEWLINE) # delete newlines
+ token (1) = EOS
+ else if (t == LPAREN)
+ nlpar = nlpar + 1
+ else if (t == RPAREN)
+ nlpar = nlpar - 1
+ if (t == ALPHA)
+ call squash (token)
+ # else nothing special
+ call outstr (token)
+ } until (nlpar <= 0)
+
+ if (nlpar != 0)
+ call synerr ("missing parenthesis in condition.")
+
+ return
+ end