'**************************************************************************
'*                  The Rosetta Stone Program Installer                   *
'*                                                                        *
'*            Copyright 1993 - Fairfield Language Technologies            *
'**************************************************************************

'$INCLUDE 'setupapi.inc'
'$INCLUDE 'msdetect.inc'

''$DEFINE DEBUG  ''Define for script development/debugging

''Dialog ID's
CONST WELCOME       = 100
CONST ASKQUIT       = 200
CONST EXITFAILURE   = 400
CONST EXITQUIT      = 600
CONST EXITSUCCESS   = 700
CONST OPTIONS       = 800
CONST APPHELP       = 900
CONST CHECKSIZE     = 1000
CONST HELPSETDEST   = 2400
CONST CHECKLANGS    = 2600
CONST HELPSELECT    = 2700
CONST SETCD         = 2900
CONST HELPSETCD     = 3000
CONST EXITDEMSUCCESS= 3100
CONST TOOBIG        = 6300
CONST BADPATH       = 6400
CONST EXITRESTART   = 4600

''Bitmap ID
CONST LOGO = 1

GLOBAL WINDRIVE$    ''Windows drive letter
GLOBAL DEST$        ''Default destination directory.

GLOBAL STATUSTEXT$  ''Dialog list symbol names
GLOBAL DRIVETEXT$

GLOBAL BIGLIST$     ''List of file cost calc results (boolean)
GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
GLOBAL NEEDS$       ''List of costs per drive

GLOBAL CDLETTER$
GLOBAL CDLIST$

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 "The Rosetta Stone Setup"

    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    IF szInf$ = "" THEN
	szInf$ = GetSymbolValue("STF_CWDDIR") + "ROSETTA.INF"
    END IF
    ReadInfFile szInf$

    WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
    DEST$ = "C:\ROSETTA"

    CDLIST$ = "TheList"
    SetSymbolValue CDLIST$,""
    FOR i% = 1 to 5
	AddListItem CDLIST$, "OFF"
    NEXT i%
    ALLOFF$ = GetSymbolValue(CDLIST$)

    CDLETTER$ = "D:"

    DRIVETEXT$ = "DriveStatusText"
    FOR i% = 1 to 3
	AddListItem DRIVETEXT$, ""
    NEXT i%
    ReplaceListItem DRIVETEXT$, 3, DEST$

    BIGLIST$ = ""
    NEEDS$ = "SpaceNeeds"

    EXTRACOSTS$ = "ExtraCosts"
    FOR i% = 1 to 26 STEP 1
	AddListItem EXTRACOSTS$, "0"
	AddListItem NEEDS$, "0"
    NEXT i%
    ndrive% = ASC(ucase$(WINDRIVE$))-ASC("A")+1
    ReplaceListItem EXTRACOSTS$, ndrive%, "10240"

    AddSectionFilesToCopyList "rosetta", GetSymbolValue("STF_SRCDIR"), DEST$
    AddSectionFilesToCopyList "fonts", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
''    AddSectionFilesToCopyList "setup", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$, "setup")
    AddSectionFilesToCopyList "cds", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$, "cds")
    AddSectionFilesToCopyList "chapters", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$, "chapters")
    AddSectionFilesToCopyList "demtext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\demtext")
    AddSectionFilesToCopyList "engtext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\engtext")
    AddSectionFilesToCopyList "fratext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\fratext")
    AddSectionFilesToCopyList "deutext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\deutext")
    AddSectionFilesToCopyList "esptext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\esptext")

    RecalcPath
    SetDriveStatus

'$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


WELCOME:
    sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
    IF sz$ = "CONTINUE" THEN
	UIPop 1
    ELSE
	GOSUB ASKQUIT
	GOTO WELCOME
    END IF


SETCD:
    SetSymbolValue "EditTextIn", CDLETTER$
SETCDL1:
    sz$ = UIStartDlg(CUIDLL$, SETCD, "FEditDlgProc", HELPSETCD, HELPPROC$)
    CDLETTER$ = GetSymbolValue("EditTextOut")

    IF sz$ = "CONTINUE" THEN
	UIPop 1
    ELSEIF sz$="REACTIVATE" THEN
	GOTO SETCDL1
    ELSEIF sz$="BACK" THEN
	UIPop 1
	GOTO WELCOME
    ELSE
	GOSUB ASKQUIT
	GOTO SETCDL1
    END IF



CHECKSIZE:
    SetSymbolValue "EditTextIn", DEST$
    SetSymbolValue "EditFocus", "END"
CHECKSIZEL1:
    sz$ = UIStartDlg(CUIDLL$, CHECKSIZE, "FCheckSizeDlgProc", HELPSETDEST, HELPPROC$)
    DEST$ = GetSymbolValue("EditTextOut")
    IF sz$ = "CONTINUE" THEN
	RecalcPath
	SetDriveStatus

	IF IsDirWritable(DEST$) = 0 THEN
	    GOSUB BADPATH
	    GOTO CHECKSIZEL1
	END IF

	drive$ = MID$(DEST$, 1, 1)
	ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
	cost& = VAL(GetListItem(NEEDS$, ndrive%))
	free& = GetFreeSpaceForDrive(drive$)
	IF cost& > free& THEN
	    GOSUB TOOBIG
	    GOTO CHECKSIZEL1
	END IF

	UIPop 1
    ELSEIF sz$="REACTIVATE" THEN
	RecalcPath
	SetDriveStatus
	GOTO CHECKSIZEL1
    ELSEIF sz$="BACK" THEN
	UIPop 1
	GOTO SETCD
    ELSE
	GOSUB ASKQUIT
	GOTO CHECKSIZEL1
    END IF


