<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!/usr/bin/python


import sys
import Tix
import Tkconstants
import Dialog
import ScrolledText
import mx.ODBC.unixODBC


global log_text
global query_counter


def RunSample(w):
    global root
    root = w

    # We use these options to 
    # notebook, so that they are well-aligned on the screen.
    prefix = Tix.OptionName(w)
    if prefix:
	prefix = '*'+prefix
    else:
	prefix = ''
    w.option_add(prefix+'*TixControl*entry.width', 10)
    w.option_add(prefix+'*TixControl*label.width', 18)
    w.option_add(prefix+'*TixControl*label.anchor', Tix.E)
    w.option_add(prefix+'*TixNoteBook*tagPadX', 8)


    # -- Create the notebook widget and set its backpagecolor to gray.
    #    Note that the -backpagecolor option belongs to the "nbframe"
    #    subwidget.

    nb = Tix.NoteBook(w, name='nb', ipadx=6, ipady=6)
    nb['bg'] = 'gray'
    nb.nbframe['backpagecolor'] = 'gray'

	
    # -- Create two tabs on the notebook. The -underline option puts a
    #    underline on the first character of the labels of the tabs.  Keyboard
    #    accelerators will be defined automatically according to the
    #    underlined character.

    nb.add('tab_username', label="Username", underline=0)
    nb.add('tab_lastname', label="Last Name", underline=0)
    nb.add('tab_about', label="About", underline=0)
    nb.add('tab_help', label="Help", underline=0)
	
    nb.pack(expand=1, fill=Tix.BOTH, padx=5, pady=5 ,side=Tix.TOP)

    # --------------------------------------------------------------------------
    # Create "About" page :
    # --------------------------------------------------------------------------

    # -- 

    tab     = nb.tab_about
    fr_main = Tix.Frame(tab)
    fr_common = Tix.Frame(tab, background='Gray')

    fr_main.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
    fr_common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y)

    notes = Tix.Label(fr_main, justify=Tix.LEFT,
                      text='\n ABOUT:\n'
                         + '\n For information about accessing the URS from'
                         + '\n Unix/Linux boxes, please visit:'
                         + '\n\n     http://talby.csu.umist.ac.uk/~isd/_unix_urs/'
                         + '\n'
                         + '\n For information about URSpyth, visit the same'
                         + '\n place and click on the appropriate link.\n'
                         + '\n URSpy was written by Simon.'
                         + '\n This is Version 0.1.\n')

    button_quit = Tix.Button(fr_common, name='button_quit', text='Quit', width=6, 
                             command=Destroy)

    notes.pack(side=Tix.LEFT, padx=50, pady=5)
    button_quit.pack(side=Tix.TOP, padx=2, pady=2)	


    # --------------------------------------------------------------------------
    # Create "Help" page :
    # --------------------------------------------------------------------------

    # -- 

    tab     = nb.tab_help
    fr_main = Tix.Frame(tab)
    fr_common = Tix.Frame(tab, background='Gray')

    fr_main.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
    fr_common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y)

    notes = Tix.Label(fr_main, justify=Tix.LEFT,
                      text='Surely not?')

    button_quit = Tix.Button(fr_common, name='button_quit', text='Quit', width=6, 
                             command=Destroy)

    notes.pack(side=Tix.LEFT, padx=5, pady=5)
    button_quit.pack(side=Tix.TOP, padx=2, pady=2)	


    # --------------------------------------------------------------------------
    # Create "Username" page :
    # --------------------------------------------------------------------------

    # -- create frame for username-specific stuff and frame for common buttons :

    tab = nb.tab_username

    fr_main   = Tix.Frame(tab, background='Grey')
    fr_common = Tix.Frame(tab, background='Grey')

    fr_main.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
    fr_common.pack(side=Tix.RIGHT, padx=2, pady=2, fill=Tix.Y)

    global entry_uname

    fr_notes = Tix.Frame(fr_main)
    fr_notes.pack(side=Tix.BOTTOM, fill=Tix.X)

    entry_uname = Tix.Entry(fr_main)
    entry_uname.insert(Tkconstants.INSERT, 'm')
    entry_uname.pack(side=Tix.TOP, padx=40, pady=60)

    notes = Tix.Label(fr_notes, justify=Tix.LEFT, 
                      text='\n NOTES:\n'
                         + '\n 1. Enter exact username.'
                         + '\n 2. Execute!\n')
    notes.pack(side=Tix.LEFT, padx=2, pady=2)

    Create_Username_Buttons(fr_common)
	

    # --------------------------------------------------------------------------
    # -- Create "Last Name" the page :
    # --------------------------------------------------------------------------
	
    # -- create frame for username-specific stuff and frame for common buttons :

    tab = nb.tab_lastname

    fr_main   = Tix.Frame(tab, background='Gray')
    fr_common = Tix.Frame(tab, background='Grey')

    fr_main.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
    fr_common.pack(side=Tix.RIGHT, padx=2, pady=2, fill=Tix.Y)

    global entry_lname

    fr_notes = Tix.Frame(fr_main)
    fr_notes.pack(side=Tix.BOTTOM, fill=Tix.X)

    entry_lname = Tix.Entry(fr_main)
    entry_lname.pack(side=Tix.TOP, padx=40, pady=60)

    notes = Tix.Label(fr_notes, justify=Tix.LEFT,
                      text='\n NOTES:\n'
                         + '\n 1. Enter last name, or first part thereof.'
                         + '\n 2. Execute!\n')
    notes.pack(side=Tix.LEFT, padx=2, pady=2)

    Create_Lastname_Buttons(fr_common)


