diff --git a/twander.py b/twander.py index 40d714c..27d7e6e 100755 --- a/twander.py +++ b/twander.py @@ -1,96 +1,166 @@ #!/usr/local/bin/python -# twander.py +# twander - Wander around the file system # Copyright (c) 2002 TundraWare Inc. All Rights Reserved. PROGNAME = "twander" -RCSID = "$Id: twander.py,v 1.1 2002/10/28 23:03:23 tundra Exp $" +RCSID = "$Id: twander.py,v 1.2 2002/10/29 00:09:22 tundra Exp $" VERSION = RCSID.split()[2] +#----------------------------------------------------------# +# Variables User Might Change # +#----------------------------------------------------------# -############################################################ -### Variables User Might Change ### -############################################################ #------------------- Nothing Below Here Should Need Changing ------------------# -############################################################ -### Imports ### -############################################################ +#----------------------------------------------------------# +# Imports # +#----------------------------------------------------------# + +import anygui as gui import getopt +import os import sys -############################################################ -### Aliases & Redefinitions ### -############################################################ +#----------------------------------------------------------# +# Aliases & Redefinitions # +#----------------------------------------------------------# -############################################################ -### Constants & Literals ### -############################################################ +#----------------------------------------------------------# +# Constants & Literals # +#----------------------------------------------------------# -#################### +##### # Constants -#################### +##### -FALSE = 0 == 1 # Booleans -TRUE = not FALSE +FALSE = 0 == 1 # Booleans +TRUE = not FALSE +DIR_LDELIM = '[' # Directory left dsply. delimiter +DIR_RDELIM = ']' # Directory left dsply. delimiter +PSEP = os.sep # Character separating path components -#################### +##### # Literals -#################### +##### + +lCONFFILE = os.path.join(os.getenv("HOME"), "." + PROGNAME + "rc") # conf file - -############################################################ -### Prompts, & Application Strings ### -############################################################ +#----------------------------------------------------------# +# Prompts, & Application Strings # +#----------------------------------------------------------# -#################### +##### # Error Messages -#################### +##### + +eBADROOT = " %s Is Not A Directory" +eERROR = "ERROR" +eNOCONF = "Cannot Find Configuration File: %s" +eTOOMANY = "You Can Only Specify One Starting Directory." - -#################### +##### # Informational Messages -#################### +##### -#################### +##### +# Usage Prompts +##### + +uTable = [PROGNAME + " " + VERSION + " - Copyright 2002, TundraWare Inc., All Rights Reserved\n", + "usage: " + PROGNAME + " [-d dir] [-hv] [starting directory] where,\n", + " startdir name of directory in which to begin (default: current dir)", + " -c file name of configuration file (default: " + lCONFFILE + ")", + " -h print this help information", + " -v print detailed version information", + ] + + + +##### # Prompts -#################### +##### -############################################################ -### Global Variables & Data Structures ### -############################################################ +#----------------------------------------------------------# +# Global Variables & Data Structures # +#----------------------------------------------------------# + + +##### +# GUI Related Setup +##### + +MainApp = gui.Application() +MainWin = gui.Window(height=300, + width=500 + ) +DirList = gui.ListBox() +MainWin.add(DirList, + hstretch=1, + vstretch=1, + top=1, + bottom=1, + left= 1, + right=1 + ) + + + +MainApp.add(MainWin) #---------------------------Code Begins Here----------------------------------# -############################################################ -### Object Base Class Definitions ### -############################################################ + +#----------------------------------------------------------# +# Object Base Class Definitions # +#----------------------------------------------------------# -############################################################ -### Supporting Function Definitions ### -############################################################ +#----------------------------------------------------------# +# Supporting Function Definitions # +#----------------------------------------------------------# + +##### +# Return Ordered List Of Directories & Files For Current Root +##### + +def build_dirlist(rootdir): + + dList, fList = [], [] + + dList.append("..") + for file in os.listdir(rootdir): + if os.path.isdir(os.path.join(rootdir,file)): + dList.append(DIR_LDELIM + file + DIR_RDELIM) + else: + fList.append(file) + + dList.sort() + fList.sort() + return dList + fList + +# End 'build_dirlist()' ##### @@ -98,7 +168,7 @@ ##### def errmsg(emsg): - print PROGNAME + " " + VERSION +" ERROR: " + emsg + print PROGNAME + " " + VERSION + " " + eERROR + ": " + emsg # End of 'errmsg()' @@ -108,31 +178,59 @@ ##### def usage(): - print PROGNAME + " " + VERSION + " - Copyright 2002, TundraWare Inc., All Rights Reserved\n" - print "usage: " + PROGNAME + " [-hv] where,\n" - print " -h print this help information" - print " -v print detailed version information" - + for x in uTable: + print x + # End of 'usage()' -############################################################ -### Program Entry Point ### -############################################################ +#----------------------------------------------------------# +# Program Entry Point # +#----------------------------------------------------------# # Command line processing try: - opts, args = getopt.getopt(sys.argv[1:], '-hv') + opts, args = getopt.getopt(sys.argv[1:], '-c:hv') except getopt.GetoptError: usage() sys.exit(1) - +conf = lCONFFILE +rootdir = "." + PSEP for opt, val in opts: + if opt == "-c": + conf = val if opt == "-h": usage() sys.exit(0) if opt == "-v": print RCSID sys.exit(0) + +# Can only have 0 or 1 arguments +# Make sure any starting directory argument is legit + +if len(args) > 1: + errmsg(eTOOMANY) + sys.exit(1) + +if len(args) == 1: + rootdir = args[0] + if not os.path.isdir(rootdir): + errmsg(eBADROOT % rootdir) + sys.exit(1) + + +# This program requires a config file + +if not os.path.exists(conf): + errmsg(eNOCONF % conf) + sys.exit(1) + +# Fill the control with directory contents +DirList.items = build_dirlist(rootdir) + +MainWin.set(title= PROGNAME + " " + VERSION + " - Examining: " + rootdir) +MainApp.run() +