INSTALL:
    SrcDir$ = GetSymbolValue("STF_SRCDIR")
    CreateDir DEST$, cmoNone

    OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
    WriteToLogFile ""
    WriteToLogFile "  User chose as destination directory: '" + DEST$ + "'"

    s$ = MakePath(DEST$,"setup")
    SetRestartDir s$
    
    CopyFilesInCopyList

    CreateIniKeyValue "WIN.INI","fonts","Cyrillic (TrueType)","CYRIL1.FOT",cmoNone
    CreateIniKeyValue "WIN.INI","fonts","Cyrillic Bold (TrueType)","CYRIL2.FOT",cmoNone
	 
    CreateProgmanGroup "The Rosetta Stone", "", cmoNone
    ShowProgmanGroup  "The Rosetta Stone", 1, cmoNone
    CreateProgmanItem "The Rosetta Stone", "The Rosetta Stone", MakePath(DEST$,"rosetta.exe"), MakePath(DEST$,"rosetta.ico"), cmoOverwrite
    CreateProgmanItem "The Rosetta Stone", "Read Me First", "Notepad "+MakePath(DEST$,"readme.txt"), "notepad.exe", cmoOverwrite
    CreateProgmanItem "The Rosetta Stone", "License - Read to Use", "Notepad "+MakePath(DEST$,"license.txt"), "notepad.exe", cmoOverwrite
    CreateProgmanItem "The Rosetta Stone", "A LIRE D'ABORD", "Notepad "+MakePath(DEST$,"a_lire.txt"), "notepad.exe", cmoOverwrite
    CreateProgmanItem "The Rosetta Stone", "ZUERST LESEN", "Notepad "+MakePath(DEST$,"zrst_lsn.txt"), "notepad.exe", cmoOverwrite
    CreateProgmanItem "The Rosetta Stone", "LEER ESTO PRIMERO", "Notepad "+MakePath(DEST$,"leeresto.txt"), "notepad.exe", cmoOverwrite
    CreateProgmanItem "The Rosetta Stone", "Leggimi", "Notepad "+MakePath(DEST$,"leggimi.txt"), "notepad.exe", cmoOverwrite
    ''CreateProgmanItem "The Rosetta Stone", "_", "Notepad "+MakePath(DEST$,"japanese.txt"), "notepad.exe", cmoOverwrite
    ''CreateProgmanItem "The Rosetta Stone", "Chapter Installer", MakePath(DEST$,"setup\_mstest.exe")+" "+MakePath(DEST$,"setup\cdtohd.mst"), MakePath(DEST$,"cdtohd.ico"), cmoOverwrite
    ''CreateProgmanItem "The Rosetta Stone", "Chapter Uninstaller", MakePath(DEST$,"setup\_mstest.exe")+" "+MakePath(DEST$,"setup\hdtonull.mst"), MakePath(DEST$,"hdtonull.ico"), cmoOverwrite

    CreateIniKeyValue MakePath(DEST$,"CHAPTERS\CHAPTERS.INI"), "CD Drive", "CD Drive", CDLETTER, cmoOverwrite
 
    CloseLogFile
    if RestartListEmpty()=0 then
RESTART:
    sz$ = UIStartDlg(CUIDLL$, EXITRESTART, "FQuitDlgProc", 0, "")
     IF sz$ = "EXIT" THEN
	UIPopAll
	GOTO QUIT
     ELSEIF sz$ = "REACTIVATE" THEN
	GOTO RESTART
     ELSE
      UIPop 1
      if ExitExecRestart()=0 then
      else
      end if
     END IF
    else
    end if

QUIT:
    ON ERROR GOTO ERRQUIT

    IF ERR = 0 THEN
	dlg% = EXITDEMSUCCESS
    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, call Fairfield Language Technologies at (703) 432-6166", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
    END


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
	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:
'**     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



'**
'** Purpose:
'**     Recalculates disk space and sets option status info according
'**     to the current destination path.
'** Arguments:
'**     none.
'** Returns:
'**     none.
'*************************************************************************
SUB RecalcPath STATIC
    ClearCopyList
    AddSectionFilesToCopyList "rosetta", GetSymbolValue("STF_SRCDIR"), DEST$
    AddSectionFilesToCopyList "fonts", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
  ''  AddSectionFilesToCopyList "setup", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$, "setup")
    AddSectionFilesToCopyList "cds", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$, "cds")
    AddSectionFilesToCopyList "chapters", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$, "chapters")
    AddSectionFilesToCopyList "demtext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\demtext")
    AddSectionFilesToCopyList "engtext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\engtext")
    AddSectionFilesToCopyList "fratext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\fratext")
    AddSectionFilesToCopyList "deutext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\deutext")
    AddSectionFilesToCopyList "esptext", GetSymbolValue("STF_SRCDIR"), MakePath(DEST$,"text\esptext")

    CursorSave% = ShowWaitCursor()

    FOR i% = 1 to 26
	ReplaceListItem NEEDS$, i%, "0"
    NEXT i%

    StillNeed& = GetCopyListCost(EXTRACOSTS$, NEEDS$, "")

    cost& = 0
    FOR i% = 1 to 26
	cost& = cost& + VAL(GetListItem(NEEDS$, i%))
    NEXT i%

    STATUSTEXT$ = STR$(cost&/1024)+" K, "+STR$(StillNeed&/1024)+" K"

    IF StillNeed&>0 THEN
	BIGLIST$ = "YES"
    ELSE
	BIGLIST$ = ""
    ENDIF

    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(NEEDS$, ndrive%))
    free& = GetFreeSpaceForDrive(drive$)
    ReplaceListItem DRIVETEXT$, 1, STR$(cost& / 1024) + " K"
    ReplaceListItem DRIVETEXT$, 2, STR$(free& / 1024) + " K"

END SUB


