📄 insttk.tcl
字号:
# insttk.tcl - Installation program For Unix platforms.## history# -------# 02g,13jun97,pdn replaced tclx id command w/ setupId.# 02f,28mar97,pdn fixed the problem that torVarCreate get call too early# 02e,13mar97,pdn catched error when grab fails.# 02d,09mar97,pdn fixed exit code.# 02c,08mar97,tcy undo last mod# 02b,07mar97,tcy moved needUpdateWlmd() to INSTALL.TCL# 02a,05mar97,pdn added hook for patch installation.# 01z,25feb97,pdn improved license installing.# 01y,10feb97,pdn added beginWaitCursor, and endWaitCursor functionality.# updated the button layout.# 01x,09feb97,pdn added option to configure a floating license server# 01w,22jan97,pdn handled error when fails to obtain free disk space.# 01v,20jan97,pdn saved installation key# 01u,16jan97,pdn catched error when symbolic group id not defined.# 01t,09jan97,pdn updated the billboard cycling by product# 01s,18dec96,sks changed location of TCL and BITMAP files; renamed# TEXT.TCL to MESSAGES.TCL # 01r,12dec96,pdn added BAD_CD_REVISION check# 01q,11dec96,pdn displayed the feature id/description# 01p,09dec96,pdn added hierarchy selection option# 01o,14nov96,pdn created and used the new interface to CD database.# 01n,11nov96,pdn centralized all strings to TEXT.TCL# 01m,08nov96,pdn fixed pageProcess(destDir) to correctly inittialize DLL# before return. # 01l,25oct96,pdn refined license setup pages. # 01k,18oct96,pdn added license setup pages # 01j,01oct96,tcy moved umaskGet(), umaskSet(), getSelection() to INSTALL.TCL # 01i,30aug96,pdn added SIGINT handler# 01h,30aug96,pdn moved tk specific code from INSTALL.TCL here# 01g,29aug96,pdn used tclX funtionalities.# 01f,27aug96,pdn fixed umask problem.# 01e,05jul96,pdn added root privilege check.# 01d,02jul96,pdn added new color scheme, and fspace hook.# 01c,01jul96,s_j added billboard cycling feature.# 01b,25jun96,pdn modified the GUI to meet the specification.# 01a,11jun96,jco translated to tk from the uitcl/Windows.### Create the Welcome page#proc pageCreate(welcome) {} { global ctrlVals global setupVals set w [dlgFrmCreate [strTableGet 1410_TITLE_WELCOME]] beginWaitCursor $w.msg config -text "[strTableGet 1000_WELCOME1]\ \n\n[strTableGet 1010_WELCOME2]\ \n\n[strTableGet 1020_WELCOME3]\ \n\n[strTableGet 1030_WELCOME4]\ \n\n[strTableGet 1040_WELCOME5]" # Disable the Back button since this is the first page .buts.back config -state disabled endWaitCursor}proc pageProcess(welcome) {w} { return 1}proc needUpdateWlmd {} { global ctrlVals setupVals set retVal 0 set installedWlmd [destDirGet]/host/[windHostTypeGet]/bin/wlmd set cdWlmd [cdromBinDirGet]/WLM/WLMD if {[file exists $installedWlmd]} { set retVal [expr [file mtime $installedWlmd] < [file mtime $cdWlmd]] } return $retVal} proc pageCreate(wlmdDetect) {} { global ctrlVals global setupVals set w [dlgFrmCreate "[strTableGet 1261_LICENSE] Detect"] $w.msg config -text [strTableGet 1358_LICENSE_SERVER_DETECT] beginWaitCursor update set setupVals(isWlmdRunning) 0 if [needUpdateWlmd] { set prog [cdromBinDirGet]/WLMUTILS set setupVals(isWlmdRunning) [exec $prog -pingServer [info host]] } endWaitCursor nextCallback}proc pageProcess(wlmdDetect) {w} { global setupVals ctrlVals if {$setupVals(isWlmdRunning)} { messageBox [strTableGet 1359_LICENSE_SERVER_SHUTDOWN] destroy . exit 0 } { set ctrlVals(currPage) destDir pageRemove wlmdDetect set ctrlVals(pageListBack) $ctrlVals(pageList) return 1 }}proc pageCreate(privilege) {} { global ctrlVals global setupVals # Check user privilege beginWaitCursor set w [dlgFrmCreate [strTableGet 1420_TITLE_WARNING]] $w.msg config -text [strTableGet 1050_ROOT_WARN] .buts.back config -state normal endWaitCursor}proc pageProcess(privilege) {w} { return 1}proc pageCreate(registration) {} { global ctrlVals global setupVals beginWaitCursor set w [dlgFrmCreate [strTableGet 1430_TITLE_REGISTRATION]] $w.msg config -text [strTableGet 1060_REGISTRATION] # Create username field labelCreate $w.nameLabel "Name:" place $w.nameLabel -in $w -y 100 entry $w.nameText -relief sunken -width 35 -font 7x13 \ -textvariable setupVals(userName) place $w.nameText -in $w -x 70 -y 100 # Create companyname field labelCreate $w.companyLabel "Company:" place $w.companyLabel -in $w -y 150 entry $w.companyText -relief sunken -width 35 -font 7x13 \ -textvariable setupVals(companyName) place $w.companyText -in $w -x 70 -y 150 # Create keyname field labelCreate $w.keyLabel "Key:" place $w.keyLabel -in $w -y 200 entry $w.keyText -relief sunken -width 35 -font 7x13 \ -textvariable setupVals(instKey) place $w.keyText -in $w -x 70 -y 200 if {[instKeyGet] == "none"} {$w.keyText config -state disabled} if {"[userNameGet]" == ""} { focus $w.nameText } elseif {"[companyNameGet]" == ""} { focus $w.companyText } else { focus $w.keyText } .buts.back config -state normal endWaitCursor}proc pageProcess(registration) {w} { global setupVals global errorInfo beginWaitCursor if [catch {setupKeyValidate [instKeyGet]} error] { messageBox [strTableGet 1070_WARN_1] endWaitCursor return 0 } if [catch {setupInit [cdromZipDirGet]} error] { if {"$error" == "BAD_CD_KEY"} { messageBox [strTableGet 1080_WARN_2] endWaitCursor return 0 } elseif {"$error" == "BAD_CD_REVISION"} { tk_dialog .setup "Setup" [strTableGet 1080_WARN_4]\ question 0 Abort exit 0 } elseif {"$error" == "BAD_CD_VENDOR_ID"} { messageBox [strTableGet 1080_WARN_3] endWaitCursor return 0 } { tk_dialog .setup "Setup" [strTableGet 1090_WARN_3 $error]\ question 0 Abort exit 0 } } objectConstruct endWaitCursor return 1}proc pageCreate(destDir) {} { global ctrlVals global setupVals beginWaitCursor set w [dlgFrmCreate [strTableGet 1440_TITLE_DESTDIR]] $w.msg config -text [strTableGet 1100_DEST_DIR] # Create directory field labelCreate $w.dirLabel "Directory:" place $w.dirLabel -in $w -y 165 entry $w.dirText -relief sunken -width 30 -font $ctrlVals(textFont) \ -textvariable setupVals(destDir) place $w.dirText -in $w -y 190 # Create browse button button $w.browse -text "Browse" -font $ctrlVals(bldFont) \ -command {destDirSet [fileselect [destDirGet]]} place $w.browse -in $w -x 240 -y 185 focus $w.dirText .buts.back config -state normal endWaitCursor}proc pageProcess(destDir) {w} { global setupVals beginWaitCursor if [regexp {~} [destDirGet]] { messageBox "Invalid directory specified" endWaitCursor return 0 } if ![file isdirectory [destDirGet]] { set i [tk_dialog .dialog3 "Setup" [strTableGet 1110_DEST_DIR_WARN] \ question 0 Yes No] switch $i { 0 { if [catch {file mkdir [destDirGet]} error] { messageBox "$error" endWaitCursor return 0 } { set status 1 } } 1 { endWaitCursor return 0 } } } { set status 1 } if ![file writable [destDirGet]] { messageBox [strTableGet 1130_DEST_DIR_WARN3] endWaitCursor return 0 } update uninstStart [instTypeGet] licenseHomeDirSet [destDirGet]/.wind/license catch { set windDir [file dirname $setupVals(profile)] if ![file isdirectory $windDir] { file mkdir $windDir } set f [open $setupVals(profile) "w"] puts $f "userNameSet [userNameGet]" puts $f "companyNameSet [companyNameGet]" puts $f "destDirSet [destDirGet]" if {[instKeyGet] == "none"} { puts $f "instKeySet $setupVals(prevInstKey)" } { puts $f "instKeySet [instKeyGet]" } close $f } endWaitCursor return $status}proc pageCreate(compSelect) {} { global ctrlVals global setupVals global objGuiMap pickList beginWaitCursor set w [dlgFrmCreate [strTableGet 1450_TITLE_OPTION]] $w.msg config -text [strTableGet 1140_COMP_SELECT] labelCreate $w.infoLabel "Information:" place $w.infoLabel -in $w -y 195 frame $w.infoFrm -width 320 -height 70 -relief sunken -borderwidth 1 place $w.infoFrm -in $w -y 216 frame $w.infoFrm.req labelCreate $w.infoFrm.req.text "Space Required:\t" labelCreate $w.infoFrm.req.size "0.0 MB" pack $w.infoFrm.req.text -side left pack $w.infoFrm.req.size -side right place $w.infoFrm.req -in $w.infoFrm -y 15 -x 10 set free [fspace [destDirGet]] if [regexp {^[0-9]+$} $free] { set availSpace [format "%3.1f" [expr $free / 1024.0]] } { set availSpace "???.?" } frame $w.infoFrm.avail labelCreate $w.infoFrm.avail.msg "Space Available:\t" labelCreate $w.infoFrm.avail.size "$availSpace MB" pack $w.infoFrm.avail.msg -side left pack $w.infoFrm.avail.size -side right place $w.infoFrm.avail -in $w.infoFrm -y 35 -x 10 button $w.infoFrm.detail -text "Details" \ -command "onProductDetailButt" \ -font $ctrlVals(textFont) \ -padx 14 -pady 2 place $w.infoFrm.detail -in $w.infoFrm -y 25 -x 220 $w.infoFrm.detail config -state disabled frame $w.pick place $w.pick -in $w -y 60 set cv $w.pick.canvas canvas $cv -width 300 -height 118 -relief sunken -borderwidth 1 \ -yscrollcommand "$w.pick.vscroll set" -highlightthickness 0 scrollbar $w.pick.vscroll -command "$cv yview" -highlightthickness 0 pack $w.pick.vscroll -side right -fill y pack $cv -in $w.pick -expand yes -fill both productGuiUpdate $w endWaitCursor}proc productGuiUpdate {w} { productGuiChkLstUpdate $w productGuiSizeUpdate $w}proc productGuiSizeUpdate {w} { global setupVals global ctrlVals set totalSize [byteToMbyte [cdInfoGet size]] $w.infoFrm.req.size config -text "$totalSize MB" # if space required > space available, set background to red set avail [lindex [$w.infoFrm.avail.size cget -text] 0] if {"$avail" < "$totalSize"} { $w.infoFrm.avail.size config -bg red -fg white } else { $w.infoFrm.avail.size config -bg $ctrlVals(mainBg) -fg black }}proc productGuiChkLstUpdate {w} { global ctrlVals objGuiMap pickList set cv $w.pick.canvas # populate the list of check button. catch { unset objGuiMap } set i 0 foreach prodIndex [cdInfoGet productIndexList] { set objGuiMap(gui2prod,$i) $prodIndex set objGuiMap(prod2gui,$prodIndex) $i if ![info exists pickList(prod,$prodIndex)] { set pickList(prod,$prodIndex) [productInfoGet instFlag $prodIndex] } set mbSize [byteToMbyte [productInfoGet size $prodIndex]] if ![winfo exists $cv.lineItem$i] { frame $cv.lineItem$i checkbutton $cv.lineItem$i.cb \ -highlightthickness 0 \ -relief flat -pady 0 \ -variable pickList(prod,$prodIndex) button $cv.lineItem$i.butDesc \ -text [productInfoGet desc $prodIndex] \ -font $ctrlVals(smallFont) \ -command "currSelProdIndexSet $w.infoFrm.detail \ $prodIndex" \ -highlightthickness 0 \ -relief flat -pady 0 label $cv.lineItem$i.size \ -justify right \ -font $ctrlVals(smallFont) \ -text $mbSize pack $cv.lineItem$i.cb $cv.lineItem$i.butDesc -side left pack $cv.lineItem$i.size -side right $cv create window 5 [expr $i * 20 + 2] \ -window $cv.lineItem$i \ -anchor nw -tags item \ -width 290 -height 16 bind $cv.lineItem$i.cb <ButtonRelease-1> \ "onClickProdCheckButt $w $prodIndex" } { $cv.lineItem$i.size configure -text $mbSize } incr i update } $cv config -scrollregion "0 2 0 [expr ($i * 20) - 2]" $cv config -yscrollincrement 20}proc currSelProdIndexSet {detailButt prodIndex} { global currSelProdIndex set currSelProdIndex $prodIndex if {[llength [productInfoGet partIndexList $prodIndex]] == 1} {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -