\n') printtree(f,tree,0,p) f.write('This page automatically created by \'newslist\' v. '+rcsrev+'.') f.write(time.ctime(time.time()) + '
')
    f.close()
# Printtree prints the groups as a bulleted list.  Groups with
# more than ')
        else:
            # Create a main list
            f.write('
')
        indent = indent + 1
    for i in kl:
        if i == '.':
            # Output a newsgroup
            f.write('
')
# Reading descriptions file ---------------------------------------
# This returns an array mapping group name to its description
def readdesc(descfile):
    global desc
    desc = {}
    if descfile == '':
        return
    try:
        d = open(descfile, 'r')
        print 'Reading descriptions...'
    except (IOError):
        print 'Failed to open description file ' + descfile
        return
    l = d.readline()
    while l != '':
        bits = string.split(l)
        try:
            grp = bits[0]
            dsc = string.join(bits[1:])
            if len(dsc)>1:
                desc[grp] = dsc
        except (IndexError):
            pass
        l = d.readline()
# Check that ouput directory exists, ------------------------------
# and offer to create it if not
def checkopdir(pagedir):
    if not os.path.isdir(pagedir):
        print 'Directory '+pagedir+' does not exist.'
        print 'Shall I create it for you? (y/n)'
        if sys.stdin.readline()[0] == 'y':
            try:
                os.mkdir(pagedir,0777)
            except:
                print 'Sorry - failed!'
                sys.exit(1)
        else:
            print 'OK. Exiting.'
            sys.exit(1)
# Read and write current local tree ----------------------------------
def readlocallist(treefile):
    print 'Reading current local group list...'
    tree = {}
    try:
        treetime = time.localtime(os.stat(treefile)[ST_MTIME])
    except:
        print '\n*** Failed to open local group cache '+treefile
        print 'If this is the first time you have run newslist, then'
        print 'use the -a option to create it.'
        sys.exit(1)
    treedate = '%02d%02d%02d' % (treetime[0] % 100 ,treetime[1], treetime[2])
    try:
        dump = open(treefile,'r')
        tree = marshal.load(dump)
        dump.close()
    except (IOError):
        print 'Cannot open local group list ' + treefile
    return (tree, treedate)
def writelocallist(treefile, tree):
    try:
        dump = open(treefile,'w')
        groups = marshal.dump(tree,dump)
        dump.close()
        print 'Saved list to '+treefile+'\n'
    except:
        print 'Sorry - failed to write to local group cache '+treefile
        print 'Does it (or its directory) have the correct permissions?'
        sys.exit(1)
# Return list of all groups on server -----------------------------
def getallgroups(server):
    print 'Getting list of all groups...'
    treedate='010101'
    info = server.list()[1]
    groups = []
    print 'Processing...'
    if skipempty:
        print '\nIgnoring following empty groups:'
    for i in info:
        grpname = string.split(i[0])[0]
        if skipempty and string.atoi(i[1]) < string.atoi(i[2]):
            print grpname+' ',
        else:
            groups.append(grpname)
    print '\n'
    if skipempty:
        print '(End of empty groups)'
    return groups
# Return list of new groups on server -----------------------------
def getnewgroups(server, treedate):
    print 'Getting list of new groups since start of '+treedate+'...',
    info = server.newgroups(treedate,'000001')[1]
    print 'got %d.' % len(info)
    print 'Processing...',
    groups = []
    for i in info:
        grpname = string.split(i)[0]
        groups.append(grpname)
    print 'Done'
    return groups
# Now the main program --------------------------------------------
def main():
    global desc
    tree={}
    # Check that the output directory exists
    checkopdir(pagedir);
    try:
        print 'Connecting to '+newshost+'...'
        if sys.version[0] == '0':
            s = NNTP.init(newshost)
        else:
            s = NNTP(newshost)
        connected = 1
    except (nntplib.error_temp, nntplib.error_perm), x:
        print 'Error connecting to host:', x
        print 'I\'ll try to use just the local list.'
        connected = 0
    # If -a is specified, read the full list of groups from server
    if connected and len(sys.argv) > 1 and sys.argv[1] == '-a':
        groups = getallgroups(s)
    # Otherwise just read the local file and then add
    # groups created since local file last modified.
    else:
        (tree, treedate) = readlocallist(treefile)
        if connected:
            groups = getnewgroups(s, treedate)
    if connected:
        addtotree(tree, groups)
        writelocallist(treefile,tree)
    # Read group descriptions
    readdesc(descfile)
    print 'Creating pages...'
    createpage(rootpage, tree, '')
    print 'Done'
if __name__ == "__main__":
    main()
# That's all folks
######################################################################