home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer 3.8 / 1997-11_Disc_3.8.bin / DKMAGDEM / KEEPER / WinSetup / English / SETUP.RUL < prev    next >
Text File  |  1997-08-05  |  22KB  |  654 lines

  1. // Dungeon Keeper Install Shield 3 installation script
  2. // RReed    Feb 22,'97
  3. // Note: Localization taken from the registery
  4.  
  5. declare
  6.  
  7. // IMPORTANT GAME STUFF
  8.     #define    COMPANY_NAME            "Bullfrog Productions Ltd"
  9.     #define    PRODUCT_NAME            "Dungeon Keeper Demo"
  10.     #define    PRODUCT_VERSION            "1.0"
  11.     #define    PRODUCT_KEY                "Keeper Demo"
  12.     #define    DEINSTALL_KEY            "Keeper Demo"
  13.     #define    DEFAULT_PATH            "\\Program Files\\Bullfrog\\Keeper Demo\\"
  14.     #define    SETSOUND_PATH            "\\Program Files\\Bullfrog\\"
  15.     #define    CONFIG_FILENAME            "Keeper.Cfg"
  16.     #define    LANGUAGE_ID                "ENG"
  17.     #define    EXE_95                "keeper95.exe"
  18. //    #define    EXE_95                "keeper.exe"     //Make it copy DOS exe for now
  19.     #define    COPY_SAVE                "Creating game save directory..."
  20.  
  21.     #define    FILESET_NAME            "THE_FILES"
  22.  
  23. // DIRECT X STUFF
  24.     #define    DIRECTX_LICENSE_FILE        "DXLicens.txt"
  25.  
  26. // SPACE REQUIRED STUFF
  27.     #define    MINIMAL_INSTALL_SPACE        10000000
  28.     #define    TYPICAL_INSTALL_SPACE        25000000
  29.     #define    FULL_INSTALL_SPACE        45000000
  30.     #define    DIRECTX_SPACE            10000000
  31.     #define    MINIMAL_INSTALL            "Minimal"
  32.     #define    TYPICAL_INSTALL            "Typical"
  33.     #define    FULL_INSTALL            "Full"
  34.  
  35. // GLOBAL VARIABLES
  36.  
  37.     STRING    targetDir;
  38.     STRING    directXRedist;
  39.     STRING    AWE32Redist;
  40.     STRING    components;
  41.     STRING    uninstLog;
  42.     STRING    install_type;
  43.     NUMBER    file_handle;
  44.     STRING    scratch;
  45.     BOOL    needReboot;
  46.     STRING    installer_disk_root;
  47.     NUMBER    temp;
  48.     STRING    AWE32Exists;
  49.  
  50. // Localized strings
  51.     STRING    sBackgroundCaption;
  52.     STRING    sDoneText;
  53.     STRING    sInstallComplete;
  54.     STRING    sMinimalInstall;
  55.     STRING    sTypicalInstall;
  56.     STRING    sFullInstall;
  57.     STRING    sSoundSetup;
  58.     STRING    sWhichInstall;
  59.     STRING    sAskDirectX;
  60.     STRING    sAskAWE32;
  61.     STRING    sBadOSVersion;
  62.     STRING    sNoCDROM;
  63.     STRING    sHas386Proc;
  64.     STRING    sNoDirectXSpace;
  65.     STRING    sNoInstallSpace;
  66.     STRING    sRebootText;
  67.     STRING    sMiscFileError;
  68.     STRING    sDirectXLicenseTitle;
  69.     STRING    sDirectXLicenseMsg;
  70.     STRING    sDirectXLicenseQuestion;
  71.     STRING    sCopyExe;
  72.     STRING    sCopyData;
  73.     STRING    sCopySound;
  74.     #define    DONE_TEXT                "Dungeon Keeper Demo has been successfully installed.\nYou can launch it from the Windows Start menu."
  75.  
  76. // FUNCTIONS
  77.     prototype    InitStrings();
  78.     prototype    SetupScreen();
  79.     prototype    CheckSystem();
  80.     prototype    WelcomeStuff();
  81.     prototype    InstallDirectX();
  82.     prototype    InstallAWE32();
  83.     prototype    ChooseInstallType();
  84.     prototype    SetTargetDirectory();
  85.     prototype    SetupFileSetAndRegistry();
  86.     prototype    TransferFiles();
  87.     prototype    CreateConfigFile();
  88.     prototype    AddFolderIcons();
  89.     prototype    FinalStuff();
  90.  
  91.     #include    "sddialog.h"
  92.  
  93. //--------------------------------------------------------------------------------------------------
  94. //--------------------------------------------------------------------------------------------------
  95. //--------------------------------------------------------------------------------------------------
  96. //--------------------------------------------------------------------------------------------------
  97.  
  98. program
  99.     StartHere:
  100.         Disable( BACKGROUND );
  101.         Disable( BACKBUTTON );
  102.         Enable( DIALOGCACHE );
  103.  
  104.         // This is what we're installing!
  105.         InstallationInfo(COMPANY_NAME, PRODUCT_NAME, PRODUCT_VERSION, PRODUCT_KEY);
  106.  
  107.         directXRedist = SRCDIR ^ "..\\Redist\\";
  108.         AWE32Redist = SRCDIR ^ "..\\Redist\\Creative\\";
  109.  
  110.         InitStrings();
  111.         SetupScreen();
  112.         CheckSystem();
  113.  
  114.     WelcomeDialog:
  115.         WelcomeStuff();
  116.         InstallDirectX();
  117. //        InstallAWE32();
  118.  
  119.     ChooseInstall:
  120. //        if ( ChooseInstallType() = BACK) then
  121. //            goto WelcomeDialog;
  122. //        endif;
  123.  
  124.     SetTargetDir:
  125.         if (SetTargetDirectory() = BACK) then
  126.             goto ChooseInstall;
  127.         endif;
  128.  
  129.         SetupFileSetAndRegistry();
  130.         if (TransferFiles() = BACK) then
  131.             goto ChooseInstall;
  132.         endif;
  133.  
  134. //        CreateConfigFile();
  135.         AddFolderIcons();
  136.         FinalStuff();
  137. exit;
  138.  
  139. //--------------------------------------------------------------------------------------------------
  140. //--------------------------------------------------------------------------------------------------
  141. //--------------------------------------------------------------------------------------------------
  142. //--------------------------------------------------------------------------------------------------
  143.         
  144. function    InitStrings()
  145.     LIST    textList;
  146. begin
  147.     textList = ListCreate(STRINGLIST);
  148.     ListReadFromFile(textList, SRCDIR ^ "iText.txt");
  149.  
  150.     ListGetFirstString(textList, sBackgroundCaption);
  151.     ListGetNextString(textList, sDoneText);
  152.     ListGetNextString(textList, sInstallComplete);
  153.     ListGetNextString(textList, sMinimalInstall);
  154.     ListGetNextString(textList, sTypicalInstall);
  155.     ListGetNextString(textList, sFullInstall);
  156.     ListGetNextString(textList, sSoundSetup);
  157.     ListGetNextString(textList, sWhichInstall);
  158.     ListGetNextString(textList, sAskDirectX);
  159.     ListGetNextString(textList, sBadOSVersion);
  160.     ListGetNextString(textList, sNoCDROM);
  161.     ListGetNextString(textList, sHas386Proc);
  162.     ListGetNextString(textList, sNoDirectXSpace);
  163.     ListGetNextString(textList, sNoInstallSpace);
  164.     ListGetNextString(textList, sRebootText);
  165.     ListGetNextString(textList, sMiscFileError);
  166.     ListGetNextString(textList, sDirectXLicenseTitle);
  167.     ListGetNextString(textList, sDirectXLicenseMsg);
  168.     ListGetNextString(textList, sDirectXLicenseQuestion);
  169.     ListGetNextString(textList, sCopyExe);
  170.     ListGetNextString(textList, sCopyData);
  171.     ListGetNextString(textList, sCopySound);
  172.     ListGetNextString(textList, sAskAWE32);
  173.     //ListGetNextString(textList, );
  174.     ListDestroy ( textList );
  175. end;
  176.  
  177.  
  178. //--------------------------------------------------------------------------------------------------
  179.  
  180. function    SetupScreen()
  181.     STRING    backBmp;
  182. begin
  183.     Enable(FULLWINDOWMODE);
  184.     Enable(INDVFILESTATUS);
  185.     Enable(BITMAP256COLORS);
  186.  
  187.     SetTitle(sBackgroundCaption, 24, WHITE);
  188.     backBmp = SRCDIR ^ "..\\art\\back.bmp";
  189.     PlaceBitmap ( backBmp, 0, CENTERED, CENTERED, CENTERED );
  190.     SetColor(BACKGROUND, RGB(0,0,0));
  191. //    SetColor(BACKGROUND, BK_RED );
  192. //    SetColor(STATUSBAR, RED );
  193.  
  194.     Enable( BACKGROUND );
  195.  
  196.     Delay( 2 );
  197. end;
  198.  
  199. //--------------------------------------------------------------------------------------------------
  200.  
  201. function    CheckSystem()
  202.     NUMBER    nresult;
  203.     STRING    sresult;
  204. begin
  205.     // Check some basic system requirements
  206.     GetSystemInfo(OS , nresult , sresult);
  207.     if ( nresult != IS_WINDOWSNT && nresult != IS_WINDOWS95 ) then
  208.         MessageBox( sBadOSVersion , SEVERE );
  209.         exit;
  210.     endif;
  211.     if ( nresult = IS_WINDOWSNT ) then
  212.         GetSystemInfo( OSMAJOR , nresult , sresult );
  213.         if ( nresult < 4 ) then
  214.             MessageBox( sBadOSVersion , SEVERE );
  215.             exit;
  216.         endif;
  217.     endif;
  218.     GetSystemInfo( CDROM , nresult , sresult );
  219.     if ( nresult = FALSE ) then
  220.         MessageBox( sNoCDROM , SEVERE );
  221.         exit;
  222.     endif;
  223.     GetSystemInfo( CPU , nresult , sresult );
  224.     if ( nresult = IS_386 ) then
  225.         MessageBox( sHas386Proc , SEVERE );
  226.         exit;
  227.     endif;
  228. end;
  229.  
  230. //--------------------------------------------------------------------------------------------------
  231.  
  232. function    WelcomeStuff()
  233. begin
  234.     // Create a Welcome dialog.
  235.     Disable( BACKBUTTON );
  236.     Welcome( "", 0 );
  237.     Enable( BACKBUTTON );
  238. end;
  239.  
  240. //--------------------------------------------------------------------------------------------------
  241.  
  242. function    InstallDirectX()
  243. begin
  244.     // Install DirectX
  245.     if ( AskYesNo( sAskDirectX , YES ) = YES ) then
  246.         if ( GetDiskSpace( WINDISK ) < DIRECTX_SPACE ) then
  247.             MessageBox( sNoDirectXSpace , SEVERE );
  248.             exit;
  249.         endif;
  250.         // Ask about the DirectX licence agreement
  251.         Disable( BACKBUTTON );
  252.         SdLicense( sDirectXLicenseTitle , sDirectXLicenseMsg , sDirectXLicenseQuestion , SRCDIR ^ DIRECTX_LICENSE_FILE );
  253.         Enable( BACKBUTTON );
  254.         LaunchAppAndWait( directXRedist ^ "InstDX.exe" , "" , WAIT ); 
  255.         needReboot = TRUE;
  256.     endif;
  257. end;
  258.  
  259. //--------------------------------------------------------------------------------------------------
  260.  
  261. function    InstallAWE32()
  262.     NUMBER    type, lang, length, retVal;
  263.     STRING    regEntry;
  264. begin
  265.     AWE32Exists = "1";
  266.     // Check AWE32 exists
  267.     LaunchAppAndWait( AWE32Redist ^ "ctdetect.exe" , "" , WAIT ); 
  268.  
  269.     RegDBSetDefaultRoot(HKEY_CURRENT_USER);
  270.  
  271.     if (RegDBGetKeyValueEx("\\Software\\Bullfrog Productions Ltd\\Audio", "Awe32Detected", type, regEntry, length) = 0) then
  272.  
  273.         // read the language set from the registry
  274.         if (StrCompare(regEntry, AWE32Exists) = 0) then
  275.             if ( AskYesNo( sAskAWE32 , YES ) = YES ) then
  276.             LaunchAppAndWait( AWE32Redist ^ "upddrv95.exe" , "" , WAIT ); 
  277.             needReboot = TRUE;
  278.             endif;
  279.         endif;
  280.     endif;
  281. end;
  282.  
  283. //--------------------------------------------------------------------------------------------------
  284.  
  285. function    ChooseInstallType()
  286. begin
  287.     // Choose which kind of installation
  288.     components = "Keeper";
  289.     ComponentAddItem( components , sMinimalInstall , MINIMAL_INSTALL_SPACE, FALSE );
  290.     ComponentAddItem( components , sTypicalInstall , TYPICAL_INSTALL_SPACE, TRUE );
  291.     ComponentAddItem( components , sFullInstall , FULL_INSTALL_SPACE, FALSE );
  292.  
  293.     return    SdAskOptions( "" , sWhichInstall , "" , "" , components , EXCLUSIVE );
  294. end;
  295.  
  296. //--------------------------------------------------------------------------------------------------
  297.  
  298. function    SetTargetDirectory()
  299. NUMBER    retVal;
  300. begin
  301.     // Ask user for target directory...
  302.     targetDir = TARGETDISK ^ DEFAULT_PATH;
  303.     retVal = AskDestPath( "" , "" , targetDir , 0 );
  304.  
  305.     // ...then check disk space for the install
  306.     if (retVal = NEXT) then
  307.         if ( ComponentIsItemSelected( components , sMinimalInstall ) ) then
  308.             if ( GetDiskSpace( targetDir ) < MINIMAL_INSTALL_SPACE ) then
  309.                 MessageBox( sNoInstallSpace , WARNING );
  310.                 retVal = BACK;
  311.             endif;
  312.         endif; 
  313.         if ( ComponentIsItemSelected( components , sTypicalInstall ) ) then
  314.             if ( GetDiskSpace( targetDir ) < TYPICAL_INSTALL_SPACE ) then
  315.                 MessageBox( sNoInstallSpace , WARNING );
  316.                 retVal = BACK;
  317.             endif;
  318.         endif; 
  319.         if ( ComponentIsItemSelected( components , sFullInstall ) ) then
  320.             if ( GetDiskSpace( targetDir ) < FULL_INSTALL_SPACE ) then
  321.                 MessageBox( sNoInstallSpace , WARNING );
  322.                 retVal = BACK;
  323.             endif;
  324.         endif; 
  325.     endif;
  326.  
  327.     return    retVal;
  328. end;
  329.  
  330. //--------------------------------------------------------------------------------------------------
  331.  
  332. function    SetupFileSetAndRegistry()
  333.     LIST    copyList;
  334.     STRING    copyString;
  335. begin
  336. //    // Set registry keys
  337. //    RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
  338. //    RegDBSetItem( REGDB_APPPATH , targetDir );
  339. //    RegDBSetItem( REGDB_APPPATH_DEFAULT , targetDir ^ EXE_95 );
  340.     
  341.     // Define the file set
  342.     FileSetBeginDefine(FILESET_NAME);
  343.  
  344.     StatusUpdate(ON, 100);
  345.     SetStatusWindow(-1 , sCopyExe );
  346.     FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper" );
  347.  
  348. //SprintfBox (INFORMATION, "Source Directory is:", "%s", SRCDIR ^ "..\\..\\..\\Keeper");
  349.  
  350.     TARGETDIR = targetDir;
  351.     CopyFile("KEEPER95.EXE", "KEEPER95.EXE");
  352.     CopyFile("MSS32.DLL", "MSS32.DLL");
  353.     CopyFile("DSETUP16.DLL", "DSETUP16.DLL");
  354.     CopyFile("DSETUP.DLL", "DSETUP.DLL");
  355.     CopyFile("SMACKW32.DLL", "SMACKW32.DLL");
  356.     CopyFile("WSND7R.DLL", "WSND7R.DLL");
  357.  
  358. //------------------------------------------
  359.     // Let's copy the sound files
  360.  
  361.     SetStatusWindow(-1 , sCopySound );
  362.     FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\sound" );
  363.     
  364.     copyList = ListCreate(STRINGLIST);
  365.     ListReadFromFile(copyList, SRCDIR ^ "listsnd.txt");
  366.     
  367.     TARGETDIR = targetDir ^ "sound\\";
  368.     temp = ListGetFirstString(copyList, copyString);
  369. //SprintfBox (INFORMATION, "Copy String", "The current copyString is: %s", copyString);
  370.     while ( temp = 0 )
  371.         CopyFile(copyString, copyString);    
  372.         temp = ListGetNextString(copyList, copyString);
  373. //        SprintfBox (INFORMATION, "Copy String", "The current copyString is: %s", copyString);
  374.     endwhile;
  375.     ListDestroy ( copyList );    
  376. //------------------------------------------
  377.     //Now the atlas sound files
  378. //    FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\sound\\atlas\\english" );
  379.  
  380. //SprintfBox (INFORMATION, "Atlas FileSetRoot", "%s", SRCDIR );
  381.  
  382. //    copyList = ListCreate(STRINGLIST);
  383. //    ListReadFromFile(copyList, SRCDIR ^ "listatla.txt");
  384.     
  385. //    TARGETDIR = targetDir ^ "sound\\atlas\\";
  386. //    temp = ListGetFirstString(copyList, copyString);
  387. //    while ( temp = 0 )
  388. //SprintfBox ( INFORMATION, "CopyString", "%s", copyString);
  389. //        CopyFile(copyString, copyString);
  390. //        temp = ListGetNextString(copyList, copyString);    
  391. //    endwhile;
  392. //    ListDestroy ( copyList );    
  393.     
  394. //------------------------------------------
  395.     //Now the localised speech file
  396.     FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\sound\\speech\\english" );
  397.  
  398.     TARGETDIR = targetDir ^ "sound\\";
  399.     CopyFile("speech.dat", "speech.dat");
  400.  
  401. //------------------------------------------
  402.     //Now the main data files
  403.     SetStatusWindow(-1 , sCopyData );
  404.     FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\data" );
  405.  
  406.     copyList = ListCreate(STRINGLIST);
  407.     ListReadFromFile(copyList, SRCDIR ^ "listdat.txt");
  408.     
  409.     TARGETDIR = targetDir ^ "data\\";
  410.     temp = ListGetFirstString(copyList, copyString);
  411.     while ( temp = 0 )
  412.         CopyFile(copyString, copyString);
  413.         temp = ListGetNextString(copyList, copyString);    
  414.     endwhile;
  415.     ListDestroy ( copyList );    
  416.  
  417. //------------------------------------------
  418.     //Now the localised text file
  419.     SetStatusWindow(-1 , sCopyData );
  420.     FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\data\\english" );
  421.  
  422.     TARGETDIR = targetDir ^ "data\\";
  423.     CopyFile("text.dat", "text.dat");
  424.  
  425. //------------------------------------------
  426.     //Now the localised readme file
  427. //    FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\Readme\\English" );
  428.  
  429. //    TARGETDIR = targetDir;
  430. //    CopyFile("readme.txt", "readme.txt");
  431.  
  432. //------------------------------------------
  433.     //Now the ldata files
  434.     FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\Ldata" );
  435.  
  436. //SprintfBox (INFORMATION, "Source Directory is:", "%s", SRCDIR ^ "..\\..\\..\\Keeper");
  437.  
  438.     TARGETDIR = targetDir ^ "Ldata\\";
  439.     CopyFile("FRONT.PAL",    "FRONT.PAL");
  440.     CopyFile("FRONT.RAW",    "FRONT.RAW");
  441.     CopyFile("FRONTBIT.DAT", "FRONTBIT.DAT");
  442.     CopyFile("FRONTBIT.TAB", "FRONTBIT.TAB");
  443.     CopyFile("FRONTFT1.DAT", "FRONTFT1.DAT");
  444.     CopyFile("FRONTFT1.TAB", "FRONTFT1.TAB");
  445.     CopyFile("FRONTFT2.DAT", "FRONTFT2.DAT");
  446.     CopyFile("FRONTFT2.TAB", "FRONTFT2.TAB");
  447.     CopyFile("FRONTFT3.DAT", "FRONTFT3.DAT");
  448.     CopyFile("FRONTFT3.TAB", "FRONTFT3.TAB");
  449.     CopyFile("FRONTFT4.DAT", "FRONTFT4.DAT");
  450.     CopyFile("FRONTFT4.TAB", "FRONTFT4.TAB");
  451.     CopyFile("HISCORES.DAT", "HISCORES.DAT");
  452.     CopyFile("INTROMIX.SMK", "INTROMIX.SMK");
  453.     CopyFile("LOADING.PAL",  "LOADING.PAL");
  454.     CopyFile("LOADING.RAW",  "LOADING.RAW");
  455.  
  456. //------------------------------------------
  457.     //Now the level files
  458.     FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\Levels" );
  459.  
  460.     TARGETDIR = targetDir ^ "Levels\\";
  461.     CopyFile("LEVELS.TXT",    "LEVELS.TXT");
  462.     CopyFile("MAP00001.ANM", "MAP00001.ANM");
  463.     CopyFile("MAP00001.APT", "MAP00001.APT");
  464.     CopyFile("MAP00001.BAK", "MAP00001.BAK");
  465.     CopyFile("MAP00001.CEI", "MAP00001.CEI");
  466.     CopyFile("MAP00001.CLM", "MAP00001.CLM");
  467.     CopyFile("MAP00001.CUB", "MAP00001.CUB");
  468.     CopyFile("MAP00001.DAT", "MAP00001.DAT");
  469.     CopyFile("MAP00001.DOR", "MAP00001.DOR");
  470.     CopyFile("MAP00001.EFF", "MAP00001.EFF");
  471.     CopyFile("MAP00001.ERR", "MAP00001.ERR");
  472.     CopyFile("MAP00001.FLG", "MAP00001.FLG");
  473.     CopyFile("MAP00001.INF", "MAP00001.INF");
  474.     CopyFile("MAP00001.LGT", "MAP00001.LGT");
  475.     CopyFile("MAP00001.OLD", "MAP00001.OLD");
  476.     CopyFile("MAP00001.ORI", "MAP00001.ORI");
  477.     CopyFile("MAP00001.OWN", "MAP00001.OWN");
  478.     CopyFile("MAP00001.ROM", "MAP00001.ROM");
  479.     CopyFile("MAP00001.SLB", "MAP00001.SLB");
  480.     CopyFile("MAP00001.SWT", "MAP00001.SWT");
  481.     CopyFile("MAP00001.TMN", "MAP00001.TMN");
  482.     CopyFile("MAP00001.TNG", "MAP00001.TNG");
  483.     CopyFile("MAP00001.TXT", "MAP00001.TXT");
  484.     CopyFile("MAP00001.VSN", "MAP00001.VSN");
  485.     CopyFile("MAP00001.WIB", "MAP00001.WIB");
  486.     CopyFile("MAP00001.WLB", "MAP00001.WLB");
  487.     CopyFile("MAP00001.ZON", "MAP00001.ZON");
  488.  
  489. //------------------------------------------
  490.     // Save
  491. //    SetStatusWindow( -1 , COPY_SAVE );
  492. //    CreateDir ( targetDir ^ "Save" );
  493. //    FileSetRoot( "FileSet" , SRCDIR );
  494. //    TARGETDIR = targetDir ^ "Save\\";
  495. //    CopyFile( "HiScore.dat" , "HiScore.dat" );
  496.  
  497. //------------------------------------------
  498.     //SetStatusWindow(-1 , sCopySound );
  499.     //FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\sound" );
  500.     //TARGETDIR = targetDir ^ "sound\\";
  501.     //XCopyFile("*.*", "", INCLUDE_SUBDIR);
  502.  
  503.     //SetStatusWindow(-1 , sCopyData );
  504.     //FileSetRoot( FILESET_NAME , SRCDIR ^ "..\\..\\..\\Keeper\\data" );
  505.     //TARGETDIR = targetDir ^ "data\\";
  506.     //XCopyFile("*.*", "", INCLUDE_SUBDIR);
  507.  
  508.     FileSetRoot( FILESET_NAME , "" );
  509.  
  510.     FileSetEndDefine(FILESET_NAME);
  511. end;
  512.  
  513. //--------------------------------------------------------------------------------------------------
  514.  
  515. function    TransferFiles()
  516. NUMBER    retVal;
  517. NUMBER    blah;            
  518. begin
  519.     retVal = NEXT;
  520.     // Do all the file copying
  521.  
  522.     // Prepare InstallShield to record deinstallation information.
  523.     DeinstallStart( "C:\\WINDOWS\\SYSTEM\\KEEPER" , uninstLog , DEINSTALL_KEY, 0 );
  524.     blah = RegDBSetItem( REGDB_UNINSTALL_NAME, PRODUCT_NAME );
  525. //SprintfBox ( INFORMATION, "Uninstall return", "Install file: %s   return: %d", PRODUCT_NAME, blah );
  526.  
  527.     // Set up progress indicator and information gauge.
  528.     Disable( DIALOGCACHE );
  529.     Enable( STATUSDLG );
  530.     Enable( STATUS );
  531.  
  532.     SetStatusWindow( 1 , " " ); 
  533.     StatusUpdate( OFF , 1 );
  534.  
  535.     // Install the files
  536.     SetStatusWindow( 1 , " " );
  537.     
  538.  
  539. //-------------------------
  540.  
  541. StatusUpdate( ON , 100 );
  542.     blah = FileSetPerformEz( FILESET_NAME , 0 );
  543.     if ( blah < 0 ) then
  544.         if ( blah = -1 ) then
  545.         SprintfBox (INFORMATION, "Error", "Unknown error.");
  546.         endif;
  547.         if ( blah = -3 ) then
  548.         SprintfBox (INFORMATION, "Error", "Unable to open output file. Restart your machine, then try installing again.");
  549.         endif;
  550.         if ( blah = -4 ) then
  551.         SprintfBox (INFORMATION, "Error", "Unable to write to file. Make sure the correct source disk is chosen.");
  552.         endif;
  553.         if ( blah = -6 ) then
  554.         SprintfBox (INFORMATION, "Error", "Memory allocation error.Close other applications, then try installing again.");
  555.         endif;
  556.         if ( blah = -9 ) then
  557.         SprintfBox (INFORMATION, "Error", "Source and target directories conflict.Make sure that target directory is not the same as the source directory (unless this is intended).");
  558.         endif;
  559.         if ( blah = -27 ) then
  560.         SprintfBox (INFORMATION, "Error", "Unable to create directory. Check the content of your hard drive, and your access privileges to the drive and directory.");
  561.         endif;
  562.         if ( blah = -38 ) then
  563.         SprintfBox (INFORMATION, "Error", "Not enough disk space on target drive.Free disk space on target drive, then try installing again.");
  564.         endif;
  565.         if ( blah = -46 ) then
  566.         SprintfBox (INFORMATION, "Error", "Target file is read-only and cannot be overwritten.");
  567.         endif;
  568.         SprintfBox (INFORMATION, "Error", "There has been an error!");
  569.          
  570.         retVal = BACK;
  571.     endif;
  572. //    if ( FileSetPerformEz( FILESET_NAME , 0 ) != 0 ) then
  573. //        MessageBox( sMiscFileError , SEVERE );    
  574. //        retVal = BACK;
  575. //    endif;
  576.  
  577.     return    retVal;
  578. end;
  579.  
  580. //--------------------------------------------------------------------------------------------------
  581. //Create the config file
  582. function    CreateConfigFile()
  583. begin
  584. //    if ( ComponentIsItemSelected ( components, MINIMAL_INSTALL )) then
  585. //        install_type = "MIN";
  586. //    else if ( ComponentIsItemSelected ( components, TYPICAL_INSTALL )) then
  587. //        install_type = "MED";
  588. //    else if ( ComponentIsItemSelected ( components, FULL_INSTALL )) then
  589.         install_type = "MAX";
  590. //    endif;
  591.  
  592.     installer_disk_root = SRCDIR;
  593.     StrRemoveLastSlash ( installer_disk_root );
  594.     ParsePath ( installer_disk_root, installer_disk_root, PATH );
  595.     StrRemoveLastSlash ( installer_disk_root );
  596.     ParsePath ( installer_disk_root, installer_disk_root, PATH );
  597.  
  598.     OpenFileMode ( FILE_MODE_NORMAL );
  599.     if ( CreateFile ( file_handle, targetDir, CONFIG_FILENAME ) = 0 ) then
  600.         Sprintf ( scratch, "INSTALL_PATH=%s", installer_disk_root );
  601.         WriteLine ( file_handle, scratch );
  602.         Sprintf ( scratch, "INSTALL_TYPE=%s", install_type );
  603.         WriteLine ( file_handle, scratch );
  604.         Sprintf ( scratch, "LANGUAGE=%s", LANGUAGE_ID );
  605.         WriteLine ( file_handle, scratch );
  606.         CloseFile ( file_handle );
  607.     endif;    
  608. end;
  609. //--------------------------------------------------------------------------------------------------
  610.  
  611. function    AddFolderIcons()
  612.     STRING    appPath;
  613.     STRING    uninstPath;
  614.     STRING    readmePath;
  615. begin
  616.     // Create all the Start menu shortcuts
  617. //    MessageBox ("Got to AddFolderIcons", INFORMATION);
  618.     appPath = targetDir ^ EXE_95;
  619.     LongPathToQuote( appPath , TRUE );
  620.  
  621.     uninstPath = "C:\\WINDOWS\\UNINST";
  622.     LongPathToQuote ( uninstLog, TRUE );
  623.  
  624.     uninstPath = uninstPath + " -f" + uninstLog;
  625. //SprintfBox (INFORMATION, "UNINST PATH", "Path = %s", uninstPath);
  626.  
  627.     readmePath = targetDir ^ "readme.txt";
  628.     LongPathToQuote( readmePath , TRUE );
  629.  
  630.     AddFolderIcon( "Bullfrog\\Dungeon Keeper Demo" , PRODUCT_NAME , appPath , targetDir , targetDir ^ EXE_95 , 0 , "" , REPLACE|RUN_MAXIMIZED );
  631. //    AddFolderIcon( "Bullfrog\\Dungeon Keeper" , "Readme.txt" , readmePath , targetDir , targetDir ^ "readme.txt", 0 , "" , REPLACE );
  632.     AddFolderIcon( "Bullfrog\\Dungeon Keeper Demo" , "unInstall Dungeon Keeper Demo" , uninstPath , targetDir , "C:\\WINDOWS\\UNINST.EXE" , 0 , "" , REPLACE );
  633.  
  634.     // Set registry keys
  635.     RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
  636.     RegDBSetItem( REGDB_APPPATH , targetDir );
  637.     RegDBSetItem( REGDB_APPPATH_DEFAULT , targetDir ^ EXE_95 );
  638. end;
  639.  
  640. //--------------------------------------------------------------------------------------------------
  641.  
  642. function    FinalStuff()
  643. begin
  644.     if ( needReboot = TRUE ) then
  645.         SdFinishReboot( "" , sRebootText , SYS_BOOTWIN , "" , 0 );
  646.     else
  647.         MessageBox( DONE_TEXT, INFORMATION );
  648.     endif;
  649. end;
  650.  
  651. //--------------------------------------------------------------------------------------------------
  652.  
  653. #include    "sddialog.rul"
  654.