home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # File: adlsort.icn
- #
- # Subject: Program to sort address list entries
- #
- # Author: Ralph E. Griswold
- #
- # Date: December 30, 1991
- #
- ###########################################################################
- #
- # This program sorts entries in address lists. The options are:
- #
- # -c by country
- # -n by name
- # -z by ZIP code
- #
- # The default is -n. If more than one option is specified, the
- # order of dominance is -n -z -c.
- #
- ############################################################################
- #
- # See also: address.doc, adlcount.icn, adlfilter.icn, adllist.icn,
- # adlsort,icn, labels.icn
- #
- # Links: adlutils, options, namepfx
- #
- ############################################################################
-
- link adlutils, options, namepfx
-
- procedure main(args)
- local item, item_lists, opts, sort_method, get_item, add, names, prefixes
- local prefix
-
- item_lists := table()
-
- sort_method := "n" # The default is sorting by name.
- get_item := get_lastname
-
- opts := options(args,"cnz")
-
- if \opts["c"] then { # If more than one given, last applies.
- sort_method := "c"
- get_item := get_country
- }
- if \opts["z"] then {
- sort_method := "z"
- get_item := get_zipcode
- }
- if \opts["n"] then {
- sort_method := "n"
- get_item := get_lastname
- }
-
- while add := nextadd() do {
- item := get_item(add)
- /item_lists[item] := []
- put(item_lists[item],add)
- }
-
- item_lists := sort(item_lists,3)
-
- if sort_method == ("c" | "z") then {
- while get(item_lists) do
- every writeadd(!get(item_lists))
- }
-
- else if sort_method == "n" then {
- while get(item_lists) do {
- names := get(item_lists)
- if *names = 1 then writeadd(names[1]) # avoid flap for common case
- else {
- prefixes := table()
- every add := !names do {
- prefix := namepfx(add.text)
- /prefixes[prefix] := []
- put(prefixes[prefix],add)
- }
- prefixes := sort(prefixes,3)
- while get(prefixes) do
- every writeadd(!get(prefixes))
- }
- }
- }
-
- end
-