home *** CD-ROM | disk | FTP | other *** search
Wrap
'$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' '$INCLUDE 'mscpydis.inc' ' Stuff for writing out private profile strings. Declare Function WritePrivateProfileString Lib "Kernel" (lpApplicationName As String, lpKeyName As String,lpString As String, lplFileName As String) As Integer DECLARE FUNCTION BitmapCntrlInit LIB "mscuistf.dll" as INTEGER ''Dialog ID's CONST WELCOME = 100 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST OPTIONS = 800 CONST APPHELP = 900 CONST BILLBOARD = 4545 CONST MODELESS = 5000 CONST CUSTINST = 6200 CONST TOOBIG = 6300 CONST BADPATH = 6400 'CONST CDALREADYUSED = 7100 'CONST CDBADFILE = 7200 'CONST CDCONFIRMED = 7300 'CONST CDGETNAME = 7400 'CONST CDBADNAME = 7700 ''Bitmap ID CONST LOGO = 1 ''File Types CONST APPFILES = 1 CONST OPTFILES1 = 2 CONST OPTFILES2 = 3 GLOBAL DEST$ ''Default destination directory. GLOBAL WINDRIVE$ ''Windows drive letter. GLOBAL OPT1OPT$ ''Option selection from OptFiles1 option dialog. GLOBAL OPT2OPT$ ''Option selection from OptFiles2 option dialog. ''CustInst list symbol names GLOBAL APPNEEDS$ ''Option list costs per drive GLOBAL OPT1NEEDS$ GLOBAL OPT2NEEDS$ GLOBAL SYSTEMFILENEEDS$ 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 CHECKSTATES$ GLOBAL STATUSTEXT$ GLOBAL DRIVETEXT$ GLOBAL NAMEOUT$ DECLARE SUB AddOptFilesToCopyList (ftype%) DECLARE SUB RecalcOptFiles (ftype%) DECLARE SUB RecalcPath DECLARE SUB SetDriveStatus DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING INIT: CUIDLL$ = "mscuistf.dll" ''custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure INIFILE$ = "FFW.INI" SetBitmap CUIDLL$, LOGO SetTitle "FFW Setup" szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "FFWSETUP.INF" END IF ReadInfFile szInf$ WINDRIVE$ = MID$(GetWindowsDir, 1, 1) DEST$ = WINDRIVE$ + ":\FANTASY" ''CustInst list symbols CHECKSTATES$ = "CheckItemsState" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" FOR i% = 1 TO 3 STEP 1 AddListItem CHECKSTATES$, "ON" NEXT i% FOR i% = 1 TO 3 STEP 1 AddListItem STATUSTEXT$, "" NEXT i% FOR i% = 1 TO 7 STEP 1 AddListItem DRIVETEXT$, "" NEXT i% ReplaceListItem DRIVETEXT$, 7, DEST$ ''Disk cost list symbols APPNEEDS$ = "AppNeeds" OPT1NEEDS$ = "Opt1Needs" OPT2NEEDS$ = "Opt2Needs" EXTRACOSTS$ = "ExtraCosts" BIGLIST$ = "BigList" FOR i% = 1 TO 3 STEP 1 AddListItem BIGLIST$, "" NEXT i% FOR i% = 1 TO 26 STEP 1 AddListItem EXTRACOSTS$, "0" NEXT i% ''File Option Variables OPT1OPT$ = "1" OPT2OPT$ = "1" RecalcPath SetDriveStatus '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal '$ENDIF ''DEBUG ' Initialize the copy disincentive routines. result% = InitSystem(1, "", 0) CUSTINST: sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN ''Install only if it will fit. FOR i% = 1 TO 3 STEP 1 IF GetListItem(BIGLIST$, i%) <> "" THEN GOSUB TOOBIG GOTO INSTALL END IF NEXT i% UIPop 1 GOTO INSTALL ELSEIF sz$ = "PATH" THEN GOTO GETPATH ELSEIF sz$ = "CHK1" THEN RecalcOptFiles APPFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK2" THEN RecalcOptFiles OPTFILES1 SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK3" THEN RecalcOptFiles OPTFILES2 SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "BTN2" THEN GOTO OPTFILES1 ELSEIF sz$ = "BTN3" THEN GOTO OPTFILES2 ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO CUSTINST ELSE GOSUB ASKQUIT GOTO CUSTINST END IF INSTALL: ClearCopyList '*** i% = BitmapCntrlInit() 'AddToBillboardList CUIDLL$, BILLBOARD, "FModelessDlgProc", 1 AddOptFilesToCopyList APPFILES AddOptFilesToCopyList OPTFILES1 AddOptFilesToCopyList OPTFILES2 IF IsFileWritable(MakePath(GetWindowsSysDir(), "test.tmp")) = 1 THEN RemoveFile MakePath(GetWindowsSysDir(), "test.tmp"), cmoForce AddSectionFilesToCopyList "SystemFiles", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir() ELSE AddSectionFilesToCopyList "SystemFiles", GetSymbolValue("STF_SRCDIR"), DEST$ + "\football" ENDIF CreateDir DEST$, cmoNone CopyFilesInCopyList IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN CreateProgmanGroup "Fantasy Software", "", cmoNone ShowProgmanGroup "Fantasy Software", 1, cmoNone CreateProgmanItem "Fantasy Software", "Fantasy Football for Windows", MakePath(DEST$ + "\football","ffw.exe"), "", cmoOverwrite CreateProgmanItem "Fantasy Software", "Technical Notes", "WRITE.EXE " + MakePath(DEST$ + "\football","technote.wri"), "", cmoOverwrite CreateProgmanItem "Fantasy Software", "Read Me", "WRITE.EXE " + MakePath(DEST$ + "\football","readme.wri"), "", cmoOverwrite CreateProgmanItem "Fantasy Software", "License Agreement", "WRITE.EXE " + MakePath(DEST$ + "\football","license.wri"), "", cmoOverwrite CreateProgmanItem "Fantasy Software", "Extension Development", "WRITE.EXE " + MakePath(DEST$ + "\football","extdev.wri"), "", cmoOverwrite result% = WritePrivateProfileString("User", "Path", MakePath(DEST$ + "\football","ffw.exe"), "ffw.ini") result% = WritePrivateProfileString("Messaging", "CheckOnOpen", "1", "ffw.ini") result% = WritePrivateProfileString("Display", "ActionBar", "1", "ffw.ini") result% = WritePrivateProfileString("Display", "UseColor", "1", "ffw.ini") END IF IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN 'CreateProgmanItem "Fantasy Software", "PAS On-Line!", MakePath(DEST$ + "\pasline","pasline.exe"), "", cmoOverwrite END IF IF GetListItem(CHECKSTATES$, OPTFILES2) = "ON" THEN 'CreateProgmanItem "Fantasy Software", "Extension Development Help", "winhelp " + MakePath(DEST$ + "\ext\help","pasext.hlp"), "", cmoOverwrite END IF ' Close the copy disincentive system CloseSystem "AppFiles", "1", DEST$ + "\football", 510, 500 QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = EXITSUCCESS 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("Setup sources were corrupted, contact PAS Software at (206) 788-7568", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) END GETPATH: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN 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$) > 23 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 RecalcPath SetDriveStatus 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 OPTFILES1: SetSymbolValue "RadioDefault", OPT1OPT$ OPT1L1: sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$) newopt$ = GetSymbolValue("ButtonChecked") IF sz$ = "CONTINUE" THEN UIPop 1 IF newopt$ <> OPT1OPT$ THEN OPT1OPT$ = newopt$ RecalcOptFiles OPTFILES1 SetDriveStatus END IF newopt$ = "" GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO OPT1L1 ELSEIF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO OPT1L1 ELSE UIPop 1 newopt$ = "" GOTO CUSTINST END IF OPTFILES2: SetSymbolValue "RadioDefault", OPT2OPT$ OPT2L1: sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$) newopt$ = GetSymbolValue("ButtonChecked") IF sz$ = "CONTINUE" THEN UIPop 1 IF newopt$ <> OPT2OPT$ THEN OPT2OPT$ = newopt$ RecalcOptFiles OPTFILES2 SetDriveStatus END IF newopt$ = "" GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO OPT2L1 ELSEIF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO OPT2L1 ELSE UIPop 1 newopt$ = "" 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 ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Adds the specified option files to the copy list. '** Arguments: '** ftype% - type of files to add, one of the following: '** APPFILES, OPTFILES1, OPTFILES2 '** Returns: '** none. '************************************************************************* SUB AddOptFilesToCopyList (ftype%) STATIC IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN SrcDir$ = GetSymbolValue("STF_SRCDIR") IF ftype% = APPFILES THEN AddSectionFilesToCopyList "AppFiles", SrcDir$, DEST$ + "\FOOTBALL" ELSEIF ftype% = OPTFILES1 THEN '*** Copy to our own path. 'AddSectionFilesToCopyList "ONLINE", SrcDir$, DEST$ + "\PASLINE" 'AddSectionFilesToCopyList "ONLINESYSTEM", SrcDir$, GetWindowsSysDir() ELSEIF ftype% = OPTFILES2 THEN 'AddSectionFilesToCopyList "EXTSAMPLE", SrcDir$, DEST$ + "\EXT\SAMPLE" 'AddSectionFilesToCopyList "EXTOBJ", SrcDir$, DEST$ + "\EXT\LIB" 'AddSectionFilesToCopyList "EXTHEADER", SrcDir$, DEST$ + "\EXT\H" 'AddSectionFilesToCopyList "EXTHELP", SrcDir$, DEST$ + "\EXT\HELP" 'AddSectionKeyFileToCopyList "EXTOBJ", "1", SrcDir$, DEST$ + "\EXT\SAMPLE" END IF SrcDir$ = "" END IF 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: '** APPFILES, OPTFILES1, OPTFILES2 '** Returns: '** none. '************************************************************************* SUB RecalcOptFiles (ftype%) STATIC CursorSave% = ShowWaitCursor() ClearCopyList AddOptFilesToCopyList ftype% fExtra% = 0 IF ftype% = APPFILES THEN ListSym$ = APPNEEDS$ IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN ''Add extra cost to Windows drive for ini/progman, etc. ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 ReplaceListItem EXTRACOSTS$, ndrive%, "10240" fExtra% = 1 END IF ELSEIF ftype% = OPTFILES1 THEN ListSym$ = OPT1NEEDS$ ELSEIF ftype% = OPTFILES2 THEN ListSym$ = OPT2NEEDS$ END IF StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "") cost& = 0 FOR i% = 1 TO 26 STEP 1 cost& = cost& + VAL(GetListItem(ListSym$, i%)) NEXT i% ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K" 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 APPFILES RecalcOptFiles OPTFILES1 RecalcOptFiles OPTFILES2 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 cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) free& = GetFreeSpaceForDrive(drive$) ReplaceListItem DRIVETEXT$, 1, drive$ + ":" ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 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 cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) IF cost& = 0 THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE free& = GetFreeSpaceForDrive(WINDRIVE$) ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":" ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K" END IF END IF END SUB '** '** 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