home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1993-09-15 | 50.6 KB | 1,503 lines
'************************************************************************** '* Frame Setup Script '************************************************************************** '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' '$INCLUDE 'msregdb.inc' '$INCLUDE 'fmapi.inc' ''Dialog ID's CONST ASKEXIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST MAKER30 = 800 CONST PATHHELP = 900 CONST OPTREGISTER = 1200 CONST REGHELP = 1300 CONST CUSTHELP = 1400 CONST FILTERS = 5200 CONST CUSTINST = 6200 CONST CUSTINSTNOPATH = 1900 CONST TOOBIG = 6300 CONST BADPATH = 6400 CONST BADREGNUM = 7100 CONST CDGETNAMEORG = 7500 CONST REGALERT = 7700 CONST NAMEALERT = 1500 CONST BADNETPATH = 1100 CONST PCNAMEALERT = 1800 CONST BLDEXITSUCCESS = 1000 ''Splash screen dialogs CONST SCREEN1 = 2300 CONST SCREEN2 = 2400 CONST SCREEN3 = 2500 CONST SCREEN4 = 2600 CONST SCREEN5 = 2700 CONST SCREEN6 = 2800 CONST SCREEN7 = 2900 CONST SCREEN8 = 3000 ''Boolean constants CONST FMTRUE = -1 CONST FMFALSE = 0 ''File Types CONST BINFILES = 1 CONST INITFILES = 2 CONST DICTFILES = 3 CONST FILTERFILES = 4 CONST HELPFILES = 5 CONST SAMPLEFILES = 6 CONST CLIPARTFILES = 7 CONST TRAINFILES = 8 CONST TEMPLFILES = 9 CONST REQFILES = 10 ''These files have to reside on local disk ''(maker.ini and fmres.dll), so copy automatically CONST WS_VISIBLE = &H10000000 CONST WS_BORDER = &H00800000 CONST WS_CLIPCHILDREN = &H02000000 CONST GWL_STYLE = -16 CONST SW_SHOWMAXIMIZED = 3 CONST NUMOPTIONS = 9 ''Number of options CONST FM30 = 3 ''FrameMaker 3.0 CONST FM40 = 4 ''FrameMaker 4.0 CONST NUMENTRIES = 39 ''Max number of filters GLOBAL DEST$ ''Default destination directory. GLOBAL WINDRIVE$ ''Windows drive letter. GLOBAL NETPATH$ ''network path GLOBAL NETINI$ ''netsetup.ini file GLOBAL DEMO& ''Demo version? GLOBAL LANGUIOPT$ ''Language interface, USEng=1, UKEng=2 GLOBAL PRODUCT$ ''FrameMaker=1, Builder=2 GLOBAL BOTHPROD& ''Both products exist in FMHOME GLOBAL NOPATHOPT& ''User does not have option to set local path GLOBAL USERNAME$ ''User name GLOBAL PCNAME$ ''PC name GLOBAL COMPANY$ ''Company GLOBAL REGNUM$ ''Registration number GLOBAL NUMTRY% ''Number of times user enters invalid regnum. ''Give them 3 chances. GLOBAL NUMFILTERS% ''Number of filters ''CustInst list symbol names GLOBAL BINNEEDS$ ''Option list costs per drive GLOBAL INITNEEDS$ GLOBAL DICTNEEDS$ GLOBAL FILTERNEEDS$ GLOBAL HELPNEEDS$ GLOBAL SAMPLENEEDS$ GLOBAL CLIPARTNEEDS$ GLOBAL TRAINNEEDS$ GLOBAL TEMPLNEEDS$ GLOBAL REQNEEDS$ GLOBAL LOGNEED& ''max size of install.log file - 39430 bytes GLOBAL EXTRACOSTS$ ''List of extra costs to add per drive GLOBAL BIGLIST$ ''List of option files cost calc results (boolean) ''Dialog list symbol names GLOBAL DEMOCHKSTATE$ GLOBAL CHECKSTATES$ GLOBAL STATUSTEXT$ GLOBAL DRIVETEXT$ GLOBAL OPTGREY$ GLOBAL FILTLISTIN$ GLOBAL INCRINSTALL& ''Incremental install GLOBAL NETINCINSTALL& ''Incremental network install GLOBAL MAKER_30& ''Installing over FM 3.0 GLOBAL FMRESPATH$ ''fmres.dll GLOBAL MAKERINI$ ''maker.ini file GLOBAL CHANGEDPATH& 'Brought up SET PATH dialog GLOBAL DISPLAYMSG& 'Display installing over 3.0 warning message GLOBAL DISPLAYED& 'Warning message already displayed for path GLOBAL MAPTABLE(NUMENTRIES) AS STRING 'mapping for filters TYPE FILTREC id AS STRING*3 entry AS STRING*59 END TYPE GLOBAL FILTTABLE(NUMENTRIES) AS FILTREC '** Pass arguments as fixed strings to FMGetFields DIM tmpUser AS STRING *30 DIM tmpOrg AS STRING *30 DIM tmpReg AS STRING *30 GLOBAL INISTRINGS(42) AS STRING DIM Setting1$ 'Yes/No field in Netsetup.ini DIM Setting2$ 'Enable/Disable field in Netsetup.ini DECLARE FUNCTION ShowWindow LIB "user.exe" (hWnd%, iShow%) AS INTEGER DECLARE FUNCTION SetWindowLong LIB "user.exe" (hWnd%, offset%, style&) AS LONG DECLARE FUNCTION GetDialogBaseUnits LIB "user.exe" AS LONG DECLARE SUB AddOptFilesToCopyList (ftype%) DECLARE SUB RecalcOptFiles (ftype%) DECLARE SUB RecalcPath DECLARE SUB SetDriveStatus DECLARE SUB UpdateMakerIni DECLARE SUB ModifyMakerIni DECLARE SUB UpdateNetIni DECLARE FUNCTION ValidNetPath () AS INTEGER DECLARE FUNCTION FMInstalled (makerDir$, version%) AS INTEGER DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING INIT: CUIDLL$ = "mscuistf.dll" ''custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure LOGFILE$ = "install.log" ''Installation log file LOGNEED& = 39430 hWnd% = HwndFrame() k& = SetWindowLong(hWnd%, GWL_STYLE, WS_VISIBLE+WS_BORDER+WS_CLIPCHILDREN) j% = ShowWindow(hWnd%,SW_SHOWMAXIMIZED) szInf$ = GetSymbolValue("STF_SRCINFPATH") print "srcinfpath = ";szInf$ IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + INFFILE$ print "cwddir+inf = ";szInf$ END IF ReadInfFile szInf$ 'Get network path from netsetup.ini and check if it is a valid 'FrameMaker or FrameBuilder path. If not, then get the directory 'from which they're running netsetup (minus \netsetup) and if not 'the same path as in netsetup.ini, then check if valid. PRODUCT = "1" BOTHPROD = FMFALSE NETINI = GetSymbolValue("STF_SRCDIR") + "netsetup.ini" NETPATH = GetIniKeyString(NETINI$, "FMNetPath", "NetPath") IF (ValidNetPath() = 0) THEN tmppath$ = GetSymbolValue("STF_CWDDIR") pos% = INSTR("\netsetup", tmppath) cwd$ = MID$(tmppath, 1, (pos-1)) IF (NETPATH$ = cwd$) THEN GOTO BADNPATH ELSE NETPATH$ = cwd$ IF (ValidNetPath() = 0) THEN GOTO BADNPATH END IF NETINI = MakePath(NETPATH, "netsetup.ini") END IF END IF 'Get language interface IF (GetIniKeyString(MakePath(NETPATH,"maker.ini"),"Frame","Language") = "UKEnglish") THEN LANGUIOPT = "2" ELSE LANGUIOPT = "1" END IF CHANGEDPATH = FMFALSE DISPLAYMSG = FMFALSE DISPLAYED = FMFALSE MAKER_30 = FMFALSE NOPATHOPT = FMFALSE USERNAME$ = "" PCNAME$ = "" COMPANY$ = "" REGNUM$ = "" NUMTRY% = 0 ''CustInst list symbols DEMOCHKSTATE$ = "DemoCheckState" CHECKSTATES$ = "CheckItemsState" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" CONFIRMTEXT$ = "ConfirmTextIn" FILTLISTIN$ = "ListItemsIn" OPTGREY$ = "OptionsGreyed" AddListItem DEMOCHKSTATE, "OFF" FOR i% = 1 TO NUMOPTIONS STEP 1 AddListItem STATUSTEXT$, "" NEXT i% FOR i% = 1 TO 7 STEP 1 AddListItem DRIVETEXT$, "" NEXT i% MakeListFromSectionKeys FILTLISTIN$, "filters" NUMFILTERS = GetListLength(FILTLISTIN) ''Initialize filter maptable MAPTABLE(0) = "w4w33f.dll" ''Ami Professional MAPTABLE(1) = "imcgm9.flt" ''CGM MAPTABLE(2) = "imcdr9.flt" ''CorelDraw MAPTABLE(3) = "w4w15f.dll" ''DCA/RFT MAPTABLE(4) = "w4w15f.dll" ''DCA/RFT - DisplayWrite 5 MAPTABLE(5) = "frame.exe" ''DIB MAPTABLE(6) = "w4w15f.dll" ''DisplayWrite 2,3,4 MAPTABLE(7) = "w4w15f.dll" ''DisplayWrite 5 MAPTABLE(8) = "imdxf9.flt" ''DXF MAPTABLE(9) = "frame.exe" ''EPS(F) MAPTABLE(10) = "imgem9.flt" ''GEM MAPTABLE(11) = "grphfilt.dll" ''GIF MAPTABLE(12) = "imhgl9.flt" ''HPGL MAPTABLE(13) = "g4g607f.dll" ''IGES MAPTABLE(14) = "macpaint.dll" ''MacPaint MAPTABLE(15) = "imdrw9.flt" ''Micrografx Drawing Format MAPTABLE(16) = "frame.exe" ''MIF MAPTABLE(17) = "frame.exe" ''MML MAPTABLE(18) = "w4w05f.dll" ''Microsoft Word 3.0, 3.1 MAPTABLE(19) = "w4w05f.dll" ''Microsoft Word 4.0 MAPTABLE(20) = "w4w05f.dll" ''Microsoft Word 5.0, 5.5 MAPTABLE(21) = "w4w44f.dll" ''MS Word for Windows 1.x MAPTABLE(22) = "w4w44f.dll" ''MS Word for Windows 2.0 MAPTABLE(23) = "w4w54f.dll" ''MS Word for Mac 4.0 MAPTABLE(24) = "w4w42t.dll" ''MSI MAPTABLE(25) = "grphfilt.dll" ''PCX MAPTABLE(26) = "impct9.flt" ''QuickDraw PICT MAPTABLE(27) = "w4w19f.dll" ''RTF MAPTABLE(28) = "frame.exe" ''SunRF MAPTABLE(29) = "frame.exe" ''Text MAPTABLE(30) = "grphfilt.dll" ''TIFF MAPTABLE(31) = "vp2mif.dll" ''Ventura Publisher 1.0-4.0 MAPTABLE(32) = "frame.exe" ''WMF MAPTABLE(33) = "w4w07f.dll" ''WordPerfect 5.0 MAPTABLE(34) = "w4w07f.dll" ''WordPerfect 5.1 MAPTABLE(35) = "w4w59f.dll" ''WordPerfect Mac 1.0 MAPTABLE(36) = "w4w60f.dll" ''WordPerfect Mac 2.0 MAPTABLE(37) = "imwpg9.flt" ''WordPerfect Graphics MAPTABLE(38) = "grphfilt.dll" ''XWD ''Initialize filter entries for maker.ini FILTTABLE(0).id = "100" FILTTABLE(0).entry = """Ami Professional"" ""MSI"" DOCUMENT W4W33F.DLL ^.SAM" FILTTABLE(1).id = "120" FILTTABLE(1).entry = """CGM"" ""WMF"" OBJECT FRME_INT.DLL ^.CGM" FILTTABLE(2).id = "125" FILTTABLE(2).entry = """CorelDRAW"" ""WMF"" OBJECT FRME_INT.DLL ^.CDR" FILTTABLE(3).id = "130" FILTTABLE(3).entry = """DCA/RFT"" ""MSI"" DOCUMENT W4W15F.DLL" FILTTABLE(4).id = "131" FILTTABLE(4).entry = """DCA/RFT - DisplayWrite 5"" ""MSI"" DOCUMENT W4W15F.DLL" FILTTABLE(5).id = "132" FILTTABLE(5).entry = """DIB"" ""DIB"" OBJECT frame.exe ^.BMP" FILTTABLE(6).id = "133" FILTTABLE(6).entry = """DisplayWrite 2,3,4"" ""MSI"" DOCUMENT W4W15F.DLL" FILTTABLE(7).id = "134" FILTTABLE(7).entry = """DisplayWrite 5"" ""MSI"" DOCUMENT W4W15F.DLL" FILTTABLE(8).id = "136" FILTTABLE(8).entry = """DXF"" ""WMF"" OBJECT FRME_INT.DLL ^.DXF" FILTTABLE(9).id = "140" FILTTABLE(9).entry = """EPS(F)"" ""DIB"" OBJECT frame.exe ^.EPS" FILTTABLE(10).id = "150" FILTTABLE(10).entry = """GEM"" ""WMF"" OBJECT FRME_INT.DLL ^.GEM" FILTTABLE(11).id = "160" FILTTABLE(11).entry = """GIF"" ""DIB"" OBJECT grphfilt.dll ^.GIF" FILTTABLE(12).id = "170" FILTTABLE(12).entry = """HPGL"" ""WMF"" OBJECT FRME_INT.DLL ^.HGL" FILTTABLE(13).id = "180" FILTTABLE(13).entry = """IGES"" ""WMF"" OBJECT G4G607F.DLL ^.IGS" FILTTABLE(14).id = "220" FILTTABLE(14).entry = """MacPaint"" ""DIB"" OBJECT macpaint.dll ^.MPT" FILTTABLE(15).id = "221" FILTTABLE(15).entry = """Micrografx Drawing Format"" ""WMF"" OBJECT FRME_INT.DLL ^.DRW" FILTTABLE(16).id = "222" FILTTABLE(16).entry = """MIF"" ""MKR"" DOCUMENT frame.exe ^.MIF" FILTTABLE(17).id = "223" FILTTABLE(17).entry = """MML"" ""MIF"" DOCUMENT frame.exe ^.MML" FILTTABLE(18).id = "224" FILTTABLE(18).entry = """Microsoft Word 3.0, 3.1"" ""MSI"" DOCUMENT W4W05F.DLL" FILTTABLE(19).id = "225" FILTTABLE(19).entry = """Microsoft Word 4.0"" ""MSI"" DOCUMENT W4W05F.DLL" FILTTABLE(20).id = "226" FILTTABLE(20).entry = """Microsoft Word 5.0, 5.5"" ""MSI"" DOCUMENT W4W05F.DLL" FILTTABLE(21).id = "227" FILTTABLE(21).entry = """MS Word for Windows 1.x"" ""MSI"" DOCUMENT W4W44F.DLL" FILTTABLE(22).id = "228" FILTTABLE(22).entry = """MS Word for Windows 2.0"" ""MSI"" DOCUMENT W4W44F.DLL" FILTTABLE(23).id = "229" FILTTABLE(23).entry = """MS Word Mac 4.0"" ""MSI"" DOCUMENT W4W54F.DLL" FILTTABLE(24).id = "230" FILTTABLE(24).entry = """MSI"" ""MIF"" DOCUMENT W4W42T.DLL ^.MSI" FILTTABLE(25).id = "250" FILTTABLE(25).entry = """PCX"" ""DIB"" OBJECT grphfilt.dll ^.PCX" FILTTABLE(26).id = "251" FILTTABLE(26).entry = """QuickDraw PICT"" ""WMF"" OBJECT FRME_INT.DLL ^.PCT" FILTTABLE(27).id = "270" FILTTABLE(27).entry = """RTF"" ""MSI"" DOCUMENT W4W19F.DLL ^.RTF" FILTTABLE(28).id = "280" FILTTABLE(28).entry = """SunRF"" ""DIB"" OBJECT frame.exe ^.RF" FILTTABLE(29).id = "290" FILTTABLE(29).entry = """Text"" ""MKR"" DOCUMENT frame.exe ^.TXT" FILTTABLE(30).id = "291" FILTTABLE(30).entry = """TIFF"" ""DIB"" OBJECT grphfilt.dll ^.TIF" FILTTABLE(31).id = "300" FILTTABLE(31).entry = """Ventura Publisher 1.0-4.0"" ""MIF"" DOCUMENT VP2MIF.DLL ^.CHP" FILTTABLE(32).id = "310" FILTTABLE(32).entry = """WMF"" ""WMF"" OBJECT frame.exe ^.WMF" FILTTABLE(33).id = "313" FILTTABLE(33).entry = """WordPerfect 5.0"" ""MSI"" DOCUMENT W4W07F.DLL" FILTTABLE(34).id = "314" FILTTABLE(34).entry = """WordPerfect 5.1"" ""MSI"" DOCUMENT W4W07F.DLL" FILTTABLE(35).id = "315" FILTTABLE(35).entry = """WordPerfect Mac 1.0"" ""MSI"" DOCUMENT W4W59F.DLL" FILTTABLE(36).id = "316" FILTTABLE(36).entry = """WordPerfect Mac 2.0"" ""MSI"" DOCUMENT W4W60F.DLL" FILTTABLE(37).id = "317" FILTTABLE(37).entry = """WordPerfect Graphics"" ""WMF"" OBJECT FRME_INT.DLL ^.WPG" FILTTABLE(38).id = "330" FILTTABLE(38).entry = """XWD"" ""DIB"" OBJECT grphfilt.dll ^.XWD" ''Disk cost list symbols BINNEEDS$ = "BinNeeds" INITNEEDS$ = "InitNeeds" SAMPLENEEDS$ = "SampleNeeds" HELPNEEDS$ = "HelpNeeds" TRAINNEEDS$ = "TrainNeeds" CLIPARTNEEDS$ = "ClipArtNeeds" DICTNEEDS$ = "DictNeeds" FILTERNEEDS$ = "FilterNeeds" TEMPLNEEDS$ = "TemplNeeds" REQNEEDS$ = "ReqNeeds" EXTRACOSTS$ = "ExtraCosts" BIGLIST$ = "BigList" FOR i% = 1 TO (NUMOPTIONS+1) STEP 1 AddListItem BIGLIST$, "" NEXT i% FOR i% = 1 TO 26 STEP 1 AddListItem EXTRACOSTS$, "0" NEXT i% INISTRINGS(1) = "FrameExe" INISTRINGS(2) = "FMInitFiles" INISTRINGS(3) = "Dictionaries" INISTRINGS(4) = "Filters" INISTRINGS(5) = "Help" INISTRINGS(6) = "Samples" INISTRINGS(7) = "ClipArt" INISTRINGS(8) = "Training" INISTRINGS(9) = "Templates" INISTRINGS(10)= "DestLocalPath" '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal '$ENDIF ''DEBUG PREREG: IF (INCRINSTALL) THEN FMRESPATH$ = MakePath(DEST$,"fminit\fmres.dll") IF (FMGetFields(tmpUser,tmpOrg,tmpReg,FMRESPATH) <> 1) THEN USERNAME = "" COMPANY = "" REGNUM = "" END IF USERNAME = tmpUser COMPANY = tmpOrg REGNUM = tmpReg PCNAME = GetIniKeyString(MakePath(DEST$,"maker.ini"),"Frame","PCName") SetSymbolValue "NameIn", USERNAME SetSymbolValue "OrgIn", COMPANY SetSymbolValue "RegIn", REGNUM SetSymbolValue "PCIn", PCNAME END IF REGISTRATION: IF (BOTHPROD) THEN sz$ = UIStartDlg(CUIDLL$, OPTREGISTER , "FOptNameOrgDlgProc", REGHELP, HELPPROC$) PRODUCT$ = GetSymbolValue("ButtonChecked") ELSE sz$ = UIStartDlg(CUIDLL$, CDGETNAMEORG, "FNameOrgDlgProc", REGHELP, HELPPROC$) END IF USERNAME$ = GetSymbolValue("NameOut") PCNAME$ = GetSymbolValue("PCOut") COMPANY$ = GetSymbolValue("OrgOut") REGNUM$ = GetSymbolValue("RegOut") IF sz$ = "CONTINUE" THEN IF (GetListItem(DEMOCHKSTATE$, 1) = "ON") THEN DEMO& = FMTRUE ELSE DEMO& = FMFALSE END IF IF (USERNAME$ = "") THEN GOSUB NONAME GOTO REGISTRATION END IF IF (PCNAME$ = "") THEN GOSUB NOPCNAME GOTO REGISTRATION END IF IF (NOT DEMO) THEN IF REGNUM$ = "" THEN GOSUB NOREG GOTO REGISTRATION END IF IF (FMValidateRegNo(REGNUM$) <> 1) THEN NUMTRY% = NUMTRY% + 1 IF (NUMTRY% > 3) THEN dlg% = EXITFAILURE UIPop 1 GOTO QUITL1 END IF GOSUB BADREG GOTO REGISTRATION END IF END IF CursorSave% = ShowWaitCursor ELSEIF sz$ = "CHKDEMO" THEN GOTO REGISTRATION ELSE ''User chose EXIT option GOSUB ASKQUIT GOTO REGISTRATION END IF DEFPATH: 'Set default destination WINDRIVE$ = MID$(GetWindowsDir, 1, 1) IF (PRODUCT = "1") THEN 'Is maker already installed? IF (DoesIniSectionExist("WIN.INI", "FrameMaker4") = 1) THEN DEST$ = GetIniKeyString("WIN.INI", "FrameMaker4", "FMHome") IF ((DoesFileExist(MakePath(DEST$, "fmres.dll"), femExists) = 1) AND (DoesFileExist(MakePath(DEST$,"maker.ini"),femExists) = 1)) THEN INCRINSTALL& = FMTRUE ELSE INCRINSTALL& = FMFALSE inistring$ = GetIniKeyString(NETINI,"FMOptions","DestLocalPath") DEST$ = GetNthFieldFromIniString(inistring$,1) END IF 'incremental install ELSE INCRINSTALL = FMFALSE inistring$ = GetIniKeyString(NETINI,"FMOptions","DestLocalPath") DEST$ = GetNthFieldFromIniString(inistring$,1) END IF ELSE ''Product is builder IF (DoesIniSectionExist("WIN.INI", "FrameBuilder") = 1) THEN DEST$ = GetIniKeyString("WIN.INI", "FrameBuilder", "FMHome") IF ((DoesFileExist(MakePath(DEST$,"fmres.dll"),femExists) = 1) AND (DoesFileExist(MakePath(DEST$,"builder.ini"),femExists) = 1)) THEN INCRINSTALL& = FMTRUE ELSE INCRINSTALL& = FMFALSE inistring$ = GetIniKeyString(NETINI,"FMOptions","DestLocalPath") DEST$ = GetNthFieldFromIniString(inistring$,1) END IF ELSE INCRINSTALL& = FMFALSE inistring$ = GetIniKeyString(NETINI,"FMOptions","DestLocalPath") DEST$ = GetNthFieldFromIniString(inistring$,1) END IF END IF ReplaceListItem DRIVETEXT$, 7, DEST$ '*** Get settings from netsetup.ini and set options accordingly. '*** Calculate space needed based on default settings for initial '*** display of options dialog. FOR i% = 1 TO (NUMOPTIONS+1) STEP 1 IniLine$ = GetIniKeyString(NETINI, "FMOptions", INISTRINGS(i)) Setting2 = GetNthFieldFromIniString(IniLine, 2) IF (i = 10) THEN IF (Setting2 = "Disable") THEN NOPATHOPT = FMTRUE END IF ELSE IF (Setting2 = "Disable") THEN num$ = STR$(i) index$ = LTRIM$(num$) AddListItem OPTGREY, index AddListItem CHECKSTATES, "OFF" ELSE Setting1 = GetNthFieldFromIniString(IniLine, 1) IF (Setting1 = "Yes") THEN AddListItem CHECKSTATES, "ON" ELSE AddListItem CHECKSTATES, "OFF" END IF END IF END IF NEXT i RestoreCursor CursorSave% RecalcPath SetDriveStatus UIPop 1 IF ((GetListLength(OPTGREY) = 9) AND NOPATHOPT) THEN ''Do not display options dialog. Automatically install ''required files. ''Warn user about installing over 3.0 IF (NOT DISPLAYED) AND (NOT CHANGEDPATH) AND (FMInstalled(DEST$,FM30) = 1) THEN DISPLAYMSG = FMTRUE DISPLAYED = FMTRUE END IF IF (DISPLAYMSG) THEN GOSUB WARNING DISPLAYMSG = FMFALSE END IF ''Install only if it will fit. FOR i% = 1 TO NUMOPTIONS STEP 1 IF GetListItem(BIGLIST$, i%) <> "" THEN GOSUB TOOBIG ERROR STFQUIT END IF NEXT i% GOTO INSTALL END IF CUSTINST: IF NOPATHOPT THEN sz$ = UIStartDlg(CUIDLL$, CUSTINSTNOPATH, "FCustInstDlgProc", CUSTHELP, HELPPROC$) ELSE sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", CUSTHELP, HELPPROC$) END IF IF sz$ = "CONTINUE" THEN ''Warn user about installing over 3.0 IF (NOT DISPLAYED) AND (NOT CHANGEDPATH) AND (FMInstalled(DEST$,FM30) = 1) THEN DISPLAYMSG = FMTRUE DISPLAYED = FMTRUE END IF IF (DISPLAYMSG) THEN GOSUB WARNING DISPLAYMSG = FMFALSE GOTO CUSTINST END IF ''Install only if it will fit. FOR i% = 1 TO NUMOPTIONS STEP 1 IF GetListItem(BIGLIST$, i%) <> "" THEN GOSUB TOOBIG GOTO CUSTINST END IF NEXT i% UIPop 1 GOTO INSTALL ELSEIF sz$ = "PATH" THEN GOTO GETPATH ELSEIF sz$ = "CHK1" THEN RecalcOptFiles BINFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK2" THEN RecalcOptFiles INITFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK3" THEN RecalcOptFiles DICTFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK4" THEN RecalcOptFiles FILTERFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK5" THEN RecalcOptFiles HELPFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK6" THEN RecalcOptFiles SAMPLEFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK7" THEN RecalcOptFiles CLIPARTFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK8" THEN RecalcOptFiles TRAINFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK9" THEN RecalcOptFiles TEMPLFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO CUSTINST ELSE GOSUB ASKQUIT GOTO CUSTINST END IF INSTALL: ClearCopyList CreateDir DEST$, cmoNone OpenLogFile MakePath(DEST$, LOGFILE$), 0 ''open install.log for writing AddOptFilesToCopyList REQFILES AddOptFilesToCopyList BINFILES AddOptFilesToCopyList INITFILES AddOptFilesToCopyList DICTFILES AddOptFilesToCopyList FILTERFILES AddOptFilesToCopyList HELPFILES AddOptFilesToCopyList SAMPLEFILES AddOptFilesToCopyList CLIPARTFILES AddOptFilesToCopyList TRAINFILES AddOptFilesToCopyList TEMPLFILES '$IFDEF DEBUG i% = SetCopyMode(0) DumpCopyList "e:\tmp\install.lst" '$ENDIF IF (FMInstalled(DEST$, 3) = 1) THEN MAKER_30 = FMTRUE ENDIF '*** Add splash screens to billboard list ClearBillboardList AddToBillboardList CUIDLL$, SCREEN1, "FModelessDlgProc", 2 AddToBillboardList CUIDLL$, SCREEN2, "FModelessDlgProc", 2 AddToBillboardList CUIDLL$, SCREEN3, "FModelessDlgProc", 1 AddToBillboardList CUIDLL$, SCREEN4, "FModelessDlgProc", 2 AddToBillboardList CUIDLL$, SCREEN5, "FModelessDlgProc", 2 AddToBillboardList CUIDLL$, SCREEN6, "FModelessDlgProc", 1 AddToBillboardList CUIDLL$, SCREEN7, "FModelessDlgProc", 1 AddToBillboardList CUIDLL$, SCREEN8, "FModelessDlgProc", 1 ''Calculate where to place copy gauge so that it is below the ''splash screens and centered regardless of display. Don't need ''to calculate width, because a -1 automatically centers gauge ''horizontally. ''(look at GetDialogBaseUnits for formula) ht% = GetScreenHeight() htunit% = ((GetDialogBaseUnits() AND &HFFFF0000))/&HFFFF SetCopyGaugePosition -1, (8*((ht*3)/4))/htunit CopyFilesInCopyList '*** Update registration database for drag and drop '*** '$IFDEF REG_DB_ENABLED CreateRegKeyValue "Frame", "Frame" CreateRegKeyValue "Frame\shell\print\ddeexec", "[FileOpen(%1)][FilePrint()]" CreateRegKeyValue "Frame\shell\print\ddeexec\topic", "system" CreateRegKeyValue "Frame\shell\print\ddeexec\application", "Frame" IF (GetListItem(CHECKSTATES$, BINFILES) = "ON") THEN CreateRegKeyValue "Frame\shell\print\command", MakePath(DEST$,"frame.exe") CreateRegKeyValue "Frame\shell\open\command", MakePath(DEST$,"frame.exe") ELSE CreateRegKeyValue "Frame\shell\print\command", MakePath(NETPATH$,"frame.exe") CreateRegKeyValue "Frame\shell\open\command", MakePath(NETPATH$,"frame.exe") END IF CreateRegKeyValue "Frame\shell\open\ddeexec", "[FileOpen(%1)]" CreateRegKeyValue "Frame\shell\open\ddeexec\topic", "system" CreateRegKeyValue "Frame\shell\open\ddeexec\application", "Frame" IF (DoesRegKeyExist(".DOC") = 0) THEN CreateRegKeyValue ".DOC", "Frame" END IF IF (DoesRegKeyExist(".FRM") = 0) THEN CreateRegKeyValue ".FRM", "Frame" END IF IF (DoesRegKeyExist(".BK") = 0) THEN CreateRegKeyValue ".BK", "Frame" END IF '$ENDIF '**** Put username and registration number in fmres.dll. Also whether or '**** not if demomaker. FMRESPATH$ = MakePath(DEST$,"fminit\fmres.dll") IF (DEMO) THEN stat% = FMUpdateRes((FMRESPATH$),(USERNAME$),(COMPANY$),(REGNUM$),1) ELSE stat% = FMUpdateRes((FMRESPATH$),(USERNAME$),(COMPANY$),(REGNUM$),0) END IF IF (stat% <> 0) THEN ERROR STFQUIT END IF '**** Create Program Group and update WIN.INI. '**** If user did not install binaries, then use network path for path '**** for executable file for program item. '**** If user installed initialization files, then FMHome should be set '**** to local path, else set to network path. IF (PRODUCT$ = "1") THEN IF (NOT INCRINSTALL) THEN CreateProgmanGroup PROGGROUP$, "", cmoNone END IF IF (GetListItem(CHECKSTATES$, BINFILES) = "ON") THEN CreateProgmanItem PROGGROUP$, MAKERITEM$, MakePath(DEST$,"frame.exe -maker"), "", cmoOverwrite 'gpk - changed maker.exe with frame.exe -maker. whichpath$ = DEST$ ELSE CreateProgmanItem PROGGROUP$, MAKERITEM$, MakePath(NETPATH$,"frame.exe -maker"), "", cmoOverwrite 'gpk whichpath$ = NETPATH$ END IF IF (GetListItem(CHECKSTATES$, INITFILES) = "ON") THEN CreateIniKeyValue "WIN.INI", "FrameMaker4", "FMHome", DEST$, cmoAll ELSE CreateIniKeyValue "WIN.INI", "FrameMaker4", "FMHome", NETPATH$, cmoAll END IF CreateIniKeyValue "WIN.INI", "FrameMaker4", "IniFile", "maker.ini", cmoAll ShowProgmanGroup PROGGROUP$, 1, cmoNone ELSE 'Builder IF (NOT INCRINSTALL) THEN CreateProgmanGroup PROGGROUP$, "", cmoNone END IF IF (GetListItem(CHECKSTATES$, BINFILES) = "ON") THEN CreateProgmanItem PROGGROUP$, BUILDERITEM$, MakePath(DEST$,"frame.exe -builder"), "", cmoOverwrite 'gpk -changed builder.exe with frame.exe -builder. whichpath$ = DEST$ ELSE CreateProgmanItem PROGGROUP$, BUILDERITEM$, MakePath(NETPATH$,"frame.exe -builder"), "", cmoOverwrite 'gpk -changed builder.exe with frame.exe -builder. whichpath$ = NETPATH$ END IF IF (GetListItem(CHECKSTATES$, INITFILES) = "ON") THEN CreateIniKeyValue "WIN.INI", "FrameBuilder", "FMHome", DEST$, cmoOverwrite ELSE CreateIniKeyValue "WIN.INI", "FrameBuilder", "FMHome", NETPATH$, cmoOverwrite END IF CreateIniKeyValue "WIN.INI", "FrameBuilder", "IniFile", "builder.ini", cmoAll ShowProgmanGroup PROGGROUP$, 1, cmoNone END IF 'Maker or Builder ''**** Add extensions to win.ini keystring$ = MakePath(whichpath$,"frame.exe") + " ^.doc" IF (DoesIniKeyExist("WIN.INI", "Extensions", "doc") = 1) THEN pos1% = INSTR(GetIniKeyString("WIN.INI", "Extensions", "doc"), "maker.exe") pos2% = INSTR(GetIniKeyString("WIN.INI", "Extensions", "doc"), "frame.exe") IF ((pos1% > 1) OR (pos2% > 1)) THEN CreateIniKeyValue "WIN.INI", "Extensions", "doc", keystring$, cmoOverwrite END IF ELSE CreateIniKeyValue "WIN.INI", "Extensions", "doc", keystring$, cmoOverwrite END IF keystring$ = MakePath(whichpath$,"frame.exe") + " ^.bk" IF (DoesIniKeyExist("WIN.INI", "Extensions", "bk") = 1) THEN pos1% = INSTR(GetIniKeyString("WIN.INI", "Extensions", "bk"), "maker.exe") pos2% = INSTR(GetIniKeyString("WIN.INI", "Extensions", "bk"), "frame.exe") IF ((pos1% > 1) OR (pos2% > 1)) THEN CreateIniKeyValue "WIN.INI", "Extensions", "bk", keystring$, cmoOverwrite END IF ELSE CreateIniKeyValue "WIN.INI", "Extensions", "bk", keystring$, cmoOverwrite END IF keystring$ = MakePath(whichpath$,"frame.exe") + " ^.frm" IF (DoesIniKeyExist("WIN.INI", "Extensions", "frm") = 1) THEN pos1% = INSTR(GetIniKeyString("WIN.INI", "Extensions", "frm"), "maker.exe") pos2% = INSTR(GetIniKeyString("WIN.INI", "Extensions", "frm"), "frame.exe") IF ((pos1% > 1) OR (pos2% > 1)) THEN CreateIniKeyValue "WIN.INI", "Extensions", "frm", keystring$, cmoOverwrite END IF ELSE CreateIniKeyValue "WIN.INI", "Extensions", "frm", keystring$, cmoOverwrite END IF '** Copy fminit\fmfont.ttf to windows system directory '** Copy fmdbms.dll and fmheap.dll to windows system directory -gpk winsysdir$ = GetWindowsSysDir() CopyFile MakePath(NETPATH$,"fminit\fmfont.ttf"),MakePath(winsysdir,"fmfont.ttf"),cmoOverwrite,0 CopyFile MakePath(NETPATH$,"fmdbms.dll"),MakePath(winsysdir,"fmdbms.dll"),cmoOverwrite,0 CopyFile MakePath(NETPATH$,"fmheap.dll"),MakePath(winsysdir,"fmheap.dll"),cmoOverwrite,0 '*** Update maker.ini '*** UpdateMakerIni '*** Update [Filters] section with the filters installed on network or '*** locally. MAKERINI = MakePath(DEST$, "maker.ini") IF (GetListItem(CHECKSTATES$, FILTERFILES) = "ON") THEN filterpath$ = MakePath(DEST, "filters") ELSE filterpath$ = MakePath(NETPATH,"filters") END IF IF (DoesIniSectionExist(MAKERINI, "Filters") = 1) THEN RemoveIniSection MAKERINI, "Filters", cmoNone END IF FOR i% = 0 TO (NUMENTRIES-1) STEP 1 IF (MAPTABLE(i) = "frame.exe") THEN tmpfile$ = MakePath(NETPATH, "frame.exe") ELSE tmpfile$ = MakePath(filterpath, MAPTABLE(i)) END IF IF (DoesFileExist(tmpfile, femExists) = 1) THEN CreateIniKeyValue MAKERINI, "Filters", FILTTABLE(i).id, FILTTABLE(i).entry, cmoVital END IF NEXT i 'Copy over some user set preferences from the old maker.ini to the 'new maker.ini IF (MAKER_30) THEN ModifyMakerIni END IF CloseLogFile QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN IF (PRODUCT = "2") THEN dlg% = BLDEXITSUCCESS ELSE dlg% = EXITSUCCESS END IF ''Remove log file if installation was successful. RemoveFile MakePath(DEST$,LOGFILE$), cmoNone ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 END ERRQUIT: i% = DoMsgBox(ERRMSG$, ERRTITLE$, MB_OK+MB_TASKMODAL+MB_ICONHAND) END GETPATH: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", PATHHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN CHANGEDPATH = FMTRUE olddest$ = DEST$ DEST$ = GetSymbolValue("EditTextOut") ''Validate new path. IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ''Truncate display if too long IF LEN(DEST$) > 32 THEN ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..." ELSE ReplaceListItem DRIVETEXT$, 7, DEST$ END IF ''Recalc if path changed. IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN ''Installing over FM 3.0? IF (FMInstalled(DEST$, FM30) = 1) THEN DISPLAYMSG = FMTRUE ELSEIF (FMInstalled(DEST$, FM40) = 0) AND (INCRINSTALL) THEN INCRINSTALL = FMFALSE FOR i% = 1 TO NUMOPTIONS STEP 1 ReplaceListItem CHECKSTATES$, i%, "ON" NEXT i% END IF RecalcPath SetDriveStatus ELSE IF (FMInstalled(DEST$, FM30) = 2) THEN DISPLAYMSG = FMFALSE END IF END IF olddest$ = "" GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO GETPATHL1 ELSEIF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO GETPATHL1 ELSE UIPop 1 GOTO CUSTINST END IF TOOBIG: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO TOOBIG END IF UIPop 1 RETURN BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO BADPATH END IF UIPop 1 RETURN WARNING: sz$ = UIStartDlg(CUIDLL$, MAKER30, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO WARNING END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKEXIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN NONAME: sz$ = UIStartDlg(CUIDLL$, NAMEALERT, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO NONAME END IF UIPop 1 RETURN NOPCNAME: sz$ = UIStartDlg(CUIDLL$, PCNAMEALERT, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO NOPCNAME END IF UIPop 1 RETURN NOREG: sz$ = UIStartDlg(CUIDLL$, REGALERT, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO NOREG END IF UIPop 1 RETURN BADREG: sz$ = UIStartDlg(CUIDLL$, BADREGNUM, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADREG ENDIF UIPop 1 RETURN BADNPATH: sz$ = UIStartDlg(CUIDLL$, BADNETPATH, "FBadNetDlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADNPATH END IF ERROR STFQUIT '** '** Purpose: '** Adds the specified option files to the copy list. '** Arguments: '** ftype% - type of files to add, one of the following: '** BINFILES, INITFILES, DICTFILES, FILTERFILES, '** HELPFILES, SAMPLEFILES, CLIPARTFILES, TRAINFILES, '** TEMPLFILES, REQFILES '** Returns: '** none. '************************************************************************* SUB AddOptFilesToCopyList (ftype%) STATIC IF ftype% = REQFILES THEN SrcDir$ = NETPATH$ AddSectionFilesToCopyList "base", SrcDir$, DEST$ SrcDir$ = "" ELSE IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN SrcDir$ = NETPATH$ IF ftype% = BINFILES THEN IF (PRODUCT = "1") THEN AddSectionFilesToCopyList "makerbin", SrcDir$, DEST$ ELSE AddSectionFilesToCopyList "builderbin", SrcDir$, DEST$ END IF ELSEIF ftype% = INITFILES THEN AddSectionFilesToCopyList "init", SrcDir$, DEST$ IF (LANGUIOPT = "2") THEN AddSectionFilesToCopyList "ukcustom", SrcDir$, DEST$ ELSE AddSectionFilesToCopyList "uscustom", SrcDir$, DEST$ END IF ELSEIF ftype% = DICTFILES THEN AddSectionFilesToCopyList "dictionaries", SrcDir$, DEST$ ELSEIF ftype% = FILTERFILES THEN filterini% = 0 FOR i% = 1 TO NUMFILTERS STEP 1 Filter$ = GetListItem(FILTLISTIN, i) IF (GetIniKeyString(NETINI, "Filters", Filter$) = "Yes") THEN AddSectionKeyFileToCopyList "filters", Filter$, SrcDir$, DEST$ IF (filterini = 0) THEN AddSectionFilesToCopyList "filtini", SrcDir$, DEST$ filterini = 1 END IF END IF NEXT i% IF (GetIniKeyString(NETINI,"Filters","BaseFilters") = "Yes") THEN AddSectionFilesToCopyList "basefilters", SrcDir$, DEST$ END IF ELSEIF ftype% = HELPFILES THEN AddSectionFilesToCopyList "help", SrcDir$, DEST$ ELSEIF ftype% = SAMPLEFILES THEN IF (LANGUIOPT = "2") THEN AddSectionFilesToCopyList "uksamples", SrcDir$, DEST$ ELSE AddSectionFilesToCopyList "ussamples", SrcDir$, DEST$ END IF ELSEIF ftype% = CLIPARTFILES THEN AddSectionFilesToCopyList "clipart", SrcDir$, DEST$ ELSEIF ftype% = TRAINFILES THEN IF (LANGUIOPT = "2") THEN AddSectionFilesToCopyList "uktraining", SrcDir$, DEST$ ELSE AddSectionFilesToCopyList "ustraining", SrcDir$, DEST$ END IF ELSEIF ftype% = TEMPLFILES THEN IF (LANGUIOPT = "2") THEN AddSectionFilesToCopyList "uktemplates", SrcDir$, DEST$ ELSE AddSectionFilesToCopyList "ustemplates", SrcDir$, DEST$ END IF END IF SrcDir$ = "" END IF END IF 'not reqfiles END SUB '** '** Purpose: '** Recalculates disk space for the given option files and sets '** the status info symbol "StatusItemsText". '** Arguments: '** ftype% - type of files to add, one of the following: '** BASEFILES, SAMPLEFILES, CLIPARTFILES, HELPFILES, '** TRAINFILES, DICTFILES, FILTERFILES, NETFILES '** Returns: '** none. '************************************************************************* SUB RecalcOptFiles (ftype%) STATIC CursorSave% = ShowWaitCursor() ClearCopyList AddOptFilesToCopyList ftype% fExtra% = 0 IF ftype% = REQFILES THEN ListSym$ = REQNEEDS$ ' IF GetListItem(CHECKSTATES$, BASEFILES) = "ON" THEN ''Add extra cost to Windows drive for ini/progman, etc. ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 ReplaceListItem EXTRACOSTS$, ndrive%, "6144" fExtra% = 1 ' END IF ELSEIF ftype% = BINFILES THEN ListSym$ = BINNEEDS$ ELSEIF ftype% = INITFILES THEN ListSym$ = INITNEEDS$ ELSEIF ftype% = DICTFILES THEN ListSym$ = DICTNEEDS ELSEIF ftype% = FILTERFILES THEN ListSym$ = FILTERNEEDS$ ELSEIF ftype% = HELPFILES THEN ListSym$ = HELPNEEDS$ ELSEIF ftype% = SAMPLEFILES THEN ListSym$ = SAMPLENEEDS$ ELSEIF ftype% = CLIPARTFILES THEN ListSym$ = CLIPARTNEEDS ELSEIF ftype% = TRAINFILES THEN ListSym$ = TRAINNEEDS$ ELSEIF ftype% = TEMPLFILES THEN ListSym$ = TEMPLNEEDS$ END IF StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "") cost& = 0 FOR i% = 1 TO 26 STEP 1 cost& = cost& + VAL(GetListItem(ListSym$, i%)) NEXT i% IF (ftype <> REQFILES) THEN ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K" END IF IF StillNeed& > 0 THEN ReplaceListItem BIGLIST$, ftype%, "YES" ELSE ReplaceListItem BIGLIST$, ftype%, "" END IF IF fExtra% THEN ReplaceListItem EXTRACOSTS$, ndrive%, "0" END IF RestoreCursor CursorSave% ListSym$ = "" END SUB '** '** Purpose: '** Recalculates disk space and sets option status info according '** to the current destination path. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB RecalcPath STATIC CursorSave% = ShowWaitCursor() RecalcOptFiles REQFILES RecalcOptFiles BINFILES RecalcOptFiles INITFILES RecalcOptFiles DICTFILES RecalcOptFiles FILTERFILES RecalcOptFiles HELPFILES RecalcOptFiles SAMPLEFILES RecalcOptFiles CLIPARTFILES RecalcOptFiles TRAINFILES RecalcOptFiles TEMPLFILES RestoreCursor CursorSave% END SUB '** '** Purpose: '** Sets drive status info according to latest disk space calcs. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB SetDriveStatus STATIC drive$ = MID$(DEST$, 1, 1) ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1 'Have to split up to halfcost and totalcost, because cannot 'have more than 256 chars on one line. halfcost& = VAL(GetListItem(REQNEEDS$, ndrive%)) + VAL(GetListItem(BINNEEDS$, ndrive%)) + VAL(GetListItem(INITNEEDS$, ndrive%)) + VAL(GetListItem(DICTNEEDS$, ndrive%)) + VAL(GetListItem(FILTERNEEDS$, ndrive%)) othercost& = VAL(GetListItem(HELPNEEDS$, ndrive%)) + VAL(GetListItem(SAMPLENEEDS$, ndrive%)) + VAL(GetListItem(CLIPARTNEEDS$, ndrive%)) + VAL(GetListItem(TRAINNEEDS$, ndrive%)) + VAL(GetListItem(TEMPLNEEDS$, ndrive%)) totalcost& = halfcost& + othercost& + LOGNEED free& = GetFreeSpaceForDrive(drive$) ReplaceListItem DRIVETEXT$, 1, drive$ + ":" ReplaceListItem DRIVETEXT$, 2, STR$(totalcost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K" IF drive$ = WINDRIVE$ THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 halfcost& = VAL(GetListItem(REQNEEDS$, ndrive%)) + VAL(GetListItem(BINNEEDS$, ndrive%)) + VAL(GetListItem(INITNEEDS$, ndrive%)) + VAL(GetListItem(DICTNEEDS$, ndrive%)) + VAL(GetListItem(FILTERNEEDS$, ndrive%)) totalcost& = halfcost& + VAL(GetListItem(HELPNEEDS$, ndrive%)) + VAL(GetListItem(SAMPLENEEDS$, ndrive%)) + VAL(GetListItem(CLIPARTNEEDS$, ndrive%)) + VAL(GetListItem(TRAINNEEDS$, ndrive%)) + VAL(GetListItem(TEMPLNEEDS$, ndrive%)) IF totalcost& = 0 THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE free& = GetFreeSpaceForDrive(WINDRIVE$) ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":" ReplaceListItem DRIVETEXT$, 5, STR$(totalcost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K" END IF END IF END SUB '** '** Purpose: '** Modifies the paths in maker.ini depending on what FMHome '** directory is set to and what options the user installed. '** Arguments: '** none. '** Returns: '** none. '****************************************************************** SUB UpdateMakerIni STATIC IF (PRODUCT = "1") THEN inifile$ = MakePath(DEST$, "maker.ini") helppath$ = "\help\maker" ELSE inifile$ = MakePath(DEST$, "builder.ini") helppath$ = "\help\builder" END IF CreateIniKeyValue inifile$,"Frame","PCName",PCNAME,cmoOverwrite CreateIniKeyValue inifile$,"Directories","ReleaseNotes",NETPATH$,cmoOverwrite CreateIniKeyValue inifile$,"RecentlyVisitedFiles","0",NETPATH$+"\relnotes",cmoOverwrite IF (GetListItem(CHECKSTATES$, INITFILES) = "ON") THEN IF (GetListItem(CHECKSTATES$, HELPFILES) = "OFF") THEN CreateIniKeyValue inifile$,"Directories","HelpDir",NETPATH$+helppath$,cmoOverwrite CreateIniKeyValue inifile$,"Directories","OnlineManuals",NETPATH$+"\manuals",cmoOverwrite CreateIniKeyValue inifile$,"Files","FirstRunOpenDoc",NETPATH$+"\manuals\welcome",cmoOverwrite CreateIniKeyValue inifile$,"RecentlyVisitedFiles","1",NETPATH$+"\manuals\welcome",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, DICTFILES) = "OFF") THEN CreateIniKeyValue inifile$,"Directories","LanguageDir",NETPATH$+"\dict",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, TEMPLFILES) = "OFF") THEN CreateIniKeyValue inifile$,"Directories","TemplateDir",NETPATH$+"\template",cmoOverwrite CreateIniKeyValue inifile$,"Directories","Templates",NETPATH$+"\template",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, FILTERFILES) = "OFF") THEN CreateIniKeyValue inifile$,"Directories","FilterDllDir",NETPATH$+"\filters",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, SAMPLEFILES) = "OFF") THEN CreateIniKeyValue inifile$,"Directories","Samples",NETPATH$+"\samples",cmoOverwrite CreateIniKeyValue inifile$,"RecentlyVisitedFiles","2",NETPATH$+"\samples\demodoc",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, CLIPARTFILES) = "OFF") THEN CreateIniKeyValue inifile$,"Directories","Clipart",NETPATH$+"\clipart",cmoOverwrite END IF ELSE ''FMHome is network dir CreateIniKeyValue inifile$,"Files","Resources",DEST$+"\fminit\fmres.dll",cmoOverwrite IF (GetListItem(CHECKSTATES$, HELPFILES) = "ON") THEN CreateIniKeyValue inifile$,"Directories","HelpDir",DEST$+helppath$,cmoOverwrite CreateIniKeyValue inifile$,"Directories","OnlineManuals",DEST$+"\manuals",cmoOverwrite CreateIniKeyValue inifile$,"Files","FirstRunOpenDoc",DEST$+"\manuals\welcome",cmoOverwrite CreateIniKeyValue inifile$,"RecentlyVisitedFiles","1",DEST$+"\manuals\welcome",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, DICTFILES) = "ON") THEN CreateIniKeyValue inifile$,"Directories","LanguageDir",DEST$+"\dict",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, TEMPLFILES) = "ON") THEN CreateIniKeyValue inifile$,"Directories","TemplateDir",DEST$+"\template",cmoOverwrite CreateIniKeyValue inifile$,"Directories","Templates",DEST$+"\template",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, FILTERFILES) = "ON") THEN CreateIniKeyValue inifile$,"Directories","FilterDllDir",DEST$+"\filters",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, SAMPLEFILES) = "ON") THEN CreateIniKeyValue inifile$,"Directories","Samples",DEST$+"\samples",cmoOverwrite CreateIniKeyValue inifile$,"RecentlyVisitedFiles","2",DEST$+"\samples\demodoc",cmoOverwrite END IF IF (GetListItem(CHECKSTATES$, CLIPARTFILES) = "ON") THEN CreateIniKeyValue inifile$,"Directories","Clipart",DEST$+"\clipart",cmoOverwrite END IF END IF END SUB '** '** Purpose: '** Copies some user set preferences in 3.0 maker.ini '** to 4.0 maker.ini. '** Arguments: '** none. '** Returns: '** none. '****************************************************************** SUB ModifyMakerIni STATIC Maker30Ini$ = MakePath(DEST$, "makerini.bak") CreateIniKeyValue MAKERINI,"Frame","PCName",GetIniKeyString(Maker30Ini$,"Frame","PCName"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","BackupOnSave",GetIniKeyString(Maker30Ini$,"Preferences","BackupOnSave"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","AutoSave",GetIniKeyString(Maker30Ini$,"Preferences","AutoSave"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","ShowErrors",GetIniKeyString(Maker30Ini$,"Preferences","ShowErrors"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","GreekSize",GetIniKeyString(Maker30Ini$,"Preferences","GreekSize"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","FMImage",GetIniKeyString(Maker30Ini$,"Preferences","FMImage"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","NetworkLock",GetIniKeyString(Maker30Ini$,"Preferences","NetworkLock"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","Zoom",GetIniKeyString(Maker30Ini$,"Preferences","Zoom"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","PenWidths",GetIniKeyString(Maker30Ini$,"Preferences","PenWidths"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","ClipboardFormatsPriorities",GetIniKeyString(Maker30Ini$,"Preferences","ClipboardFormatsPriorities"),cmoOverwrite CreateIniKeyValue MAKERINI,"Preferences","MonitorSize",GetIniKeyString(Maker30Ini$,"Preferences","MonitorSize"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","Sizes",GetIniKeyString(Maker30Ini$,"Fonts","Sizes"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","Angles",GetIniKeyString(Maker30Ini$,"Fonts","Angles"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","Variations",GetIniKeyString(Maker30Ini$,"Fonts","Variations"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","Weights",GetIniKeyString(Maker30Ini$,"Fonts","Weights"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","DefaultSize",GetIniKeyString(Maker30Ini$,"Fonts","DefaultSize"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","DefaultFamily",GetIniKeyString(Maker30Ini$,"Fonts","DefaultFamily"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","DefaultAngle",GetIniKeyString(Maker30Ini$,"Fonts","DefaultAngle"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","DefaultVariation",GetIniKeyString(Maker30Ini$,"Fonts","DefaultVariation"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","DefaultWeight",GetIniKeyString(Maker30Ini$,"Fonts","DefaultWeight"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","MathFamily",GetIniKeyString(Maker30Ini$,"Fonts","MathFamily"),cmoOverwrite CreateIniKeyValue MAKERINI,"Fonts","NonTextFamilies",GetIniKeyString(Maker30Ini$,"Fonts","NonTextFamilies"),cmoOverwrite CreateIniKeyValue MAKERINI,"Files","UserDictionary",GetIniKeyString(Maker30Ini$,"Files","UserDictionary"),cmoOverwrite CreateIniKeyValue MAKERINI,"Files","SiteDictionary",GetIniKeyString(Maker30Ini$,"Files","SiteDictionary"),cmoOverwrite END SUB '** '** Purpose: '** Checks if path is a valid maker or builder network path. Valid '** if maker.ini and maker.exe exists or builder.ini and builder.exe '** exists. Uses path in the global variable NETPATH$. '** Sets the following global variables: '** PRODUCT$ = Set to "1" if only maker fmhome. Set to "2" if '** only builder fmhome. '** BOTHPROD&= Set to true if both maker and builder exist in fmhome. '** Arguments: '** none. '** Returns: '** 1 = path is valid '** 0 = path is not valid '****************************************************************** FUNCTION ValidNetPath() STATIC AS INTEGER makerexists& = FMFALSE builderexists& = FMFALSE IF ((DoesFileExist(MakePath(NETPATH,"maker.ini"), femExists) = 1) AND (DoesFileExist(MakePath(NETPATH,"frame.exe"),femExists) = 1)) THEN ' gpk - changed maker.exe to frame.exe makerexists& = FMTRUE END IF IF ((DoesFileExist(MakePath(NETPATH,"builder.ini"),femExists) = 1) AND (DoesFileExist(MakePath(NETPATH,"frame.exe"),femExists) = 1)) THEN ' gpk - changed builder.exe to frame.exe builderexists& = FMTRUE END IF IF (makerexists AND builderexists) THEN BOTHPROD = FMTRUE ValidNetPath = 1 ELSEIF (makerexists) THEN PRODUCT = "1" ValidNetPath = 1 ELSEIF (builderexists) THEN PRODUCT = "2" ValidNetPath = 1 ELSE ValidNetPath = 0 END IF END FUNCTION '** '** Purpose: '** Checks if FrameMaker is already installed in the '** specified directory. For our purposes, FrameMaker is '** considered installed if: '** a) maker.exe exists in the directory. '** b) The FMHome field in WIN.INI is that directory. '** Arguments: '** makerDir$ - directory name '** version% - FrameMaker version to check for (3 or 4) '** Return Value: '** Return 1 if FrameMaker is already installed. '** Otherwise return 0. '****************************************************************** FUNCTION FMInstalled (makerDir$, version%) STATIC AS INTEGER IniStat& = FMFALSE IF (version% = 3) THEN section$ = "FrameMaker3.00" IF (DoesFileExist(MakePath(makerDir$,"maker.ini"), femExists) = 1) THEN tmp$ = GetIniKeyString(MakePath(makerDir$,"maker.ini"),"FrameMaker","Version") print "version = ";tmp$ IF (GetIniKeyString(MakePath(makerDir$,"maker.ini"),"FrameMaker","Version") = "3.00") OR (GetIniKeyString(MakePath(makerDir$,"maker.ini"),"FrameMaker","Version") = "3.01") THEN IniStat& = FMTRUE END IF END IF ELSE section$ = "FrameMaker4" IF (DoesFileExist(MakePath(makerDir$,"maker.ini"), femExists) = 1) THEN IF (GetIniKeyString(MakePath(makerDir$,"maker.ini"),"FrameMaker","Version") = "4.0B1c") THEN IniStat& = FMTRUE END IF END IF END IF IF (DoesFileExist(MakePath(makerDir$,"frame.exe"), femExists) = 1) AND (IniStat) THEN 'gpk - changed maker.exe to frame.exe IF (DoesIniSectionExist("WIN.INI", section$) = 1) THEN fmhome$ = GetIniKeyString("WIN.INI", section$, "FMHome") ufmhome$ = UCASE$(fmhome$) IF (ufmhome$ = makerDir$) THEN FMInstalled = 1 ELSE FMInstalled = 0 END IF ELSE FMInstalled = 0 END IF ELSE FMInstalled = 0 END IF END FUNCTION '** '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION