Here's a patch to the newly released Qddb 1.42.6 that fixes the following problems: 1. Expert search date ranges were giving an error message 2. When the expert search window was displayed, there was no busy cursor. To apply: 1. copy this file to the qddb-1.42.6 directory. 2. patch -p0 < qddb-1.42.6p1.patch 3. remake and install --------------- cut here ----------------------- *** ../qddb-dists/qddb-1.42.6//ChangeLog Mon Nov 27 10:22:24 1995 --- .//ChangeLog Mon Nov 27 20:02:19 1995 *************** *** 1,5 **** --- 1,13 ---- Mon Nov 27 10:21:33 1995 Eric H. Herrin II + * Lib/LibQddb/Utils.c (Qddb_DateStringToTime): Was writing + unsigned; properly handle negative times. + + * TkUtils/fx-tk4/fx_expert.tcl: Fixed a bug in range searching. + Explicitly check for non-existent args. + + * Qddb 1.42.6 released. + * Testing under SunOS, HP/UX, Linux, BSD/OS 2.0.1, BSD/386 1.1 Misc changes to force clean compile. *************** *** 14,20 **** * TkUtils/fx-tk4/fx_expert.tcl: Lots of minor fixes; few new major features. Placed main search building box in a canvas so it will scroll. Added ability to resize ! the window horizontally. Added comment field and current settings frame. * TkUtils/fx-tk4/nxqddb.tcl (Fx_Entry): Fixed a bug in nxqddb --- 22,28 ---- * TkUtils/fx-tk4/fx_expert.tcl: Lots of minor fixes; few new major features. Placed main search building box in a canvas so it will scroll. Added ability to resize ! the window vertically. Added comment field and current settings frame. * TkUtils/fx-tk4/nxqddb.tcl (Fx_Entry): Fixed a bug in nxqddb *** ../qddb-dists/qddb-1.42.6//Lib/LibQddb/Utils.c Wed Nov 22 17:33:37 1995 --- .//Lib/LibQddb/Utils.c Mon Nov 27 20:05:41 1995 *************** *** 931,939 **** } } if (sizeof(time_t) == sizeof(int)) ! sprintf(buf, "%u", (int)clockVal); else if (sizeof(time_t) == sizeof(long)) ! sprintf(buf, "%lu", (long)clockVal); else PANIC("sizeof(time_t) != sizeof(int) or sizeof(long)"); retval = Malloc(sizeof(char)*(strlen(buf)+1)); --- 931,939 ---- } } if (sizeof(time_t) == sizeof(int)) ! sprintf(buf, "%d", (int)clockVal); else if (sizeof(time_t) == sizeof(long)) ! sprintf(buf, "%ld", (long)clockVal); else PANIC("sizeof(time_t) != sizeof(int) or sizeof(long)"); retval = Malloc(sizeof(char)*(strlen(buf)+1)); *** ../qddb-dists/qddb-1.42.6//TclUtils/src/TclSearch.c Fri Nov 24 12:02:27 1995 --- .//TclUtils/src/TclSearch.c Mon Nov 27 19:30:53 1995 *************** *** 50,64 **** } else if (argc == 5 && argv[3][0] == '-' && argv[3][1] == '\0') { /* no lower limit */ args->UpperStr = argv[4]; args->LowerStr = NULL; args->LowerExists = False; - args->UpperExists = True; } else if (argc == 5 && argv[4][0] == '-' && argv[4][1] == '\0') { /* no upper limit */ args->UpperStr = NULL; args->LowerStr = argv[3]; args->LowerExists = True; - args->UpperExists = False; } else { if (argc != 6 || argv[4][0] != '-' || argv[4][1] != '\0') { if (argc <= 4) { --- 50,64 ---- } else if (argc == 5 && argv[3][0] == '-' && argv[3][1] == '\0') { /* no lower limit */ args->UpperStr = argv[4]; + args->UpperExists = True; args->LowerStr = NULL; args->LowerExists = False; } else if (argc == 5 && argv[4][0] == '-' && argv[4][1] == '\0') { /* no upper limit */ args->UpperStr = NULL; + args->UpperExists = False; args->LowerStr = argv[3]; args->LowerExists = True; } else { if (argc != 6 || argv[4][0] != '-' || argv[4][1] != '\0') { if (argc <= 4) { *** ../qddb-dists/qddb-1.42.6//TkUtils/fx-tk4/fx_menu.tcl Sun Nov 26 21:11:29 1995 --- .//TkUtils/fx-tk4/fx_menu.tcl Mon Nov 27 21:25:31 1995 *************** *** 455,460 **** --- 455,463 ---- method ExpertSearchProc {} { global fx_config $status_variable fx_blt + if {$fx_blt} { + blt_busy hold . + } if {[string length $restrict] == 0} { set res {} } else { *************** *** 466,474 **** set l [Fx:ExpertSearchWindow .expert_search $schema $res ""] } if {[lindex $l 0] == 1} { - if {$fx_blt} { - blt_busy hold . - } ::set $status_variable "Searching..." update idletasks update --- 469,474 ---- *************** *** 485,490 **** --- 485,494 ---- update idletasks update SearchProc [lindex $l 1] [Fx:UniqueList [lindex $l 0]] + } else { + if {$fx_blt} { + blt_busy forget . + } } } method DeleteProc {} { *** ../qddb-dists/qddb-1.42.6//TkUtils/fx-tk4/fx_expert.tcl Sun Nov 26 23:13:23 1995 --- .//TkUtils/fx-tk4/fx_expert.tcl Mon Nov 27 20:56:21 1995 *************** *** 762,767 **** --- 762,768 ---- catch "focus $oldFocus" catch "grab $oldGrab" destroy $w + update idletasks; update return $retval } *************** *** 800,805 **** --- 801,807 ---- } proc Fx:ExpertSearchParseNode {s node} { + update idletasks; update set opt [lindex $node 2] set attr [lindex $node 3] set lhs [lindex $node 4] *************** *** 827,844 **** switch $opt { nr - wr { if {[string compare $opt nr] == 0} { ! if {[string length $lhs] > 0 && [catch "expr double($lhs)" err] != 0} { error "Invalid number: $lhs" } ! if {[string length $rhs] > 0 && [catch "expr double($rhs)" err] != 0} { error "Invalid number: $rhs" } } if {$anynode} { ! return [eval qddb_search $s $opt $lhs - $rhs] } else { ! return [eval qddb_search $s -prunebyattr $attr $opt $lhs - $rhs] } } r - --- 829,864 ---- switch $opt { nr - wr { + set llen [string length $lhs] + set rlen [string length $rhs] if {[string compare $opt nr] == 0} { ! if {$llen > 0 && [catch "expr double($lhs)" err] != 0} { error "Invalid number: $lhs" } ! if {$rlen > 0 && [catch "expr double($rhs)" err] != 0} { error "Invalid number: $rhs" } } if {$anynode} { ! if {$llen > 0 && $rlen > 0} { ! return [qddb_search $s $opt $lhs - $rhs] ! } elseif {$llen > 0 && $rlen == 0} { ! return [qddb_search $s $opt $lhs -] ! } elseif {$llen == 0 && $rlen > 0} { ! return [qddb_search $s $opt - $rhs] ! } else { ! return [qddb_search $s $opt -] ! } } else { ! if {$llen > 0 && $rlen > 0} { ! return [qddb_search $s -prunebyattr $attr $opt $lhs - $rhs] ! } elseif {$llen > 0 && $rlen == 0} { ! return [qddb_search $s -prunebyattr $attr $opt $lhs -] ! } elseif {$llen == 0 && $rlen > 0} { ! return [qddb_search $s -prunebyattr $attr $opt - $rhs] ! } else { ! return [qddb_search $s -prunebyattr $attr $opt -] ! } } } r - *************** *** 860,873 **** if {[string compare $opt d] == 0} { set rhs $lhs } ! if {[string length $lhs] > 0} { if {[qddb_util isdate "$lhs 12:00AM"]} { set lhs "$lhs 12:00AM" } elseif {![qddb_util isdate $lhs]} { error "Invalid date: $lhs" } } ! if {[string length $rhs] > 0} { if {[qddb_util isdate "$rhs 11:59PM"]} { set rhs "$rhs 11:59PM" } elseif {![qddb_util isdate $rhs]} { --- 880,895 ---- if {[string compare $opt d] == 0} { set rhs $lhs } ! set llen [string length $lhs] ! if {$llen > 0} { if {[qddb_util isdate "$lhs 12:00AM"]} { set lhs "$lhs 12:00AM" } elseif {![qddb_util isdate $lhs]} { error "Invalid date: $lhs" } } ! set rlen [string length $rhs] ! if {$rlen > 0} { if {[qddb_util isdate "$rhs 11:59PM"]} { set rhs "$rhs 11:59PM" } elseif {![qddb_util isdate $rhs]} { *************** *** 875,883 **** } } if {$anynode} { ! return [eval qddb_search $s dr $lhs - $rhs] } else { ! return [eval qddb_search $s -prunebyattr $attr dr $lhs - $rhs] } } default { --- 897,921 ---- } } if {$anynode} { ! if {$llen > 0 && $rlen > 0} { ! return [qddb_search $s dr $lhs - $rhs] ! } elseif {$llen > 0 && $rlen == 0} { ! return [qddb_search $s dr $lhs -] ! } elseif {$llen == 0 && $rlen > 0} { ! return [qddb_search $s dr - $rhs] ! } else { ! return [qddb_search $s dr -] ! } } else { ! if {$llen > 0 && $rlen > 0} { ! return [qddb_search $s -prunebyattr $attr dr $lhs - $rhs] ! } elseif {$llen > 0 && $rlen == 0} { ! return [qddb_search $s -prunebyattr $attr dr $lhs -] ! } elseif {$llen == 0 && $rlen > 0} { ! return [qddb_search $s -prunebyattr $attr dr - $rhs] ! } else { ! return [qddb_search $s -prunebyattr $attr dr -] ! } } } default { *************** *** 890,895 **** --- 928,934 ---- proc Fx:ExpertSearchParser {s nodes} { set search_attrs {} foreach i $nodes { + update idletasks; update if {[string compare [lindex $i 0] t] != 0} { if {[string compare [lindex $i 0] c] == 0} {continue} if {[string compare [lindex $i 0] i] == 0} {