'**************************************************************************
'*                       Anim Pro SetUp
'**************************************************************************

'$DEFINE DEBUG  ''Define for script development/debugging

'$INCLUDE 'setupapi.inc'
'$INCLUDE 'msdetect.inc'

CONST CURVER$= "R1.00"
'' Buttons and Checks

CONST IDB_Install =              2000
CONST IDB_Continue =             2001
CONST IDB_Exit =                 2002

''      Dialog IDs

CONST IDD_AnimProInstall =         101
CONST IDD_Welcome =                102
CONST IDD_ReWelcome =              103
CONST IDD_Insufficient_Memory =    104
CONST IDD_AskQuit =                105
CONST IDD_AppHelp =                106
CONST IDD_Finished =               107
CONST IDD_Update=                  108

''Bitmap ID's
CONST IDBM_BackGrnd = 999
 
''Bitmap ID
CONST LOGO = IDBM_BackGrnd

GLOBAL DEST$        ''Default destination directory.
GLOBAL OPTCUR$      ''Option selection from option dialog.
GLOBAL WinDir$      ''Windows home directory
GLOBAL WinSysDir$   ''Window's System's directory

GLOBAL TempMscuistf$  '' We copy mscuistf.dll over temporary so we know where it is...

REM GLOBAL CURVER$      ''Current version

DECLARE SUB Install
DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
DECLARE FUNCTION VflatdPresent LIB "iniupd.DLL" AS INTEGER
DECLARE fUNCTION ExitWindowsExec  LIB "User" (Exec$, Param$) AS INTEGER

REM   Initialization of global variables and operations
INIT:
    CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
    HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure

    REM SetBitmap CUIDLL$, LOGO
    SetTitle "Animator Studio Setup"

    SrcDir$ = GetSymbolValue("STF_SRCDIR")
    SetSymbolValue "SIZEINI", MakePath ( SrcDir$, "size.ini" )
    SetSymbolValue "SourcePath", SrcDir$
    
    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    WinDir$ = GetWindowsDir()
    WinSysDir$ = GetWindowsSysDir()

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

    DEST$ = "C:\animator"      '' Destination drive string.

'$IFDEF DEBUG
    i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
    WinDrive$ = MID$(GetWindowsDir, 1, 1)
    IF IsDriveValid(WinDrive$) = 0 THEN
        i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
        GOTO QUIT
    END IF
'$ENDIF ''DEBUG

    REM /* Check for previous installation */
    if DoesIniSectionExist ("WIN.INI", "AnimatorStudio") = 0 THEN
      GOTO WELCOME_INSTALL
    ENDIF
      
WELCOME_REINSTALL:
    REM /* Check which components have been installed.  Assume they want to
    REM    those components they didn't install last time.  Load previous
    REM    destination drive. */

    if DoesiniKeyExist ("WIN.INI", "AnimatorStudio", "Location") THEN 
        DEST$= GetiniKeyString("WIN.INI", "AnimatorStudio", "Location")
    ENDIF

    invert%= 0         

    IF DoesiniKeyExist ("WIN.INI", "AnimatorStudio", "Version") THEN
        IF GetiniKeyString("WIN.INI", "AnimatorStudio", "Version") < curver$ THEN
            GOTO update_dlg
        ELSE
            GOTO reinstall_dlg
        END IF
    END IF

 update_dlg:     
    sz$ = UIStartDlg(CUIDLL$, IDD_ReWelcome, "FInfoDlgProc", IDD_AppHelp, HELPPROC$)
    IF sz$ = "CONTINUE" THEN
        UIPop 1
    ELSE
      IF sz$ = "CANCEL" THEN
          GOSUB ASKQUIT
          GOTO  update_dlg
      ELSE
          GOTO  update_dlg
      END IF
    END IF
    GOTO checkcorrupted

 reinstall_dlg:
    sz$ = UIStartDlg(CUIDLL$, IDD_ReWelcome, "FInfoDlgProc", IDD_AppHelp, HELPPROC$)
    IF sz$ = "CONTINUE" THEN
        UIPop 1
    ELSE
      IF sz$ = "CANCEL" THEN
          GOSUB ASKQUIT
          GOTO  reinstall_dlg
      ELSE
          GOTO  reinstall_dlg
      END IF
    END IF

 checkcorrupted:
    REM /* Check if previous installation was interrupted.  If so, assume they
    REM    they want to reinstall those components they tried to install before */
    IF GetIniKeyString("WIN.INI", "AnimatorStudio", "Setup Note")= "Incomplete Installation" THEN
      i%= DoMsgBox("Recommend reinstall all components.  Partial installations can corrupt functioning of Animator Studio", "Last Installation was aborted before completion", MB_OK+MB_TASKMODAL+MB_ICONHAND )
    ENDIF

    GOTO PARAMETERSCREEN
    
WELCOME_INSTALL:
    REM /* No previous installation detected.  Display introductory dialog. */
    
    sz$ = UIStartDlg(CUIDLL$, IDD_Welcome, "FInfoDlgProc", IDD_AppHelp, HELPPROC$)
    IF sz$ <> "CANCEL" THEN
        UIPop 1
    ELSE
        GOSUB ASKQUIT
        GOTO WELCOME_INSTALL
    END IF


PARAMETERSCREEN:
    REM /* This dialog is the main dialog box.  It is passed */
    SetSymbolValue "DestinationDrive", DEST$
    SetSymbolValue "SelectedComponents", OPTCUR$
    SetSymbolValue "VersionNumber", CURVER$
OPTL1:
        
    sz$ = UIStartDlg(CUIDLL$, IDD_AnimProInstall, "FCheckDlgProc", IDD_AppHelp, HELPPROC$)
    DEST$ = GetSymbolValue("DestinationDrive")
    OPTCUR$ = GetSymbolValue("SelectedComponents")
    
    IF sz$ = "INSTALL" THEN
        UIPop(1)
    ELSEIF sz$ = "REACTIVATE" THEN
        GOTO OPTL1
    ELSE
       GOSUB ASKQUIT
       GOTO OPTL1
    END IF

    IF OPTCUR$="NNNNNN" THEN
        i%= DoMsgBox("Nothing to install.", "Error", MB_OK+MB_TASKMODAL+MB_ICONHAND )
        GOTO OPTL1
    ENDIF
     
    REM /* Run install routine.  This copies all of the selected files and
    REM    of the system parameters */
     
    Install
    
    REM /* Run concluding dialog box */

    RESTRT% = RestartListEmpty ()
    Exe$ = WinDir$ + "\_msrstrt.exe"
    Batch$ = WinDir$ + "\_mssetup.bat"
    empty$ = ""
RESTART:
     sz$= UIStartDlg(TempMscuistf$, IDD_Finished, "FInfoDlgProc", IDD_AppHelp, HELPROC$)
     IF sz$ = "CONTINUE" THEN
         I% = ExitWindowsExec (Exe$, empty$)
         IF I% = 0 THEN
            GOTO RESTART
         ELSE
            UIPopAll
         ENDIF
     ELSEIF sz$ = "EXIT" THEN
         UIPopAll
     ELSEIF sz$ = "REACTIVATE" THEN
         GOTO RESTART
     ELSE
         UIPop 1
     ENDIF

     END

QUIT:
    ON ERROR GOTO ERRQUIT

    IF ERR = 0 THEN
        dlg% = EXITSUCCESS
    ELSEIF ERR = STFQUIT THEN
        dlg% = EXITQUIT
    ELSE
        dlg% = EXITFAILURE
    END IF
 
    END

ERRQUIT:
    i% = DoMsgBox("Setup sources were corrupted.  Contact Autodesk's Product Support.", "Error", MB_OK+MB_TASKMODAL+MB_ICONHAND)
    END

BADPATH:
    i%= DoMsgBox("Unable to establish target directory"+ DEST$, "Bad Path", MB_OK+MB_TASKMODAL+MB_ICONHAND )
    RETURN

ASKQUIT:
    sz$ = UIStartDlg(CUIDLL$, IDD_AskQuit, "FQuitDlgProc", 0, "")

    IF sz$ = "CANCEL" THEN
          UIPopAll
          ERROR STFQUIT
    ELSEIF sz$ = "REACTIVATE" THEN
          GOTO ASKQUIT
    ELSE
          UIPop 1
    END IF
    RETURN

'**
'** Purpose:
'**     Builds the copy list and performs all installation operations.
'** Arguments:
'**     none.
'** Returns:
'**     none.
'*************************************************************************
SUB Install STATIC

    SrcDir$ = GetSymbolValue("STF_SRCDIR")
    CreateDir DEST$, cmoNone
    
    OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 1
    WriteToLogFile "----------------------------------------------------------"
    WriteToLogFile "An AutoDesk Inc. Product"
    WriteToLogFile "Animator Studio Installation Record - " + CURVER$ + "'"
    WriteToLogFile "  Destination directory: '" + DEST$ + "'"
    WriteToLogFile ""
      
    ini$= MakePath( GetWindowsDir (), "WIN.INI" )
    animini$= MakePath(DEST$, "ANIMPRO.INI")
    
    TempMscuistf$ = MakePath( DEST$, "mscuistf.dll" )
    CopyFile GetSymbolValue("STF_CWDDIR") + "mscuistf.dll", TempMscuistf$, 0, 0

    CreateIniKeyValue ini$, "AnimatorStudio", "Location", DEST$ , cmoOverwrite
    CreateIniKeyValue ini$, "AnimatorStudio", "Version", CURVER$ , cmoOverwrite
    CreateIniKeyValue ini$, "AnimatorStudio", "Setup Note", "Incomplete Installation", cmoOverwrite

    SetRestartDir WinDir$
    CopyFilesInCopyList

    RemoveIniKey ini$, "AnimatorStudio", "Setup Note", cmoNone

    CreateProgmanGroup "Autodesk Multimedia", "", cmoNone
    ShowProgmanGroup  "Autodesk Multimedia", 1, cmoNone
    IF MID$(OPTCUR$, 1, 1)= "Y" THEN
        CreateProgmanItem "Autodesk Multimedia", "Animator Studio", MakePath(DEST$, "flash.exe"), "" ,cmoOverwrite
    END IF
    IF MID$(OPTCUR$, 2, 1)= "Y" THEN
        CreateProgmanItem "Autodesk Multimedia", "Animator SoundLab", MakePath(DEST$, "soundlab.exe"), "", cmoOverwrite
    END IF
    IF MID$(OPTCUR$, 3, 1)= "Y" THEN
        CreateProgmanItem "Autodesk Multimedia", "Animator Scriptor", MakePath(DEST$, "scriptor.exe"), "", cmoOverwrite
    END IF
    IF MID$(OPTCUR$, 4, 1)= "Y" THEN
        CreateProgmanItem "Autodesk Multimedia", "Animator Player", MakePath(DEST$, "player.exe"), "", cmoOverwrite
    END IF

    REM ************** Window Video .ini setup **************
   WinVidSet:
    IF VflatdPresent() = 0 THEN
       CreateSysIniKeyValue WinDir$ + "system.ini", "386Enh", "device", "dva.386", cmoOverwrite
    END IF
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.IV31", "indeov.drv", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.MRLE", "MSRLE.drv", cmoOverwrite
REM    IF DoesIniKeyExist ( WinDir$ + "system.ini", "Drivers", "VIDC.RT21" ) = 0 THEN
REM       CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.RT21", "indeov.drv", cmoOverwrite
REM    END IF
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.YVU9", "indeov.drv", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "avi", "AVIVideo", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "system.ini", "mci", "AVIVideo", "mciavi.drv", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "WaveMapper", "msacm.drv", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "MSACM.imaadpcm", "imaadpcm.acm", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msacm.drv", "Microsoft Sound Mapper V2.00", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msadpcm.acm", "Microsoft ADPCM Codec V2.00", cmoOverwrite
REM    CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "imaadpcm.acm", "Microsoft IMA ADPCM Codec V2.00", cmoOverwrite

    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.AAS4", "AAS24C.drv", cmoOverwrite
    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.AFLC", "flccodec.drv", cmoOverwrite
    CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.AFLI", "flccodec.drv", cmoOverwrite

    CloseLogFile

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

