home *** CD-ROM | disk | FTP | other *** search
/ Chip Hitware 2 / Chip_Hitware_Vol_02.iso / chiphit2 / tools / system / winfree / winfree.ms_ / winfree.ms
Text File  |  1995-01-03  |  22KB  |  614 lines

  1. '**************************************************************************
  2. '*                       Marwin Consulting WinFree Setup
  3. '**************************************************************************
  4.  
  5. ''$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME      = 100
  12. CONST PROGMANGROUP = 101
  13. CONST ASKQUIT      = 200
  14. CONST DESTPATH     = 300
  15. CONST EXITFAILURE  = 400
  16. CONST EXITQUIT     = 600
  17. CONST EXITSUCCESS  = 700
  18. CONST APPHELP      = 900
  19. CONST CHECK                 = 2500
  20. CONST CUSTINST     = 6200
  21. CONST BADPATH      = 6400
  22.  
  23. ''Bitmap ID
  24. CONST LOGO         = 1
  25.  
  26. ''Files Sections in SETUP.INF
  27.  
  28. ''Definitions for CUSTINST-DlgBox
  29. ''Checkbox indices for CUSTINST-DlgBox
  30. CONST CHK_INDEX_WINFREE                = 1 
  31. CONST CHK_INDEX_PROGMANGROUP    = 2 
  32. CONST CHK_INDEX_HELPFILES            = 3    
  33. ''List of Checkboxes (IDC_B1..n)
  34. GLOBAL CUSTINST_CHECKSTATES$
  35. ''List of Statictext (IDC_STATUS1..n)
  36. GLOBAL CUSTINST_STATUSTEXT$
  37. ''List of Drivetext (IDC_TEXT1..n)
  38. GLOBAL CUSTINST_DRIVETEXT$
  39. ''Indices of CUSTINST_DRIVETEXT list elements
  40. CONST DRIVETEXT_INDEX_DESTDRIVE = 1
  41. CONST DRIVETEXT_INDEX_DESTSPACENEED = 2
  42. CONST DRIVETEXT_INDEX_DESTSPACEFREE = 3
  43. CONST DRIVETEXT_INDEX_WINDRIVE = 4
  44. CONST DRIVETEXT_INDEX_WINSPACENEED = 5
  45. CONST DRIVETEXT_INDEX_WINSPACEFREE = 6
  46. CONST DRIVETEXT_INDEX_DESTPATH = 7
  47.  
  48. ''Definitions for CHECK-DlgBox
  49. ''Checkbox indices for CHECK-DlgBox
  50. CONST CHK_INDEX_HELPFILE_HLP = 1
  51. CONST CHK_INDEX_HELPFILE_DOC = 2
  52. CONST CHK_INDEX_HELPFILE_WRI = 3
  53. CONST CHK_INDEX_HELPFILE_TXT = 4
  54. '' Indices in SETUP.INF
  55. CONST SETUP_INF_HELPFILE_HLP$ = "1"
  56. CONST SETUP_INF_HELPFILE_DOC$ = "2"
  57. CONST SETUP_INF_HELPFILE_WRI$ = "3"
  58. CONST SETUP_INF_HELPFILE_TXT$ = "4"
  59. ''List of Checkboxes (IDC_B1..n)
  60. GLOBAL CHECK_CHECKSTATES_OPENDLG$  '' state of checkboxes when opening the dialog
  61. GLOBAL CHECK_CHECKSTATES_CLOSEDLG$    '' state of checkboxes when closing the dialog  '' actual value
  62.  
  63. ''Definitions for PROGMANGROUP-DlgBox
  64. GLOBAL PROGMANGROUP_TEXT$ '' text set in the dialog
  65.  
  66. ''Definitions for DESTPATH-DlgBox
  67. ''Destination Path where to install WinFree
  68. GLOBAL DESTPATH_TEXT$        ''Default destination directory.
  69. '' Drive where WINDOWS directory resides
  70. GLOBAL WINDRIVE$    ''Windows drive letter.
  71.  
  72.  
  73. DECLARE SUB AddOptFilesToCopyList (ftype%)
  74. DECLARE SUB RecalcOptFiles (ftype%)
  75. DECLARE SUB RecalcPath
  76. DECLARE SUB SetDriveStatus
  77. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  78. DECLARE FUNCTION GetNthFieldFromIniStringEx (szLine$, iField%) AS STRING
  79.  
  80.  
  81.  
  82. INIT:
  83.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  84.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  85.  
  86. ''    SetBitmap CUIDLL$, LOGO
  87.     SetTitle "Marwin Consulting Setup WinFree"
  88.  
  89.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  90.     IF szInf$ = "" THEN
  91.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  92.     END IF
  93.     ReadInfFile szInf$
  94.  
  95.     ''*****************************************************************************
  96.     ''PROGMANGROUPDlgBox initialisation
  97.     ''*****************************************************************************
  98.     PROGMANGROUP_TEXT$ = "WinFree"
  99.  
  100.     ''*****************************************************************************
  101.     ''DESTPATHDlgBox initialisation
  102.     ''*****************************************************************************
  103.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  104.     DESTPATH_TEXT$ = WINDRIVE$ + ":\WINFREE"
  105.     
  106.     ''*****************************************************************************
  107.     ''CUSTINSTDlgBox initialisation
  108.     ''*****************************************************************************
  109.     CUSTINST_CHECKSTATES$ = "CheckItemsState"  '' as defined in mscuistf.dll -> dlgprocs.c
  110.     CUSTINST_STATUSTEXT$  = "StatusItemsText"  '' as defined in mscuistf.dll -> dlgprocs.c
  111.     CUSTINST_DRIVETEXT$   = "DriveStatusText"  '' as defined in mscuistf.dll -> dlgprocs.c
  112.     FOR i% = 1 TO 3 STEP 1
  113.         AddListItem CUSTINST_CHECKSTATES$, "ON"
  114.     NEXT i%
  115.     FOR i% = 1 TO 3 STEP 1
  116.         AddListItem CUSTINST_STATUSTEXT$, ""
  117.     NEXT i%
  118.     FOR i% = 1 TO 7 STEP 1
  119.         AddListItem CUSTINST_DRIVETEXT$, ""
  120.     NEXT i%
  121.     ReplaceListItem CUSTINST_DRIVETEXT$, DRIVETEXT_INDEX_DESTPATH, DESTPATH_TEXT$  '' set the destination field
  122.     
  123.     ''*****************************************************************************
  124.     ''CHECKDlgBox initialisation
  125.     ''*****************************************************************************
  126.     CHECK_CHECKSTATES_OPENDLG$ = "CheckItemsIn"        '' as defined in mscuistf.dll -> dlgprocs.c
  127.     AddListItem CHECK_CHECKSTATES_OPENDLG$, "ON"
  128.     FOR i% = 2 TO 4 STEP 1
  129.         AddListItem CHECK_CHECKSTATES_OPENDLG$, "OFF"
  130.     NEXT i%
  131.     CHECK_CHECKSTATES_CLOSEDLG$ = "CheckItemsOut"   '' actual value
  132.     AddListItem CHECK_CHECKSTATES_CLOSEDLG$, "ON"
  133.     FOR i% = 2 TO 4 STEP 1
  134.         AddListItem CHECK_CHECKSTATES_CLOSEDLG$, "OFF"
  135.     NEXT i%
  136.      
  137. WELCOME:
  138.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  139.     IF sz$ = "CONTINUE" THEN
  140.         UIPop 1
  141.         GOTO CUSTINST_DLG
  142.     ELSE
  143.         GOSUB ASKQUIT
  144.         GOTO WELCOME
  145.     END IF
  146.     
  147. CUSTINST_DLG:
  148.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  149.     IF sz$ = "CONTINUE" THEN
  150.         GOTO INSTALL
  151.     ELSEIF sz$ = "PATH" THEN
  152.         GOTO DESTPATH_DLG
  153.     ELSEIF sz$ = "CHK1" THEN
  154.         IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_WINFREE) = "ON" THEN
  155.             ReplaceListItem CUSTINST_CHECKSTATES$, CHK_INDEX_WINFREE, "OFF" 
  156.         ELSE
  157.             ReplaceListItem CUSTINST_CHECKSTATES$, CHK_INDEX_WINFREE, "ON" 
  158.             END IF            
  159.       GOTO CUSTINST_DLG
  160.     ELSEIF sz$ = "CHK2" THEN
  161.         IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_PROGMANGROUP) = "ON" THEN
  162.             ReplaceListItem CUSTINST_CHECKSTATES$, CHK_INDEX_PROGMANGROUP, "OFF" 
  163.         ELSE
  164.             ReplaceListItem CUSTINST_CHECKSTATES$, CHK_INDEX_PROGMANGROUP, "ON" 
  165.             END IF            
  166.       GOTO CUSTINST_DLG
  167.     ELSEIF sz$ = "CHK3" THEN
  168.         IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_HELPFILES) = "ON" THEN
  169.             ReplaceListItem CUSTINST_CHECKSTATES$, CHK_INDEX_HELPFILES, "OFF" 
  170.         ELSE
  171.             ReplaceListItem CUSTINST_CHECKSTATES$, CHK_INDEX_HELPFILES, "ON" 
  172.             END IF            
  173.       GOTO CUSTINST_DLG
  174.     ELSEIF sz$ = "BTN2" THEN
  175.         GOTO PROGMANGROUP_DLG
  176.     ELSEIF sz$ = "BTN3" THEN
  177.         GOTO CHECK_DLG
  178.     ELSEIF sz$ = "REACTIVATE" THEN
  179.         GOTO CUSTINST_DLG
  180.     ELSE '' EXIT
  181.         GOSUB ASKQUIT
  182.         GOTO CUSTINST_DLG
  183.     END IF
  184.  
  185.  
  186. DESTPATH_DLG:
  187.     SetSymbolValue "EditTextIn", DESTPATH_TEXT$
  188. DESTPATH_DLG_OPEN:
  189.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  190.     IF sz$ = "CONTINUE" THEN
  191.         olddest$ = DESTPATH_TEXT$
  192.         DESTPATH_TEXT$ = GetSymbolValue("EditTextOut")
  193.     
  194.         ''Validate new path.
  195.         IF IsDirWritable(DESTPATH_TEXT$) = 0 THEN
  196.             GOSUB BADPATH
  197.             GOTO DESTPATH_DLG_OPEN
  198.         END IF
  199.         UIPop 1
  200.     
  201.         ''Truncate display if too long.
  202.         IF LEN(DESTPATH_TEXT$) > 23 THEN
  203.             ReplaceListItem CUSTINST_DRIVETEXT$, DRIVETEXT_INDEX_DESTPATH, MID$(DESTPATH_TEXT$, 1, 23)+"..."
  204.         ELSE
  205.             ReplaceListItem CUSTINST_DRIVETEXT$, DRIVETEXT_INDEX_DESTPATH, DESTPATH_TEXT$
  206.         END IF
  207.     
  208.         olddest$ = ""
  209.         GOTO CUSTINST_DLG
  210.     ELSEIF sz$ = "BACK" THEN  '' undo all changes in the checkboxes. set the closing list correctly
  211.         UIPop 1
  212.         GOTO CUSTINST_DLG
  213.     ELSEIF sz$ = "REACTIVATE" THEN
  214.       GOTO DESTPATH_DLG_OPEN
  215.     ELSE    '' EXIT    
  216.         SetSymbolValue "EditTextIn", GetSymbolValue ("EditTextOut")
  217.             UIPop 1
  218.             GOSUB ASKQUIT
  219.             GOTO DESTPATH_DLG_OPEN
  220.     END IF
  221.  
  222.  
  223. PROGMANGROUP_DLG:
  224.     SetSymbolValue "EditTextIn", PROGMANGROUP_TEXT$
  225. PROGMANGROUP_DLG_OPEN:
  226.     sz$ = UIStartDlg(CUIDLL$, PROGMANGROUP, "FEditDlgProc", APPHELP, HELPPROC$)
  227.     IF sz$ = "CONTINUE" THEN
  228.         PROGMANGROUP_TEXT$ = GetSymbolValue ("EditTextOut")
  229.       UIPop 1
  230.         GOTO CUSTINST_DLG
  231.     ELSEIF sz$ = "BACK" THEN  '' undo all changes in the checkboxes. set the closing list correctly
  232.         UIPop 1
  233.         GOTO CUSTINST_DLG
  234.     ELSEIF sz$ = "REACTIVATE" THEN
  235.       GOTO PROGMANGROUP_DLG_OPEN
  236.     ELSE    '' EXIT    
  237.         SetSymbolValue "EditTextIn", GetSymbolValue ("EditTextOut")
  238.             UIPop 1
  239.             GOSUB ASKQUIT
  240.             GOTO PROGMANGROUP_DLG_OPEN
  241.     END IF
  242.  
  243. CHECK_DLG:
  244.     sz$ = UIStartDlg(CUIDLL$, CHECK, "FCheckDlgProc", APPHELP, HELPPROC$)
  245.     IF sz$ = "CONTINUE" THEN
  246.         FOR i% = 1 TO 4 STEP 1
  247.             ReplaceListItem CHECK_CHECKSTATES_OPENDLG$, i%, GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, i%)
  248.         NEXT i%
  249.       UIPop 1
  250.         GOTO CUSTINST_DLG
  251.     ELSEIF sz$ = "BACK" THEN  '' undo all changes in the checkboxes. set the closing list correctly
  252.         FOR i% = 1 TO 4 STEP 1
  253.             ReplaceListItem CHECK_CHECKSTATES_CLOSEDLG$, i%, GetListItem (CHECK_CHECKSTATES_OPENDLG$, i%)
  254.         NEXT i%
  255.       UIPop 1
  256.         GOTO CUSTINST_DLG
  257.     ELSEIF sz$ = "REACTIVATE" THEN
  258.       GOTO CHECK_DLG
  259.     ELSE    '' EXIT    
  260.       GOSUB ASKQUIT
  261.       GOTO CHECK_DLG
  262.     END IF
  263.  
  264. INSTALL:
  265.     SetRestartDir DESTPATH_TEXT$
  266.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  267.     ClearCopyList
  268.     IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_WINFREE) = "ON" THEN
  269.         AddSectionFilesToCopyList "Files", SrcDir$, DESTPATH_TEXT$
  270.         AddSectionFilesToCopyList "System", SrcDir$, GetWindowsSysDir
  271.     END IF
  272.     IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_HELPFILES) = "ON" THEN
  273.         IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_HLP) = "ON" THEN
  274.             AddSectionKeyFileToCopyList "Optional Helpfiles", SETUP_INF_HELPFILE_HLP$, SrcDir$, DESTPATH_TEXT$
  275.         END IF
  276.         IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_DOC) = "ON" THEN
  277.             AddSectionKeyFileToCopyList "Optional Helpfiles", SETUP_INF_HELPFILE_DOC$, SrcDir$, DESTPATH_TEXT$
  278.         END IF
  279.         IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_WRI) = "ON" THEN
  280.             AddSectionKeyFileToCopyList "Optional Helpfiles", SETUP_INF_HELPFILE_WRI$, SrcDir$, DESTPATH_TEXT$
  281.         END IF
  282.         IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_TXT) = "ON" THEN
  283.             AddSectionKeyFileToCopyList "Optional Helpfiles", SETUP_INF_HELPFILE_TXT$, SrcDir$, DESTPATH_TEXT$
  284.         END IF
  285.     END IF
  286.     CreateDir DESTPATH_TEXT$, cmoNone
  287.     CopyFilesInCopyList
  288.     '' after successfully copying the files, now we remove any unneeded files
  289.     ClearCopyList
  290.        AddSectionFilesToCopyList "Remove Files", SrcDir$, DESTPATH_TEXT$
  291.     CopyFilesInCopyList
  292.     '' create Progman Group
  293.     IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_PROGMANGROUP) = "ON" THEN
  294.         '' Create Progman Group
  295.         CreateProgmanGroup PROGMANGROUP_TEXT$, "", cmoNone
  296.         ShowProgmanGroup  PROGMANGROUP_TEXT$, 1, cmoNone
  297.             IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_WINFREE) = "ON" THEN
  298.             CreateProgmanItem PROGMANGROUP_TEXT$, "WinFree", MakePath(DESTPATH_TEXT$,"WINFREE.EXE"), "", cmoOverwrite
  299.             END IF
  300.             IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_HELPFILES) = "ON" THEN
  301.                 IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_HLP) = "ON" THEN
  302.                 CreateProgmanItem PROGMANGROUP_TEXT$, "WinFree Help", MakePath(DESTPATH_TEXT$,"WINFREE.HLP"), "", cmoOverwrite
  303.                 END IF
  304.                 IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_DOC) = "ON" THEN
  305.                 CreateProgmanItem PROGMANGROUP_TEXT$, "WinFree WinWord Help Document", MakePath(DESTPATH_TEXT$,"WINFREE.DOC"), "", cmoOverwrite
  306.                 END IF
  307.                 IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_WRI) = "ON" THEN
  308.                 CreateProgmanItem PROGMANGROUP_TEXT$, "WinFree Write Help Document", MakePath(DESTPATH_TEXT$,"WINFREE.WRI"), "", cmoOverwrite
  309.                 END IF
  310.                 IF GetListItem (CHECK_CHECKSTATES_CLOSEDLG$, CHK_INDEX_HELPFILE_TXT) = "ON" THEN
  311.                 CreateProgmanItem PROGMANGROUP_TEXT$, "WinFree ASCII Help Document", MakePath(DESTPATH_TEXT$,"WINFREE.TXT"), "", cmoOverwrite
  312.                 END IF
  313.             END IF
  314.     END IF
  315.     '' Update WIN.INI, Section [Windows] key load=    
  316.     IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_WINFREE) = "ON" THEN
  317.       keyString$ = GetIniKeyString ("WIN.INI", "WINDOWS", "LOAD")
  318.       IF keyString$ = "" THEN
  319.           CreateIniKeyValue "WIN.INI", "WINDOWS", "load", RTRIM$ (LTRIM$ (MakePath(DESTPATH_TEXT$,"WINFREE.EXE"))), cmoOverwrite
  320.       ELSE
  321.           keyString$ = LTRIM$ (RTRIM$ (keyString$))
  322.           IF INSTR (UCASE$ (keyString$), "WINFREE") = 0 THEN    ''winfree not in entry
  323.               keyString$ = RTRIM$ (LTRIM$ (MakePath(DESTPATH_TEXT$,"WINFREE.EXE"))) + " " + RTRIM$ (LTRIM$ (keyString$))
  324.               CreateIniKeyValue "WIN.INI", "WINDOWS", "load", keyString$, cmoOverwrite          
  325.           ELSE '' keyString$ not empty and winfree is in keyString$ -> remove winfree-entry
  326.               keyVal$ = ""
  327.               nextVal$ = GetNthFieldFromIniStringEx (keyString$, 1)
  328.               i% = 2
  329.               WHILE nextVal$ <> ""  '' search for an already existing winfree -> remove it
  330.                   IF INSTR (UCASE$ (nextVal$), "WINFREE") = 0 THEN    ''not found
  331.                       IF keyVal$ = "" THEN
  332.                           keyVal$ = RTRIM$ (LTRIM$ (nextVal$))
  333.                       ELSE
  334.                           keyVal$ = RTRIM$ (LTRIM$ (keyVal$)) + " " + RTRIM$ (LTRIM$ (nextVal$))
  335.                       END IF
  336.                   END IF 
  337.                   nextVal$ = GetNthFieldFromIniStringEx (keyString$, i%)
  338.                   i% = i% + 1
  339.               WEND
  340.               keyVal$ = MakePath(DESTPATH_TEXT$,"WINFREE.EXE") + " " + keyVal$
  341.               CreateIniKeyValue "WIN.INI", "WINDOWS", "load", keyVal$, cmoOverwrite          
  342.             END IF
  343.           END IF
  344.     END IF
  345.     '' Update WIN.INI, Section [Windows] key run=; remove any winfree entry in the list
  346.     IF GetListItem (CUSTINST_CHECKSTATES$, CHK_INDEX_WINFREE) = "ON" THEN
  347.       keyString$ = GetIniKeyString ("WIN.INI", "WINDOWS", "RUN")
  348.       IF keyString$ <> "" THEN
  349.           keyString$ = LTRIM$ (RTRIM$ (keyString$))
  350.           IF INSTR (UCASE$ (keyString$), "WINFREE") <> 0 THEN    '' keyString$ not empty and winfree is in keyString$ -> remove winfree-entry
  351.               keyVal$ = ""
  352.               nextVal$ = GetNthFieldFromIniStringEx (keyString$, 1)
  353.               i% = 2
  354.               WHILE nextVal$ <> ""  '' search for an already existing winfree -> remove it
  355.                   IF INSTR (UCASE$ (nextVal$), "WINFREE") = 0 THEN    ''not found
  356.                       IF keyVal$ = "" THEN
  357.                           keyVal$ = RTRIM$ (LTRIM$ (nextVal$))
  358.                       ELSE
  359.                           keyVal$ = RTRIM$ (LTRIM$ (keyVal$)) + " " + RTRIM$ (LTRIM$ (nextVal$))
  360.                       END IF
  361.                   END IF 
  362.                   nextVal$ = GetNthFieldFromIniStringEx (keyString$, i%)
  363.                   i% = i% + 1
  364.               WEND
  365.               CreateIniKeyValue "WIN.INI", "WINDOWS", "run", keyVal$, cmoOverwrite          
  366.             END IF
  367.           END IF
  368.     END IF
  369.     '' if winfree is already running and can't be overwritten, windows must be exited
  370.     IF RestartListEmpty =  0 THEN
  371.             k% = DoMsgBox("WinFree Setup has to exit Windows to finish the installation properly", "Marwin Consulting Setup", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  372.         i% = ExitExecRestart ()
  373.     END IF 
  374.     GOTO QUIT
  375.  
  376. BADPATH:
  377.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  378.     IF sz$ = "REACTIVATE" THEN
  379.         GOTO BADPATH
  380.     END IF
  381.     UIPop 1
  382.     RETURN
  383.  
  384. ASKQUIT:
  385.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  386.  
  387.     IF sz$ = "EXIT" THEN
  388.         UIPopAll
  389.         ERROR STFQUIT
  390.     ELSEIF sz$ = "REACTIVATE" THEN
  391.         GOTO ASKQUIT
  392.     ELSE
  393.         UIPop 1
  394.     END IF
  395.     RETURN
  396.  
  397. QUIT:
  398.     ON ERROR GOTO ERRQUIT
  399.  
  400.     IF ERR = 0 THEN
  401.         dlg% = EXITSUCCESS
  402.     ELSEIF ERR = STFQUIT THEN
  403.         dlg% = EXITQUIT
  404.     ELSE
  405.         dlg% = EXITFAILURE
  406.     END IF
  407. QUITL1:
  408.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  409.     IF sz$ = "REACTIVATE" THEN
  410.         GOTO QUITL1
  411.     END IF
  412.     UIPop 1
  413.  
  414.     END
  415.  
  416. ERRQUIT:
  417.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  418.     END
  419.  
  420.  
  421.  
  422. '**
  423. '** Purpose:
  424. '**     Adds the specified option files to the copy list.
  425. '** Arguments:
  426. '**     ftype%  - type of files to add, one of the following:
  427. '**             FILES, OPTIONAL_HELPFILES
  428. '** Returns:
  429. '**     none.
  430. '*************************************************************************
  431. SUB AddOptFilesToCopyList (ftype%) STATIC
  432.  
  433.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  434.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  435.         IF ftype% = FILES THEN
  436.             AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  437.         ELSEIF ftype% = OPTIONAL_HELPFILES THEN
  438.             AddSectionKeyFileToCopyList "Optional Helpfiles", HELPFILES_SELECTIONLIST$, SrcDir$, DEST$
  439.         END IF
  440.         SrcDir$ = ""
  441.     END IF
  442. END SUB
  443.  
  444.  
  445. '**
  446. '** Purpose:
  447. '**     Recalculates disk space for the given option files and sets
  448. '**     the status info symbol "StatusItemsText".
  449. '** Arguments:
  450. '**     ftype% - type of files to add, one of the following:
  451. '**             FILES, OPTIONAL_HELPFILES
  452. '** Returns:
  453. '**     none.
  454. '*************************************************************************
  455. SUB RecalcOptFiles (ftype%) STATIC
  456.     CursorSave% = ShowWaitCursor()
  457.     ClearCopyList
  458.     AddOptFilesToCopyList ftype%
  459.  
  460.     fExtra% = 0
  461.     IF ftype% = FILES THEN
  462.         ListSym$ = APPNEEDS$
  463.         IF GetListItem(CHECKSTATES$, FILES) = "ON" THEN
  464.             ''Add extra cost to Windows drive for ini/progman, etc.
  465.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  466.             ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  467.             fExtra% = 1
  468.         END IF
  469.     ELSEIF ftype% = OPTIONAL_HELPFILES THEN
  470.         ListSym$ = HELPFILES_SELECTIONLIST$
  471.     END IF
  472.  
  473.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  474.  
  475.     cost& = 0
  476.     FOR i% = 1 TO 26 STEP 1
  477.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  478.     NEXT i%
  479.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  480.  
  481.     IF StillNeed& > 0 THEN
  482.         ReplaceListItem BIGLIST$, ftype%, "YES"
  483.     ELSE
  484.         ReplaceListItem BIGLIST$, ftype%, ""
  485.     END IF
  486.  
  487.     IF fExtra% THEN
  488.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  489.     END IF
  490.     RestoreCursor CursorSave%
  491.     ListSym$ = ""
  492. END SUB
  493.  
  494.  
  495. '**
  496. '** Purpose:
  497. '**     Recalculates disk space and sets option status info according
  498. '**     to the current destination path.
  499. '** Arguments:
  500. '**     none.
  501. '** Returns:
  502. '**     none.
  503. '*************************************************************************
  504. SUB RecalcPath STATIC
  505.  
  506.     CursorSave% = ShowWaitCursor()
  507.  
  508.     RecalcOptFiles FILES
  509.     RecalcOptFiles OPTIONAL_HELPFILES
  510.  
  511.     RestoreCursor CursorSave%
  512. END SUB
  513.  
  514.  
  515. '**
  516. '** Purpose:
  517. '**     Sets drive status info according to latest disk space calcs.
  518. '** Arguments:
  519. '**     none.
  520. '** Returns:
  521. '**     none.
  522. '*************************************************************************
  523. SUB SetDriveStatus STATIC
  524.  
  525.     drive$ = MID$(DEST$, 1, 1)
  526.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  527.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(HELPFILESNEEDS$, ndrive%))
  528.     free& = GetFreeSpaceForDrive(drive$)
  529.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  530.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  531.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  532.  
  533.     IF drive$ = WINDRIVE$ THEN
  534.         ReplaceListItem DRIVETEXT$, 4, ""
  535.         ReplaceListItem DRIVETEXT$, 5, ""
  536.         ReplaceListItem DRIVETEXT$, 6, ""
  537.     ELSE
  538.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  539.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(HELPFILESNEEDS$, ndrive%))
  540.         IF cost& = 0 THEN
  541.             ReplaceListItem DRIVETEXT$, 4, ""
  542.             ReplaceListItem DRIVETEXT$, 5, ""
  543.             ReplaceListItem DRIVETEXT$, 6, ""
  544.         ELSE
  545.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  546.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  547.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  548.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  549.         END IF
  550.     END IF
  551. END SUB
  552.  
  553.  
  554. '**
  555. '** Purpose:
  556. '**     Appends a file name to the end of a directory path,
  557. '**     inserting a backslash character as needed.
  558. '** Arguments:
  559. '**     szDir$  - full directory path (with optional ending "\")
  560. '**     szFile$ - filename to append to directory
  561. '** Returns:
  562. '**     Resulting fully qualified path name.
  563. '*************************************************************************
  564. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  565.     IF szDir$ = "" THEN
  566.         MakePath = szFile$
  567.     ELSEIF szFile$ = "" THEN
  568.         MakePath = szDir$
  569.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  570.         MakePath = szDir$ + szFile$
  571.     ELSE
  572.         MakePath = szDir$ + "\" + szFile$
  573.     END IF
  574. END FUNCTION
  575.  
  576. '*************************************************************************
  577. FUNCTION GetNthFieldFromIniStringEx (szLine$, iField%) STATIC AS STRING
  578.     IF iField% < 1 THEN
  579. '$ifdef DEBUG
  580.         StfApiErr saeFail, "GetNthFieldFromIniStringEx", szLine$+", "+STR$(iField%)
  581. '$endif ''DEBUG
  582.         ERROR STFERR
  583.     END IF
  584.     szStart$ = szLine$
  585.     IF iField% <> 1 THEN
  586.         FOR i% = 2 TO iField% STEP 1
  587.             iNew% = INSTR(szStart$, ",")
  588.             IF iNew% = 0 THEN
  589.                     iNew% = INSTR(szStart$, " ")
  590.                     IF iNew% = 0 THEN
  591.                     GetNthFieldFromIniStringEx = ""
  592.                     GOTO _GNFFIS_END
  593.                   END IF 
  594.             END IF
  595.             szStart$ = LTRIM$ (MID$(szStart$, (iNew% + 1)))
  596.         NEXT
  597.     END IF
  598.  
  599.     iNew% = INSTR(szStart$, ",")
  600.     IF iNew% <> 0 THEN
  601.         szStart$ = LTRIM$ (MID$(szStart$, 1, (iNew% - 1)))
  602.     ELSE
  603.              iNew% = INSTR(szStart$, " ")
  604.             IF iNew% <> 0 THEN
  605.                 szStart$ = LTRIM$ (MID$(szStart$, 1, (iNew% - 1)))
  606.             END IF
  607.     END IF
  608.  
  609.     GetNthFieldFromIniStringEx = LTRIM$(RTRIM$(szStart$))
  610.  
  611. _GNFFIS_END:
  612.  
  613. END FUNCTION
  614.