Metropoli BBS
VIEWER: mirascan.mst MODE: TEXT (ASCII)
'**************************************************************************
'*                       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 "MiraScan Driver Setup"

    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    IF szInf$ = "" THEN
        szInf$ = GetSymbolValue("STF_CWDDIR") + "mirascan.INF"
    END IF
    ReadInfFile szInf$

    WINDRIVE$ = GetWindowsDir
    DEST$ = WINDRIVE$ + "TWAIN\mirascan"
    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$ + "\miraaspi.ds"
	IF DoesFileExist(TmpDir$,femExist) = 1 THEN
		RemoveFile TmpDir$,cmoForce
	END IF

	CopyFilesInCopyList
	TmpDir$ = Dest$ + "\Mira_s.ds"
	RenameFile TmpDir$,"miraaspi.ds"
	ClearCopyList

    ELSEIF GetListItem(CHECKOUTSTATES$, EPP_PRGFILES) = "ON" THEN
	AddOptFilesToCopyList EPP_PRGFILES
	TmpDir$ = Dest$ + "\miraaspi.ds"

	IF DoesFileExist(TmpDir$,femExist) = 1 THEN
		RemoveFile TmpDir$,cmoForce
	END IF

	CopyFilesInCopyList
	TmpDir$ = Dest$ + "\Mira_e.ds"
	RenameFile TmpDir$,"miraaspi.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
[ RETURN TO DIRECTORY ]