'************************************************************************** '* MSSetup Toolkit Sample 1 '************************************************************************** '***** One setup disk and only SCSI driver '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' ''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 CHECK = 2500 CONST APPHELP = 900 CONST BADPATH = 6400 ''Bitmap ID CONST LOGO = 1 ''File Types CONST SCSI_PRGFILES = 1 CONST EPP_PRGFILES = 2 CONST HTMLMANUAL = 3 'CONST ASPIFILES = 4 'CONST TWAINFILES = 5 'CONST SCSIFILES = 6 GLOBAL DEST$ ''Default scanner driver directory GLOBAL DEST_MANUAL$ ''MANUAL directory GLOBAL DEST_DOCPATH$ ''Sub directory for HTML and ICON manual GLOBAL WINDRIVE$ ''User's window directory GLOBAL DEST_DTCSCSI$ ''Directory for SCSI files ''Dialog list symbol names GLOBAL CHECKSTATES$ GLOBAL CHECKOUTSTATES$ GLOBAL STATUSTEXT$ GLOBAL DRIVETEXT$ 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 SetBitmap CUIDLL$, LOGO SetTitle "PowerScan Driver Setup" szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "pwrscan.INF" END IF ReadInfFile szInf$ WINDRIVE$ = GetWindowsDir DEST$ = WINDRIVE$ + "TWAIN\pwrscan" DEST_MANUAL$ = DEST$ DEST_DOCPATH = "" DEST_DTCSCSI$ = "C:\SCSIASPI" ''CustInst list symbols CHECKSTATES$ = "CheckItemsIn" CHECKOUTSTATES$ = "CheckItemsOut" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" FOR i% = 1 TO 1 STEP 1 AddListItem CHECKSTATES$, "ON" NEXT i% WELCOME: CHECK: sz$ = UIStartDlg(CUIDLL$, CHECK, "FCheckDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSE GOSUB ASKQUIT GOTO CHECK END IF IF GetListItem(CHECKOUTSTATES$, HTMLMANUAL) = "ON" THEN GOTO GETPATH END IF GOTO INSTALL GETPATH: SetSymbolValue "EditTextIn", DEST_MANUAL$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) DEST_MANUAL$ = GetSymbolValue("EditTextOut") IF sz$ = "CONTINUE" THEN IF IsDirWritable(DEST_MANUAL$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO GETPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO CHECK ELSE GOSUB ASKQUIT GOTO GETPATH END IF INSTALL: ClearCopyList IF GetListItem(CHECKOUTSTATES$, SCSI_PRGFILES) = "ON" THEN AddOptFilesToCopyList SCSI_PRGFILES DEST_DTCSCSI$ = "C:\SCSIASPI" STARTBAT$ = WINDRIVE$ + "system\iosubsys" IF DoesDirExist(STARTBAT$) = 0 THEN CreateDir DEST_DTCSCSI$, cmoNone END IF TmpDir$ = Dest$ + "\power16.ds" IF DoesFileExist(TmpDir$,femExist) = 1 THEN RemoveFile TmpDir$,cmoForce END IF CopyFilesInCopyList TmpDir$ = Dest$ + "\Pwr_s.ds" RenameFile TmpDir$,"power16.ds" ClearCopyList ELSEIF GetListItem(CHECKOUTSTATES$, EPP_PRGFILES) = "ON" THEN AddOptFilesToCopyList EPP_PRGFILES TmpDir$ = Dest$ + "\power16.ds" IF DoesFileExist(TmpDir$,femExist) = 1 THEN RemoveFile TmpDir$,cmoForce END IF CopyFilesInCopyList TmpDir$ = Dest$ + "\Pwr_e.ds" RenameFile TmpDir$,"power16.ds" ClearCopyList END IF IF GetListItem(CHECKOUTSTATES$, HTMLMANUAL) = "ON" THEN AddOptFilesToCopyList HTMLMANUAL CreateDir DEST$, cmoNone DEST_DOCPATH$ = DEST_MANUAL$ + "\HTML" CreateDir DEST_DOCPATH$, cmoNone DEST_DOCPATH$ = DEST_MANUAL$ + "\ICON" CreateDir DEST_DOCPATH$, cmoNone CopyFilesInCopyList END IF 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!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) END BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN 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: '** SCSI_PRGFILES,EPP_PRGFILES, HTMLMANUAL '** Returns: '** none. '************************************************************************* SUB AddOptFilesToCopyList (ftype%) STATIC IF GetListItem(CHECKOUTSTATES$, ftype%) = "ON" THEN SrcDir$ = GetSymbolValue("STF_SRCDIR") IF ftype% = SCSI_PRGFILES THEN STARTBAT$ = WINDRIVE$ + "TWAIN.DLL" IF DoesFileExist(STARTBAT$,femExist) = 0 THEN AddSectionFilesToCopyList "TWAIN_FILES", SrcDir$, WINDRIVE$ END IF STARTBAT$ = WINDRIVE$ + "ttsr.exe" IF DoesFileExist(STARTBAT$,femExist) = 0 THEN AddSectionFilesToCopyList "TTSR_FILES", SrcDir$, WINDRIVE$ END IF AddSectionFilesToCopyList "ASPI_FILES_SCSI", SrcDir$, DEST$ AddSectionFilesToCopyList "WIN_START", SrcDir$, WINDRIVE$ STARTBAT$ = WINDRIVE$ + "system\iosubsys" IF DoesDirExist(STARTBAT$) = 0 THEN AddSectionFilesToCopyList "SCSIASPI", SrcDir$, DEST_DTCSCSI$ END IF ELSEIF ftype% = EPP_PRGFILES THEN STARTBAT$ = WINDRIVE$ + "TWAIN.DLL" IF DoesFileExist(STARTBAT$,femExist) = 0 THEN AddSectionFilesToCopyList "TWAIN_FILES", SrcDir$, WINDRIVE$ END IF AddSectionFilesToCopyList "ASPI_FILES_EPP", SrcDir$, DEST$ WINSYSTEM$ = WINDRIVE$ + "system" AddSectionFilesToCopyList "EPPASPI", SrcDir$, WINSYSTEM$ WINSYSTEMFILES$ = WINSYSTEM$ + "\eppscsi.386" SYSINIDIR$ = WINDRIVE$ + "system.ini" SECTION$ = "386ENH" KEYNAME$ = "DEVICE" CreateSysIniKeyValue SYSINIDIR$, SECTION$, KEYNAME$, WINSYSTEMFILES$, cmoNone ELSEIF ftype% = HTMLMANUAL THEN AddSectionFilesToCopyList "ASPI_FILES", SrcDir$, DEST_MANUAL$ DEST_DOCPATH$ = DEST_MANUAL$ + "\HTML" AddSectionFilesToCopyList "HTML_MANUAL", SrcDir$, DEST_DOCPATH$ DEST_DOCPATH$ = DEST_MANUAL$ + "\ICON" AddSectionFilesToCopyList "ICON_MANUAL", SrcDir$, DEST_DOCPATH$ ' ELSEIF ftype% = SCSIFILES THEN ' AddSectionFilesToCopyList "DTCSCSI", SrcDir$, DEST_DTCSCSI$ 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: '** SCSI_PRGFILES,EPP_PRGFILES, HTMLMANUAL '** Returns: '** none. '************************************************************************* SUB RecalcOptFiles (ftype%) STATIC CursorSave% = ShowWaitCursor() ClearCopyList AddOptFilesToCopyList ftype% 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 SCSI_PRGFILES RecalcOptFiles EPP_PRGFILES RecalcOptFiles HTMLMANUAL 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