aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/spp/rpp/ratlibr/rmtabl.r
diff options
context:
space:
mode:
Diffstat (limited to 'unix/boot/spp/rpp/ratlibr/rmtabl.r')
-rw-r--r--unix/boot/spp/rpp/ratlibr/rmtabl.r27
1 files changed, 27 insertions, 0 deletions
diff --git a/unix/boot/spp/rpp/ratlibr/rmtabl.r b/unix/boot/spp/rpp/ratlibr/rmtabl.r
new file mode 100644
index 00000000..16a5d3d5
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibr/rmtabl.r
@@ -0,0 +1,27 @@
+include defs
+
+# rmtabl --- remove a symbol table, deleting all entries
+
+ subroutine rmtabl (st)
+ pointer st
+
+ DS_DECL(Mem, 1)
+
+ integer i
+
+ pointer walker, bucket, node
+
+ bucket = st
+ do i = 1, ST_HTABSIZE; {
+ bucket = bucket + 1
+ walker = Mem (bucket)
+ while (walker != LAMBDA) {
+ node = walker
+ walker = Mem (node + ST_LINK)
+ call dsfree (node)
+ }
+ }
+
+ call dsfree (st)
+ return
+ end