\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 '+`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'
main()
# That's all folks
######################################################################