proc TkW:wineconf {DefaultConfFile} { global WC_banner WC_driveSect WC_path WC_type WC_label WC_fstype global EDIT SAVE REMOVE ADD WC_wineSect WC_windows WC_system WC_temp global WC_Symbols WC_winepath WC_serialSect CLEAR WC_parallelSect global WC_logSect WC_exclude WC_wineLook global windowspath varpath syspath tmppath symbols winelook global ndrives drive drivepath drivetype drivefstype drivelabel global drivedevice driveserial global resolution defaultfont global readport writeport TKW WAITconf global exclude default_progs startup allocsyscolors winelook wine_logfile global com lpt spool nspool alias nalias global WC_helpondrives WC_helponwine WC_helponserial WC_helponPP global WC_helponmisc WAIT WC_quit WC_quit global WC_quitreally WC_noquit if {[winfo exist .choosemethod] } {destroy .choosemethod} if {[winfo exist .install] } {destroy .install} set base .wineconf if {[winfo exists .wineconf]} { wm deiconify .wineconf; return } ################### # CREATING WIDGETS ################### toplevel .wineconf -class Toplevel \ -background #3c1cfe wm focusmodel .wineconf passive wm geometry .wineconf 462x600+148+153 wm maxsize .wineconf 1265 994 wm minsize .wineconf 1 1 wm overrideredirect .wineconf 0 wm resizable .wineconf 1 1 wm deiconify .wineconf wm title .wineconf "TkWineSetup Configuring Wine" #wm iconbitmap .wineconf @$TKW/setupfiles/images/setup2.xbm #wm iconmask .wineconf @$TKW/setupfiles/images/setupmask2.xbm label .wineconf.lab18 \ -background #fcfefe \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_banner canvas .wineconf.can01 \ -background #fee0b4 -borderwidth 2 -height 207 -relief ridge \ -width 296 label .wineconf.can01.lab22 \ -background #fefefe \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_drivesSect listbox .wineconf.can01.lis23 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -yscrollcommand {.wineconf.can01.scrDrives set } scrollbar .wineconf.can01.scrDrives \ -borderwidth 1 -orient vert -width 10 \ -command { .wineconf.can01.lis23 yview } listbox .wineconf.can01.lis24 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* listbox .wineconf.can01.lis25 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* listbox .wineconf.can01.lis26 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* button .wineconf.can01.but28 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable ADD \ -command {TkW:drives new} button .wineconf.can01.but29 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -state disabled -text button -textvariable REMOVE \ -command {TkW:delDrive $sel_drive} button .wineconf.can01.but30 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -state disabled -text button -textvariable EDIT \ -command {TkW:drives $sel_drive} label .wineconf.can01.lab31 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_path label .wineconf.can01.lab32 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_type label .wineconf.can01.lab33 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_label label .wineconf.can01.lab34 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_fstype button .wineconf.can01.but51 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable HELP \ -command {TkW:message $WC_helpondrives} #section wine canvas .wineconf.can37 \ -background #fedcdc -borderwidth 2 -height 207 -relief ridge \ -width 296 label .wineconf.can37.lab39 \ -background #fefefe \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_wineSect label .wineconf.can37.lab40 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_windows label .wineconf.can37.lab41 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_system button .wineconf.can37.but42 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -textvariable WC_winepath \ -command TkW:editWinePath button .wineconf.can37.but43 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable HELP \ -command {TkW:message $WC_helponwine} entry .wineconf.can37.ent45 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -textvariable windowspath entry .wineconf.can37.ent46 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -textvariable syspath label .wineconf.can37.lab47 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_temp label .wineconf.can37.lab48 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_Symbols entry .wineconf.can37.ent49 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -textvariable tmppath entry .wineconf.can37.ent50 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -textvariable symbols # section serialports canvas .wineconf.can53 \ -background #fedcdc -borderwidth 2 -relief ridge label .wineconf.can53.lab57 \ -background #fefefe \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_serialSect listbox .wineconf.can53.lis58 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* listbox .wineconf.can53.lis59 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -yscrollcommand {.wineconf.can53.scr60 set } scrollbar .wineconf.can53.scr60 \ -borderwidth 1 -orient vert -width 10 \ -command { .wineconf.can53.lis59 yview } button .wineconf.can53.but63 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable EDIT \ -command {TkW:editports com} button .wineconf.can53.but64 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable CLEAR -state disabled \ -command { set com([expr $sel_com + 1]) " " TkW:setboxes .wineconf.can53.but64 configure -state disabled } button .wineconf.can53.help \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable HELP\ -command {TkW:message $WC_helponserial} #section parallelports canvas .wineconf.can54 \ -background #fedcdc -borderwidth 2 -relief ridge label .wineconf.can54.lab65 \ -background #fefefe \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_parallelSect listbox .wineconf.can54.lis67 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -yscrollcommand {.wineconf.can54.scr71 set } listbox .wineconf.can54.lis68 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* button .wineconf.can54.but69 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable EDIT \ -command {TkW:editports lpt} button .wineconf.can54.but70 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable CLEAR -state disabled \ -command { set lpt([expr $sel_port + 1]) " " TkW:setboxes .wineconf.can54.but70 configure -state disabled } scrollbar .wineconf.can54.scr71 \ -borderwidth 1 -orient vert -width 10 \ -command {.wineconf.can54.lis67 yview} button .wineconf.can54.help \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable HELP\ -command {TkW:message $WC_helponPP} #sections spy et Tweak.Layout canvas .wineconf.can55 \ -background #fedcdc -borderwidth 2 -height 207 -relief ridge \ -width 296 label .wineconf.can55.lab72 \ -background #fefefe \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_logSect entry .wineconf.can55.ent74 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -textvariable wine_logfile button .wineconf.can55.but75 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable WC_exclude label .wineconf.can55.lab76 \ -background #fefefe \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -relief groove -text label -textvariable WC_wineLook menubutton .wineconf.can55.men78 \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -menu .wineconf.can55.men78.m -padx 4 -pady 3 -text menu \ -textvariable winelook menu .wineconf.can55.men78.m \ -cursor {} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* .wineconf.can55.men78.m add command \ -command {set winelook "Win31"} -label {Win 3.1} .wineconf.can55.men78.m add command \ -command {set winelook "Win95"} -label win95/98 .wineconf.can55.men78.m add command \ -command {set winelook "Win98"} -label {Win 98} button .wineconf.can55.help \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable HELP \ -command {TkW:message $WC_helponmisc} #main window buttons: button .wineconf.but80 \ -command { set WAIT wait TkW:message2 $WC_quit $WC_quitreally $WC_noquit while {$WAIT == "wait"} {update} if {$WAIT == "opt1"} { if {[winfo exists .desktop]} { destroy .wineconf set WAITconf 0 return } else { exit } } } \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable QUIT button .wineconf.save \ -command TkW:writewinerc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -padx 9 \ -pady 3 -text button -textvariable SAVE ################### # SETTING GEOMETRY ################### place .wineconf.lab18 \ -x 3 -y 5 -width 453 -height 20 -anchor nw -bordermode ignore #placing drives sctions widgets: place .wineconf.can01 \ -x 5 -y 35 -width 466 -height 180 -anchor nw -bordermode ignore place .wineconf.can01.lab22 \ -x 0 -y 0 -width 443 -height 25 -anchor nw -bordermode ignore place .wineconf.can01.lis23 \ -x 10 -y 56 -width 130 -height 113 -anchor nw -bordermode ignore place .wineconf.can01.lis24 \ -x 139 -y 55 -width 85 -height 113 -anchor nw -bordermode ignore place .wineconf.can01.lis25 \ -x 223 -y 55 -width 65 -height 113 -anchor nw -bordermode ignore place .wineconf.can01.lis26 \ -x 288 -y 55 -width 65 -height 113 -anchor nw -bordermode ignore place .wineconf.can01.scrDrives \ -x 353 -y 55 -width 16 -height 113 -anchor nw -bordermode ignore # bind lis23-26 bind .wineconf.can01.lis23 { set sel_drive [ .wineconf.can01.lis23 nearest %y] #enable related button .wineconf.can01.but30 configure -state normal .wineconf.can01.but29 configure -state normal # disable the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state disabled .wineconf.can53.but64 configure -state disabled } bind .wineconf.can01.lis24 { set sel_drive [ .wineconf.can01.lis23 nearest %y] .wineconf.can01.lis23 selection set $sel_drive .wineconf.can01.but30 configure -state normal .wineconf.can01.but29 configure -state normal # disable the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state disabled .wineconf.can53.but64 configure -state disabled } bind .wineconf.can01.lis25 { set sel_drive [ .wineconf.can01.lis23 nearest %y] .wineconf.can01.lis23 selection set $sel_drive .wineconf.can01.but30 configure -state normal .wineconf.can01.but29 configure -state normal # disble the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state disabled .wineconf.can53.but64 configure -state disabled } bind .wineconf.can01.lis26 { set sel_drive [ .wineconf.can01.lis23 nearest %y] .wineconf.can01.lis23 selection set $sel_drive .wineconf.can01.but30 configure -state normal .wineconf.can01.but29 configure -state normal # disble the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state disabled .wineconf.can53.but64 configure -state disabled } place .wineconf.can01.but28 \ -x 375 -y 44 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can01.but29 \ -x 375 -y 76 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can01.but30 \ -x 375 -y 110 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can01.lab31 \ -x 13 -y 36 -width 128 -height 20 -anchor nw -bordermode ignore place .wineconf.can01.lab32 \ -x 140 -y 36 -width 83 -height 20 -anchor nw -bordermode ignore place .wineconf.can01.lab33 \ -x 223 -y 36 -width 68 -height 20 -anchor nw -bordermode ignore place .wineconf.can01.lab34 \ -x 290 -y 36 -width 68 -height 20 -anchor nw -bordermode ignore place .wineconf.can01.but51 \ -x 375 -y 141 -width 60 -height 28 -anchor nw -bordermode ignore #placing wine sctions widgets: place .wineconf.can37 \ -x 5 -y 230 -width 449 -height 115 -anchor nw -bordermode ignore place .wineconf.can37.lab39 \ -x 3 -y 1 -width 443 -height 20 -anchor nw -bordermode ignore place .wineconf.can37.lab40 \ -x 7 -y 29 -width 58 -height 20 -anchor nw -bordermode ignore place .wineconf.can37.lab41 \ -x 7 -y 55 -width 58 -height 20 -anchor nw -bordermode ignore place .wineconf.can37.but42 \ -x 7 -y 84 -width 248 -height 20 -anchor nw -bordermode ignore place .wineconf.can37.but43 \ -x 375 -y 80 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can37.ent45 \ -x 74 -y 26 -width 150 -height 24 -anchor nw -bordermode ignore place .wineconf.can37.ent46 \ -x 74 -y 52 -width 150 -height 24 -anchor nw -bordermode ignore place .wineconf.can37.lab47 \ -x 239 -y 29 -width 58 -height 20 -anchor nw -bordermode ignore place .wineconf.can37.lab48 \ -x 239 -y 54 -width 58 -height 20 -anchor nw -bordermode ignore place .wineconf.can37.ent49 \ -x 304 -y 26 -width 135 -height 24 -anchor nw -bordermode ignore place .wineconf.can37.ent50 \ -x 304 -y 52 -width 135 -height 24 -anchor nw -bordermode ignore #placing serialports sections widgets: place .wineconf.can53 \ -x 9 -y 356 -width 144 -height 180 -anchor nw -bordermode ignore place .wineconf.can53.lab57 \ -x 3 -y 3 -width 138 -height 20 -anchor nw -bordermode ignore place .wineconf.can53.lis58 \ -x 3 -y 25 -width 40 -height 83 -anchor nw -bordermode ignore place .wineconf.can53.lis59 \ -x 44 -y 25 -width 85 -height 83 -anchor nw -bordermode ignore # bind lis59 to select lis58 at the same time... bind .wineconf.can53.lis58 { set sel_com [ .wineconf.can53.lis58 nearest %y] .wineconf.can53.lis58 selection set $sel_com #disbale other list related buttons: .wineconf.can01.but30 configure -state disabled .wineconf.can01.but29 configure -state disabled # disable/enable the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state disabled .wineconf.can53.but64 configure -state normal } # bind lis58 to select lis59 at the same time... bind .wineconf.can53.lis59 { set sel_com [ .wineconf.can53.lis59 nearest %y] .wineconf.can53.lis58 selection set $sel_com #disbale other list related buttons: .wineconf.can01.but30 configure -state disabled .wineconf.can01.but29 configure -state disabled # disable/enable the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state disabled .wineconf.can53.but64 configure -state normal } place .wineconf.can53.scr60 \ -x 123 -y 26 -width 16 -height 80 -anchor nw -bordermode ignore place .wineconf.can53.but63 \ -x 10 -y 115 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can53.but64 \ -x 78 -y 115 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can53.help \ -x 10 -y 145 -width 130 -height 28 -anchor nw -bordermode ignore #placing parallelports sections widgets: place .wineconf.can54 \ -x 160 -y 356 -width 144 -height 180 -anchor nw -bordermode ignore place .wineconf.can54.lab65 \ -x 1 -y 3 -width 143 -height 20 -anchor nw -bordermode ignore place .wineconf.can54.lis67 \ -x 5 -y 26 -width 45 -height 83 -anchor nw -bordermode ignore place .wineconf.can54.lis68 \ -x 50 -y 25 -width 75 -height 83 -anchor nw -bordermode ignore # bind lis67 bind .wineconf.can54.lis68 { set sel_port [ .wineconf.can53.lis59 nearest %y] #disbale other list related buttons: .wineconf.can01.but30 configure -state disabled .wineconf.can01.but29 configure -state disabled # disable/enable the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state normal .wineconf.can53.but64 configure -state disabled } # bind lis68 to select lis67 at the same time... bind .wineconf.can54.lis67 { set sel_port [ .wineconf.can53.lis59 nearest %y] .wineconf.can54.lis67 selection set $sel_port #disbale other list related buttons: .wineconf.can01.but30 configure -state disabled .wineconf.can01.but29 configure -state disabled # disable/enable the tow CLEAR buttons of ports: .wineconf.can54.but70 configure -state normal .wineconf.can53.but64 configure -state disabled } place .wineconf.can54.but69 \ -x 10 -y 115 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can54.but70 \ -x 78 -y 115 -width 60 -height 28 -anchor nw -bordermode ignore place .wineconf.can54.scr71 \ -x 123 -y 26 -width 16 -height 80 -anchor nw -bordermode ignore place .wineconf.can54.help \ -x 10 -y 145 -width 130 -height 28 -anchor nw -bordermode ignore #placing spy and Tweak.Layout sections widgets: place .wineconf.can55 \ -x 313 -y 357 -width 139 -height 180 -anchor nw -bordermode ignore place .wineconf.can55.lab72 \ -x 3 -y 3 -width 133 -height 20 -anchor nw -bordermode ignore place .wineconf.can55.ent74 \ -x 5 -y 25 -width 130 -height 24 -anchor nw -bordermode ignore place .wineconf.can55.but75 \ -x 5 -y 50 -width 130 -height 28 -anchor nw -bordermode ignore place .wineconf.can55.lab76 \ -x 3 -y 83 -width 133 -height 20 -anchor nw -bordermode ignore place .wineconf.can55.men78 \ -x 10 -y 110 -width 122 -height 24 -anchor nw -bordermode ignore place .wineconf.can55.help \ -x 5 -y 145 -width 130 -height 28 -anchor nw -bordermode ignore #Main window buttons: pack .wineconf.but80 -padx 5 -pady 1 -side bottom -fill x pack .wineconf.save -padx 5 -side bottom -fill x # initialise the arrays TkW:initarrays # Now start reading the .winerc (or the default wine.ini) TkW:readwinerc $DefaultConfFile # Set the listboxes: TkW:setboxes #updates the scollings set WAITconf 1 while {$WAITconf == 1} { TkW:scrollwindows } } proc TkW:readwinerc {DefaultConfFile} { global sect ndrives drive n rcout line wine_logfile winelook global nspool nalias srcdest TKW TkW:debug "Entering readwinerc -----------------------------" # OPEN THE FILE Read-Only: TkW:fixme "TkW:wineconf::\ Detection of wine.ini will fail when ~/.winerc ~/wine.conf not there" if {[file exist $DefaultConfFile] } then { set winerc [open $DefaultConfFile r] } else { TkW:message "No file $DefaultConfFile... This is a TkWine error" return } # Adds a fe setting in case they're missing (actually, they are in the std file) in the wine.ini set winelook Win95 set wine_logfile /tmp/winelog # OPEN /tmp/tkwwinerc for writting set rcout [open /tmp/tkwinerc w] set ndrives -1 set nspool 0 set nalias -1 global NDllOver NDllPairs DllPairs DllOver set NDllOver 0 set NDllPairs 0 # Read line by line set charread 0 while {$charread != -1} { set charread [gets $winerc line] set line [string trim $line] set n [expr $charread - 1] set idok 0 TkW:debug "READ:$line-$charread" if {[string match ";*" $line]} { #puts $rcout $line TkW:debug Comment; set idok 1} # The two lines below SHOULD work... they don't #if {[string match "\[*\]" $line]} \ #{TkW:debug Section;set idok 1} ## a ugly replacement: if {"[string range $line 0 0][string range $line $n $n]"\ == "\[\]"} { TkW:sections set idok 1 } if {$idok != 1 && [string match "*=*" $line]} { TkW:assign TkW:debug Assignment set idok 1 } if {!$idok && $charread > 0} { TkW:debug "Error::Unknow line in .winerc" puts "************Warning: Error in config \ file ****************" puts "Line $line incomprehensible" } } } proc TkW:sections {} { global sect ndrives drive n rcout line global drivepath drivelabel drivetype drivefstype driveserial drivedevice set sect [string tolower [string range $line 1 [expr $n - 1]]] if {[string tolower [string range $sect 0 4]] == "drive"} { set ndrives [expr $ndrives + 1] set drive($ndrives) [string range $sect 6 6] set drivepath($ndrives) "" set drivelabel($ndrives) "" set drivetype($ndrives) "" set drivefstype($ndrives) "" set driveserial($ndrives) "" set drivedevice($ndrives) "" set sect drive TkW:debug "Section $sect $drive($ndrives)" #puts $rcout "\[$sect $drive($ndrives)\]" } else { TkW:debug "Section $sect" #puts $rcout "\[$sect]" } } proc TkW:assign {} { global sect ndrives drive n rcout line global windowspath varpath syspath tmppath symbols winelook global ndrives drive drivepath drivetype drivefstype drivelabel global drivedevice driveserial global resolution defaultfont global readport writeport global exclude default_progs startup allocsyscolors winelook wine_logfile global com lpt spool nspool alias nalias global NDllOver NDllPairs global DllOver DllPairs set equalis [string first "=" $line ] set varname [string tolower [string trim [string range $line 0 [expr $equalis - 1]]]] set value [string trim [string range $line [expr $equalis + 1] $n]] if {$varname == "default"} {set varname Default} switch $varname { {path} { switch $sect { {drive} {set drivepath($ndrives) $value} {wine} {set varpath $value;update} {default} {TkW:conferror $sect $varname $value} } } {type} { if {$sect != "drive"} then { TkW:conferror $sect $varname $value } else { set drivetype($ndrives) $value } } {label} { if {$sect != "drive"} then { TkW:conferror $sect $varname $value } else { set drivelabel($ndrives) $value } } {serial} { if {$sect != "drive"} then { TkW:conferror $sect $varname $value } else { set driveserial($ndrives) $value } } {filesystem} { if {$sect != "drive"} then { TkW:conferror $sect $varname $value } else { set drivefstype($ndrives) $value } } {device} { if {$sect != "drive"} then { TkW:conferror $sect $varname $value } else { set drivedevice($ndrives) $value } } {windows} { if {$sect != "wine"} then { TkW:conferror $sect $varname $value } else { set windowspath $value } } {system} { if {$sect != "wine"} then { TkW:conferror $sect $varname $value } else { set syspath $value } } {temp} { if {$sect != "wine"} then { TkW:conferror $sect $varname $value } else { set tmppath $value } } {symboltablefile} { if {$sect != "wine"} then { TkW:conferror $sect\ $varname $value } else { set symbols $value } } {resolution} { if {$sect != "fonts"} then { TkW:conferror $sect $varname $value } else { set resolution $value } } {Default} { switch $sect { {fonts} { set defaultfont $value} {programs} {set default_progs $value} {default} { TkW:conferror \ $sect $varname $value } } } {read} { if {$sect != "ports"} then { TkW:conferror $sect $varname $value } else { set readport $value } } {write} { if {$sect != "ports"} then { TkW:conferror $sect $varname $value } else { set writeport $value } } {file} { if {$sect != "spy"} then { TkW:conferror $sect $varname $value } else { set wine_logfile $value } } {exclude} { if {$sect != "spy"} then { TkW:conferror $sect $varname $value } else { set Exclude $value } } {allocsystemcolors} { if {$sect != "options"} then { TkW:conferror $sect $varname\ $value } else { set allocsyscolors $value } } {winelook} { if {$sect != "tweak.layout"} then { TkW:conferror $sect $varname\ $value } else { set winelook $value } } {startup} { if {$sect != "programs"} then { TkW:conferror $sect $varname\ $value } else { set startup $value } } {printer} { if {$sect != "wine"} then { TkW:conferror $sect $varname\ $value } else { set printer $value } } {default} { if {$sect == "dllpairs"} { set NDllPairs [expr $NDllPairs + 1] set DllPairs($NDllPairs) "$varname = $value" return } if {$sect == "dlloverrides"} { set NDllOver [expr $NDllOver + 1] set DllOver($NDllOver) "$varname = $value" return } if {[string tolower [string trim [string range $line 0 2]]] == "lpt" && [string range $line 4 4 ] == ":" } { if {$sect != "spooler"} then { TkW:conferror $sect $varname $value } else { set nspool [expr $nspool + 1] set spool($nspool) $value } return } set varname2 [string tolower [string trim \ [string range $line 0 [expr $equalis - 2]]]] set letter [string tolower [string range $line [expr $equalis - 1]\ [expr $equalis - 1] ]] #set varname2 [string tolower $varname2] switch $varname2 { {com} { if {$sect != "serialports"} then { TkW:conferror $sect $varname\ $value } else { set com($letter) $value } } {lpt} { if {$sect != "parallelports"} then { TkW:conferror $sect $varname\ $value } else { set lpt($letter) $value } } {alias} { if {$sect != "fonts"} then { TkW:conferror $sect $varname\ $value } else { set nalias [expr $nalias + 1] set alias($nalias) $value } } {default} { TkW:conferror $sect $varname $value } } } } } proc TkW:conferror {sect varname value} { puts "ERROR IN CONFIG FILE, FOUND $varname=$value in section $sect" } proc TkW:setboxes {} { global ndrives drive drivepath drivetype drivefstype drivelabel global drivedevice driveserial global com lpt .wineconf.can01.lis23 delete 0 end .wineconf.can01.lis24 delete 0 end .wineconf.can01.lis25 delete 0 end .wineconf.can01.lis26 delete 0 end for {set i 0} {$i <= $ndrives } {set i [expr $i + 1]} { TkW:debug "Drive $i : $drive($i) $drivepath($i) $drivetype($i)\ $drivelabel($i)" TkW:debug " $drivefstype($i) $drivedevice($i) $driveserial($i)" set yes " " if {![file isdirectory $drivepath($i)]} {set yes "*"} .wineconf.can01.lis23 insert end \ "$yes\($drive($i):\\) $drivepath($i) " .wineconf.can01.lis24 insert end \ "$yes$drivetype($i)" .wineconf.can01.lis25 insert end \ "$yes$drivelabel($i)" .wineconf.can01.lis26 insert end \ "$yes$drivefstype($i)" } .wineconf.can53.lis59 delete 0 end .wineconf.can53.lis58 delete 0 end for {set i 1} {$i <= 8 } {set i [expr $i + 1]} { .wineconf.can53.lis58 insert end "com$i" .wineconf.can53.lis59 insert end $com($i) } .wineconf.can54.lis67 delete 0 end .wineconf.can54.lis68 delete 0 end for {set i 1} {$i <= 8 } {set i [expr $i + 1]} { .wineconf.can54.lis67 insert end "lpt$i" .wineconf.can54.lis68 insert end $lpt($i) } } proc TkW:scrollwindows {} { global OldPos if {![info exists OldPos]} {set OldPos 0} # Serial set lis58pos [.wineconf.can53.lis59 yview]; set a 1 foreach i $lis58pos { if {$a} {set pos $i}; set a 0 } .wineconf.can53.lis58 yview moveto $pos # // ports set lis67pos [.wineconf.can54.lis67 yview]; set a 1 foreach i $lis67pos { if {$a} {set pos $i}; set a 0 } .wineconf.can54.lis68 yview moveto $pos # drives: set lis23pos [.wineconf.can01.lis23 yview]; set a 1 foreach i $lis23pos { if {$a} {set pos $i}; set a 0 } if {$lis23pos != $OldPos} { TkW:debug "listbox23 has move from $OldPos to $lis23pos" TkW:debug "listbox24 goes to $pos " } set OldPos $lis23pos .wineconf.can01.lis24 yview moveto $pos .wineconf.can01.lis25 yview moveto $pos .wineconf.can01.lis26 yview moveto $pos update } proc TkW:initarrays {} { global com lpt spool for {set i 1 } {$i <= 8 } {set i [expr $i + 1]} { set com($i) "" set lpt($i) "" } for {set i 1 } {$i <= 8 } {set i [expr $i + 1]} { set spool($i) "" } } proc TkW:editports {comlpt} { global OK CANCEL com portch lpt lptcom win banner TKW global WC_confserial WC_confparallel WC_PPbanner WC_serialbanner .wineconf.can54.but69 configure -state disabled .wineconf.can53.but63 configure -state disabled # this is a ugly trick as buttons command need a global variable, not an arg set lptcom $comlpt if {$comlpt == "com"} then { set win .comedit set title $WC_confserial set banner $WC_serialbanner } else { set win .lptedit set title $WC_confparallel set banner $WC_PPbanner } toplevel $win -class Toplevel \ -background #3c1cfe wm focusmodel $win passive wm geometry $win 205x365+448+253 wm maxsize $win 1265 994 wm minsize $win 1 1 wm overrideredirect $win 0 wm resizable $win 1 1 wm deiconify $win wm title $win $title #wm iconbitmap $win @$TKW/setupfiles/images/setup2.xbm #wm iconmask $win @$TKW/setupfiles/images/setupmask2.xbm # creating the Banner label "$win.banner" \ -background #dc96dc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -relief groove -text $banner # creating the labels and entries for {set i 1} {$i <= 8} {set i [expr $i + 1 ]} { set portch($i) $com($i) if {$comlpt == "com"} then { set portch($i) $com($i) } else { set portch($i) $lpt($i) } label "$win.lab$i" \ -background #dc96dc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -relief groove -text "Com$i" entry "$win.ent$i" \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -textvariable portch($i) set Y [expr 55 + $i * 30] place "$win.lab$i"\ -x 5 -y $Y -width 45 -height 28 \ -anchor nw -bordermode ignore place "$win.ent$i"\ -x 55 -y $Y -width 145 -height 28 \ -anchor nw -bordermode ignore } button $win.but80 \ -command { for {set i 1} {$i <= 8} {set i [expr $i + 1]} { if {$lptcom == "com"} then { set com($i) $portch($i) } else { set lpt($i) $portch($i) } .wineconf.can54.but69 configure -state normal .wineconf.can53.but63 configure -state normal } destroy $win TkW:setboxes } \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable OK place $win.banner -x 5 -y 5 -width 195 -height 70 place $win.but80 \ -x 5 -y 335 -width 100 -height 28 \ -anchor nw -bordermode ignore button $win.but81 \ -command {destroy $win .wineconf.can54.but69 configure -state normal .wineconf.can53.but63 configure -state normal }\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable CANCEL \ place $win.but81 \ -x 105 -y 335 -width 100 -height 28 \ -anchor nw -bordermode ignore } proc TkW:drives {n} { global ndrives drive drivepath drivetype drivefstype drivelabel global drivedevice driveserial TKW global WC_confdrives HELP WCHLP WC_driveSetBanner global chdrives1 chdrives2 chdrives3 chdrives4 global chdrives5 chdrives6 chdrives7 global win i num ch drOK set chdrives(1) $chdrives1 set chdrives(2) $chdrives2 set chdrives(3) $chdrives3 set chdrives(4) $chdrives4 set chdrives(5) $chdrives5 set chdrives(6) $chdrives6 set chdrives(7) $chdrives7 if {$n == "new"} then { set num [expr $ndrives + 1] set ch(1) "" set ch(2) "" set ch(3) "" set ch(4) "" set ch(5) "" set ch(6) "" set ch(7) "" } else { set num $n set ch(1) $drive($num) set ch(2) $drivepath($num) set ch(3) $drivetype($num) set ch(4) $drivefstype($num) set ch(5) $drivelabel($num) set ch(6) $drivedevice($num) set ch(7) $driveserial($num) } TkW:debug "Entering TkW:drives - drive number: $num" .wineconf.can01.but28 configure -state disabled .wineconf.can01.but29 configure -state disabled .wineconf.can01.but30 configure -state disabled # re-enable the tow EDIT buttons of ports: .wineconf.can54.but69 configure -state disabled .wineconf.can53.but63 configure -state disabled set win .drivedit set title $WC_confdrives toplevel $win -class Toplevel \ -background #3c1cfe wm focusmodel $win passive wm geometry $win 305x325+448+253 wm maxsize $win 1265 994 wm minsize $win 1 1 wm overrideredirect $win 0 wm resizable $win 1 1 wm deiconify $win wm title $win $title #wm iconbitmap $win @$TKW/setupfiles/images/setup2.xbm #wm iconmask $win @$TKW/setupfiles/images/setupmask2.xbm # setting the banner: label "$win.banner" \ -background #dc96dc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -relief groove -text $WC_driveSetBanner -height 35 # creating the labels and entries # setting HELP buttons button $win.hlp1\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable HELP \ -command {TkW:message $WCHLP(1)} button $win.hlp2\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable HELP \ -command {TkW:message $WCHLP(2)} button $win.hlp3\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable HELP \ -command {TkW:message $WCHLP(3)} button $win.hlp4\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable HELP \ -command {TkW:message $WCHLP(4)} button $win.hlp5\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable HELP \ -command {TkW:message $WCHLP(5)} button $win.hlp6\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable HELP \ -command {TkW:message $WCHLP(6)} button $win.hlp7\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable HELP \ -command {TkW:message $WCHLP(7)} for {set i 1} {$i <= 7} {set i [expr $i + 1 ]} { label "$win.lab$i" \ -background #dc96dc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -relief groove -text $chdrives($i) if {$i < 3 || $i > 4} then { entry "$win.ent$i" \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -text text -textvariable ch($i) } else { menubutton $win.ent$i \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \ -menu $win.ent$i.m -padx 4 -pady 3 \ -text text -textvariable ch($i) } # settings the menus: if {$i == 3} then { menu $win.ent$i.m \ -cursor {} \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* $win.ent$i.m add command \ -command {set ch(3) "hd"} -label {Hard Drive} $win.ent$i.m add command \ -command {set ch(3) "floppy"} -label {Floppy} $win.ent$i.m add command \ -command {set ch(3) "cdrom"} -label {CDrom} $win.ent$i.m add command \ -command {set ch(3) "network"} \ -label {network} } if {$i == 4} then { menu $win.ent$i.m \ -cursor {} \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* $win.ent$i.m add command \ -command {set ch(4) "msdos"} -label {msdos} $win.ent$i.m add command \ -command {set ch(4) "win95"} -label {Win95} $win.ent$i.m add command \ -command {set ch(4) "Unix"} -label {Unix} } set Y [expr 40 + $i * 30] place "$win.lab$i"\ -x 5 -y $Y -width 145 -height 28 \ -anchor nw -bordermode ignore place "$win.ent$i"\ -x 150 -y $Y -width 85 -height 28 \ -anchor nw -bordermode ignore place "$win.hlp$i"\ -x 235 -y $Y -width 55 -height 28 \ -anchor nw -bordermode ignore } button $win.but80 \ -command { TkW:checkdrives if {$drOK} { set drive($num) $ch(1) set drivepath($num) $ch(2) set drivetype($num) $ch(3) set drivefstype($num) $ch(4) set drivelabel($num) $ch(5) set drivedevice($num) $ch(6) set driveserial($num) $ch(7) destroy $win if {$num > $ndrives} {set ndrives $num} TkW:setboxes .wineconf.can01.but28 configure -state normal # re-enable the tow EDIT buttons of ports: .wineconf.can54.but69 configure -state normal .wineconf.can53.but63 configure -state normal } } \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable OK \ place $win.but80 \ -x 5 -y 290 -width 145 -height 28 \ -anchor nw -bordermode ignore button $win.but81 \ -command { destroy $win .wineconf.can01.but28 configure -state normal #.wineconf.can01.but29 configure -state normal #.wineconf.can01.but30 configure -state normal # re-enable the tow EDIT buttons of ports: #.wineconf.can54.but69 configure -state normal #.wineconf.can53.but63 configure -state normal }\ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -padx 9 -pady 3 -text button -textvariable CANCEL \ place $win.but81 \ -x 150 -y 290 -width 145 -height 28 \ -anchor nw -bordermode ignore place $win.banner -width 290 -height 35 -x 5 -y 5 } proc TkW:checkdrives {} { global ndrives ch num drOK drive global WC_givepath WC_oneletter WC_usedletter WC_11letters if {[string length $ch(1)] != 1} { TkW:message "$ch(1) $WC_oneletter" set drOK 0 return } if {[string length $ch(5)] > 11} { TkW:message "$ch(5) $WC_11letters" set drOK 0 return } for {set i 0} {$i <=$ndrives} {set i [expr $i + 1]} { if {$i != $num && [string tolower $ch(1)]\ == [string tolower $drive($i)] } { TkW:message "$ch(1)$WC_usedletter" set drOK 0 return } } if { $ch(2) == ""} {TkW:message $WC_givepath; set drOK 0;return} if { $ch(3) == ""} {set ch(3) hd} if { $ch(4) == ""} {set ch(4) unix} if { $ch(5) == ""} {set ch(5) "Drive $ch(1)"} set drOK 1 } proc TkW:editWinePath {} { global OK varpath WC_editPathBanner WC_pathtitle TKW TkW:debug "Entering TkW:editWinePath with path set to $varpath" global ndrives dri # Create the toplevel toplevel .editpath -class Toplevel \ -background #3c1cfe wm focusmodel .editpath passive wm geometry .editpath 410x100+448+253 wm maxsize .editpath 1265 994 wm minsize .editpath 1 1 wm overrideredirect .editpath 0 wm resizable .editpath 1 1 wm deiconify .editpath wm title .editpath $WC_pathtitle #wm iconbitmap .editpath @$TKW/setupfiles/images/setup2.xbm #wm iconmask .editpath @$TKW/setupfiles/images/setupmask2.xbm #Creates the Banner label .editpath.banner \ -background #dc96dc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -relief groove -text $WC_editPathBanner #Creates the entry box entry .editpath.ent \ -background #dc96dc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -relief groove -textvariable varpath #Creates OK button button .editpath.ok\ -background #dc96dc \ -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*\ -relief groove -text $OK -command {destroy .editpath} place .editpath.banner -x 5 -y 5 -width 400 -height 30 place .editpath.ent -x 5 -y 40 -width 400 -height 30 place .editpath.ok -x 5 -y 70 -width 400 -height 30 } proc TkW:writewinerc {} { global windowspath varpath syspath tmppath symbols winelook global ndrives drive drivepath drivetype drivefstype drivelabel global drivedevice driveserial global resolution defaultfont HOME global readport writeport global exclude default_progs startup allocsyscolors winelook wine_logfile global com lpt spool nspool alias nalias global NDllPairs NDllOver DllPairs DllOver # open file for writing:;; # move the old file: if {[file exists ~/.winerc]} { set free 1 while {[file exists ~/.winerc.$free]} { set free [expr $free + 1] } exec mv -f $HOME/.winerc $HOME/.winerc.$free } set out [open ~/.winerc w] # writes drives # Puts the usual comments: puts $out ";;" puts $out ";; MS-DOS drives configuration " puts $out ";;" puts $out ";; Each section has the following format:" puts $out ";; \[Drive X\]" puts $out ";; Path=xxx (Unix path for drive root)" puts $out ";; Type=xxx (supported types are 'floppy', 'hd', 'cdrom' and 'network')" puts $out ";; Label=xxx (drive label, at most 11 characters)" puts $out ";; Serial=xxx (serial number, 8 characters hexadecimal number)" puts $out ";; Filesystem=xxx (supported types are 'msdos','win95','unix')" puts $out ";; Device=/dev/xx (only if you want to allow raw device access)" puts $out ";; " for {set i 0} {$i <= $ndrives} {set i [expr $i + 1]} { puts $out "\[Drive $drive($i)\]" puts $out "Path=$drivepath($i)" puts $out "Type=$drivetype($i)" puts $out "Label=$drivelabel($i)" if {$drivefstype($i) == ""} {set drivefstype($i) unix} puts $out "Filesystem=$drivefstype($i)" if {$driveserial($i) != "" } {puts $out "Serial=$driveserial($i)"} if {$drivedevice($i) != "" } {puts $out "Device=$drivedevice($i)"} puts $out "" } #write wine section puts $out "\[wine\]" puts $out "Windows=$windowspath" puts $out "System=$syspath" puts $out "Temp=$tmppath" puts $out "Path=$varpath" puts $out "SymbolTableFile=$symbols" puts $out "" # write options TkW:fixme "Option not supported in wineconf, write de default" puts $out "\[options\]" puts $out "AllocSystemColors=$allocsyscolors" puts $out "" # DllPairs: puts $out "\[DllPairs\]" for {set i 1} {$i <= $NDllPairs} {set i [expr $i + 1]} { puts $out $DllPairs($i) } puts $out # DllOverrides: puts $out "\[DllOverrides\]" for {set i 1} {$i <= $NDllOver} {set i [expr $i + 1]} { puts $out $DllOver($i) } puts $out # write fonts section TkW:fixme "fonts support to be added to wineconf...." puts $out "\[fonts\]" puts $out ";Read documentation/fonts before adding aliases" puts $out "Resolution = $resolution" puts $out "Default = $defaultfont" puts $out "" # write serial puts $out "\[serialports\]" for {set i 1} {$i <= 8} {set i [expr $i + 1]} { if {$com($i) != ""} {puts $out "Com$i=$com($i)"} } puts $out "" # write parallel puts $out "\[parallelports\]" for {set i 1} {$i <= 8} {set i [expr $i + 1]} { if {$lpt($i) != ""} {puts $out "Lpt$i=$lpt($i)"} } puts $out "" # write spooler puts $out "\[spooler\]" for {set i 1} {$i <= 8} {set i [expr $i + 1]} { if {$spool($i) != ""} {puts $out "LPT$i:=$spool($i)"} } puts $out "" # write ports puts $out "\[ports]" if {[info exists readport]} {puts $out $readport} {puts $out ";read=0x779,0x379,0x280-0x2a0"} if {[info exists writeport]} {puts $out $writeport} {puts $out ";write=0x779,0x379,0x280-0x2a0"} puts $out "" #write spy puts $out "\[spy\]" puts $out "file=$wine_logfile" if {[info exists exclude]} {puts $out "Exclude=$exclude"} {puts $out "Exclude=WM_SIZE;WM_TIMER;"} puts $out "" #write Tweak.Layout puts $out "\[Tweak.Layout\]" puts $out ";; WineLook=xxx (supported styles are \'Win31\'(default), \'Win95\', \'Win98\')" puts $out "WineLook=Win95" } proc TkW:delDrive {n} { global ndrives drive drivepath drivetype drivefstype drivelabel global drivedevice driveserial TkW:debug "Remove drive [expr $n + 1]" for {set i $n} {$i<$ndrives} {set i [expr $i +1]} { set i1 [expr $i + 1] set drive($i) $drive($i1) set drivepath($i) $drivepath($i1) set drivelabel($i) $drivelabel($i1) set drivetype($i) $drivetype($i1) set drivefstype($i) $drivefstype($i1) set driveserial($i) $driveserial($i1) } set ndrives [expr $ndrives - 1] TkW:setboxes }