# ------------------------------------------------------------------------------
# --

def Destroy():

    global root

    answer = Dialog.Dialog(root, title = 'Verify Quit', text = 'Really quit?',
                           bitmap = '',
                           default = 1, strings = ('Yes', 'No'))

    if answer.num == 0: 
        root.destroy()


# ------------------------------------------------------------------------------
# --

def Write_Results(query_counter, results) :

    num = 0
 
#    sys.stdout.write("  Results of SQL query : \n\n")
    log_text.insert(Tix.END, "\n  Results : \n")

    for r in results :

        num = num + 1

        log_text.insert(Tix.END, "\n %3s Name         : " % (str(num)))
        log_text.insert(Tix.END, r[0] + ", " + r[1])
        log_text.insert(Tix.END, "\n     Department   : " + r[5])
        log_text.insert(Tix.END, "\n     Netware acc  : " + str(r[6]))
        log_text.insert(Tix.END, "\n     Email addr   : " + str(r[36]))
        log_text.insert(Tix.END, "\n     Cosmos uname : " + str(r[37]))
        log_text.insert(Tix.END, "\n")

    log_text.insert(Tix.END, "\n  : End Results.\n\n")
    log_text.see(Tix.END)


# ------------------------------------------------------------------------------
# --

def Print_Username_Related_Data():

    global query_counter

    query_counter = query_counter + 1
    
    name = entry_uname.get()
    db = mx.ODBC.unixODBC.DriverConnect('DSN=vardywardy;UID=&lt;ursusername&gt;;PWD=&lt;urspassword&gt;')
    c = db.cursor()
    sql = "SELECT * FROM UserDetails_simon WHERE NetwareAccountName = '" + name + "'"
    log_text.insert(Tix.END,
                    "\n  == SQL query: " + str(query_counter) + ": ===========================================================\n  ...executing SQL query (username: " + name + ")...\n")
    c.execute(sql)
    results = c.fetchall()
    Write_Results(query_counter, results)


# ------------------------------------------------------------------------------
# --

def Print_Lastname_Related_Data():

    global query_counter

    query_counter = query_counter + 1
    
    name = entry_lname.get()
    db = mx.ODBC.unixODBC.DriverConnect('DSN=vardywardy;UID=&lt;ursusername&gt;;PWD=&lt;urspassword&gt;')
    c = db.cursor()
    sql = "SELECT * FROM UserDetails_simon WHERE LastName LIKE '" + name + "%'"
    log_text.insert(Tix.END,
                    "\n  == SQL query: " + str(query_counter) + ": ===========================================================\n  ...executing SQL query (lastname: " + name + "*)...\n")
    c.execute(sql)
    results = c.fetchall()
    Write_Results(query_counter, results)


# ------------------------------------------------------------------------------
# -- Create buttons 

def Create_Username_Buttons(master):
    
    button_execute = Tix.Button(master, name='button_execute', text='Execute',
                                width=6, command=Print_Username_Related_Data)

    button_quit    = Tix.Button(master, name='button_quit', text='Quit', width=6, 
		         command=Destroy)
    
    button_execute.pack(side=Tix.TOP, padx=2, pady=2)
    button_quit.pack(side=Tix.TOP, padx=2, pady=2)	


# ------------------------------------------------------------------------------
# -- Create buttons which are common across all pages of notebook :

def Create_Lastname_Buttons(master):
    
    button_execute = Tix.Button(master, name='button_execute', text='Execute',
                                width=6, command=Print_Lastname_Related_Data)

    button_quit    = Tix.Button(master, name='button_quit', text='Quit', width=6, 
		         command=Destroy)
    
    button_execute.pack(side=Tix.TOP, padx=2, pady=2)
    button_quit.pack(side=Tix.TOP, padx=2, pady=2)	


# ------------------------------------------------------------------------------
# -- Main :

if __name__ == '__main__':

    query_counter = 0

    root       = Tix.Tk()
    logwindow  = Tix.Toplevel()

    root.title('URSpyth Control Panel')
    logwindow.title('URSpyth Output Log')

    log_frame = Tix.Frame(logwindow)
    log_frame.pack()
    log_text = ScrolledText.ScrolledText(log_frame, font=("courier", 10), wrap='none')
    log_text.pack()
    log_text.insert(Tix.END, "\n Hello from URSpy. \n")

    RunSample(root)
    root.mainloop()

# ------------------------------------------------------------------------------
# -- Time for tea.
# -----------------------------------------------------------------------------

</pre></body></html>