home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 41 / PCGAMER41.bin / eng / gpm2 / egpn.mst < prev    next >
Text File  |  1997-01-21  |  14KB  |  464 lines

  1. '' ****************************************************************
  2. ''* GPM.MST - F1 GPM Normal Install Setup Script
  3. ''**************************************************************************
  4.     
  5.     '' Global variables
  6.  
  7.     GLOBAL ExeType$
  8.     GLOBAL Lang$
  9.     GLOBAL SrcMainDir$
  10.     GLOBAL SrcDrive$
  11.     GLOBAL TitleShortName$
  12.     GLOBAL TitleLongName$
  13.     GLOBAL PromptForPath%
  14.     GLOBAL DefaultPath$
  15.     GLOBAL ProgManGroup$
  16.     GLOBAL ProgManItem$
  17.     GLOBAL szTitleDir$
  18.  
  19.     '' WinG globals
  20.     
  21.     GLOBAL DEST$        ''Default destination directory.
  22.     GLOBAL bInstallDVA%
  23.  
  24.     '' '$DEFINE DEBUG
  25.  
  26. '' ****************************************************************
  27. '' ** Setup Variables
  28. '' ****************************************************************
  29.  
  30.     TitleShortName$ = "Grand Prix Manager 2"
  31.     TitleLongName$  = "Grand Prix Manager 2"
  32.     PromptForPath%  = 1              '' we prompt for the install path
  33.     DefaultPath$    = "C:\MPS\GPM2"   '' default install path when prompt is displayed   
  34.     ProgManGroup$   = "MicroProse"  '' program manager group 
  35.     ProgManItem$    = "Grand Prix Manager 2"                      '' program manager item title
  36.     
  37. '***********************************************************************
  38. '** Mainline
  39. '***********************************************************************
  40.  
  41.     GLOBAL CUIDLL$
  42.  
  43.     '' Include files
  44.     '$INCLUDE 'setupapi.inc'
  45.     CUIDLL$ = "mscuistf.dll"  '' Custom UI dll
  46.     '$INCLUDE 'msdetect.inc'   
  47.     
  48.     '' Dialog ID's
  49.     CONST DESTPATH      = 1000
  50.     CONST APPHELP       = 2000
  51.     CONST TOOBIG        = 3000
  52.     CONST BADPATH       = 4000
  53.     CONST SUCCESS       = 5000
  54.     CONST CONT_PH_SETUP = 101
  55.     CONST EXIT_PH_SETUP = 102
  56.  
  57.     '' WinG DLG ID's
  58.     CONST CHECK         = 2500
  59.     CONST EXITSUCCESS   = 700
  60.     CONST EXITFAILURE   = 400
  61.     CONST EXITQUIT      = 600
  62.     
  63.     CONST LOGO = 100   '' bitmap resource id
  64.     
  65.     '' Functions and subroutines
  66.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  67.     DECLARE FUNCTION GetTitleDir (szDefault$) AS STRING
  68.     DECLARE FUNCTION CopyFiles(szTitleDir$) AS INTEGER
  69.     DECLARE SUB ModifyProgramManager
  70.     DECLARE SUB ShowSuccess
  71.     
  72.     '' functions from WinG install
  73.     DECLARE FUNCTION GetRealWindowsSysDir AS STRING
  74.     DECLARE SUB UpdateWinG32 (szOrig$) 
  75.     DECLARE FUNCTION OnWin3x LIB "setuphlp.DLL" AS INTEGER
  76.     DECLARE FUNCTION VflatdPresent LIB "setuphlp.DLL" AS INTEGER
  77.     DECLARE FUNCTION GetRealSystemDir LIB "setuphlp.DLL" (szDir$,cbBuf%) AS INTEGER
  78.     DECLARE FUNCTION IsWin32FileNewer LIB "setuphlp.DLL" (szOrig$,szNew$) AS INTEGER
  79.     DECLARE SUB RenameFilePlease LIB "setuphlp.DLL" (szOrig$,szNew$) 
  80.  
  81.     '' return value displayer for debug purposes
  82.     ''i% = DoMsgBox(STR$(i%), "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  83.  
  84. INIT:
  85.     bInstallDVA% = 0
  86.     
  87.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  88.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  89.  
  90.     '' Set the title and banner bitmap. You must rebuild MSCUISTF.DLL to 
  91.     '' alter the banner bitmap.
  92.     
  93.     SetTitle "Grand Prix Manager 2"
  94.     SetBitmap CUIDLL$, LOGO 
  95.     
  96.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  97.     IF szInf$ = "" THEN
  98.         szInf$ = GetSymbolValue("STF_CWDDIR") + "wing.inf"
  99.     END IF
  100.  
  101.     ReadInfFile szInf$
  102.  
  103. CHECK:
  104.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  105.     SrcDrive$ = MID$(SrcDir$,1,1)
  106.  
  107. ' NON_DEMO  SrcMainDir$ = SrcDrive$+":\GPM2\"
  108.  
  109.         ' FOR DEMO
  110.         SrcMainDir$ = GetSymbolValue("STF_SRCDIR")
  111.  
  112. ' NON_DEMO old SrcDir$ = SrcDrive$+":\GPM2\SYSTEM\"
  113.  
  114.         ' FOR DEMO
  115.         SrcDir$ = GetSymbolValue("STF_SRCDIR")+"SYSTEM\"
  116.  
  117.     DEST$ = GetWindowsSysDir
  118.     AddSectionFilesToCopyList "runtime", SrcDir$, DEST$
  119.     '
  120.     ' only use DVA on Windows 3.x
  121.     '
  122.     IF OnWin3x() = 1 THEN
  123.         AddSectionFilesToCopyList "dva", SrcDir$, DEST$
  124.         IF VflatdPresent() = 0 THEN
  125.         CreateSysIniKeyValue GetWindowsDir + "system.ini", "386Enh", "device", GetWindowsSysDir+"dva.386", cmoOverwrite
  126.         bInstallDVA% = 1
  127.         END IF
  128.     END IF
  129.     
  130.     DEST$ = GetRealWindowsSysDir
  131.     AddSectionFilesToCopyList "wing32", SrcDir$, DEST$
  132.     Dest1$ = MakePath(DEST$,"wing32.dll")
  133.     Dest2$ = MakePath(DEST$,"wing32.xxx")
  134.     RenameFilePlease Dest1$,Dest2$
  135.     CopyFilesInCopyList
  136.     UpdateWinG32 GetRealWindowsSysDir()
  137.  
  138. GPM:
  139.     '' now install GPM files
  140.     
  141.     '' The following statement turns size checking off. Set it to scmOnFatal 
  142.     '' to enable size checking, where Setup will compare the disk file size 
  143.     '' with the INF file size and report an error if they are not the same.
  144.     
  145.     i% = SetSizeCheckMode(scmOff)
  146.     
  147.     '' Read in the INF file.
  148.     
  149.  ReadInfFile SrcMainDir$ + "EGPN.INF"
  150.  
  151.     '' Decide where to put title files
  152.     IF PromptForPath% = 1 THEN
  153.         szTitleDir$ = GetTitleDir(DefaultPath$)
  154.         IF szTitleDir$ = "" THEN
  155.             ERROR STFQUIT
  156.             GOTO QUIT
  157.         ENDIF
  158.     ELSE
  159.         ''szTitleDir$ = GetWindowsDir()
  160.  szTitleDir$ = "C:\MPS\GPM2"
  161.     ENDIF   
  162.  
  163.  ''szTitleDir$=MID$(szTitleDir$,1,3)+"MPS\"+MID$(szTitleDir$,4)
  164.  
  165.     '' add game path direction entry to the gpm ini file
  166.     CreateIniKeyValue GetWindowsDir+"GPM2MICP.INI","GPM_PATHS","GAME",szTitleDir$,cmoOverwrite
  167.     
  168.     Lang$ = GetIniKeyString(GetWindowsDir+"GPM2MICP.INI","GPM_LANGUAGE","TONGUE") 
  169.     
  170.     '' Copy files
  171.     IF CopyFiles(szTitleDir$) = 0 THEN
  172.         GOTO QUIT
  173.     ENDIF
  174.     
  175.     ModifyProgramManager    
  176.     ShowSuccess
  177.     END
  178.  
  179. QUIT:
  180.     ON ERROR GOTO ERRQUIT
  181.  
  182.     IF ERR = 0 THEN
  183.         dlg% = EXITSUCCESS
  184.     ELSEIF ERR = STFQUIT THEN
  185.         dlg% = EXITQUIT
  186.     ELSEIF ERR = EXIT_PH_SETUP THEN
  187.         dlg% = EXIT_PH_SETUP
  188.     ELSE
  189.         dlg% = EXITFAILURE
  190.     END IF
  191.         
  192.     ''i% = DoMsgBox(STR$(ERR)+" "+STR$(dlg%), "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  193.     
  194.     UIPop 1
  195.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfoDlgProc", 0, "")
  196.     END
  197.  
  198. ERRQUIT:
  199.     i% = DoMsgBox("Setup sources were corrupted, call Microprose", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  200.     END
  201.     
  202.  
  203. '*************************************************************************
  204. '** Purpose:
  205. '**     Prompts the user for a path for the title files
  206. '** Arguments:
  207. '**     szDefault$ - default path
  208. '** Returns:
  209. '**     New valid path name, or "" if the user quit.
  210. '*************************************************************************
  211.  
  212. FUNCTION GetTitleDir (szDefault$) STATIC AS STRING
  213.  
  214.     SetSymbolValue "String", TitleShortName$
  215.     SetSymbolValue "EditTextIn", szDefault$
  216.     SetSymbolValue "EditFocus", "ALL"
  217.  
  218.     GETPATH:
  219.  
  220.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, "FHelpDlgProc")
  221.  
  222.     IF sz$ = "CONTINUE" THEN
  223.         szTitleDir$ = GetSymbolValue("EditTextOut")
  224.         IF IsDirWritable(szTitleDir$) = 0 THEN
  225.  
  226.             BADPATH:
  227.  
  228.             sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfoDlgProc", 0, "")
  229.             IF sz$ = "REACTIVATE" THEN
  230.                 GOTO BADPATH
  231.             END IF
  232.             UIPop 1
  233.             GOTO GETPATH
  234.         END IF
  235.         UIPop 1
  236.         CreateDir szTitleDir$, cmoNone
  237.  
  238.     ELSEIF sz$ = "REACTIVATE" THEN
  239.         GOTO GETPATH
  240.     ELSE
  241.         szTitleDir$ = ""
  242.  
  243.     END IF
  244.  
  245.     GetTitleDir = szTitleDir$
  246.  
  247. END FUNCTION
  248.  
  249.  
  250. '*************************************************************************
  251. '** Purpose:
  252. '**     Copies the files in the INF file
  253. '** Arguments:
  254. '**     szTitleDir$ - destination directory for the title files
  255. '** Returns
  256. '**     1 if files were copied, 0 otherwise
  257. '*************************************************************************
  258.  
  259. FUNCTION CopyFiles(szTitleDir$) STATIC AS INTEGER
  260. ''i% = DoMsgBox("Copy Files", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  261.  
  262.     '' Add all of the title files to the copy list
  263.    AddSectionFilesToCopyList "GPM_DIR", SrcMainDir$, szTitleDir$
  264.    AddSectionFilesToCopyList "EDYS_FROM_GPM_DIR", SrcMainDir$, szTitleDir$
  265.    AddSectionFilesToCopyList "PCXS_FROM_GPM_DIR", SrcMainDir$, szTitleDir$
  266.  
  267.    IF Lang$ = "FRENCH" THEN
  268.     AddSectionFilesToCopyList "LANG_SPEC_FILES", SrcMainDir$+"FRENCH", szTitleDir$
  269.    ELSEIF Lang$ = "GERMAN" THEN        
  270.     AddSectionFilesToCopyList "LANG_SPEC_FILES", SrcMainDir$+"GERMAN", szTitleDir$
  271.    ELSE
  272.     AddSectionFilesToCopyList "LANG_SPEC_FILES", SrcMainDir$, szTitleDir$
  273.    ENDIF
  274.    
  275.    CreateDir MakePath(szTitleDir$,"TRACKS"), cmoNone
  276.    AddSectionFilesToCopyList "TRACKS", SrcMainDir$+"TRACKS", MakePath(szTitleDir$,"TRACKS")
  277.  
  278.    CreateDir MakePath(szTitleDir$,"CARS"), cmoNone
  279.    AddSectionFilesToCopyList "CARS", SrcMainDir$+"CARS", MakePath(szTitleDir$,"CARS")
  280.  
  281.    CreateDir MakePath(szTitleDir$,"SPONS"), cmoNone
  282.    AddSectionFilesToCopyList "SPONS", SrcMainDir$+"SPONS", MakePath(szTitleDir$,"SPONS")
  283.  
  284.    CreateDir MakePath(szTitleDir$,"PART"), cmoNone
  285.    AddSectionFilesToCopyList "PART", SrcMainDir$+"PART", MakePath(szTitleDir$,"PART")
  286.  
  287.    CreateDir MakePath(szTitleDir$,"NEWS"), cmoNone
  288.    AddSectionFilesToCopyList "NEWS", SrcMainDir$+"NEWS", MakePath(szTitleDir$,"NEWS")
  289.  
  290.    CreateDir MakePath(szTitleDir$,"TVS"), cmoNone
  291.    AddSectionFilesToCopyList "TVS", SrcMainDir$+"TVS", MakePath(szTitleDir$,"TVS")
  292.  
  293.    CreateDir MakePath(szTitleDir$,"SPCHEXC"), cmoNone
  294.    AddSectionFilesToCopyList "SPCHEXC", SrcMainDir$+"SPCHEXC", MakePath(szTitleDir$,"SPCHEXC")
  295.  
  296.    AddSectionFilesToCopyList "WAL", SrcMainDir$+"WAL", szTitleDir$
  297.  
  298. ''   CreateDir MakePath(szTitleDir$,"SPCHNOR"), cmoNone
  299. ''   AddSectionFilesToCopyList "SPCHNOR", SrcMainDir$+"SPCHNOR", MakePath(szTitleDir$,"SPCHNOR")
  300.  
  301.    CreateDir MakePath(szTitleDir$,"SAVEGAME"), cmoNone
  302.  
  303.  '' Check size
  304.     szExtras$ = "Extra"
  305.     szCosts$ = "Costs"
  306.     szNeededs$ = "Neededs"
  307.     FOR i% = 1 TO 26 STEP 1
  308.         AddListItem szExtras$, "0"
  309.     NEXT i%
  310.     
  311.     '' We assume that VIEWER.INI will take another 4K
  312.     ReplaceListItem szExtras$, ASC(MID$(UCASE$(GetWindowsDir()), 1, 1)) - ASC("A") + 1, STR$(4096)
  313.     
  314.     '' Get amount of space required
  315.     StillNeed& = GetCopyListCost(szExtras$, szCosts$, szNeededs$)
  316.     
  317.     '' Put up a message if there is not enough space
  318.     FOR i% = 1 TO 26 STEP 1
  319.         IF VAL(GetListItem(szNeededs$, i%)) > 0 THEN
  320.     
  321.             SetSymbolValue "String1", LTRIM$(STR$(VAL(GetListItem(szCosts$, i%)) / 1024))
  322.             SetSymbolValue "String2", CHR$(i% - 1 + ASC("A"))
  323.     
  324.             TOOBIG:
  325.     
  326.             sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfoDlgProc", 0, "")
  327.             IF sz$ = "REACTIVATE" THEN
  328.                 GOTO TOOBIG
  329.             END IF
  330.             UIPop 1
  331.             CopyFiles = 0
  332.             GOTO DONTCOPY
  333.         END IF
  334.     NEXT i%
  335.  
  336.     '' Copy the files
  337.     CopyFilesInCopyList
  338.     
  339.     CopyFiles = 1
  340.  
  341.     GOTO END_GOOD
  342.  
  343. DONTCOPY:
  344.     RemoveFile GetWindowsDir+"GPM2MICP.INI",cmoForce
  345.     ERROR 100 '' this will force the default error message
  346.     GOTO FINAL
  347.  
  348. END_GOOD:
  349.     ExeType$ = GetIniKeyString(GetWindowsDir+"GPM2MICP.INI","EXE","TYPE") 
  350.   
  351.     IF ExeType$ = "0" THEN
  352.         RemoveFile szTitleDir$+"\GPM2LNK.EXE",cmoForce
  353.     ELSE
  354.         RemoveFile szTitleDir$+"\GPM2.EXE",cmoForce 
  355.         RenameFile szTitleDir$+"\GPM2LNK.EXE","GPM2.EXE" 
  356.     ENDIF
  357.  
  358. FINAL:
  359.  
  360. END FUNCTION
  361.  
  362. '*************************************************************************
  363. '** Purpose:
  364. '**     Puts up a success dialog
  365. '*************************************************************************
  366.  
  367. SUB ShowSuccess STATIC
  368.  
  369.     SUCCESS:
  370.     
  371.     SetSymbolValue "String1", TitleShortName$
  372.     sz$ = UIStartDlg(CUIDLL$, SUCCESS, "FInfoDlgProc", 0, "")
  373.     IF sz$ = "REACTIVATE" THEN
  374.         GOTO SUCCESS
  375.     END IF
  376.     UIPop 1
  377.     
  378. END SUB
  379.  
  380. '*************************************************************************
  381. '** Purpose:
  382. '**     Creates program manager entries for the title
  383. '*************************************************************************
  384.  
  385. SUB ModifyProgramManager STATIC
  386.  
  387.     '' Create the program manager group
  388.  
  389.     CreateProgmanGroup ProgmanGroup$, "", cmoNone
  390.     ShowProgmanGroup ProgmanGroup$, 1, cmoNone
  391.     CreateProgmanItem ProgmanGroup$, ProgmanItem$, szTitleDir$+"\GPM2.EXE",szTitleDir$+"\GPM.ICO",cmoOverwrite
  392.        '' CreateProgmanItem ProgmanGroup$, "Grand Prix Manager 2 Network Edition", szTitleDir$+"\GPM2LNK.EXE",szTitleDir$+"\GPM2LNK.ICO",cmoOverwrite
  393.     CreateProgmanItem ProgmanGroup$, "ReadMe", szTitleDir$+"\README.WRI",szTitleDir$+"\README.ICO",cmoOverwrite
  394.        '' CreateProgmanItem ProgmanGroup$, "GPM2 Un-Install", SrcMainDir$+"UNINSTAL.EXE",szTitleDir$+"\UNINSTAL.ICO",cmoOverwrite
  395.    
  396. ''CreateProgmanItem ProgmanGroup$, "ReadMe", SrcMainDir$+"README.WRI",szTitleDir$+"\README.ICO",cmoOverwrite
  397.  
  398. END SUB
  399.  
  400. '**
  401. '** Purpose:
  402. '**     Appends a file name to the end of a directory path,
  403. '**     inserting a backslash character as needed.
  404. '** Arguments:
  405. '**     szDir$  - full directory path (with optional ending "\")
  406. '**     szFile$ - filename to append to directory
  407. '** Returns:
  408. '**     Resulting fully qualified path name.
  409. '*************************************************************************
  410. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  411.     IF szDir$ = "" THEN
  412.     MakePath = szFile$
  413.     ELSEIF szFile$ = "" THEN
  414.     MakePath = szDir$
  415.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  416.     MakePath = szDir$ + szFile$
  417.     ELSE
  418.     MakePath = szDir$ + "\" + szFile$
  419.     END IF
  420. END FUNCTION
  421.  
  422.  
  423. FUNCTION GetRealWindowsSysDir STATIC AS STRING
  424.     szBuf$ = string$(260, 32)
  425.     cbBuf% = GetRealSystemDir(szBuf$, 260)
  426.     IF cbBuf% = 0 THEN
  427.     ERROR STFERR
  428.     ELSE
  429.     IF cbBuf% > 259 THEN
  430.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  431.         ERROR STFERR
  432.     END IF
  433.     szBuf$ = RTRIM$(szBuf$)
  434.     IF MID$(szBuf$, 1, 1) = "\" THEN
  435.         szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  436.     ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  437.         szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  438.     END IF
  439.     IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  440.         szBuf$ = szBuf$ + "\"
  441.     END IF
  442.     GetRealWindowsSysDir = szBuf$
  443.     END IF
  444.  
  445.     szBuf$ = ""
  446. END FUNCTION
  447.  
  448. SUB UpdateWinG32 (szOrig$) STATIC 
  449.     '
  450.     ' Here we check the version ourselves of wing32.dll, since 
  451.     ' we can't get version checking for Win32 apps from Win16
  452.     '
  453.     FileNew$ = MakePath(szOrig$, "wing32.dll")
  454.     FileOrig$ = MakePath(szOrig$, "wing32.xxx")
  455.     IF IsWin32FileNewer( FileOrig$, FileNew$ ) THEN
  456.     RemoveFile FileOrig$, cmoForce
  457.     ELSE
  458.     RemoveFile FileNew$, cmoForce           ' get rid of new file
  459.     RenameFilePlease FileOrig$,FileNew$     ' put back old file
  460.     END IF
  461. END SUB
  462.  
  463.  
  464.