home *** CD-ROM | disk | FTP | other *** search
/ Webster's Concise Interactive Encyclopedia / CONCISE0908.ISO / install / setup.mst / setup.bin
Text File  |  1995-08-08  |  27KB  |  1,004 lines

  1. '**************************************************************************
  2. '*                      Attica Installation Program
  3. '*      D.K. 13/8/92    - modified from SAMPLE1.MST 
  4. '*    JMS  12/1/94    
  5. '*    JMS  22/02/94   ....AND FROM SAMPLE2.MST
  6. '**************************************************************************
  7.  
  8. '' *** $DEFINE DEBUG  ''Define for script development/debugging
  9. ''$DEFINE DEBUG
  10.  
  11. '$INCLUDE 'setupapi.inc'
  12. '$INCLUDE 'msdetect.inc'
  13. '$INCLUDE 'myfuncts.inc'
  14.  
  15. ''Dialog ID's
  16. CONST WELCOME       = 100
  17. CONST ASKQUIT       = 200
  18. CONST DESTPATH      = 300
  19. CONST EXITFAILURE   = 400
  20. CONST EXITQUIT      = 600
  21. CONST EXITSUCCESS   = 700
  22. CONST OPTIONS       = 800
  23. CONST OPTIONHELP    = 950
  24. CONST DLG_MINIMUM      = 6400
  25. CONST CUSTINST         = 6200
  26. CONST DLG_STANDARD  = 6100
  27. CONST TOOBIG        = 6300
  28. CONST DLG_COMPLETE        = 6500
  29. CONST DLG_DISABLED        = 6700
  30.  
  31. ''Attica specific Dialog ID's
  32. CONST SINGLE_ID        = 1000
  33. CONST ADMIN_ID         = 1001
  34. CONST NETWORK_ID       = 1002
  35.  
  36. GLOBAL WINDIR$        ''Windows Directory
  37. GLOBAL SYSDIR$        ''System Directory
  38. GLOBAL DEST$        ''destination directory.
  39. GLOBAL SOURCE$      ''Source Directory
  40. GLOBAL OPTIONAL$
  41. GLOBAL TITLE$       ''Title of dialog box
  42. GLOBAL COPYRIGHT$   ''Copyright string
  43. GLOBAL ROMDRIVE$
  44. GLOBAL HIDECD$        ''"TRUE" means hide cd-drive in single user installation
  45. GLOBAL ADDPATH$     ''"ON" or "OFF"
  46. GLOBAL ADDGROUP$    ''"ON" or "OFF"
  47. GLOBAL NEWGROUP$    ''group to add to program manager
  48. GLOBAL ITEMEXE$     ''the .exe file to be executed
  49. GLOBAL TEMPDIR$      ''where the setup files are
  50. GLOBAL CUSTOM$
  51. GLOBAL CMPCOPY$
  52. GLOBAL newopt$
  53. global imageopt$
  54. global atlasopt$
  55. GLOBAL INFO$        '' which section of setup.ini to read
  56. GLOBAL INF_FILE$    '' name of setup .inf file to use
  57. GLOBAL DLGPROC$     ''  which dialog procedure to call
  58. GLOBAL DLG_ID%      ''  which dialog box to use
  59.  
  60. GLOBAL INSMODE$     '' Installation mode
  61. GLOBAL SECTION$
  62. GLOBAL INIFILES$    '' .ini files those require changes
  63. GLOBAL Ini$            '' Full path for temporary setup.ini 
  64. GLOBAL BACKGROUND$    '' Dll contains Background bitmap 
  65. GLOBAL SUBDIR$        '' Subdirectories after Dest directory
  66. GLOBAL Win$
  67. GLOBAL Sys$
  68. GLOBAL DATASOURCE$
  69. GLOBAL IMAGESOURCE$
  70.  
  71. CONST  VAR_MAX% = 6
  72. GLOBAL VarNames$(VAR_MAX%)     '' 1 -- Variable names
  73. GLOBAL VarValues$(VAR_MAX%)     '' 2 -- Sub. Strings
  74.  
  75. ''File Types
  76. CONST MINIMUM     = 1
  77. CONST STANDARD    = 2
  78. CONST COMPLETE    = 3
  79.  
  80. GLOBAL WINDRIVE$    ''Windows drive letter.
  81.  
  82. ''CustInst list symbol names
  83. GLOBAL APPNEEDS$    ''Option list costs per drive
  84. GLOBAL DBNEEDS$
  85. GLOBAL IMAGENEEDS$
  86. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  87. GLOBAL mincost&
  88. GLOBAL stdcost&
  89. GLOBAL compcost&
  90. global newcost&
  91. GLOBAL free&
  92.  
  93. ''Dialog list symbol names
  94. GLOBAL STATUSTEXT$
  95. GLOBAL DRIVETEXT$
  96.  
  97. DECLARE SUB AddOptFilesToCopyList (ftype%)
  98. DECLARE SUB RecalcOptFiles (ftype%)
  99. DECLARE SUB RecalcPath
  100. DECLARE SUB SetDriveStatus (List$)
  101. DECLARE SUB      Install
  102. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  103. DECLARE SUB      AddSectFilesToCopyList (szSect$, szSrc$, szDest$)
  104. DECLARE FUNCTION InitializeInstall LIB "mscuistf.dll" ( hInst%, hWnd% ) AS INTEGER
  105. DECLARE FUNCTION SubVariables( szString$ ) AS STRING
  106. DECLARE FUNCTION FindOptions( szString$ ) AS STRING 
  107. ''***********************************************************************************
  108. ''***********************************************************************************
  109.  
  110. INIT:
  111.  
  112.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  113.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  114.     SECTION$ = "Info Custom"
  115.  
  116. '$IFDEF DEBUG
  117.     OpenLogFile MakePath("C:\temp\", "LOGFILE.OUT"), 0
  118. '$ENDIF ''DEBUG
  119.     
  120.     ret% = InitializeInstall (hinstFrame(), HwndFrame())    ''max window
  121.  
  122.     TEMPDIR$ = GetSymbolValue("STF_SRCINFPATH")
  123.         
  124.     IF TEMPDIR$ = "" THEN
  125.            TEMPDIR$ = GetSymbolValue("STF_CWDDIR")
  126.     END IF
  127.  
  128.  
  129. ''*******************************************************************
  130. ''  set up mode dependant info - single, admin or network:
  131. ''  STF_MODE$ is initialised by _mstest from the command line options
  132. ''*******************************************************************
  133.  
  134.     INSMODE$ = GetSymbolValue("STF_MODE")
  135.  
  136.     SELECT CASE INSMODE$
  137.       
  138.       CASE "NETWORK"
  139.         INFO$ = "Info Net"
  140.         ADDPATH$ = "OFF"
  141.         ADDGROUP$ = "ON"
  142.         GetLocalHardDrivesList "Drives"
  143.         DLGPROC$  = "NetInstallDlgProc"
  144.         DLG_ID% = NETWORK_ID
  145.  
  146.       CASE "ADMIN"
  147.         INFO$ = "Info Admin"
  148.         ADDPATH$ = "OFF"
  149.         ADDGROUP$ = "OFF"
  150.     GetNetworkDrivesList "Drives"
  151.         DLGPROC$  = "AdminInstallDlgProc"
  152.         DLG_ID% = ADMIN_ID
  153.  
  154.       CASE ELSE
  155.         INFO$ = "Info Single"
  156.         ADDPATH$ = "ON"
  157.         ADDGROUP$ = "ON"
  158.     GetLocalHardDrivesList "Drives"
  159.         DLGPROC$  = "SingleInstallDlgProc"
  160.         DLG_ID% = SINGLE_ID
  161.         INSMODE$ = "SINGLE"
  162.     END SELECT
  163.  
  164.  
  165. ''*******************************************************
  166. ''  READ FROM SETUP.INI : product-dependent names
  167. ''*******************************************************
  168.  
  169.      Ini$ = TEMPDIR$ + "setup.ini"
  170.     
  171.     WINDIR$      = GetWindowsDir()
  172.     SYSDIR$      = GetWindowsSysDir()
  173.         NEWGROUP$ = GetIniKeyString( Ini$, INFO$, "GroupName" )
  174.         ITEMEXE$  = GetIniKeyString( Ini$, INFO$, "ExeFiles" )
  175.         INF_FILE$ = GetIniKeyString( Ini$, INFO$, "InfFile" )
  176.     INIFILES$ = GetIniKeyString( Ini$, INFO$, "IniFiles" )
  177.     HIDECD$   = GetIniKeyString( Ini$, INFO$, "HideCD" )
  178.     SUBDIR$   = GetIniKeyString( Ini$, INFO$, "SubDir" )
  179.  
  180.     CUSTOM$   = GetIniKeyString( Ini$, SECTION$, "CustomOptions" )
  181.     CMPCOPY$   = GetIniKeyString( Ini$, SECTION$, "CompleteCopy" )
  182.     DATASOURCE$ = GetIniKeyString( Ini$, SECTION$, "DataFiles" )
  183.     IMAGESOURCE$ = GetIniKeyString( Ini$, SECTION$, "ImageFiles")    
  184.  
  185.  
  186.  
  187. ''************************************************************
  188. ''  Set background bitmap: if no special dll, use mscuistf.dll
  189. ''************************************************************
  190.  
  191.    BACKGROUND$ = GetIniKeyString( Ini$, INFO$, "BkFile" )
  192.    IF BACKGROUND$ = "" THEN 
  193.         BACKGROUND$ = CUIDLL$
  194.     LOGO% = 108
  195.     ELSE 
  196.     LOGO% = 1    
  197.     ENDIF
  198.  
  199.     SetBitmap BACKGROUND$, LOGO%
  200.  
  201. ''*************************************************************
  202. ''  Nice Friendly Welcome to Setup Box
  203. ''*************************************************************
  204.  
  205. WELCOME:
  206.     sz$ = UIStartDlg(CUIDLL$, 100, "FInfodlgProc", 900, HELPPROC$) 
  207.  
  208.     UIPop 1
  209.     if sz$ = "EXIT" then
  210.        GOSUB ASKQUIT
  211.     end if
  212.  
  213. ''*******************************************************
  214. '' default entries for the main dialog box:
  215. ''*******************************************************
  216.  
  217.   
  218.     IF INSMODE$ = "NETWORK" THEN
  219.     DEST$ = WINDIR$
  220.     ELSE
  221.     DEST$ = GetListItem("Drives", 1) + ":\" + GetIniKeyString( Ini$, INFO$, "DestDir" )
  222.     END IF
  223.  
  224.  
  225.     SOURCE$ = GetSymbolValue( "STF_SRCDIR" )
  226.     ROMDRIVE$ = GetRomDrive
  227.     TITLE$ = GetIniKeyString( Ini$, INFO$, "Title" )
  228.     SetTitle TITLE$
  229.  
  230.     COPYRIGHT$ = GetIniKeyString( Ini$, INFO$, "Copyright1" )
  231.     COPYRIGHT$ = COPYRIGHT$+CHR$(10)+GetIniKeyString( Ini$, INFO$, "Copyright2" )
  232.     COPYRIGHT$ = COPYRIGHT$+CHR$(10)+GetIniKeyString( Ini$, INFO$, "Copyright3" )
  233.  
  234.  
  235. ''***************************************************************
  236. ''READ FILES OUT OF INF FILE LIST
  237. ''***************************************************************
  238.  
  239.     SetSymbolValue "Title", TITLE$
  240.     SetSymbolValue "Copyright", COPYRIGHT$
  241.     SetSymbolValue "SourcePath", SOURCE$
  242.     SetSymbolValue "DestPath", DEST$
  243.     SetSymbolValue "RomDrive", ROMDRIVE$
  244.     SetSymbolValue "AddPath", ADDPATH$
  245.     SetSymbolValue "AddGroup", ADDGROUP$
  246.     SetSymbolValue "HideRomDrive", HIDECD$
  247.   
  248.  
  249. ''**********************************************************************
  250. '' Call dialog with path names & add group/path options. Store values.
  251. ''**********************************************************************
  252.  
  253. GETPATH:
  254.     sz$ = UIStartDlg(CUIDLL$, DLG_ID%, DLGPROC$, 900, HELPPROC$ )
  255.  
  256.         UIPop 1
  257.      IF sz$ = "CANCEL" THEN
  258.             GOSUB ASKQUIT
  259.             GOTO GETPATH
  260.         END IF
  261.  
  262.    
  263.     SOURCE$ = GetSymbolValue( "SourcePath" )
  264.     DEST$ = GetSymbolValue( "DestPath" )
  265.     ROMDRIVE$ = GetSymbolValue( "RomDrive" )
  266.     ADDPATH$ = GetSymbolValue( "AddPath" )
  267.     ADDGROUP$ = GetSymbolValue( "AddGroup" )
  268.  
  269.  
  270.     If CUSTOM$ = "ON" Then
  271.      OPTIONAL$ = DEST$
  272.     Else
  273.     OPTIONAL$ = ROMDRIVE$ + ":\"
  274.     End if
  275.  
  276. ''***********************************************************
  277. ''  Initialise substitute run-time variables
  278. ''***********************************************************
  279.  
  280.     VarNames$(0) = "[ROMDRIVE]" 
  281.     VarValues$(0) = ROMDRIVE$ + ":\"
  282.  
  283.     VarNames$(1) = "[DEST]"      
  284.     
  285.    IF INSMODE$ = "SINGLE" THEN
  286.     VarValues$(1) = DEST$
  287.     ELSE
  288.     VarValues$( 1 ) = SOURCE$
  289.     END IF
  290.  
  291.    VarNames$(2) = "[SOURCE]"      
  292.    VarValues$(2) = SOURCE$
  293.  
  294.  
  295.    VarNames$(3) = "[WINDIR]"      
  296.    VarValues$(3) = WINDIR$
  297.  
  298.  
  299.    VarNames$(4) = "[SYSDIR]"      
  300.    VarValues$(4) = SYSDIR$
  301.  
  302.    VarNames$(5) = "[OPTIONAL]"
  303.    VarValues$(5) = OPTIONAL$
  304.  
  305.  
  306.   IF INSMODE$ = "SINGLE" THEN
  307.         Win$ = WINDIR$
  308.         Sys$ = SYSDIR$
  309.     ELSEIF INSMODE$ = "ADMIN" THEN
  310.         Win$ = DEST$
  311.         Sys$ = DEST$
  312.     ELSE
  313.     Win$ = DEST$
  314.     Sys$ = SYSDIR$
  315.     END IF
  316.  
  317. '$ifdef DEBUG
  318.     WriteToLogFile "Directories (Dest,Win,Sys): "+DEST$+", "+Win$+", "+Sys$
  319. '$endif ''DEBUG
  320.  
  321. ''********************************************************
  322. ''Read Inf file & initialise symbols for options dialog box
  323. ''********************************************************
  324.  
  325.    szInfRead$ = TEMPDIR$ + INF_FILE$
  326.     ReadInfFile szInfRead$
  327.  
  328.   
  329.     STATUSTEXT$  = "StatusItemsText"
  330.     DRIVETEXT$   = "DriveStatusText"
  331.          
  332.      FOR i% = 1 TO 3 STEP 1
  333.         AddListItem STATUSTEXT$, ""
  334.      NEXT i%
  335.     
  336.      FOR i% = 1 TO 7 STEP 1
  337.         AddListItem DRIVETEXT$, ""
  338.      NEXT i%
  339.  
  340.     ReplaceListItem DRIVETEXT$, 7, DEST$
  341.  
  342.     ''Disk cost list symbols
  343.     APPNEEDS$   = "AppNeeds"
  344.     DBNEEDS$  = "DbaseNeeds"
  345.     IMAGENEEDS$ = "ImageNeeds"
  346.     EXTRACOSTS$ = "ExtraCosts"
  347.      
  348.     FOR i% = 1 TO 26 STEP 1
  349.           AddListItem EXTRACOSTS$, "0"
  350.         NEXT i%
  351.  
  352.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  353.  
  354.  sz$ = UIStartDlg(CUIDLL$, 6600, "FModelessDlgProc", 0, "")        
  355.     
  356. RecalcPath
  357.     
  358.  UIPop 1
  359.  
  360. '*************************************************************************
  361. '**     Recalculates disk space and sets option status info according
  362. '**     to the current destination path.
  363. '*************************************************************************
  364.  
  365. SUB RecalcPath STATIC
  366.  
  367.     CursorSave% = ShowWaitCursor()
  368.  
  369.          RecalcOptFiles MINIMUM
  370.          RecalcOptFiles STANDARD
  371.       RecalcOptFiles COMPLETE        
  372.     
  373.     RestoreCursor CursorSave%
  374.  
  375. END SUB
  376.  
  377. '*************************************************************************
  378. '**     Recalculates disk space for the given option files and sets
  379. '**     the status info symbol "StatusItemsText".
  380. '*************************************************************************
  381.  
  382. SUB RecalcOptFiles (ftype%) STATIC
  383.     
  384.  
  385.     CursorSave% = ShowWaitCursor()
  386.     ClearCopyList
  387.     AddOptFilesToCopyList ftype%
  388.     fExtra% = 0
  389.  
  390.  
  391.     IF ftype% = MINIMUM THEN
  392.     ListSym$ = APPNEEDS$
  393.      
  394.     ELSEIF ftype% = STANDARD THEN
  395.     ListSym$ = DBNEEDS$
  396.       
  397.     ELSEIF ftype% = COMPLETE THEN
  398.     ListSym$ = IMAGENEEDS$
  399.     END IF
  400.  
  401.  ''Add extra cost to Windows drive for ini/progman, etc.
  402.  
  403.    ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  404.    ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  405.    fExtra% = 1
  406.  
  407.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  408.     cost& = 0
  409.     FOR i% = 1 TO 26 STEP 1
  410.        cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  411.     NEXT i%
  412.  
  413.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  414.  
  415.     IF ftype% = MINIMUM THEN
  416.     mincost& = cost&
  417.     ELSEIF ftype% = STANDARD THEN
  418.     stdcost& = cost&
  419.     ELSE
  420.     compcost& = cost&
  421.     END IF
  422.  
  423.    IF fExtra% THEN
  424.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  425.     END IF
  426.  
  427.     SetDriveStatus ListSym$
  428.     RestoreCursor CursorSave%
  429.     ListSym$ = ""
  430.    
  431. END SUB
  432.  
  433. ''******************************************************************************
  434. ''Call Options install dialog box & process messages
  435. ''******************************************************************************
  436.  
  437. CUSTINST:    
  438.  
  439.   If CUSTOM$ = "ON" Then                'set standard option as default
  440.     SetSymbolValue "RadioDefault", "2"
  441.  
  442.     If CMPCOPY$ = "ON" Then
  443.       SetSymbolValue "CustomEnable", "YES"
  444.     Else 
  445.       SetSymbolValue "CustomEnable", "NO"
  446.     End If
  447.  
  448.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "OptionsInstallDlgProc", OPTIONHELP, HELPPROC$)    
  449.  
  450.   Else
  451.     sz$ = "CONTINUE"     'if no custom option then just carry on
  452.     
  453.   End If
  454.  
  455.   newopt$ = GetSymbolValue("ButtonChecked") 'which installation?
  456.  
  457.    if newopt$ = "1" then
  458.       newcost& = mincost&
  459.    elseif newopt$ = "3" then
  460.       newcost& = compcost&
  461.    else 
  462.       newcost& = stdcost&
  463.    end if
  464.  
  465.   Select Case sz$
  466.  
  467.     Case "CONTINUE"  ''Install only if it will fit.
  468.    
  469.     If newcost& > free& then
  470.       GOSUB TOOBIG
  471.       ERROR STFERR
  472.     end if    
  473.              
  474.     UIPop 1
  475.         GOTO MSINSTALL      
  476.                 
  477.        
  478.       Case "EXIT"
  479.     GOSUB ASKQUIT
  480.     GOTO CUSTINST
  481.     
  482.       Case "CANCEL"
  483.     UIPop 1
  484.     GOTO GETPATH
  485.      
  486.       Case "BTN1"       ' information buttons
  487.     GOSUB INFO1
  488.         GOTO CUSTINST
  489.  
  490.       Case "BTN2" 
  491.     GOSUB INFO2
  492.         GOTO CUSTINST
  493.  
  494.       Case "BTN3"    
  495.         GOSUB INFO3
  496.            GOTO CUSTINST    
  497.       
  498.      Case "REACTIVATE"
  499.     RecalcPath
  500.         GOTO CUSTINST
  501.     
  502.       Case Else
  503.         GOSUB ASKQUIT
  504.         GOTO CUSTINST
  505.  
  506.     End Select
  507.  
  508.  
  509. MSINSTALL:
  510.  
  511. ''**************************************************************
  512. ''  Tidy Up
  513. ''**************************************************************
  514.  
  515.     RemoveSymbol "Title"
  516.     RemoveSymbol "Copyright"
  517.     RemoveSymbol "SourcePath"
  518.     RemoveSymbol "DestPath"
  519.     RemoveSymbol "RomDrive"
  520.     RemoveSymbol "AddPath"
  521.     RemoveSymbol "AddGroup"
  522.     'RemoveSymbol "ButtonChecked"
  523.     RemoveSymbol "CustomEnable"
  524.     'RemoveSymbol "RadioDefault"
  525.  
  526.  
  527.  
  528. ''********************************************************************
  529. '' HME dialog
  530. ''********************************************************************
  531.  
  532.  
  533.     sz$ = UIStartDlg(CUIDLL$, 6800, "OptionsInstallDlgProc", 0, "")    
  534.     atlasopt$ = GetSymbolValue("CopyAtlas") 'which installation?
  535.     imageopt$ = GetSymbolValue("CopyBitmaps") 'which installation?     
  536.     
  537.         
  538.     UIPop 1
  539.  
  540. ''**************************************************************
  541. '' call install procedure
  542. ''**************************************************************
  543.  
  544.  
  545.      
  546.      AddToBillboardList CUIDLL$, 5000, "FModelessDlgProc", 10
  547.      Install
  548.      UIPop 1
  549.      
  550.     
  551.   
  552.  
  553. ''************************************************************************
  554. '**     Adds the specified option files to the copy list.
  555. '*************************************************************************
  556.  
  557. SUB AddOptFilesToCopyList (ftype%) STATIC
  558.  
  559.     If ftype% = MINIMUM or ftype% = STANDARD or ftype% = COMPLETE Then
  560.     
  561.          AddSectFilesToCopyList "Network Win Files", SOURCE$, Win$
  562.          AddSectFilesToCopyList "Network Sys Files", SOURCE$, Sys$  
  563.     
  564.           If INSMODE$ = "SINGLE" or INSMODE$ = "ADMIN" THEN
  565.  
  566.         AddSectFilesToCopyList "Single Win Files", SOURCE$, Win$
  567.           AddSectFilesToCopyList "Single Sys Files", SOURCE$, Sys$  
  568.  
  569.               End If
  570.  
  571.         IF INSMODE$ = "ADMIN" THEN
  572.            AddSectFilesToCopyList "Admin Win Files", SOURCE$, Win$
  573.            AddSectFilesToCopyList "Admin Sys Files", SOURCE$, Sys$
  574.             END IF    
  575.     
  576.     End If
  577.  
  578.     If ftype% = STANDARD or ftype% = COMPLETE Then
  579.             
  580.                      
  581.            AddSectFilesToCopyList "Network Files", SOURCE$, DEST$
  582.              
  583.             IF INSMODE$ = "SINGLE" OR INSMODE$ = "ADMIN" THEN
  584.           
  585.            AddSectFilesToCopyList "Single Files", SOURCE$, DEST$
  586.         
  587.           count% = 1
  588.             subcur$ = GetNthFieldFromIniString( SUBDIR$, count% )
  589.  
  590.                  WHILE subcur$ <> ""
  591.                 AddSectFilesToCopyList "Single " + subcur$ + " Files", SOURCE$, DEST$ + subcur$ + "\"
  592.                 count% = count% + 1
  593.                 subcur$ = GetNthFieldFromIniString( SUBDIR$, count% )
  594.                    WEND
  595.  
  596.             END IF         
  597.             
  598.           IF INSMODE$ = "ADMIN" THEN
  599.            AddSectFilesToCopyList "Admin Files", SOURCE$, DEST$
  600.           END IF    
  601.  
  602.        End If    
  603.  
  604.     If ftype% =  COMPLETE Then
  605.  
  606.         AddSectFilesToCopyList "Database Files", SOURCE$, DEST$
  607.         AddSectFilesToCopyList "Image Files", SOURCE$, DEST$
  608.                       
  609.            End If
  610. END SUB
  611.  
  612. '***************************************************************************
  613. '** Purpose:
  614. '**     Sets drive status info according to latest disk space calcs.
  615. '*************************************************************************
  616.  
  617. SUB SetDriveStatus (List$) STATIC
  618.  
  619.     drive$ = MID$(DEST$, 1, 1)
  620.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  621.     newcost& = VAL(GetListItem(List$, ndrive%))
  622.     free& = GetFreeSpaceForDrive(drive$)
  623.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  624.     ReplaceListItem DRIVETEXT$, 2, STR$(newcost& / 1024) + " K"
  625.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  626. END SUB
  627.  
  628. '*************************************************************************
  629. ''**     Appends a file name to the end of a directory path,
  630. '**     inserting a backslash character as needed.
  631. '*************************************************************************
  632.  
  633. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  634.     IF szDir$ = "" THEN
  635.         MakePath = szFile$
  636.     ELSEIF szFile$ = "" THEN
  637.         MakePath = szDir$
  638.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  639.         MakePath = szDir$ + szFile$
  640.     ELSE
  641.         MakePath = szDir$ + "\" + szFile$
  642.     END IF
  643. END FUNCTION
  644.  
  645. ''*************************************************************************
  646. ''   Bastardised version of AddSectionFilesToCopyList
  647. ''   that does nothing if the section does not exist
  648. ''*************************************************************************
  649.  
  650. SUB AddSectFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  651.     
  652. szInf$ = TEMPDIR$ + INF_FILE$
  653.  
  654.     if DoesIniSectionExist( szInf$, szSect$) then
  655.        
  656.      IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  657.  
  658.         '$ifdef DEBUG
  659.             WriteToLogFile "AddSectFilesToCopyList: "+szSect$+", "+szSrc$+", "+szDest$+", "+szInf$
  660.             WriteToLogFile "Checking for ini file section : "+szSect$+" "
  661.      '$endif ''DEBUG
  662.     
  663.         ERROR STFERR
  664.         END IF
  665.  
  666.     end if
  667.  
  668. END SUB
  669.  
  670. ''***********************************************
  671. '' This function subsitutes pre-defined 
  672. '' variables with their run-time values
  673. ''***********************************************
  674.  
  675. FUNCTION SubVariables( szString$ ) STATIC AS STRING 
  676.  
  677.  
  678.     DIM pos%, lastpos%
  679.     DIM Temp$
  680.  
  681.     FOR I% = 0 TO VAR_MAX - 1 STEP 1
  682.  
  683.         lastpos% = 0
  684.         pos% = INSTR( 1, szString$, VarNames$( I% ) )
  685.             
  686.         WHILE pos% > lastpos% 
  687.  
  688.             lastpos% = Len( VarNames$( I% ) ) + pos% 
  689.             Temp$ = MID$( szString$, 1, pos% - 1 )
  690.             Temp$ = Temp$ + VarValues$( I% )
  691.             Temp$ = Temp$ + MID$( szString$, lastpos%, Len( szString$ ) - lastpos% + 1 )
  692.             lastpos% = pos% + Len( VarValues$( I% ) )
  693.             szString$  = Temp$
  694.             pos% = InStr( lastpos%, szString$, VarNames$( I% ) )
  695.             
  696.         WEND
  697.    
  698.     NEXT I%
  699.  
  700.     SubVariables$ = szString$
  701.  
  702. END FUNCTION
  703.  
  704. '**************************************************************************
  705. ''Search for an optional copyable file on the cd, and return the path only
  706. '**************************************************************************
  707.  
  708. FUNCTION FindOptions( szString$ ) STATIC AS STRING 
  709.  
  710.     src$ = FindFileInTree(szString$, ROMDRIVE$ + ":\")
  711.     If src$ = "" Then
  712.       i% = DoMsgBox(szString$ + " is not found on the CD", "Setup Error", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  713.      Else
  714.       pos% = InStr(1, UCASE$(src$), UCASE$(szString$))
  715.       src$ = MID$(src$, 1, pos% - 1)
  716.     End If
  717.  
  718.     FindOptions = src$
  719.  
  720. END FUNCTION
  721.  
  722. '************************************************************************
  723. '** Purpose:
  724. '**     Builds the copy list and performs all installation operations.
  725. '*************************************************************************
  726.  
  727. SUB Install STATIC
  728.     
  729.     CursorSave% = ShowWaitCursor()
  730.     CreateDir DEST$, cmoNone
  731.  
  732.     ClearCopyList    
  733.     
  734.     If newopt$ = "1" Then
  735.       AddOptFilesToCopyList MINIMUM
  736.     Elseif newopt$ = "3" Then
  737.       AddOptFilesToCopyList COMPLETE
  738.     Else
  739.       AddOptFilesToCopyList STANDARD
  740.     End If
  741.  
  742.     SetCopyGaugePosition 20, 175
  743.     
  744.     RestoreCursor CursorSave%
  745.  
  746.     '$ifdef DEBUG
  747.     DumpCopyList "c:\temp\copy.out"
  748.     '$endif
  749.     
  750.     CopyFilesInCopyList
  751.  
  752.     ClearCopyList
  753.  
  754.     ''*******************************************
  755. ''  modify .ini files to subsitute variables
  756. ''*******************************************
  757.  
  758. IF INSMODE$ <> "ADMIN" THEN
  759.    count%  = 1
  760.    inicur$ = GetNthFieldFromIniString( INIFILES$, count% )
  761.  
  762.     WHILE inicur$ <> "" 
  763.  
  764.      index% = 1
  765.      inikeys$ = GetIniKeyString( Ini$, INFO$, inicur$ + Str$(index%) )
  766.  
  767.     WHILE inikeys$ <> "" 
  768.  
  769.  
  770.     section$ = GetNthFieldFromIniString( inikeys$, 1 )
  771.  
  772.     IF section$ <> "" THEN
  773.  
  774.            keycount% = 2
  775.        keycur$ = GetNthFieldFromIniString( inikeys$, keycount% )
  776.  
  777.        WHILE keycur$ <> ""
  778.     
  779.     keyval$ = GetIniKeyString( WINDIR$ + inicur$, section$, keycur$ )
  780.  
  781.     
  782.       IF keyval$ <> "" THEN
  783.           keyval$ = SubVariables( keyval$ )
  784.           CreateIniKeyValue WINDIR$ + inicur$, section$, keycur$, keyval$, cmoOverwrite
  785.  
  786.       END IF
  787.         keycount% = keycount% + 1
  788.         keycur$ = GetNthFieldFromIniString( inikeys$, keycount% )
  789.        WEND
  790.                 
  791.      END IF
  792.             
  793.     index% = index% + 1
  794.     inikeys$ = GetIniKeyString( Ini$, INFO$, inicur$+Str$(index%) )
  795.             
  796.    WEND
  797.  
  798.     count% = count% + 1
  799.     inicur$ = GetNthFieldFromIniString( INIFILES$, count% )
  800. WEND
  801.  
  802. END IF
  803.  
  804. ''**************************
  805. '' Add Program Item
  806. ''**************************
  807.  
  808.     IF ADDGROUP$ = "ON" THEN
  809.  
  810.        IF  INSMODE$ = "NETWORK" THEN
  811.             ExeDir$ = SOURCE$
  812.         ELSE
  813.             ExeDir$ = DEST$
  814.        END IF
  815.        
  816.     CreateProgmanGroup NEWGROUP$, "", cmoNone
  817.     ShowProgmanGroup  NEWGROUP$, 1, cmoNone
  818.  
  819.     count% = 1
  820.     program$ = GetNthFieldFromIniString( ITEMEXE$, count% )
  821.     
  822.            WHILE program$ <> ""
  823.  
  824.         command$  = GetIniKeyString( Ini$, INFO$, program$ )
  825.         itemname$ = GetNthFieldFromIniString( command$, 1 )
  826.         option$   = GetNthFieldFromIniString( command$, 2 )
  827.                 iconname$ = GetNthFieldFromIniString( command$, 3 )
  828.  
  829.             IF iconname$ <> "" THEN
  830.                 iconidx$  = GetNthFieldFromIniString( command$, 4 )
  831.  
  832.                 IF iconidx$ <> "" THEN
  833.                     iconname$ = iconname$ + "," + iconidx$
  834.                     iconx$    = GetNthFieldFromIniString( command$, 5 )
  835.  
  836.                     IF iconx$ <> "" THEN
  837.                         iconname$ = iconname$ + "," + iconx$
  838.                         icony$    = GetNthFieldFromIniString( command$, 6 )
  839.  
  840.                       IF icony$ <> "" THEN
  841.                           iconname$ = iconname$ + "," + icony$
  842.                           workdir$  = GetNthFieldFromIniString( command$, 7 )
  843.  
  844.                             IF workdir$ <> "" THEN
  845.                                 iconname$ = iconname$ + "," + workdir$
  846.                         END IF
  847.                       
  848.                END IF
  849.                     END IF
  850.                 END IF
  851.             END IF
  852.  
  853.             option$   = SubVariables( option$ )
  854.             iconname$ = SubVariables( iconname$ )
  855.             command$  = MakePath( ExeDir$, program$ ) + " " + option$
  856.  
  857.             CreateProgmanItem NEWGROUP$, itemname$, command$, iconname$, cmoOverwrite
  858.  
  859.         count% = count% + 1
  860.         program$ = GetNthFieldFromIniString( ITEMEXE$, count% )
  861.     WEND
  862.  
  863.     END IF
  864.  
  865. ''**************************
  866. '' Add Path
  867. ''**************************
  868.  
  869.     IF ADDPATH$ = "ON" THEN
  870.         GetLocalHardDrivesList "HardDrvs"
  871.         drv$ = GetListItem("HardDrvs", 1) + ":\"
  872.         IF DoesFileExist(drv$+"autoexec.bat", femExists ) THEN
  873.             PrependToPath drv$+"autoexec.bat", drv$+"autex.tmp", DEST$, cmoNone
  874.             RemoveFile drv$+"autoexec.old", cmoNone
  875.             BackupFile drv$+"autoexec.bat", "autoexec.old"
  876.             RenameFile drv$+"autex.tmp", "autoexec.bat"
  877.         END IF
  878.     END IF
  879.  
  880.  
  881.     if INSMODE$ <> "ADMIN" then
  882.  
  883.         inicur$ = GetNthFieldFromIniString(INIFILES$, 1) 
  884.  
  885.             
  886.         if atlasopt$ = "ON" then
  887.             CreateIniKeyValue WINDIR$ + inicur$, "Options", "CopyAtlas", Str$(1), cmoOverwrite    
  888.             else
  889.             CreateIniKeyValue WINDIR$ + inicur$, "Options", "CopyAtlas", Str$(0), cmoOverwrite    
  890.             end if
  891.     
  892.     
  893.             if imageopt$ = "ON" then
  894.         
  895.             CreateIniKeyValue WINDIR$ + inicur$, "Options", "CopyBitmaps", Str$(1), cmoOverwrite    
  896.             else
  897.             CreateIniKeyValue WINDIR$ + inicur$, "Options", "CopyBitmaps", Str$(0), cmoOverwrite    
  898.         end if
  899.    
  900.     end if
  901.  
  902. ''****************************************
  903. ''  Close Log file 
  904. ''****************************************
  905.  
  906. '$IFDEF DEBUG
  907.     CloseLogFile
  908. '$ENDIF
  909.  
  910.  
  911.  
  912. END SUB
  913. 
  914. ''*******************************************************
  915. ''GOTOs
  916. ''*******************************************************
  917.  
  918.  
  919. QUIT:
  920.     ON ERROR GOTO ERRQUIT
  921.  
  922.     IF ERR = 0 THEN
  923.         dlg% = EXITSUCCESS
  924.     ELSEIF ERR = STFQUIT THEN
  925.         dlg% = EXITQUIT
  926.     ELSE
  927.         dlg% = EXITFAILURE
  928.     END IF
  929.  
  930. QUITL1:
  931.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  932.     IF sz$ = "REACTIVATE" THEN
  933.         GOTO QUITL1
  934.     END IF
  935.     UIPop 1
  936.  
  937.     END
  938.  
  939. ERRQUIT:
  940.     i% = DomsgBox("Setup sources were corrupted, call (0865) 791346", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  941.     END
  942.  
  943.  
  944. INFO1:
  945.    
  946.     DLGBX% = DLG_MINIMUM
  947.    
  948.     temp$ = UIStartDlg(CUIDLL$, DLGBX%, "FInfo0DlgProc", 0, "")
  949.     IF temp$ = "REACTIVATE" THEN
  950.         GOTO INFO1
  951.     END IF
  952.     UIPop 1
  953.     RETURN
  954.  
  955. INFO2:
  956.     
  957.     DLGBX% = DLG_STANDARD
  958.     
  959.     temp$ = UIStartDlg(CUIDLL$, DLGBX%, "FInfo0DlgProc", 0, "")
  960.     IF temp$ = "REACTIVATE" THEN
  961.         GOTO INFO2
  962.     END IF
  963.     UIPop 1
  964.     RETURN
  965.  
  966. INFO3:
  967.     IF CMPCOPY$ = "OFF" THEN
  968.     DLGBX% = DLG_DISABLED
  969.     ELSE
  970.     DLGBX% = DLG_COMPLETE
  971.     END IF
  972.  
  973.     temp$ = UIStartDlg(CUIDLL$, DLGBX%, "FInfo0DlgProc", 0, "")
  974.     IF temp$ = "REACTIVATE" THEN
  975.         GOTO INFO3
  976.     END IF
  977.     UIPop 1
  978.     RETURN
  979.  
  980.  
  981.  
  982. ASKQUIT:
  983.     temp$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  984.  
  985.     IF temp$ = "EXIT" THEN
  986.         UIPopAll
  987.         ERROR STFQUIT
  988.     ELSEIF temp$ = "REACTIVATE" THEN
  989.         GOTO ASKQUIT
  990.     ELSE
  991.         UIPop 1
  992.     END IF
  993.     RETURN
  994.  
  995. TOOBIG:
  996.     temp$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  997.     IF temp$ = "REACTIVATE" THEN
  998.         RecalcPath
  999.         'SetDriveStatus
  1000.         GOTO TOOBIG
  1001.     END IF
  1002.     UIPop 1
  1003.     RETURN
  1004.