proc pg_gui {} {
	global PGB fp filename env 

	set PGB(gui_Names) [string tolower [Attribute nameorder]]
	set PGB(gui_Mixed_names) [Attribute nameorder]
	set PGB(gui_Types) [Attribute typeorder]
	set filename /tmp/$PGB(Db).$PGB(Class).[GetAPid]
	set fp [open $filename w]
	setup_widget
	define_quit_clear_etc
	define_display
	define_enter
	define_look
	define_delete
	define_retrieve
	define_replace
	define_key

	close $fp
	exec chmod a+x $filename
	exec $filename

	if [Confirm "Save Query tool to a file?"  "Yes Save the Query tool" "No just go back to pg_browse" ] save_file
}
proc  setup_widget {} {
	global fp PGB 

	puts $fp  "#!$PGB(WishLocation) -f"
	puts $fp  "###############################################"
	puts $fp  "# assemble the widget"
	puts $fp [format  "# name %s \n" filename]
	puts $fp  "###############################################"
	puts $fp  "set auto_path \"\$tk_library/demos \$auto_path\""
	puts $fp "set PGB(Home)   $PGB(Home)"
	puts $fp "set PGB(Host)   $PGB(Host)"
	puts $fp "set PGB(Monitor)   monitor"
	puts $fp "set PGB(Db)     $PGB(Db)"
	puts $fp "set PGB(Class)  $PGB(Class)"
	puts $fp "set PGB(Tmp)  $PGB(Tmp)"
	puts $fp "set PGB(ActionInit) $PGB(ActionInit) "
	puts $fp [format "set PGB(gui_Mixed_names)  {%s}" $PGB(gui_Mixed_names)]
	puts $fp [format "set PGB(gui_Types)  {%s}" $PGB(gui_Types)]
	puts $fp [format "set PGB(gui_Names)  {%s}" $PGB(gui_Names)]
	puts $fp "set PGB(ActionDirs) {}"
	puts $fp "if \[info exists env(PGBACTIONS)\] {"
	puts $fp "lappend PGB(ActionDirs) \[split \$env(PGBACTIONS) :\]"
	puts $fp "}"
	puts $fp "foreach dir \[glob -nocomplain \$PGB(Home)/actions/*\] {"
	puts $fp "if {\[file isdirectory \$dir\] && \[lsearch \$PGB(ActionDirs) \$dir\] == -1} {"
	puts $fp "lappend PGB(ActionDirs) \$dir"
	puts $fp "}"
	puts $fp "}"


	puts $fp "# setup some paths"
	puts $fp "set HELPDIR \$PGB(Home)/help"

	puts $fp  "source \"\$PGB(Home)/lib/tkutils.tcl\""
	puts $fp  "source \"\$PGB(Home)/lib/pg_action.tcl\""
	puts $fp  "source \"\$PGB(Home)/lib/infobars.tcl\""
	puts $fp  "source \"\$PGB(Home)/actions/General/edit_instance/edit_instance\""
	puts $fp  "source \"\$PGB(Home)/lib/pg_browse.tcl\""
        puts $fp  "set tmplogfile \$PGB(Tmp)/PGBrowse.[GetAPid]"
        puts $fp  "set logfile \$tmplogfile"
        puts $fp  "set PGB(Logfile) \$logfile"
        puts $fp  "if {\$PGB(Logfile) != \$tmplogfile} {"
        puts $fp  "     set PGB(UserSpecifiedLog) 1"
        puts $fp  "} else {"
        puts $fp  "     set PGB(UserSpecifiedLog) 0"
        puts $fp  "}"
        puts $fp  "if \[catch {set PGB(Logfd) \[open \$PGB(Logfile) w+\]} err\] {"
        puts $fp  "     error \"Couldn't open log file: \$err\""
        puts $fp  "     destroy ."
        puts $fp  "     exit 1"
        puts $fp  "}"


	#the following line is for action menus
	puts $fp  "scrollbar .xscr -orient horizontal -command { link_view }"
	puts $fp  ".xscr set 240  40 0 40"
	puts $fp "set edit_it 0"
	puts $fp "set sort_by -1"
	puts $fp "mkMenuBar .menu {"
	puts $fp "\t{ {About Query tools} @query_tools_about }"
	puts $fp "\t{ {version} {version 2.15} }"
	puts $fp "\t{ {Bugs/Missing Features} @query_tools_bugs }"
	puts $fp "} {"
	puts $fp "File {"
	puts $fp "\t{{Look Up (^l or return)} {look_up} @query_look_up }"
	puts $fp "\t{{Enter into Database(^e)} {enter_it} @query_enter_it }"
	puts $fp "\t{{Clear Entries(^n)} {clear_it} @query_clear_it }"
	puts $fp "\t{{Delete  entries from the last hour(^b)} { delete_it -1 } @query_delete_it }"
	puts $fp "\t{{Retrieve All Instances(^a)} { ret_all } @query_ret_all }"
	puts $fp "\t{{Quit Query tool(^c)} {destroy .} {Quits query tool- This will prompt the user to save the query tool the first time it is run} }"
	puts $fp "\t}"
	puts $fp "} {"
	puts $fp "Misc {"
	puts $fp "\t{{Toggle edit queries(^o)} { set edit_it \[expr \$edit_it^1\]} @query_toggle }"
	puts $fp "\t{{Retrieve Number of instances in class} {get_number_inst} @query_number_inst }"
	puts $fp "\t{{Retrieve Number of instances in query} {count_look_up} @query_number_inst }"
	puts $fp "\t{{Retrieve owner of class} {get_owner} @query_owner_class }"
	puts $fp "\t}"
	puts $fp "} {"
	puts $fp "\t\"Sort By\" {"
		set count 0
		foreach i $PGB(gui_Names) {
			puts $fp [format "\t\t{\"%s\" {set sort_by %d; look_up} \"%s\"}" $i $count $i ]
			incr count
		}
		puts $fp "\t\t{\"No Sorting\" {set sort_by -1; look_up} \"No Sorting\"}" 
	puts $fp "\t}"
	puts $fp "}"

    puts $fp "frame .buttons -bd 1 -relief sunken"
    puts $fp "mkButton .buttons.look \"Look Up\" look_up default"
    puts $fp "mkButton .buttons.enter \"Enter into Database\" enter_it"
    puts $fp "mkButton .buttons.clear \"Clear Entries\" clear_it"
    puts $fp "mkButton .buttons.delete \"Delete Last Hours \" {delete_it -1}"
    puts $fp "mkButton .buttons.retall \"Retrieve ALL\" ret_all"
    puts $fp "set where \"left padx 2m pady 2m\""
    puts $fp "pack append .buttons \\"
	puts $fp "\t.buttons.look \$where \\"
	puts $fp "\t.buttons.enter \$where \\"
	puts $fp "\t.buttons.clear \$where \\"
	puts $fp "\t.buttons.delete \$where \\"
	puts $fp "\t.buttons.retall \$where"



	for  { set i [expr {[llength $PGB(gui_Names)]-1}]} {$i >=0} {incr i -1} {
		set name [lindex $PGB(gui_Names) $i]
		set mix [lindex $PGB(gui_Mixed_names) $i]
		set type [lindex $PGB(gui_Types) $i]
		puts $fp [format  "frame .%s" $name]
		puts $fp [format  "label .%s.lab -text \"%s (%s)\""  $name $mix $type ]
		puts $fp [format  "entry .%s.ent -width 80 -relief sunken -scroll {.xscr set}" $name ]
		puts $fp [format  "pack append .%s .%s.lab {left fill} .%s.ent {right fill} " $name $name $name ]

	}
	puts $fp "mkInfoBar .info -bitmap @\$PGB(Home)/bitmaps/redwood \\"
	puts $fp "\t-text {Sequoia 2000 Query Tool:$PGB(Host):$PGB(Db):$PGB(Class)}"


	puts $fp  "pack append .  .xscr {bottom fill} .menu {top fill} \\"
	puts $fp  ".info {top fill} \\"
	puts $fp  ".buttons {top fill} \\"
	foreach i $PGB(gui_Names) {
		puts $fp [format  "\t.%s {top fill}\\" $i ]
	}
	puts $fp ""
}
proc define_quit_clear_etc { } {
	global PGB fp
	puts $fp  "proc quit { } { exit}"

	puts $fp  "proc link_view { num } { "
		foreach i $PGB(gui_Names) {
			puts $fp [format  "\t.%s.ent view \$num " $i ]
		}
	puts $fp  "} "

	puts $fp  "proc clear_it { } { "
		foreach i $PGB(gui_Names) {
			puts $fp [format  "\t.%s.ent delete 0 end" $i ]
		}
	puts $fp  "} "

	puts $fp "proc fillbox { box tofill } {"
	puts $fp "foreach i \$tofill { if { ( \$i != \"\\}\" ) && ( \$i != \"\\{\" ) } {\$box insert end \$i }}"
	puts $fp "}"

	puts $fp "proc edit_window {} {"
	puts $fp "\tglobal edited_query"
	puts $fp "\tcatch {destroy .out}"
	puts $fp "\ttoplevel .out"
	puts $fp "\twm geometry .out +0+0"
	puts $fp "\twm title .out \"Edit monitor command\""
	puts $fp "\twm iconname .out \"monitor command\""
	puts $fp "scrollbar .out.x -rel flat -command \".out.ent view\" -ori horiz"
	puts $fp "\tentry .out.ent -width 80 -relief sunken -scroll { .out.x set}"
	puts $fp "\tlabel .out.lab -text \"Monitor Command : \""
	puts $fp "\tmkButton .out.ok ok {set edited_query \[.out.ent get\] ; destroy .out} default"

	puts $fp "\tmkButton .out.cancel \"No Change\" \"destroy .out\""
	puts $fp "\tmkButton .out.abort \"Cancel Query\" \"set edited_query abort_query;destroy .out\""
	puts $fp "\tframe .out.entries"
	puts $fp "\tframe .out.buttons"
	puts $fp "\tpack append .out.entries \\"
	puts $fp "\t\t.out.lab left \\"
	puts $fp "\t\t.out.ent { left pady 10}"
	puts $fp "\tpack append .out.buttons \\"
	puts $fp "\t\t.out.abort {left pady 10 padx 50} \\"
	puts $fp "\t\t.out.cancel {left pady 10 padx 50} \\"
	puts $fp "\t\t.out.ok {left pady 10 padx 50 }"
	puts $fp "\tpack append .out \\"
	puts $fp "\t\t.out.entries top  \\"
	puts $fp "\t\t.out.x {top fillx}  \\"
	puts $fp "\t\t.out.buttons top"
	puts $fp "\t\t.out.ent insert 0 \$edited_query"
	puts $fp "\ttkwait visibility .out.ent"
	puts $fp "\tfocus .out.ent"
	puts $fp "\tbind .out.ent <Return> {set edited_query \[.out.ent get\] ;destroy .out}"
	puts $fp "\tgrab .out"
	puts $fp "\ttkwait window .out"
	puts $fp "}"

	puts $fp "proc edit_query {query } {"
	puts $fp "\tglobal edit_it edited_query PGB"
	puts $fp "\tset edited_query \$query"
	puts $fp "\tif {(\$edit_it==1) } {"
	puts $fp "\t\tedit_window"
	puts $fp "\t\tif {(\$edited_query==\"abort_query\")} { return}"

	puts $fp "\t}"
	puts $fp "\tWorking"
	puts $fp "\tset answer \[echo \$edited_query | monitor -q -h \$PGB(Host) \$PGB(Db) | grep -v ^- \]"
	puts $fp "\tWaiting"
	puts $fp "\tdisplay_answer  \$answer"
	puts $fp "}"

	puts $fp "proc get_number_inst { } {"
    puts $fp "global PGB"
    puts $fp "set look_query \"retrieve ( number_in_class=count{\$PGB(Class).oid}) \\\\g\""
    puts $fp "edit_query \$look_query"
    puts $fp "}"

	puts $fp "proc get_owner { } {"
    puts $fp "global PGB"
    puts $fp "set look_query \"retrieve ( pg_class.relowner ) where pg_class.relname=\\\"\$PGB(Class)\\\" \\\\g\""
    puts $fp "Working"
    puts $fp "set answer \[echo \$look_query | monitor -Q -h \$PGB(Host) \$PGB(Db)\]"
    puts $fp "set sub_answer \[lindex \$answer 6\]"
    puts $fp "set look_query \"retrieve ( pg_user.usename ) where pg_user.usesysid=\$sub_answer \\\\g\""
    puts $fp "set answer \[echo \$look_query | monitor -Q -h \$PGB(Host) \$PGB(Db)]"
    puts $fp "Waiting"
    puts $fp "display_answer \$answer"
    puts $fp "}"

	puts $fp "proc UpdateNotice { notice } {"
    puts $fp "\t.ft_note.lab configure -text \$notice"
	puts $fp "}"

	puts $fp "proc MkNotice { notice } {"
    puts $fp "\tcatch {destroy .ft_note}"
    puts $fp "\ttoplevel .ft_note"
    puts $fp "\twm title .ft_note \"File Transfer Notice\""
    puts $fp "\tlabel .ft_note.lab -text \$notice"
    puts $fp "\tpack append .ft_note .ft_note.lab {top expand padx 50 pady 20}"
	puts $fp "}"
	puts $fp "frame .ft_note"


}
proc define_enter { } {
	global fp PGB 

	
	puts $fp  "###############################################"
	puts $fp  "#Now enter_it"
	puts $fp  "###############################################"

	puts $fp  "proc enter_it { } { "
		puts $fp  "global prev enter_query"
		puts $fp [format   "\tset enter_query \"append %s ( \"\n" $PGB(Class) ]
		foreach i $PGB(gui_Names) {
			puts $fp [format  "\tset %s \[.%s.ent get \]" $i $i ]
		}
		puts $fp  "\tset prev 0 "
		for  { set i [expr {[llength $PGB(gui_Names)]-1}]} {$i >=0} {incr i -1} {
			set name [lindex $PGB(gui_Names) $i]
			set type [lindex $PGB(gui_Types) $i]
			set mixed [lindex $PGB(gui_Mixed_names) $i]
			puts $fp [format  "\tdo_enter \$%s %s %s" $name $mixed  $type ]
		}
	puts $fp "\tset enter_query \$enter_query\[echo \" ) \\\\g\"\]"
	puts $fp  "\tputs stdout \$enter_query "
	puts $fp  "\tif {(\$prev==1)} {" 
	puts $fp "edit_query \$enter_query"
	puts $fp  "\t} "
	puts $fp  "} "

	puts $fp "proc do_enter { name mixed type } { "
	puts $fp "global prev enter_query"
	puts $fp "\tif {(\$prev==1)&&(\$name!=\"\")} {" 
	puts $fp "\t\tset enter_query \$enter_query\\ ,\\  }" 
	puts $fp "\tif {(\$name!=\"\")} {" 
	puts $fp "\t\tif {(\$type==\"text\" || \\"
	puts $fp "\t\t\t\$type==\"char\"|| \\"
	puts $fp "\t\t\t\$type==\"char4\"|| \\"
	puts $fp "\t\t\t\$type==\"char16\" || \[ string index \$type 0]==\"_\")} { "
		puts $fp "\t\t\tset middle =\""
		puts $fp "\t\t\tset end \\\""
		puts $fp "\t\t\tset enter_query \$enter_query\$mixed\$middle\[string trim \$name \]\$end"
	puts $fp "\t\t} else {"
		puts $fp "\t\t\tset middle ="
		puts $fp "\t\t\tset enter_query \$enter_query\$mixed\$middle\$name" 
	puts $fp "\t\t}"
	puts $fp "\t\tset prev 1"
	puts $fp "\t}"
	puts $fp  "} "
}
proc define_replace { } {
	global fp PGB 

	
	puts $fp  "###############################################"
	puts $fp  "#Now replace"
	puts $fp  "###############################################"

	puts $fp  "proc replace_it { } { "
		puts $fp  "global prev enter_query gui_oid"
		puts $fp [format   "\tset enter_query \"replace %s ( \"\n" $PGB(Class) ]
		foreach i $PGB(gui_Names) {
			puts $fp [format  "\tset %s \[.%s.ent get \]" $i $i ]
		}
		puts $fp  "\tset prev 0 "
		for  { set i [expr {[llength $PGB(gui_Names)]-1}]} {$i >=0} {incr i -1} {
			set name [lindex $PGB(gui_Names) $i]
			set type [lindex $PGB(gui_Types) $i]
			set mixed [lindex $PGB(gui_Mixed_names) $i]
			puts $fp [format  "\tdo_enter \$%s %s %s" $name $mixed  $type ]
		}
	puts $fp "\tset enter_query \$enter_query\[echo \" ) where $PGB(Class).oid=\[string trim \$gui_oid\]::oid \\\\g\"\]"
	puts $fp  "\tputs stdout \$enter_query "
	puts $fp  "\tif {(\$prev==1)} {" 
	puts $fp "edit_query \$enter_query"
	puts $fp  "\t} "
	puts $fp  "} "

}
proc define_look { } {
	global fp PGB 
	puts $fp  "###############################################"
	puts $fp  "#Now look_up"
	puts $fp  "###############################################"
	puts $fp  "proc look_up { } { "
	puts $fp  "global prev look_query sort_by PGB"
	puts $fp "\tset look_query \"retrieve ( q.all,q.oid) from q in $PGB(Class) where \""
	foreach i $PGB(gui_Names) {
		puts $fp [format  "\tset %s \[.%s.ent get \]" $i $i ]
	}
	puts $fp  "\tset prev 0 "
	for  { set i [expr {[llength $PGB(gui_Names)]-1}]} {$i >=0} {incr i -1} {
		set name [lindex $PGB(gui_Names) $i]
		set type [lindex $PGB(gui_Types) $i]
		set mixed [lindex $PGB(gui_Mixed_names) $i]
		puts $fp [format  "\tdo_look \$%s %s %s" $name $mixed  $type ]
	}
	puts $fp "if {(\$sort_by !=-1 )} {"
	puts $fp "\tset look_query \$look_query\[echo \" sort by \[lindex \$PGB(gui_Mixed_names) \$sort_by\]  \\\\g\"\]"
	puts $fp "} else {"
	puts $fp "\tset look_query \$look_query\[echo \"  \\\\g\"\]"
	puts $fp "} "
	puts $fp "\tputs stdout \$look_query "
	puts $fp "\tif {(\$prev==1)} {" 
	puts $fp "edit_query \$look_query"
	puts $fp  "\t} "
	puts $fp  "} "
	puts $fp  "###############################################"

	puts $fp "proc do_look { name mixed type } { "
	puts $fp "global prev look_query "
	puts $fp "#This is bogus, but currently ignore arrays in look up & deletes"
	puts $fp "#Postquel has no operators that work on arrays"
	puts $fp "\tif {(\[string index \$type 0 \]==\"_\" )} {return}"
	puts $fp "\tset begin q."
	puts $fp "\tif {(\$prev==1)&&(\$name!=\"\")} {" 
	puts $fp "\t\tset look_query \$look_query\\ and\\ }"
	puts $fp "\tif {(\$name!=\"\")} {"
	puts $fp "\t\tif {(\$type==\"text\"|| \\"
	puts $fp "\t\t\t\$type==\"char\"|| \\"
	puts $fp "\t\t\t\$type==\"char4\"|| \\"
	puts $fp "\t\t\t\$type==\"char16\")} {"
	puts $fp "\t\t\tif {(\$type==\"text\")} { "
	puts $fp "\t\t\t\tset middle ~\""
	puts $fp "\t\t\t} else {"
	puts $fp "\t\t\t\tset middle =\""
	puts $fp "\t\t\t}"
	puts $fp "\t\t\tset end \\\""
	puts $fp "\t\t\tset look_query \$look_query\$begin\$mixed\$middle\$name\$end" 
	puts $fp "\t\t} else {"
	puts $fp "\t\t\tif {(\[llength \$name\]==1)} {"
	puts $fp "\t\t\t\tset middle ="
	puts $fp "\t\t\t\tset look_query \$look_query\$begin\$mixed\$middle\$name" 
	puts $fp "\t\t\t} else {"
	puts $fp "\t\t\t\tset mid1 >="
	puts $fp "\t\t\t\tset mid2 \\ and\\ q.  "
	puts $fp "\t\t\t\tset mid3 <="
	puts $fp "\t\t\t\tset nam1 \[ lindex \$name 0\]"
	puts $fp "\t\t\t\tset nam2 \[ lindex \$name 1\]"
	puts $fp "\t\t\t\tset look_query \$look_query\$begin\$mixed\$mid1\$nam1\$mid2\$mixed\$mid3\$nam2 "
	puts $fp "\t\t\t}"

	puts $fp "\t\t}"
	puts $fp  "\t\tset prev 1 "
	puts $fp  "\t} "
	puts $fp  "} "

	puts $fp  "proc count_look_up { } { "
	puts $fp  "global prev look_query"
	puts $fp "\tset look_query \"retrieve ( num_in_query=count{$PGB(Class).oid where \""
	foreach i $PGB(gui_Names) {
		puts $fp [format  "\tset %s \[.%s.ent get \]" $i $i ]
	}
	puts $fp  "\tset prev 0 "
	for  { set i [expr {[llength $PGB(gui_Names)]-1}]} {$i >=0} {incr i -1} {
		set name [lindex $PGB(gui_Names) $i]
		set type [lindex $PGB(gui_Types) $i]
		set mixed [lindex $PGB(gui_Mixed_names) $i]
		puts $fp [format  "\tdo_count \$%s %s %s" $name $mixed  $type ]
	}
	puts $fp "\tset look_query \$look_query\[echo \"})  \\\\g\"\]"
	puts $fp "\tputs stdout \$look_query "
	puts $fp "\tif {(\$prev==1)} {" 
	puts $fp "edit_query \$look_query"
	puts $fp  "\t} "
	puts $fp  "} "
	puts $fp  "###############################################"

	puts $fp "proc do_count { name mixed type } { "
	puts $fp "global prev look_query "
	puts $fp "#This is bogus, but currently ignore arrays in look up & deletes"
	puts $fp "#Postquel has no operators that work on arrays"
	puts $fp "\tif {(\[string index \$type 0 \]==\"_\" )} {return}"
	puts $fp "\tset begin $PGB(Class)."
	puts $fp "\tif {(\$prev==1)&&(\$name!=\"\")} {" 
	puts $fp "\t\tset look_query \$look_query\\ and\\ }"
	puts $fp "\tif {(\$name!=\"\")} {"
	puts $fp "\t\tif {(\$type==\"text\"|| \\"
	puts $fp "\t\t\t\$type==\"char\"|| \\"
	puts $fp "\t\t\t\$type==\"char16\")} {"
	puts $fp "\t\t\tset middle ~\""
	puts $fp "\t\t\tset end \\\""
	puts $fp "\t\t\tset look_query \$look_query\$begin\$mixed\$middle\$name\$end" 
	puts $fp "\t\t} else {"
	puts $fp "\t\t\tif {(\[llength \$name\]==1)} {"
	puts $fp "\t\t\t\tset middle ="
	puts $fp "\t\t\t\tset look_query \$look_query\$begin\$mixed\$middle\$name" 
	puts $fp "\t\t\t} else {"
	puts $fp "\t\t\t\tset mid1 >="
	puts $fp "\t\t\t\tset mid2 \\ and\\ $PGB(Class).  "
	puts $fp "\t\t\t\tset mid3 <="
	puts $fp "\t\t\t\tset nam1 \[ lindex \$name 0\]"
	puts $fp "\t\t\t\tset nam2 \[ lindex \$name 1\]"
	puts $fp "\t\t\t\tset look_query \$look_query\$begin\$mixed\$mid1\$nam1\$mid2\$mixed\$mid3\$nam2 "
	puts $fp "\t\t\t}"

	puts $fp "\t\t}"
	puts $fp  "\t\tset prev 1 "
	puts $fp  "\t} "
	puts $fp  "} "
}
proc define_delete { } {
    global fp PGB
    puts $fp  "###############################################"
    puts $fp  "#Now delete_it"
    puts $fp  "###############################################"
    puts $fp  "proc delete_it { oid  } { "
	puts $fp  "global prev look_query"
	puts $fp "if {(\$oid== -1)} {"
	puts $fp [format "\tset look_query \"delete q from q in %s where \"\n" $PGB(Class) ]
	foreach i $PGB(gui_Names) {
		puts $fp [format  "\tset %s \[.%s.ent get \]" $i $i ]
	}
	puts $fp  "\tset prev 0 "
	for  { set i [expr {[llength $PGB(gui_Names)]-1}]} {$i >=0} {incr i -1} {
		set name [lindex $PGB(gui_Names) $i]
		set type [lindex $PGB(gui_Types) $i]
		set mixed [lindex $PGB(gui_Mixed_names) $i]
		puts $fp [format  "\tdo_look \$%s %s %s" $name $mixed  $type ]
	}
    puts $fp  "\tset look_query \$look_query\[ echo \" and q.tmin >= ( \\\"now\\\"::abstime - \\\"@ 1 hour\\\"::reltime)   \\\\g\"\]" 
	puts $fp "} else {"
    puts $fp  "\tset look_query \" delete q from q in $PGB(Class) where q.oid = \[ string trim \$oid \]::oid   \\\\g\"" 
	puts $fp "} "
    puts $fp  "\tputs stdout \$look_query "
    puts $fp  "\tif {(\$prev==1)} {"
	puts $fp "edit_query \$look_query"
    puts $fp  "\t} "
    puts $fp  "} "
}
proc define_retrieve { } {
	global fp PGB 

    puts $fp "###############################################"
    puts $fp "#Now retrieve all"
    puts $fp "###############################################"
    puts $fp "proc ret_all { } { "
	puts $fp "\tset look_query \"retrieve ( q.all,q.oid) from q in $PGB(Class) \""
#	puts $fp "\tset look_query \"retrieve ( \\"
#	set prev 1
#	foreach i $PGB(gui_Mixed_names) {
#		if  { ( $prev==1)  } {
#			puts -nonewline $fp "q.$i "
#			set prev 0
#		} else {
#			puts -nonewline $fp ",q.$i"
#		}
#	}
#	puts $fp [format   ") from q in %s \"\n" $PGB(Class) ]
    puts $fp "\tset look_query \$look_query\[echo \"  \\\\g\" \]"
    puts $fp "\tputs stdout \$look_query  "
	puts $fp "edit_query \$look_query"
    puts $fp "} "
    puts $fp "###############################################"
}
proc define_display { } {
	global fp PGB
	puts $fp  "###############################################"
	puts $fp "proc print_input {} {"
	puts $fp "global gui_input"
	puts $fp "#Comment out this if you have/like enscript"
	puts $fp "#echo \$gui_input | encript -GR"
	puts $fp "echo \$gui_input | lpr "
	puts $fp "}"
	puts $fp "proc display_answer { input} {"
	puts $fp "global action field gui_input"
	puts $fp "set action none_selected"
	puts $fp "set field -1"
	puts $fp "set gui_input \$input"
	puts $fp "catch {destroy .out}"
	puts $fp "toplevel .out"
	puts $fp "wm geometry .out +0+600"
	puts $fp "wm title .out \"Output of Query to Database\""
	puts $fp "wm iconname .out \"Query\""
puts $fp "mkMenuBar .out.menu {"
puts $fp "} {"
puts $fp "File {"
puts $fp "\t{{Select all} \".out.t select from 2; .out.t select to end\" {selects all}}"
puts $fp "\t{{Print Output} \"print_input\" {Sends Monitor output to lpr-If you are running this remotely this will not send to your local printer}}"
puts $fp "\t{{close window} \"destroy .out\" {closes window}}"
puts $fp "}"
puts $fp "} {"
puts $fp "Field {"
	set count 1
	foreach i $PGB(gui_Names) {
		puts $fp [format "\t{\"%s\" {set field %d} \"%s\"}" $i $count $i ]
		incr count
	}
puts $fp "}"
puts $fp "}"
puts $fp "AddActionButton .out.menu"

	puts $fp "mkButton .out.ok OK \"destroy .out\" default"
	puts $fp "mkButton .out.sel Select_all \".out.t select from 3; .out.t select to end\""
	puts $fp "listbox .out.t -yscrollcommand \".out.y set\" -setgrid true\\"
	puts $fp " -xscrollcommand \".out.x set\" -geometry 120x20 -font fixed"
	puts $fp "scrollbar .out.y -relief flat -command \".out.t yview\""
	puts $fp "scrollbar .out.x -relief flat -command \".out.t xview\" -ori horiz"



	puts $fp "pack append .out .out.menu {top fillx} \\"
	puts $fp "\t.out.x {bottom fillx} .out.y {right filly} .out.t {expand fill}"
	puts $fp "set g \[ split \$input \\n \]"
	puts $fp "fillbox .out.t \$g"
	puts $fp "bind .out <Any-Enter> \"focus .out.t\""
	puts $fp "bind .out.t <Double-Button-1> {edit_instance -1 \[selection get\]}"
	puts $fp "}"
}




