summaryrefslogtreecommitdiff
path: root/ipl/procs/scanmodl.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/procs/scanmodl.icn')
-rw-r--r--ipl/procs/scanmodl.icn49
1 files changed, 49 insertions, 0 deletions
diff --git a/ipl/procs/scanmodl.icn b/ipl/procs/scanmodl.icn
new file mode 100644
index 0000000..540139e
--- /dev/null
+++ b/ipl/procs/scanmodl.icn
@@ -0,0 +1,49 @@
+############################################################################
+#
+# File: scanmodl.icn
+#
+# Subject: Procedures to model string scanning
+#
+# Author: Ralph E. Griswold
+#
+# Date: May 30, 1993
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# These procedures model string scanning:
+#
+# e1 ? e2 -> Escan(Bscan(e1, e2)
+#
+# See Icon Analyst 6, pp. 1-2.
+#
+############################################################################
+
+record ScanEnvir(subject, pos)
+
+procedure Bscan(e1)
+ local OuterEnvir
+ OuterEnvir := ScanEnvir(&subject, &pos)
+ &subject := e1
+ &pos := 1
+ suspend OuterEnvir
+ &subject := OuterEnvir.subject
+ &pos := OuterEnvir.pos
+ fail
+end
+
+procedure Escan(OuterEnvir, e2)
+ local InnerEnvir
+ InnerEnvir := ScanEnvir(&subject, &pos)
+ &subject := OuterEnvir.subject
+ &pos := OuterEnvir.pos
+ suspend e2
+ OuterEnvir.subject := &subject
+ OuterEnvir.pos := &pos
+ &subject := InnerEnvir.subject
+ &pos := InnerEnvir.pos
+ fail
+end