URI: 
       Add number support to umnlisting.dcgi. - geomyidae - A small C-based gopherd.
  HTML git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
   DIR commit 5f8346a44327a384b989b92ec9936389ea0ff58b
   DIR parent a541c4f4710d4e11847d082a623e11ab8fca6c31
  HTML Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sun,  3 Apr 2022 23:59:22 +0200
       
       Add number support to umnlisting.dcgi.
       
       Noone has done this before for all cases!
       
       Diffstat:
         M cgi-examples/umnlisting.dcgi        |      52 ++++++++++++++++++++++++++-----
       
       1 file changed, 45 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/cgi-examples/umnlisting.dcgi b/cgi-examples/umnlisting.dcgi
       @@ -96,12 +96,15 @@ def main(args):
                        fd.close()
        
                outputlinks = {}
       +        numblinks = {}
        
                linkspath = "%s/.Links" % (basedir)
                if os.path.exists(linkspath):
                        linkslinks = parselinksfile(linkspath)
                        for linkkey in linkslinks.keys():
                                outputlinks[linkkey]  = linkslinks[linkkey]
       +                        if "number" in linkslinks[linkkey]:
       +                                numblinks[linkkey] = linkslinks[linkkey]
        
                entries = os.listdir(basedir)
                for entry in entries:
       @@ -116,6 +119,8 @@ def main(args):
                        if os.path.exists(capspath):
                                caplink = parselinksfile(capspath, entrylink)
                        outputlinks[entrylink["path"]] = entrylink
       +                if "number" in entrylink:
       +                        numblinks[entrylink["path"]] = entrylink
        
                namespath = "%s/.names" % (basedir)
                if os.path.exists(namespath):
       @@ -128,6 +133,9 @@ def main(args):
                                                        namelink[key]
                                else:
                                        outputlinks[namekey] = nameslinks[namekey]
       +                        if "number" in outputlinks[namekey]:
       +                                numblinks[namekey] = outputlinks[namekey]
       +
                displaylinks = {}
                for link in outputlinks.keys():
                        if "name" in outputlinks[link]:
       @@ -143,13 +151,41 @@ def main(args):
                                displaylinks[link] = link
        
                displaykeys = sorted(displaylinks)
       -        for key in displaykeys:
       -                path = displaylinks[key]
       -                if path == "./.Links" or \
       -                                path == "./.cap" or \
       -                                path == "./.names" or \
       -                                path == "./.abstract":
       -                        continue
       +        for dotfile in [".Links", ".names", ".cap", ".abstract"]:
       +                try:
       +                        displaykeys.remove(dotfile)
       +                except ValueError:
       +                        pass
       +
       +        # This is why the UMN format really sucks.
       +        numbers = {}
       +        for numb in numblinks.keys():
       +                link = outputlinks[numb]
       +                numbers[link["number"]] = outputlinks[numb]
       +                if "name" in link:
       +                        displaykeys.remove(link["name"])
       +                elif "path" in link:
       +                        if link["path"].startswith("./"):
       +                                displaykeys.remove(link["path"][2:])
       +                        else:
       +                                displaykeys.remove(link["path"])
       +
       +        curnumber = 1
       +        while 1:
       +                if curnumber in numbers.keys():
       +                        path = numbers[curnumber]["path"]
       +                        numbers.pop(curnumber)
       +                else:
       +                        key = displaykeys.pop()
       +                        path = displaylinks[key]
       +
       +                # Work on the rest of the numbered links, when no display
       +                # entries are left.
       +                if len(displaykeys) == 0:
       +                        if len(numbers) == 0:
       +                                break
       +                        randnumb = numbers.pop()
       +                        path = randnumb["path"]
        
                        link = outputlinks[path]
                        if "port" not in link:
       @@ -174,6 +210,8 @@ def main(args):
                        if "abstract" in link:
                                dcgifilterprint(link["abstract"].split("\n"))
        
       +                curnumber += 1
       +
                return 0
        
        if __name__ == "__main__":