proc define_key {} {
global fp filename PGB
	puts $fp "###############################################"
	puts $fp "#Now do the key bindings"
	puts $fp "###############################################"
	puts $fp "frame .out "
	puts $fp "wm geometry . +0+0  "
	puts $fp [format  "focus .%s.ent  " [lindex $PGB(gui_Names) 0] ]
	puts $fp "bind Entry <ButtonRelease-3> { %W insert insert \[selection get\] }"
	puts $fp "bind Listbox <B2-Motion> {%W xview %x ; %W yview %y}"
	puts $fp "bind Entry <B2-Motion> {%W view %x }"

	puts $fp "bind Entry <Control-c> {destroy .}"
	puts $fp "bind Entry <Control-e> {enter_it }"
	puts $fp "bind Entry <Control-l> {look_up }"
	puts $fp "bind Entry <Control-t> {clear_it }"
	puts $fp "bind Entry <Control-b> {delete_it -1 }"
	puts $fp "bind Entry <Control-o> { set edit_it \[expr \$edit_it^1\]}"
	puts $fp "bind Entry <Control-a> {ret_all }"
    for  { set i [expr {[llength $PGB(gui_Names)]-1}]} {$i >0} {incr i -1} {
        set name [lindex $PGB(gui_Names) $i]
	set mixed [lindex $PGB(gui_Mixed_names) $i]
        set nextname [lindex $PGB(gui_Names) [expr $i-1]]
			puts $fp [format  "bind .%s.ent <Tab> {focus .%s.ent }" $nextname $name]
			puts $fp [format  "bind .%s.ent <Return> {look_up}" $nextname ]
			puts $fp [format  "bind .%s <Any-Enter> {focus .%s.ent}" $name $name ]
 			puts $fp [format  "bind .%s.ent <Double-Button-1> { ShowAttributeDesc %s }" $name $mixed ]

	}
	set name [lindex $PGB(gui_Names) [expr [llength $PGB(gui_Names)]-1]]
	set mixed [lindex $PGB(gui_Mixed_names) [expr [llength $PGB(gui_Mixed_names)]-1]]

	set nextname [lindex $PGB(gui_Names) 0]
	puts $fp [format  "bind .%s.ent <Tab> {focus .%s.ent }" $name $nextname ]
	puts $fp [format  "bind .%s.ent <Return> {look_up}" $name ]
  	puts $fp [format  "bind .%s.ent <Double-Button-1> { ShowAttributeDesc %s }" $name $mixed ]
	puts $fp [format  "bind .%s <Any-Enter> {focus .%s.ent}" $nextname $nextname ]


	puts $fp "ScanActionDirs"
}
proc save_file {} {
	global filename FDvars
	

if {[set fp [FDSaveFilename "Save Query Tool"]] == ""} {
		exec rm $filename
	} else {
		exec mv  $filename $fp
	}
}
