summaryrefslogtreecommitdiff
path: root/ipl/progs/zipsort.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/zipsort.icn')
-rw-r--r--ipl/progs/zipsort.icn68
1 files changed, 68 insertions, 0 deletions
diff --git a/ipl/progs/zipsort.icn b/ipl/progs/zipsort.icn
new file mode 100644
index 0000000..1faa704
--- /dev/null
+++ b/ipl/progs/zipsort.icn
@@ -0,0 +1,68 @@
+############################################################################
+#
+# File: zipsort.icn
+#
+# Subject: Program to sort mailing labels by ZIP code
+#
+# Author: Ralph E. Griswold
+#
+# Date: November 17, 1994
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# This program sorts labels produced by labels in ascending
+# order of their postal zip codes.
+#
+# Option:
+#
+# The option -d n sets the number of lines per label to n.
+# The default is 9. This value must agree with the value used to
+# format the labels.
+#
+# Zip Codes:
+#
+# The zip code must be the last nonblank string at the
+# end of the label. It must consist of digits but may have an
+# embedded dash for extended zip codes. If a label does not end
+# with a legal zip code, it is placed after all labels with legal
+# zip codes. In such a case, an error messages also is written to
+# standard error output.
+#
+############################################################################
+#
+# Links: options
+#
+# See also: labels.icn
+#
+############################################################################
+
+link options
+
+procedure main(args)
+ local t, a, label, zip, y, lsize, opts
+
+ opts := options(args,"d+")
+ lsize := (0 < integer(opts["d"])) | 9
+
+ t := table("")
+ repeat {
+ label := ""
+ every 1 to lsize do
+ label ||:= read() || "\n" | break break
+ label ? {
+ while tab(upto(' ')) do tab(many(' '))
+ zip := tab(upto('-') | 0)
+ zip := integer(zip) | write(&errout,"*** illegal zipcode: ",label)
+ }
+ t[zip] ||:= label
+ }
+
+ a := sort(t,3)
+ while get(a) do
+ writes(get(a))
+
+end