648 lines
19 KiB
Tcl
648 lines
19 KiB
Tcl
# Copyright 1999 Jean-Louis Thirot
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
#
|
|
|
|
proc TkW:autoconf {outfile} {
|
|
|
|
# This files scans the fstab, then creates a wine.conf file
|
|
# parsed to wineconf for further editings....
|
|
|
|
# MS DOS drives are sorted following the rules explained in tools/wineconf
|
|
|
|
global PATH
|
|
global TMPLetter WINLetter SYSLetter
|
|
|
|
global OUTF
|
|
set OUTF [open $outfile w]
|
|
|
|
TkW:InitNewConfig
|
|
set err [TkW:readFStab]
|
|
|
|
TkW:SortDosDrives
|
|
TkW:addRootDrives
|
|
|
|
set TMP [TkW:SearchTmp]
|
|
TkW:ShowDrives
|
|
|
|
|
|
set Windows [TkW:FindWindows]
|
|
set System "$Windows/system"
|
|
set Windows [TkW:Unix2Dos $Windows]
|
|
set System [TkW:Unix2Dos $System]
|
|
TkW:MiscEndConf $TMP
|
|
puts $OUTF "\[Wine\]\nwindows=$Windows"
|
|
puts $OUTF "system=$System"
|
|
puts $OUTF "Temp=[TkW:Unix2Dos $TMP]"
|
|
puts $OUTF "Path= $Windows\;$System\;$PATH"
|
|
|
|
#Quick and dirty... I'm tired now!
|
|
#puts $OUTF "SymbolTableFile=[exec find / -name wine.sym -print]"
|
|
puts $OUTF "printer=on"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[DllDefaults\]"
|
|
puts $OUTF "\;EXTRA_LD_LIBRARY_PATH=\$\{HOME\}/wine/cvs/lib"
|
|
puts $OUTF ""
|
|
puts $OUTF "\[DllPairs\]"
|
|
puts $OUTF "kernel = kernel32"
|
|
puts $OUTF "gdi = gdi32"
|
|
puts $OUTF "user = user32"
|
|
puts $OUTF "commdlg = comdlg32"
|
|
puts $OUTF "commctrl= comctl32"
|
|
puts $OUTF "ver = version"
|
|
puts $OUTF "shell = shell32"
|
|
puts $OUTF "lzexpand= lz32"
|
|
puts $OUTF "mmsystem= winmm"
|
|
puts $OUTF "msvideo = msvfw32"
|
|
puts $OUTF "winsock = wsock32"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[DllOverrides\]"
|
|
puts $OUTF "kernel32, gdi32, user32 = builtin"
|
|
puts $OUTF "kernel, gdi, user = builtin"
|
|
puts $OUTF "toolhelp = builtin"
|
|
puts $OUTF "comdlg32, commdlg = elfdll, builtin, native"
|
|
puts $OUTF "version, ver = elfdll, builtin, native"
|
|
puts $OUTF "shell32, shell = builtin, native"
|
|
puts $OUTF "lz32, lzexpand = builtin, native"
|
|
puts $OUTF "commctrl, comctl32 = builtin, native"
|
|
puts $OUTF "sock32, winsock = builtin"
|
|
puts $OUTF "advapi32, crtdll, ntdll = builtin, native"
|
|
puts $OUTF "mpr, winspool = builtin, native"
|
|
puts $OUTF "ddraw, dinput, dsound = builtin, native"
|
|
puts $OUTF "winmm, mmsystem = builtin"
|
|
puts $OUTF "msvideo, msvfw32 = builtin, native"
|
|
puts $OUTF "w32skrnl = builtin"
|
|
puts $OUTF "wnaspi32, wow32 = builtin"
|
|
puts $OUTF "system, display, wprocs = builtin"
|
|
puts $OUTF "wineps = builtin"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[options\]"
|
|
puts $OUTF "AllocSystemColors=100"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[fonts\]"
|
|
puts $OUTF "Resolution = 96 "
|
|
puts $OUTF "Default = -adobe-times-"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[serialports\]"
|
|
puts $OUTF "Com1=/dev/ttyS0"
|
|
puts $OUTF "Com2=/dev/ttyS1"
|
|
puts $OUTF "Com3=/dev/modem,38400"
|
|
puts $OUTF "Com4=/dev/modem"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[parallelports\]"
|
|
puts $OUTF "Lpt1=/dev/lp0"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[spooler\]"
|
|
puts $OUTF "LPT1:=|lpr"
|
|
puts $OUTF "LPT2:=|gs -sDEVICE=bj200 -sOutputFile=/tmp/fred -q -"
|
|
puts $OUTF "LPT3:=/dev/lp3"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[ports\]"
|
|
puts $OUTF "\;read=0x779,0x379,0x280-0x2a0"
|
|
puts $OUTF "\;write=0x779,0x379,0x280-0x2a0"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[spy\]"
|
|
puts $OUTF "Exclude=WM_SIZE"
|
|
puts $OUTF ";WM_TIMER"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[Tweak.Layout\]"
|
|
puts $OUTF ";WineLook=xxx (supported styles are \'Win31\'(default),"
|
|
puts $OUTF ";\'Win95\', \'Win98\')"
|
|
puts $OUTF "WineLook=Win31"
|
|
puts $OUTF ""
|
|
|
|
puts $OUTF "\[programs\]"
|
|
puts $OUTF "Default=]"
|
|
puts $OUTF "Startup="
|
|
|
|
close $OUTF
|
|
}
|
|
|
|
proc TkW:readFStab {} {
|
|
|
|
global AlternateFstab OK CANCEL
|
|
|
|
if {![file exist /etc/fstab]} {
|
|
TkW:GetFileName $AlternateFstab $OK $CANCEL File
|
|
TkW:FStabError 1
|
|
return 1
|
|
} else {
|
|
set FSTAB "/etc/fstab"
|
|
}
|
|
if {![file readable $FSTAB]} {TkW:FStabError 2;return 1}
|
|
|
|
set FStab [open /etc/fstab]
|
|
while {![eof $FStab]} {
|
|
|
|
gets $FStab line
|
|
set line [string trim $line]
|
|
if {[string range $line 0 0] != "#" && $line != ""} {
|
|
#we have an entry
|
|
switch [lindex $line 2] {
|
|
|
|
swap {}
|
|
proc {}
|
|
minix {TkW:addUnixDrive $line}
|
|
ext2 {TkW:addUnixDrive $line}
|
|
xiafs {TkW:addUnixDrive $line}
|
|
vfat {TkW:addDosDrive $line}
|
|
msdos {TkW:addDosDrive msdos}
|
|
hpfs {TkW:addDosDrive $line}
|
|
iso9660 {TkW:addCdRomDrive $line}
|
|
nfs {TkW:addNetDrive $line}
|
|
auto {TkW:addAutoDrive $line}
|
|
default {TkW:unknownDeviceType $line}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
proc TkW:addRootDrives {} {
|
|
|
|
global RootDrives1 RootDrives2 OK CANCEL WAIT lineroot ADD REMOVE
|
|
global NunixDrives UnixPath UnixDevice UnixLabel UnixType UnixSerial UnixFS
|
|
global exclude All
|
|
|
|
set drivelist ""
|
|
set drivelist "$drivelist [glob -nocomplain /*]"
|
|
set List ""
|
|
set excludes "$exclude /boot /lost+found /lib /etc /var /sbin /initrd\
|
|
/cdrom /floppy /include /man /dev /proc /bin /mnt /tmp"
|
|
set n 0
|
|
foreach i $drivelist {
|
|
if {[file isdir $i]} {
|
|
set skip 0
|
|
|
|
foreach k $excludes {
|
|
if {$k == $i} {
|
|
set skip 1
|
|
}
|
|
}
|
|
if {$skip == 0} {set List "$List$i "}
|
|
}
|
|
}
|
|
set List [lsort $List]
|
|
set n 0
|
|
foreach i $List {
|
|
set All($n) $i;set n [expr $n + 1]
|
|
}
|
|
set dev [lindex $lineroot 0]
|
|
toplevel .rootDr -background #ffffff
|
|
wm title .rootDr "Wine Autoconfigurator"
|
|
label .rootDr.banner -backgr #0000ff -foregr #ffffff \
|
|
-text "$RootDrives1$dev $RootDrives2" \
|
|
-wraplength 300
|
|
pack .rootDr.banner -fill x
|
|
frame .rootDr.lists -backgr #ffffff
|
|
pack .rootDr.lists -padx 10 -pady 10
|
|
listbox .rootDr.lists.left -width 20 -height 10
|
|
pack .rootDr.lists.left -padx 10 -pady 0 -side left
|
|
|
|
frame .rootDr.lists.buttons -backgr #ffffff
|
|
pack .rootDr.lists.buttons -padx 10 -pady 0 -side left
|
|
|
|
button .rootDr.lists.buttons.add -text "$ADD >>" -width 8\
|
|
-command {TkW:AddRootDrInList [.rootDr.lists.left cursel]}
|
|
pack .rootDr.lists.buttons.add -padx 10 -pady 0 -side top
|
|
|
|
button .rootDr.lists.buttons.space -text "" -backgr #ffffff \
|
|
-border 0 -highlightb #ffffff -relief flat -width 8 -state disabled
|
|
pack .rootDr.lists.buttons.space -padx 10 -pady 0 -side top
|
|
|
|
button .rootDr.lists.buttons.rem -text "<< $REMOVE" -width 8\
|
|
-command {TkW:RemRootDrInList [.rootDr.lists.right cursel]}
|
|
pack .rootDr.lists.buttons.rem -padx 10 -pady 0 -side top
|
|
|
|
listbox .rootDr.lists.right -width 20 -height 10
|
|
pack .rootDr.lists.right -padx 10 -pady 0
|
|
|
|
frame .rootDr.cmd -background #ffffff
|
|
pack .rootDr.cmd -side bottom -anchor c -pady 5
|
|
|
|
button .rootDr.cmd.ok -text OK -width 8 \
|
|
-command {destroy .rootDr;set WAIT 0}
|
|
pack .rootDr.cmd.ok -side left
|
|
|
|
foreach i $List {
|
|
.rootDr.lists.left insert end $i
|
|
}
|
|
|
|
global ToAddList;set ToAddList ""
|
|
|
|
bind .rootDr.lists.left <Double-ButtonPress-1> {
|
|
TkW:AddRootDrInList [.rootDr.lists.left nearest %y]}
|
|
bind .rootDr.lists.right <Double-ButtonPress-1> {
|
|
TkW:RemRootDrInList [.rootDr.lists.right nearest %y]}
|
|
set WAIT wait
|
|
while {$WAIT == "wait" } {update}
|
|
foreach i $ToAddList {
|
|
set NunixDrives [expr $NunixDrives + 1]
|
|
set UnixPath($NunixDrives) $i
|
|
set exclude "$exclude$UnixPath($NunixDrives) "
|
|
set UnixLabel($NunixDrives) $i
|
|
set UnixType($NunixDrives) hd
|
|
set UnixFS($NunixDrives) win95
|
|
}
|
|
}
|
|
|
|
proc TkW:AddRootDrInList {N} {
|
|
|
|
global All ToAddList Nadd Add
|
|
if {![info exists All($N)]} {return}
|
|
foreach i $ToAddList {
|
|
if {$i == $All($N)} {return}
|
|
}
|
|
set ToAddList [lsort "$ToAddList $All($N)"]
|
|
.rootDr.lists.right delete 0 end
|
|
set Nadd 0
|
|
foreach i $ToAddList {
|
|
.rootDr.lists.right insert end $i
|
|
set Add($Nadd) $i
|
|
set Nadd [expr $Nadd + 1]
|
|
}
|
|
}
|
|
proc TkW:RemRootDrInList {N} {
|
|
global All ToAddList Nadd Add
|
|
if {![info exists Add($N)]} {return}
|
|
set NewList ""
|
|
foreach i $ToAddList {
|
|
if {$i != $Add($N)} {set NewList "$NewList$i "}
|
|
}
|
|
set ToAddList $NewList
|
|
set Nadd 0
|
|
.rootDr.lists.right delete 0 end
|
|
foreach i $ToAddList {
|
|
.rootDr.lists.right insert end $i
|
|
set Add($Nadd) $i
|
|
set Nadd [expr $Nadd + 1]
|
|
}
|
|
}
|
|
proc TkW:addUnixDrive {line} {
|
|
global lineroot
|
|
#pre-processing for the case of the root:
|
|
if {![file exists [lindex $line 1]]} {return}
|
|
if {[lindex $line 1] != "/"} { TkW:addUnixDriveOK $line} {set lineroot $line}
|
|
}
|
|
proc TkW:addUnixDriveOK {line} {
|
|
|
|
# for now, I'll consider any unix file as ext2...
|
|
# may be this should improve a bit!
|
|
|
|
global NunixDrives UnixPath UnixDevice UnixLabel UnixType UnixSerial UnixFS
|
|
|
|
global TMPDRIVE HOMEDRIVE exclude
|
|
|
|
set NunixDrives [expr $NunixDrives +1]
|
|
|
|
set UnixDevice($NunixDrives) [lindex $line 0]
|
|
set UnixType($NunixDrives) "hd"
|
|
set UnixPath($NunixDrives) [lindex $line 1]
|
|
set exclude "$exclude$UnixPath($NunixDrives) "
|
|
set UnixLabel($NunixDrives) "UNIX $NunixDrives"
|
|
if {[string first "/tmp" $UnixPath($NunixDrives)] > 0 && $TMPDRIVE == 0} {
|
|
set UnixLabel($NunixDrives) "TEMP"
|
|
}
|
|
if {[string first "/home" $UnixDevice($NunixDrives)] > 0 && $HOMEDRIVE == 0} {
|
|
set UnixLabel($NunixDrives) "HOME"
|
|
}
|
|
set UnixDevice($NunixDrives) ""
|
|
set UnixSerial($NunixDrives) ""
|
|
set UnixFS($NunixDrives) "win95"
|
|
set UnixType($NunixDrives) "hd"
|
|
}
|
|
proc TkW:addDosDrive {line} {
|
|
|
|
# for now, I'll consider any dos file as ext2...
|
|
# may be this should improve a bit!
|
|
|
|
global NdosDrives DosPath DosDevice DosLabel DosType DosSerial DosFS
|
|
|
|
global TMPDRIVE HOMEDRIVE exclude
|
|
|
|
if {![file exists [lindex $line 1]]} {return}
|
|
|
|
if { [string first "/dev/fd" [lindex $line 0]] == 0 } {
|
|
TkW:addFloppy $line
|
|
return
|
|
}
|
|
|
|
set NdosDrives [expr $NdosDrives +1]
|
|
|
|
set DosDevice($NdosDrives) [lindex $line 0]
|
|
set DosPath($NdosDrives) [lindex $line 1]
|
|
set exclude "$exclude$DosPath($NdosDrives) "
|
|
set DosLabel($NdosDrives) ""
|
|
set DosType($NdosDrives) "win95"
|
|
if {[lindex $line 2] == "msods"} {
|
|
set DosFS($NdosDrives)
|
|
} else {
|
|
set DosFS($NdosDrives) "win95"
|
|
}
|
|
set DosSerial($NdosDrives) ""
|
|
}
|
|
|
|
proc TkW:unknownDeviceType {line} {
|
|
|
|
TkW:message "Error\n\
|
|
[lindex $line 0] (mounted on [lindex $line 1]) : Unknown device type. Please, mail thirot@univ-brest.fr for me to add this filesystem to the list of detected FS.\n\
|
|
\n Thank you.\
|
|
\n Jean-Louis Thirot"
|
|
global WAIT
|
|
set WAIT wait
|
|
while {$WAIT == "wait"} {update}
|
|
|
|
}
|
|
|
|
proc TkW:InitNewConfig {} {
|
|
|
|
global NunixDrives UnixPath UnixDevice UnixLabel UnixType UnixSerial UnixFS
|
|
global NdosDrives DosPath DosDevice DosLabel DosType DosSerial DosFS
|
|
global Ncdroms CDPath CDDevice CDLabel CDType CDSerial CDFS
|
|
global Nfloppys FLOPPYPath FLOPPYDevice FLOPPYLabel FLOPPYType FLOPPYSerial FLOPPYFS
|
|
global NnetDrives
|
|
global TMPDRIVE HOMEDRIVE
|
|
global exclude; set exclude ""
|
|
|
|
set TMPDRIVE 0
|
|
set HOMEDRIVE 0
|
|
|
|
set NunixDrives 0
|
|
set NdosDrives 0
|
|
set Ncdroms 0
|
|
set Nfloppys 0
|
|
set NnetDrives 0
|
|
}
|
|
|
|
proc TkW:ShowDrives {} {
|
|
|
|
global NunixDrives UnixPath UnixDevice UnixLabel UnixType UnixSerial UnixFS
|
|
global NdosDrives DosPath DosDevice DosLabel DosType DosSerial DosFS
|
|
global Ncdroms CDPath CDDevice CDLabel CDType CDSerial CDFS
|
|
global NnetDrives NetPath NetLabel
|
|
global Nfloppys FLOPPYPath
|
|
global DriveRank DRIVEUNIXPATH DRIVEDOSPATH NDRIVES
|
|
global OUTF
|
|
|
|
set NDRIVES 0
|
|
set letters {let: C D E F G H I J K L M N O P Q R S T U V W X Y Z}
|
|
set lettersF {let: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
|
|
for {set i 1} {$i <= $NdosDrives} {set i [expr $i + 1]} {
|
|
set NDRIVES [expr $NDRIVES + 1]
|
|
set rank $DriveRank($i)
|
|
puts $OUTF "\[Drive [lindex $letters $i]\]"
|
|
set Letter($NDRIVES) [lindex $letters $i]
|
|
set DRIVEUNIXPATH($NDRIVES) $DosPath($rank)
|
|
set DRIVEDOSPATH($NDRIVES) "[lindex $letters $i]:\\"
|
|
puts $OUTF "Path=$DosPath($rank)"
|
|
puts $OUTF "Type=hd"
|
|
puts $OUTF "Label=MS-DOS $rank"
|
|
puts $OUTF "Filesystem=$DosFS($rank)"
|
|
puts $OUTF ""
|
|
}
|
|
for {set i 1} {$i <= $Nfloppys} {set i [expr $i + 1]} {
|
|
if {$i > 2} {
|
|
set NDRIVES [expr $NDRIVES + 1]
|
|
set NLet $NDRIVES
|
|
set DRIVEDOSPATH($NDRIVES) "[lindex $lettersF $NLet]:\\"
|
|
set DRIVEUNIXPATH($NDRIVES) $FLOPPYPath($i)
|
|
} else {
|
|
set NLet $i
|
|
#set DRIVEDOSPATH($i) "[lindex $lettersF $NLet]:\\"
|
|
#set DRIVEUNIXPATH($i) $FLOPPYPath($i)
|
|
}
|
|
puts $OUTF "\[Drive [lindex $lettersF $NLet]\]"
|
|
puts $OUTF "Path=$FLOPPYPath($i)"
|
|
puts $OUTF "Type=floppy"
|
|
puts $OUTF "Label=Floppy $i"
|
|
puts $OUTF "Serial=87654321"
|
|
puts $OUTF ""
|
|
}
|
|
for {set i 1} {$i <= $Ncdroms} {set i [expr $i + 1]} {
|
|
set NDRIVES [expr $NDRIVES + 1]
|
|
puts $OUTF "\[Drive [lindex $letters $NDRIVES]\]"
|
|
puts $OUTF "Path=$CDPath($i)"
|
|
set DRIVEDOSPATH($NDRIVES) "[lindex $letters $NDRIVES]:\\"
|
|
set DRIVEUNIXPATH($NDRIVES) $CDPath($i)
|
|
puts $OUTF "Type=cdrom"
|
|
puts $OUTF "Label=CDROM $i"
|
|
puts $OUTF "Filesystem=$UnixFS($i)"
|
|
if {$CDDevice($i) != ""} {puts $OUTF "Device=$CDDevice($i)"}
|
|
puts $OUTF ""
|
|
}
|
|
for {set i 1} {$i <= $NunixDrives} {set i [expr $i + 1]} {
|
|
set NDRIVES [expr $NDRIVES + 1]
|
|
puts $OUTF "\[Drive [lindex $letters $NDRIVES]\]"
|
|
set DRIVEDOSPATH($NDRIVES) "[lindex $letters $NDRIVES]:\\"
|
|
set DRIVEUNIXPATH($NDRIVES) $UnixPath($i)
|
|
puts $OUTF "Path=$UnixPath($i)"
|
|
puts $OUTF "Type=hd"
|
|
puts $OUTF "Label=$UnixLabel($i)"
|
|
puts $OUTF "Filesystem=$UnixFS($i)"
|
|
puts $OUTF ""
|
|
}
|
|
for {set i 1} {$i <= $NnetDrives} {set i [expr $i + 1]} {
|
|
set NDRIVES [expr $NDRIVES + 1]
|
|
puts $OUTF "\[Drive [lindex $letters $NDRIVES]\]"
|
|
set DRIVEDOSPATH($NDRIVES) "[lindex $letters $NDRIVES]:\\"
|
|
set DRIVEUNIXPATH($NDRIVES) $NetPath($i)
|
|
puts $OUTF "Path=$NetPath($i)"
|
|
puts $OUTF "Type=network"
|
|
puts $OUTF "Label=$NetLabel($i)"
|
|
puts $OUTF "Filesystem=win95"
|
|
puts $OUTF ""
|
|
}
|
|
}
|
|
|
|
proc TkW:MiscEndConf {temp} {
|
|
|
|
#Create an acceptable PATH variable, and
|
|
# gets the TMP WINDOWS and SYSTEM drive letters:
|
|
global PATH NDRIVES Letter DRIVEPATH
|
|
global TMPLetter
|
|
set PATH ""
|
|
for {set i 1} {$i<= $NDRIVES} {set i [expr $i + 1]} {
|
|
if {[info exists Letter($i)]} {
|
|
if {[info exists DRIVEPATH($i)]} {
|
|
if {$DRIVEPATH($i) == $temp} {
|
|
set TMPLetter $Letter($i)
|
|
}
|
|
set PATH "$PATH\;$Letter($i):\\"
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
proc TkW:Unix2Dos {unixpath} {
|
|
|
|
global NDRIVES DRIVEDOSPATH DRIVEUNIXPATH
|
|
|
|
set dospath ""
|
|
|
|
# First, search the corresponding drive:
|
|
|
|
for {set i 1} {$i<=$NDRIVES} {set i [expr $i + 1]} {
|
|
set n [string first $DRIVEUNIXPATH($i) $unixpath]
|
|
if {$n == 0} {
|
|
set dospath $DRIVEDOSPATH($i)
|
|
set N [expr [string length $DRIVEUNIXPATH($i)] + 1]
|
|
break
|
|
}
|
|
}
|
|
|
|
# Now, add the remaining part of the path
|
|
|
|
for {set i $N} {$i <= [string length $unixpath]} {set i [expr $i + 1]} {
|
|
|
|
set newchar [string range $unixpath $i $i]
|
|
if {$newchar != "/"} {
|
|
set dospath "$dospath$newchar"
|
|
} else {
|
|
set dospath "$dospath\\"
|
|
}
|
|
}
|
|
return $dospath
|
|
}
|
|
|
|
proc TkW:addCdRomDrive {line} {
|
|
global Ncdroms CDPath CDDevice CDLabel CDType CDSerial CDFS
|
|
|
|
global IsCDwrite YES NO WAIT
|
|
|
|
if {![file exists [lindex $line 1]]} {return}
|
|
set Ncdroms [expr $Ncdroms + 1]
|
|
set CDFS($Ncdroms) "iso9660"
|
|
set CDPath($Ncdroms) [lindex $line 1]
|
|
set dev [lindex $line 0]
|
|
TkW:message2 "Device $dev $IsCDwrite" $YES $NO
|
|
set WAIT wait
|
|
while {$WAIT == "wait"} {update}
|
|
if {$WAIT == "opt1"} {set CDDevice($Ncdroms) $dev} {set CDDevice($Ncdroms) ""}
|
|
set CDLabel($Ncdroms) "CDrom"
|
|
}
|
|
proc TkW:addNetDrive {line} {
|
|
global NnetDrives NetPath NetLabel
|
|
set NnetDrives [expr $NnetDrives + 1]
|
|
set NetPath($NnetDrives) [lindex $line 1]
|
|
set NetLabel($NnetDrives) [file tail $NetPath($NnetDrives)]
|
|
}
|
|
proc TkW:addFloppy {line} {
|
|
global Nfloppys FLOPPYPath FLOPPYDevice FLOPPYLabel FLOPPYType FLOPPYSerial FLOPPYFS
|
|
if {![file exists [lindex $line 1]]} {return}
|
|
set Nfloppys [expr $Nfloppys + 1]
|
|
set FLOPPYPath($Nfloppys) [lindex $line 1]
|
|
set FLOPPYDevice($Nfloppys) [lindex $line 0]
|
|
}
|
|
|
|
proc TkW:SortDosDrives {} {
|
|
global NdosDrives DosDevice DriveRank
|
|
|
|
set devlist ""
|
|
for {set i 1} {$i <= $NdosDrives} {set i [expr $i + 1]} {
|
|
set devlist "$devlist $DosDevice($i):TKW:$i"
|
|
}
|
|
set devlist [lsort $devlist]
|
|
|
|
set i 1
|
|
foreach dev $devlist {
|
|
set n1 [expr [string first ":TKW:" $dev] + 5]
|
|
set n2 [string length $dev]
|
|
set DriveRank([string range $dev $n1 $n2]) $i
|
|
set i [expr $i + 1]
|
|
}
|
|
}
|
|
|
|
proc TkW:SearchTmp {} {
|
|
global exclude
|
|
global NunixDrives UnixPath UnixLabel UnixType UnixFS
|
|
global NdosDrives DosPath DosLabel DosType DosFS
|
|
global WAITfilename GetFileName NDRIVES DRIVEUNIXPATH DRIVEDOSPATH
|
|
global WhereTmp OK CANCEL
|
|
|
|
# Check if it /tmp is alreaddy mounted (when it has it's own partition)
|
|
foreach i $exclude {
|
|
if {$i == "/tmp"} {return /tmp}
|
|
}
|
|
# check that we have a /tmp:
|
|
if {[file exists /tmp] } {
|
|
set NunixDrives [expr $NunixDrives + 1]
|
|
set UnixPath($NunixDrives) /tmp
|
|
set exclude "$exclude$UnixPath($NunixDrives) "
|
|
set UnixLabel($NunixDrives) "TEMP"
|
|
set UnixType($NunixDrives) hd
|
|
set UnixFS($NunixDrives) win95
|
|
return /tmp
|
|
} else {
|
|
#Could add here a search for c:\TEMP or c:|windows\temp
|
|
set WAITfilename wait
|
|
TkW:GetFileName $WhereTmp $OK $CANCEL Folder
|
|
|
|
# check if this folder is on a drive that has an entry in
|
|
# wineconf (Must be a unix or dos drive)
|
|
for {set i 1} {$i<=$NdosDrives} {set i [expr $i +1]} {
|
|
if {[string first $DosPath($i) $GetFileName] == 0} {
|
|
return $GetFileName
|
|
}
|
|
}
|
|
for {set i 1} {$i<=$NunixDrives} {set i [expr $i +1]} {
|
|
if {[string first $UnixPath($i) $GetFileName] == 0} {
|
|
return $GetFileName
|
|
}
|
|
}
|
|
# I'll consider this new one as unix, althought if it's win fs that's ok
|
|
set NunixDrives [expr $NunixDrives + 1]
|
|
set UnixPath($NunixDrives) $GetFileName
|
|
set exclude "$exclude$UnixPath($NunixDrives) "
|
|
set UnixLabel($NunixDrives) "TEMP"
|
|
set UnixType($NunixDrives) hd
|
|
set UnixFS($NunixDrives) win95
|
|
return $GetFileName
|
|
}
|
|
}
|
|
|
|
proc TkW:FindWindows {} {
|
|
|
|
global NdosDrives DosPath WINLetter SYSLetter Letter
|
|
|
|
#first attempt: C:\windows (would avoid to search)
|
|
|
|
if {[file exist $DosPath(1)/windows]} {
|
|
return "$DosPath(1)/windows"
|
|
}
|
|
|
|
for {set i 1} {$i<=$NdosDrives} {set i [expr $i + 1]} {
|
|
set searchWin [open "| find $DosPath($i) -name win.ini -print" r+]
|
|
while {![eof $searchWin]} {
|
|
gets $searchWin Found
|
|
close $searchWin
|
|
set Found [file dirname $Found]
|
|
return $Found
|
|
}
|
|
}
|
|
close $searchWin
|
|
|
|
}
|