'$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
