home *** CD-ROM | disk | FTP | other *** search
/ Program Metropolis - Software Boutique 95 / SOFTWARECD.iso / ccmail / user.mst < prev    next >
Encoding:
Text File  |  1994-04-13  |  49.3 KB  |  1,431 lines

  1. '************************************************************************
  2. '*                                                                      *
  3. '*               cc:Mail Workstation Installation Script                *
  4. '*                                                                      *
  5. '************************************************************************
  6.  
  7.  
  8. '*-------------------------------------------------------------------------
  9. '*  Includes
  10. '*-------------------------------------------------------------------------
  11.  
  12. '$INCLUDE 'setupapi.inc'
  13. '$INCLUDE 'msdetect.inc'
  14. '$INCLUDE 'winstall.inc'
  15.  
  16. '$INCLUDE 'wutil.mst'
  17.  
  18. '*-------------------------------------------------------------------------
  19. '*  Subroutine/Function Declarations
  20. '*-------------------------------------------------------------------------
  21.  
  22. DECLARE SUB ReadInstallINI
  23. DECLARE SUB DoesMailExist
  24. DECLARE SUB Install
  25. DECLARE SUB SetupProg
  26. DECLARE SUB DoAskQuit
  27. DECLARE SUB SayTooBig
  28. DECLARE SUB SetupWMailIni
  29. DECLARE SUB SetupLotusIni
  30. DECLARE SUB AddPath
  31. DECLARE SUB CheckEnvironment
  32.  
  33. DECLARE FUNCTION InitFunc    AS INTEGER
  34. DECLARE FUNCTION GetUserInfo AS INTEGER
  35. DECLARE FUNCTION GetOptions  AS INTEGER
  36. DECLARE FUNCTION EnoughSpace AS INTEGER
  37. DECLARE FUNCTION SetupWinIni AS INTEGER
  38.  
  39. DECLARE FUNCTION SetIniKey (sz$, sz$, sz$)        AS INTEGER
  40. DECLARE FUNCTION CheckFileVersion (sz$, sz$, sz$) AS INTEGER
  41.  
  42. DECLARE FUNCTION AsciiToInt         LIB "mscuistf.dll" (sz$)          AS INTEGER
  43. DECLARE FUNCTION IntToAscii         LIB "mscuistf.dll" (i%,sz$)       AS LONG
  44. DECLARE FUNCTION SzToUpper          LIB "mscuistf.dll" (sz$)          AS INTEGER
  45. DECLARE FUNCTION wCopyDir           LIB "mscuistf.dll" (sz$,sz$,n%)   AS INTEGER
  46. DECLARE FUNCTION wsAddGroup         LIB "mscuistf.dll" (nHinst%,sz$)  AS INTEGER
  47. DECLARE FUNCTION wsCloseGroup       LIB "mscuistf.dll" (sz$)          AS INTEGER
  48. DECLARE FUNCTION wsAddItem          LIB "mscuistf.dll" (sz$,sz$)      AS INTEGER
  49. DECLARE FUNCTION SetFrame           LIB "mscuistf.dll" (nHwndFrame%)  AS INTEGER
  50. DECLARE FUNCTION SetInst            LIB "mscuistf.dll" (nHwndInst%)   AS INTEGER
  51. DECLARE FUNCTION bSetPathInAutoExec LIB "mscuistf.dll" (sz$,n%) AS INTEGER
  52. DECLARE FUNCTION bRenameAutoExec    LIB "mscuistf.dll" () AS INTEGER
  53. DECLARE FUNCTION SetFileTimeForDir  LIB "mscuistf.dll" (sz$,sz$,n%)  AS INTEGER
  54. DECLARE FUNCTION wsAddCmdLine       LIB "mscuistf.dll" (sz$,sz$,sz$,sz$,sz$) AS INTEGER
  55. DECLARE FUNCTION CheckMailEngVer LIB "mscuistf.dll" (sz$, sz$) AS INTEGER
  56. DECLARE FUNCTION MaximizeWindow     LIB "mscuistf.dll" (n%) AS INTEGER
  57. DECLARE FUNCTION GetDriveCurrentDir LIB "mscuistf.dll" (sz$,sz$) AS INTEGER
  58. DECLARE FUNCTION MeLogin            LIB "mscuistf.dll" (sz$,sz$,sz$) AS INTEGER
  59. DECLARE FUNCTION wCopyCannedFiles   LIB "mscuistf.dll" (sz$,sz$,sz$) AS INTEGER
  60. DECLARE FUNCTION DeleteDir          LIB "mscuistf.dll" (sz$) AS INTEGER
  61. DECLARE FUNCTION fileExists         LIB "mscuistf.dll" (sz$) AS INTEGER
  62. DECLARE FUNCTION ProgressBegin      LIB "mscuistf.dll" (sz$,sz$) AS LONG
  63. DECLARE FUNCTION ProgressEnd        LIB "mscuistf.dll" (n%) AS INTEGER
  64. DECLARE FUNCTION ProgressUpdate     LIB "mscuistf.dll" (n%,sz$) AS INTEGER
  65. DECLARE FUNCTION RemoveKeyFromStr   LIB "mscuistf.dll" (sz$,sz$) AS INTEGER
  66.  
  67.  
  68. '*-------------------------------------------------------------------------
  69. '*  Defines
  70. '*-------------------------------------------------------------------------
  71.  
  72. ''$DEFINE DEBUG            ''Define for script development/debugging
  73.  
  74. CONST CUIDLL$      = "mscuistf.dll"     ''Custom user interface dll
  75. CONST HELPPROC$    = "FHelpDlgProc"     ''Help dialog procedure
  76.  
  77. CONST FILETIME           = "0200"
  78.  
  79. CONST TOTALSPACENEEDED   = 4730000
  80. CONST SPACENEEDED        = 160000
  81.  
  82. CONST FILE_MISSING = 0
  83. CONST FILE_OLDER   = 1
  84. CONST FILE_SAME    = 2
  85. CONST FILE_NEWER   = 3
  86.  
  87.  
  88. '*-------------------------------------------------------------------------
  89. '*  String Constants / Messages
  90. '*-------------------------------------------------------------------------
  91.  
  92. CONST VERSION$              = "200"        '' Mail version number in Win.INI
  93. CONST GROUP_TITLE$          = "cc:Mail"
  94. CONST MAIL_DESCRIPTION$     = "cc:Mail 2.0"
  95. CONST SETUP_DESCRIPTION$    = "cc:Mail Setup"
  96.  
  97. CONST PATH_PO$              = "M:\CCDATA"
  98.  
  99. CONST FILE_WIN_INI$         = "Win.INI"
  100. CONST FILE_INSTALL_INI$     = "Install.INI"
  101.  
  102. CONST INI_SECTION$          = "cc:Mail Setup"
  103. CONST INI_DFLPOPATH$        = "DFLPOPath"
  104. CONST INI_DFLWMAILPATH$     = "DFLWMailPath"
  105. CONST INI_DFLUSERPATH$      = "DFLUserPath"
  106. CONST INI_NOPROMPT$         = "NoPrompt"
  107. CONST INI_COPYALLFILES$     = "CopyAllFiles"
  108. CONST INI_CREATEICON$       = "CreateIcon"
  109. CONST INI_COMMANDLINE$      = "CommandLine"
  110. CONST INI_REMOVEOLDINFO$    = "RemoveOldInfo"
  111. CONST INI_WINDOWSECTION$    = "windows"
  112.  
  113. CONST INI_CCMAILSECTION$    = "cc:Mail"
  114. CONST INI_CC1DIR$           = "CC1DIR"
  115. CONST INI_NAME$             = "Name"
  116.  
  117. ''
  118. ''  Dialog messages /titles
  119. ''
  120.  
  121. CONST STR_ABOUTSTR$    = "Copyright (C) 1993 Lotus Development Corporation."
  122. CONST STR_TITLE$       = "cc:Mail Version 2.0 - Workstation Installation"
  123. CONST STR_ERRTITLE$    = "cc:Mail Setup Error"
  124. CONST STR_CORRUPT$     = "Setup sources were corrupted!"
  125. CONST STR_MAILENABLED$ = "cc:Mail Setup has mail-enabled your Lotus applications."
  126.  
  127.  
  128. '*-------------------------------------------------------------------------
  129. '*  Variables
  130. '*-------------------------------------------------------------------------
  131.  
  132. '*  Integer
  133.  
  134. GLOBAL nHwndFrame%      ''Handle to frame window
  135. GLOBAL nHinst%          ''Application instance
  136. GLOBAL nReturn%         ''Return code for functions
  137. GLOBAL nFlag%   
  138. GLOBAL nMaxArchive%
  139. GLOBAL nTotalApp%
  140. GLOBAL nCursor%
  141. GLOBAL nMailExist%      ''Flag to indicate if cc:Mail already exists
  142.                         ''0 = not exist, 1 = older version, 2 = re-install
  143. GLOBAL bOlder%
  144. GLOBAL bNewer%
  145. GLOBAL bMissing%
  146. GLOBAL hwndProg%
  147. GLOBAL bNeedRestart%
  148.  
  149. '*  Long
  150.  
  151. GLOBAL lReturn&
  152. GLOBAL lSpaceAvailable&
  153. GLOBAL lSpaceRequired&
  154.  
  155. '*  Strings
  156.  
  157. GLOBAL szWindowDir$     ''Windows directory
  158. GLOBAL SrcDir$          ''Default source directory
  159. GLOBAL szProgFileDir$   ''Program File Directory
  160. GLOBAL szPODir$         ''Post Office Directory
  161. GLOBAL szUserDir$       ''User directory
  162. GLOBAL szCopyAllFiles$  ''Flag for copying all program files
  163. GLOBAL szIniCopyAllFiles$
  164. GLOBAL szWMailPath$     ''WMail.ini path
  165. GLOBAL szUserName$      ''User name
  166. GLOBAL szTempPath$      ''Tempoaray variable for path
  167. GLOBAL szTemp1$         
  168. GLOBAL szTemp2$
  169. GLOBAL szTemp3$
  170. GLOBAL szVersion$       ''Version number string
  171. GLOBAL szKey$
  172. GLOBAL szRemoveIniInfo$ ''Flag for removing old info from Win.ini
  173. GLOBAL szIcon$
  174. GLOBAL szCmdLine$       
  175. GLOBAL szNoPrompt$      ''Don't prompt the user
  176. GLOBAL szUserID$
  177. GLOBAL szLocalProgPath$ ''Path to local program file directory
  178. GLOBAL szCCMailDir$
  179.  
  180.  
  181.  
  182. '************************************************************************
  183. '*                                                                      *
  184. '*                            Start                                     *
  185. '*                                                                      *
  186. '************************************************************************
  187.  
  188.     '*---------------------------------------------------------------------
  189.     '*  Initialization
  190.     '*---------------------------------------------------------------------
  191.  
  192. INIT:
  193.     IF InitFunc = 0 THEN
  194.         GOTO QUIT
  195.     END IF
  196.  
  197.  
  198.     '*---------------------------------------------------------------------
  199.     '*  Check Windows version, don't install if 3.0 or below
  200.     '*---------------------------------------------------------------------
  201.  
  202.     IF CheckWinVer = 0 THEN
  203.         GOTO QUIT
  204.     END IF
  205.  
  206.  
  207.     '*---------------------------------------------------------------------
  208.     '*  Welcome
  209.     '*---------------------------------------------------------------------
  210.     
  211.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "WelcomeDlgProc", HELP_WKWELCOME, HELPPROC$)
  212.     UIPop 1
  213.     IF sz$ = "EXIT" THEN
  214.         END
  215.     END IF
  216.  
  217.  
  218.     '*---------------------------------------------------------------------
  219.     '*  Main Menu
  220.     '*---------------------------------------------------------------------
  221.  
  222.     MAINMENU_LABEL:
  223.  
  224.     SetSymbolValue "SourceDir", SrcDir$
  225.     sz$ = UIStartDlg(CUIDLL$, WKSTMENU, "WkMenuDlgProc", HELP_WKSTMENU, HELPPROC$)
  226.     IF sz$ = "WkInst" THEN
  227.         UIPop(1)
  228.     ELSEIF sz$ = "REACTIVATE" THEN
  229.         GOTO MAINMENU_LABEL
  230.     ELSE
  231.         END
  232.     END IF
  233.  
  234.  
  235.     '*---------------------------------------------------------------------
  236.     '*  Retrieve defaults from Install.INI, if any
  237.     '*---------------------------------------------------------------------
  238.  
  239.     ReadInstallINI
  240.  
  241.  
  242.     '*---------------------------------------------------------------------
  243.     '*  Check if cc:Mail has already been installed
  244.     '*---------------------------------------------------------------------
  245.  
  246.     DoesMailExist
  247.  
  248.  
  249.     '*---------------------------------------------------------------------
  250.     '*  Get user information
  251.     '*---------------------------------------------------------------------
  252.  
  253.     GETUSERINFO_LABEL:
  254.  
  255.     IF GetUserInfo = 0 THEN
  256.         GOTO MAINMENU_LABEL
  257.     END IF
  258.  
  259.  
  260.     '*---------------------------------------------------------------------
  261.     '*  Installation options
  262.     '*---------------------------------------------------------------------
  263.  
  264.     GETOPTIONS_LABEL:
  265.  
  266.     IF GetOptions = 0 THEN
  267.         GOTO GETUSERINFO_LABEL
  268.     END IF
  269.  
  270.  
  271.     '*---------------------------------------------------------------------
  272.     '*  Check for enough disk space
  273.     '*---------------------------------------------------------------------
  274.  
  275.     IF EnoughSpace = 0 THEN
  276.         SayTooBig
  277.         GOTO GETUSERINFO_LABEL
  278.     END IF
  279.  
  280.  
  281.     '*---------------------------------------------------------------------
  282.     '*  Set up [cc:Mail] information in Win.INI
  283.     '*---------------------------------------------------------------------
  284.  
  285.     IF SetupWinIni = 0 THEN
  286.         GOTO GETUSERINFO_LABEL
  287.     END IF
  288.  
  289.  
  290.     '*---------------------------------------------------------------------
  291.     '*  Copy the files
  292.     '*---------------------------------------------------------------------
  293.  
  294.     Install
  295.  
  296.     n% = ProgressUpdate(hwndProg%, "Configuring cc:Mail...")
  297.  
  298.  
  299.     '*---------------------------------------------------------------------
  300.     '*  Set up information in WMail.INI
  301.     '*---------------------------------------------------------------------
  302.  
  303.     SetupWMailIni
  304.  
  305.  
  306.     '*---------------------------------------------------------------------
  307.     '*  Set cc:Mail program path in Lotus.Ini.
  308.     '*---------------------------------------------------------------------
  309.  
  310.     SetupLotusIni
  311.  
  312.  
  313.     '*---------------------------------------------------------------------
  314.     '*  Build the program group/icon and set up properties if needed
  315.     '*---------------------------------------------------------------------
  316.  
  317.     SetupProg
  318.  
  319.     n% = ProgressEnd(hwndProg%)
  320.     RestoreCursor nCursor%
  321.  
  322.  
  323.     '*---------------------------------------------------------------------
  324.     '*  Put the program directory into the Path variable in Autoexec.bat
  325.     '*---------------------------------------------------------------------
  326.  
  327.     AddPath
  328.  
  329.  
  330.     '*---------------------------------------------------------------------
  331.     '*  Check if the TEMP environment variable is set
  332.     '*---------------------------------------------------------------------
  333.     
  334.     CheckEnvironment
  335.     
  336.  
  337.     '*---------------------------------------------------------------------
  338.     '*  Check if FILES in CONFIG.SYS is at least 30.
  339.     '*---------------------------------------------------------------------
  340.  
  341.     IF GetConfigNumFiles < 30 THEN
  342.         sz$ = UIStartDlg(CUIDLL$, WARN_FILECONFIG, "TempDirDlgProc", 0, "")
  343.         UIPop 1
  344.     END IF
  345.  
  346.  
  347.     '*---------------------------------------------------------------------
  348.     '*  Done
  349.     '*---------------------------------------------------------------------
  350.  
  351. QUIT:
  352.     ON ERROR GOTO ERRQUIT
  353.  
  354.     IF ERR = 0 THEN
  355.         IF bNeedRestart% = 1 THEN
  356.             dlg% = EXITSUCCESS
  357.         ELSE
  358.             dlg% = EXITSUCCESS_NORESTART
  359.         END IF
  360.     ELSEIF ERR = STFQUIT THEN
  361.         dlg% = EXITQUIT
  362.     ELSE
  363.         dlg% = EXITFAILURE
  364.     END IF
  365.  
  366. QUITL1:
  367.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  368.     IF sz$ = "REACTIVATE" THEN
  369.         GOTO QUITL1
  370.     END IF
  371.     UIPop 1
  372.  
  373.     '*---------------------------------------------------------------------
  374.     '*  Exit
  375.     '*---------------------------------------------------------------------
  376.  
  377. DONE:
  378.     END
  379.  
  380.  
  381.  
  382. '*************************************************************************
  383. '**
  384. '** ERRQUIT - exit on error
  385. '**
  386. '*************************************************************************
  387.  
  388.     ERRQUIT:
  389.     
  390.     i% = DoMsgBox(STR_CORRUPT$, STR_ERRTITLE$, MB_OK + MB_TASKMODAL + MB_ICONHAND)
  391.     END
  392.  
  393.  
  394. '*************************************************************************
  395. '**
  396. '** InitFunc
  397. '**     - initialization
  398. '**
  399. '*************************************************************************
  400.  
  401. FUNCTION InitFunc STATIC AS INTEGER
  402.  
  403.     n% = MaximizeWindow(HwndFrame())
  404.  
  405.     SetAbout STR_TITLE$, STR_ABOUTSTR$
  406.  
  407.     SetBitmap CUIDLL$, BMP_LOTUS
  408.     SetTitle  STR_TITLE$
  409.  
  410.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  411.     IF szInf$ = "" THEN
  412.         szInf$ = GetSymbolValue("STF_CWDDIR") + "USER.INF"
  413.     END IF
  414.     ReadInfFile szInf$
  415.  
  416.     ''
  417.     '' Remember the frame window handle and instance
  418.     ''
  419.     nHinst%     = HinstFrame()
  420.     nHwndFrame% = HwndFrame()
  421.     nReturn%    = SetFrame(nHwndFrame%)
  422.     nReturn%    = SetInst(nHinst%)
  423.     bNeedRestart% = 0
  424.  
  425.     ''
  426.     '' Defaults for paths
  427.     ''
  428.     SrcDir$      = GetSymbolValue("STF_SRCDIR")
  429.     szWindowDir$ = GetWindowsDir()              
  430.     szCCMailDir$ = szWindowDir$ + "CCMAIL"      '' default cc:Mail directory
  431.  
  432.     InitFunc = 1
  433.  
  434. END FUNCTION
  435.  
  436.  
  437. '*************************************************************************
  438. '**
  439. '** ReadInstallINI:
  440. '**     Retrieve default values from Install.INI, if any
  441. '**
  442. '*************************************************************************
  443.  
  444. SUB ReadInstallINI STATIC
  445.  
  446.     szTempPath$ = SrcDir$ + FILE_INSTALL_INI
  447.  
  448.     ''  Post office directory
  449.     ''
  450.     szPODir$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_DFLPOPATH$)
  451.     IF szPODir$ = "" THEN
  452.         szPODir$ = PATH_PO$
  453.     END IF
  454.  
  455.     ''  Program file directory
  456.     ''
  457.     szProgFileDir$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_DFLWMAILPATH$)
  458.     szProgFileDir$ = ucase$(szProgFileDir$)
  459.  
  460.     ''  User directory - if not specified, default to CCMAIL\CC1DIR 
  461.     ''  under Windows directory
  462.     ''  
  463.     szUserDir$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_DFLUSERPATH$)
  464.     IF szUserDir$ = "" THEN
  465.         szUserDir$ = AppendPath$(szCCMailDir$, INI_CC1DIR$)
  466.     END IF
  467.     szUserDir$ = ucase$(szUserDir$)
  468.  
  469.     ''  User name
  470.     ''
  471.     szUserName$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_NAME$)
  472.  
  473.     ''  Prompting?
  474.     ''
  475.     szNoPrompt$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_NOPROMPT$)
  476.     IF szNoPrompt$ = "" THEN
  477.         szNoPrompt$ = "N"
  478.     ELSE
  479.         szNoPrompt$ = ucase$(szNoPrompt$)
  480.     END IF
  481.  
  482.     ''  Authorized to copy executables to local drive?
  483.     ''
  484.     szIniCopyAllFiles$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_COPYALLFILES$)
  485.     IF szIniCopyAllFiles$ = "" THEN
  486.         szIniCopyAllFiles$ = "N"
  487.     ELSE
  488.         szIniCopyAllFiles$ = ucase$(szIniCopyAllFiles$)
  489.     END IF
  490.     szCopyAllFiles$ = szIniCopyAllFiles$
  491.  
  492.     ''  Create new icon after installation?
  493.     ''
  494.     szIcon$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_CREATEICON$)
  495.     IF szIcon$ = "" THEN
  496.         szIcon$ = "Y"
  497.     ELSE
  498.         szIcon$ = ucase$(szIcon$)
  499.     END IF
  500.  
  501.     ''  Set up command line?
  502.     ''
  503.     szCmdLine$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_COMMANDLINE$)
  504.     IF szCmdLine$ = "" THEN
  505.         szCmdLine$ = "Y"
  506.     ELSE
  507.         szCmdLine$ = ucase$(szCmdLine$)
  508.     END IF
  509.  
  510.     ''  Remove old information?
  511.     ''
  512.     szRemoveIniInfo$ = GetIniKeyString(szTempPath$, INI_SECTION$, INI_REMOVEOLDINFO$)
  513.     IF szRemoveIniInfo$ = "" THEN
  514.         szRemoveIniInfo$ = "N"
  515.     ELSE
  516.         szRemoveIniInfo$ = ucase$(szRemoveIniInfo$)
  517.     END IF
  518.  
  519. END SUB
  520.  
  521.  
  522. '*************************************************************************
  523. '**
  524. '** DoesMailExist:
  525. '**     Check if cc:Mail already exists.  If yes, check if it is an 
  526. '**     older version or a re-installation of this version.
  527. '**
  528. '*************************************************************************
  529.  
  530. SUB DoesMailExist STATIC
  531.  
  532.     nMailExist% = 0
  533.  
  534.     ''  Does the [cc:Mail] section exist in Win.INI?
  535.     ''
  536.     IF DoesIniSectionExist(FILE_WIN_INI$, INI_CCMAILSECTION$) = 1 THEN
  537.         nMailExist% = 1
  538.         ''
  539.         '' Does the version number exist? 
  540.         ''
  541.         IF DoesIniKeyExist(FILE_WIN_INI$, INI_CCMAILSECTION$, "PROGVER") = 1 THEN
  542.             ''
  543.             '' Check the version number
  544.             ''
  545.             szVersion$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, "PROGVER")
  546.             IF szVersion$ = VERSION$ THEN
  547.                 nMailExist% = 2
  548.             END IF
  549.         END IF
  550.     END IF
  551.  
  552. END SUB
  553.  
  554.  
  555. '*************************************************************************
  556. '**
  557. '** GetUserInfo
  558. '**     Prompt for user information
  559. '**
  560. '*************************************************************************
  561.  
  562. FUNCTION GetUserInfo STATIC AS INTEGER
  563.  
  564.     USERINFO_LABEL:
  565.  
  566.     SetSymbolValue "POPathOut",     szPODir$
  567.     SetSymbolValue "UserNameOut",   szUserName$
  568.     SetSymbolValue "UserPswdOut",   szPassword$
  569.     SetSymbolValue "ProgPathOut",   szProgFileDir$
  570.     SetSymbolValue "ccMailPathOut", szCCMailDir$
  571.  
  572.     IF szNoPrompt$ = "N" THEN
  573.  
  574.         USERINFO_DLG:
  575.  
  576.         sz$ = UIStartDlg(CUIDLL$, USERINFO, "UserInfoDlgProc", HELP_USERINFO, HELPPROC$)
  577.  
  578.         IF sz$ = "CONTINUE" THEN
  579.             szPODir$    = GetSymbolValue("POPathOut")
  580.             szUserName$ = GetSymbolValue("UserNameOut")
  581. ''            szPassword$ = GetSymbolValue("UserPswdOut")
  582.             szProgFileDir$ = GetSymbolValue("ProgPathOut")
  583.             szCCMailDir$ = GetSymbolValue("ccMailPathOut")
  584.  
  585.             ''
  586.             ''  Check if the post office path is valid.
  587.             ''
  588.             szTempPath$ = szPODir$ + "\MLANDATA"
  589.             IF fileExists(szTempPath$) = 0 THEN
  590.                 nReturn% = InvalidPath(szPODir$, "Not a post office directory")
  591.                 GOTO USERINFO_DLG
  592.             END IF
  593.             IF DoesFileExist(szTempPath$, femReadWrite) = 0 THEN
  594.                 UIPop 1
  595.                 nReturn% = InvalidPath(szPODir$, "Does not have read/write access")
  596.                 GOTO USERINFO_DLG
  597.             END IF
  598.  
  599.  
  600.             ''
  601.             ''  Don't check login because workstation setup may be run
  602.             ''  by the administrator.
  603.             ''
  604.             ''  IF MeLogin(szUserName$, szPassword$, szPODir$) = 0 THEN
  605.             ''      UIPop 1
  606.             ''      GOTO USERINFO_DLG
  607.             ''  END IF
  608.  
  609.             ''
  610.             ''  Check if the cc:Mail path only contains drive letter.  
  611.             ''  If yes, get the complete path.
  612.             ''
  613.             IF (LEN(szCCMailDir$) = 2) AND (INSTR(1, szCCMailDir$, ":")) THEN
  614.                 nReturn% = GetDriveCurrentDir(szCCMailDir$, szCCMailDir$)
  615.             END IF
  616.  
  617.             ''
  618.             ''  Check if the cc:Mail path is valid
  619.             ''
  620.             IF IsDriveValid(szCCMailDir$) = 0 THEN
  621.                 UIPop 1
  622.                 nReturn% = InvalidPath(szCCMailDir$, "Drive for cc:Mail directory is not valid")
  623.                 GOTO USERINFO_DLG
  624.             END IF
  625.             IF DoesDirExist(szCCMailDir$) = 0 THEN
  626.                 CreateDir szCCMailDir$, cmoNone
  627.                 IF DoesDirExist(szCCMailDir$) = 0 THEN
  628.                     UIPop 1
  629.                     nReturn% = InvalidPath(szCCMailDir$, "cc:Mail directory is not valid")
  630.                     GOTO USERINFO_DLG
  631.                 END IF
  632.             END IF
  633.  
  634.             ''
  635.             ''  Check if the program path is valid
  636.             ''
  637.             szTempPath$ = szProgFileDir$ + "\WMail.EXE"
  638.  
  639.             IF fileExists(szTempPath$) = 0 THEN
  640.                 UIPop 1
  641.                 nReturn% = InvalidPath(szProgFileDir$, "Cannot find program files")
  642.                 GOTO USERINFO_DLG
  643.             END IF
  644.  
  645.             UIPop 1
  646.  
  647.             '' 
  648.             ''  Update user directory variable
  649.             ''
  650.             szUserDir$ = AppendPath$(szCCMailDir$, "CC1DIR")
  651.  
  652.             GetUserInfo = 1
  653.  
  654.         ELSEIF sz$ = "REACTIVATE" THEN
  655.             GOTO USERINFO_DLG
  656.         ELSEIF sz$ = "BACK" THEN
  657.             UIPop 1
  658.             GetUserInfo = 0
  659.         ELSE
  660.             UIPop 1
  661.             DoAskQuit
  662.             GOTO USERINFO_DLG
  663.         END IF
  664.     END IF
  665.  
  666. END FUNCTION
  667.  
  668.  
  669.  
  670. '*************************************************************************
  671. '**
  672. '** GetOptions
  673. '**     Prompt for installation options
  674. '**
  675. '*************************************************************************
  676.  
  677. FUNCTION GetOptions STATIC AS INTEGER
  678.  
  679.     OPTIONS_INIT:
  680.  
  681.     SetSymbolValue "CopyAllFiles",     szCopyAllFiles$
  682.     SetSymbolValue "CreateIcon",       szIcon$
  683.     SetSymbolValue "CommandLine",      szCmdLine$
  684.     SetSymbolValue "RemoveOldInfo",    szRemoveIniInfo$
  685.     SetSymbolValue "LocalProgPathOut", szLocalProgPath$
  686.  
  687.     IF szNoPrompt$ = "N" THEN
  688.  
  689.         OPTIONS_DLG:
  690.  
  691.         IF szIniCopyAllFiles$ = "Y" THEN
  692.             sz$ = UIStartDlg(CUIDLL$, WKOPTIONS1, "WkOptions1DlgProc", HELP_WKOPTIONS1, HELPPROC$)
  693.         ELSE
  694.             sz$ = UIStartDlg(CUIDLL$, WKOPTIONS2, "WkOptions2DlgProc", HELP_WKOPTIONS2, HELPPROC$)
  695.         END IF
  696.          
  697.         IF sz$ = "CONTINUE" THEN
  698.             szCopyAllFiles$  = GetSymbolValue("CopyAllFiles")
  699.             szIcon$          = GetSymbolValue("CreateIcon")
  700.             szCmdLine$       = GetSymbolValue("CommandLine")
  701.             szLocalProgPath$ = GetSymbolValue("LocalProgPathOut")
  702.             szRemoveIniInfo$ = GetSymbolValue("RemoveOldInfo")
  703.  
  704.             SetSymbolValue "CopyAllFiles",  szCopyAllFiles$
  705.             SetSymbolValue "CreateIcon",    szIcon$
  706.             SetSymbolValue "CommandLine",   szCmdLine$
  707.             SetSymbolValue "LocalProgPathOut",   szLocalProgPath$
  708.             SetSymbolValue "RemoveOldInfo", szRemoveIniInfo$
  709.  
  710.             IF szCopyAllFiles$ = "Y" THEN
  711.                 IF IsDirWritable(szLocalProgPath$) = 0 THEN
  712.                     nReturn% = InvalidPath(szLocalProgPath$, "Invalid destination program path")
  713.                     UIPop 1
  714.                     GOTO OPTIONS_INIT
  715.                 END IF
  716.             END IF
  717.             UIPop 1
  718.  
  719.             GetOptions = 1
  720.  
  721.         ELSEIF sz$ = "REACTIVATE" THEN
  722.             GOTO OPTIONS_DLG
  723.         ELSEIF sz$ = "BACK" THEN
  724.             UIPop 1
  725.             GetOptions = 0
  726.         ELSE
  727.             UIPop 1
  728.             DoAskQuit
  729.             GOTO OPTIONS_DLG
  730.         END IF
  731.  
  732.     ELSE
  733.         GetOptions = 1
  734.     END IF
  735.  
  736. END FUNCTION
  737.  
  738.  
  739. '*************************************************************************
  740. '**
  741. '** EnoughSpace
  742. '**     Check if there is enough disk space 
  743. '**
  744. '*************************************************************************
  745.  
  746. FUNCTION EnoughSpace STATIC AS INTEGER
  747.  
  748.     IF szCopyAllFiles$ = "Y" THEN
  749.         lSpaceAvailable& = GetFreeSpaceForDrive(szLocalProgPath$)
  750.         lSpaceRequired& = TOTALSPACENEEDED
  751.     ELSE
  752.         lSpaceAvailable& = GetFreeSpaceForDrive(szUserDir$)
  753.         lSpaceRequired& = SPACENEEDED
  754.     ENDIF
  755.     IF lSpaceAvailable& < lSpaceRequired& THEN
  756.         EnoughSpace = 0
  757.     ELSE
  758.         EnoughSpace = 1
  759.     END IF
  760.  
  761. END FUNCTION
  762.  
  763.  
  764. '*************************************************************************
  765. '**
  766. '** SetupWinIni
  767. '**     Set up [cc:Mail] information in Win.INI
  768. '**
  769. '*************************************************************************
  770.  
  771. FUNCTION SetupWinIni STATIC AS INTEGER
  772.  
  773.     '*---------------------------------------------------------------------
  774.     '*  Set up new cc:Mail section
  775.     '*---------------------------------------------------------------------
  776.  
  777.     szuUserName$ = ucase$(szUserName$)
  778.  
  779.     IF nMailExist% = 2 THEN
  780.         ''
  781.         ''  If we're re-installing, need to retrieve the highest user ID 
  782.         ''  number and go through the list to see if this user already 
  783.         ''  existed.  If yes, modify the corresponding user entry.  
  784.         ''  Otherwise, create a new entry.
  785.         ''
  786.         szUserID$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, "LastIDUsed")
  787.         nReturn% = 0
  788.         nFlag% = AsciiToInt(szUserID$)
  789.         nOtherUserID% = 0
  790.         nSameUserFound% = 0
  791.  
  792.         FOR i% = 1 TO nFlag% STEP 1
  793.             lReturn& = IntToAscii(i%, szTemp2$) 
  794.             szKey$ = "User" + szTemp2$ + "Name"
  795.             szTemp1$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$)
  796.             szTemp1$ = ucase$(szTemp1$)
  797.             IF szTemp1$ = ucase$(szUserName$) THEN
  798.                 ''
  799.                 ''  User name found.  Compare post office directory 
  800.                 ''  to make sure it's really the same user.
  801.                 ''
  802.                 szTemp1$ = "User" + szTemp2$ + "Dir"
  803.                 szTemp1$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, szTemp1$)
  804.                 szTemp1$ = szTemp1$ + "\WMAIL.INI"
  805.                 szTemp1$ = GetIniKeyString(szTemp1$, INI_CCMAILSECTION$, "Path")
  806.  
  807.                 IF (szTemp1$ <> "") AND (ucase$(szTemp1$) <> ucase$(szPODir$)) THEN
  808.                     nNewPOPath% = 1
  809.                     nOtherUserID% = i%
  810.                     GOTO CONTINUE_LABEL
  811.                 ELSE
  812.                     nNewPOPath% = 0
  813.                 END IF
  814.  
  815.                 ''
  816.                 ''  User found!
  817.                 ''
  818.                 lReturn& = IntToAscii(i%, szTemp2$) 
  819.                 szKey$ = "User" + szTemp2$ + "Dir"
  820.                 szUserDir$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$)  
  821.                 IF (szUserDir$ <> "") THEN
  822.                     szTemp3$ = AppendPath$(szUserDir$, "WMail.INI")
  823.                 ELSE
  824.                     szUserDir$ = AppendPath$(szCCMailDir$, "CC"+szTemp2$+"DIR")
  825.                     GOTO JUST_INSERT_DIR
  826.                 END IF
  827.  
  828.                 IF DoesFileExist(szTemp3$, femRead) = 1 THEN
  829.  
  830.                     USERDIR_1:
  831.  
  832.                     IF nNewPOPath% = 1 THEN
  833.                         sz$ = UIStartDlg(CUIDLL$, SAMEUSER, "UserDirDlgProc", HELP_USERDIR2, HELPPROC$)
  834.                     ELSE
  835.                         sz$ = UIStartDlg(CUIDLL$, USERDIREXIST, "UserDirDlgProc", HELP_USERDIR1, HELPPROC$)
  836.                     END IF
  837.                     UIPop 1
  838.                     nSameUserFound% = 1
  839.                       
  840.                     IF sz$ = "UPDATE" THEN
  841.                         ''
  842.                         '' Just do an update.  
  843.                         ''
  844.                         GOTO OUT2
  845.                     
  846.                     ELSEIF sz$ = "OVERWRITE" THEN
  847.                         ''
  848.                         '' Clean up user directory so we can copy new files.
  849.                         ''
  850.                         nReturn% = DeleteDir(szUserDir$)
  851.                         GOTO OUT2
  852.  
  853.                     ELSE
  854.                         ''
  855.                         '' Create new user directory.
  856.                         ''
  857.                         nReturn% = 0
  858.                         GOTO OUT1
  859.                     END IF
  860.  
  861.                     CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, szUserDir$, cmoOverwrite
  862.  
  863.                 ELSE
  864.                     JUST_INSERT_DIR:
  865.                     CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, szUserDir$, cmoOverwrite
  866.                     nReturn% = 1
  867.                 END IF
  868.             END IF
  869.  
  870.             CONTINUE_LABEL:
  871.  
  872.         NEXT i%   
  873.  
  874.  
  875.         IF (nSameUserFound% = 0) AND (nNewPOPath% = 1) AND (nOtherUserID% > 0) THEN
  876.              lReturn& = IntToAscii(nOtherUserID%, szTemp2$) 
  877.              szKey$ = "User" + szTemp2$ + "Dir"
  878.              szUserDir$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$)  
  879.              szTemp3$ = AppendPath$(szUserDir$, "WMail.INI")
  880.  
  881.              IF DoesFileExist(szTemp3$, femRead) = 1 THEN
  882.                  sz$ = UIStartDlg(CUIDLL$, SAMEUSER, "UserDirDlgProc", HELP_USERDIR2, HELPPROC$)
  883.                  UIPop 1
  884.                  nSameUserFound% = 1
  885.                       
  886.                  IF sz$ = "UPDATE" THEN
  887.                      GOTO OUT2
  888.                     
  889.                  ELSEIF sz$ = "OVERWRITE" THEN
  890.                      nReturn% = DeleteDir(szUserDir$)
  891.                      GOTO OUT2
  892.  
  893.                  ELSE
  894.                      nReturn% = 0
  895.                      GOTO OUT1
  896.                  END IF
  897.  
  898.                  CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, szUserDir$, cmoOverwrite
  899.  
  900.              ELSE
  901.                  CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, szUserDir$, cmoOverwrite
  902.                  nReturn% = 1
  903.              END IF
  904.         END IF
  905.  
  906.  
  907.         OUT1:
  908.         ''
  909.         ''  Have we found the user?  If not, create values for him.       
  910.         ''
  911.         IF nReturn% = 0 THEN
  912.             nFlag% = nFlag% + 1
  913.             lReturn& = IntToAscii(nFlag%, szTemp2$)
  914.             szKey$ = "User" + szTemp2$ + "Name"
  915.             CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, szUserName$, cmoOverwrite
  916.             szKey$ = "User" + szTemp2$ + "Dir"
  917.             szTemp3$ = "CC" + szTemp2$ + "DIR"
  918.             szUserDir$ = AppendPath$(szCCMailDir$, szTemp3$)
  919.             CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, szUserDir$, cmoOverwrite
  920.             '' 
  921.             ''  Update the highest user ID since we added one.
  922.             ''
  923.             CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "LastIDUsed", szTemp2$, cmoOverwrite
  924.         END IF
  925.  
  926.     ELSE    '' IF nMailExist% <> 2
  927.     ''
  928.     ''  These keywords are new from 2.0
  929.     '' 
  930.         CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "User1Name", szUserName$, cmoOverwrite
  931.         CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "User1Dir", szUserDir$, cmoOverwrite
  932.         CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "LastIDUsed", "1", cmoOverwrite
  933.         CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "LastUserID", "1", cmoOverwrite
  934.     END IF
  935.  
  936.     OUT2:
  937.  
  938.     '*---------------------------------------------------------------------
  939.     '*  Set up program path
  940.     '*---------------------------------------------------------------------
  941.     ''
  942.     ''  Check if an old Program Path already exists.  If yes, remember the
  943.     ''  path so we can try to remove the path from Autoexec.bat.
  944.     ''
  945.     IF (szCopyAllFiles = "Y") AND (szLocalProgPath$ <> "") THEN
  946.         CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "ProgramPath", szLocalProgPath$, cmoOverwrite
  947.     ELSE
  948.         CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "ProgramPath", szProgFileDir$, cmoOverwrite
  949.     END IF
  950.  
  951.  
  952.     '*---------------------------------------------------------------------
  953.     '*  Set up default user directory (empty)
  954.     '*---------------------------------------------------------------------
  955.  
  956.     CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "User0Dir", szCCMailDir$, cmoOverwrite
  957.  
  958.  
  959.     '*---------------------------------------------------------------------
  960.     '*  Set up SMI keyword in Mail section of Win.INI
  961.     '*---------------------------------------------------------------------
  962.  
  963.     CreateIniKeyValue FILE_WIN_INI$, "Mail", "SMI", "1", cmoOverwrite
  964.  
  965.  
  966.     '*---------------------------------------------------------------------
  967.     '*  Set up program version
  968.     '*---------------------------------------------------------------------
  969.  
  970.     CreateIniKeyValue FILE_WIN_INI$, INI_CCMAILSECTION$, "PROGVER", "200", cmoOverwrite
  971.  
  972.  
  973.     '*---------------------------------------------------------------------
  974.     '*  Update the LotusMail section:
  975.     '*      If the section does not exist, create it.
  976.     '*      If the Mail application specified is WMail, update program path.
  977.     '*---------------------------------------------------------------------
  978.  
  979.     IF DoesIniSectionExist(FILE_WIN_INI$, "LotusMail") = 0 THEN
  980.         CreateIniKeyValue FILE_WIN_INI$, "LotusMail", "Application", "WMAIL", cmoOverwrite
  981.         szTempPath$ = szProgFileDir$ + "\WMAIL.EXE SENDMAIL"
  982.         CreateIniKeyValue FILE_WIN_INI$, "LotusMail", "Program", szTempPath$, cmoOverwrite
  983.     ELSE
  984.         szTempPath$ = GetIniKeyString(FILE_WIN_INI$, "LotusMail", "Application")
  985.         nReturn% = SzToUpper(szTempPath$)
  986.         IF szTempPath$ = "WMAIL" THEN
  987.             szTempPath$ = szProgFileDir$ + "\WMAIL.EXE SENDMAIL"
  988.             CreateIniKeyValue FILE_WIN_INI$, "LotusMail", "Program", szTempPath$, cmoOverwrite
  989.         END IF
  990.     END IF
  991.  
  992.  
  993.     '*---------------------------------------------------------------------
  994.     '*  Remove LOAD and RUN for WNotify
  995.     '*---------------------------------------------------------------------
  996.  
  997.     szKey$ = GetIniKeyString(FILE_WIN_INI$, INI_WINDOWSECTION$, "Load")
  998.     IF szKey$ <> "" THEN
  999.         IF RemoveKeyFromStr(szKey$, "WNOTIFY") = 1 THEN
  1000.             CreateIniKeyValue FILE_WIN_INI$, INI_WINDOWSECTION$, "Load", szKey$, cmoOverwrite
  1001.         END IF
  1002.     END IF
  1003.  
  1004.     szKey$ = GetIniKeyString(FILE_WIN_INI$, INI_WINDOWSECTION$, "Run")
  1005.     IF szKey$ <> "" THEN
  1006.         IF RemoveKeyFromStr(szKey$, "WNOTIFY") = 1 THEN
  1007.             CreateIniKeyValue FILE_WIN_INI$, INI_WINDOWSECTION$, "Run", szKey$, cmoOverwrite
  1008.         END IF
  1009.     END IF
  1010.  
  1011.  
  1012.     SetupWinIni = 1
  1013.     GOTO OUT_SETUPWININI
  1014.     
  1015. BACK_SETUPWININI:
  1016.     SetupWinIni = 0
  1017.  
  1018. OUT_SETUPWININI: 
  1019.     
  1020. END FUNCTION
  1021.  
  1022.  
  1023.  
  1024. '*************************************************************************
  1025. '**
  1026. '** SetupWMailIni
  1027. '**     Setup information in WMail.INI
  1028. '**
  1029. '*************************************************************************
  1030.  
  1031. SUB SetupWMailIni STATIC
  1032.  
  1033.     szWMailPath$ = AppendPath$(szUserDir$, "WMail.INI")
  1034.  
  1035.     CreateIniKeyValue szWMailPath$, INI_CCMAILSECTION$, "Path", szPODir$, cmoOverwrite
  1036.     CreateIniKeyValue szWMailPath$, INI_CCMAILSECTION$, "Name", szUserName$, cmoOverwrite
  1037.  
  1038.     IF (nMailExist% = 1) OR (nMailExist% = 2) THEN
  1039.         ''
  1040.         ''  Older versions of cc:Mail exist.  Move info to WMail.INI.
  1041.         ''
  1042.         n% = SetIniKey(szWMailPath$, INI_CCMAILSECTION$, "SaveWindow")
  1043.         n% = SetIniKey(szWMailPath$, INI_CCMAILSECTION$, "FaxExt")
  1044.         n% = SetIniKey(szWMailPath$, INI_CCMAILSECTION$, "InboxCacheSize")
  1045.         n% = SetIniKey(szWMailPath$, INI_CCMAILSECTION$, "Mono")
  1046.         n% = SetIniKey(szWMailPath$, INI_CCMAILSECTION$, "SmartIconTextEnabled")
  1047.         n% = SetIniKey(szWMailPath$, "cc:Edit", "EnableMargins")
  1048.         n% = SetIniKey(szWMailPath$, "cc:Edit", "TabStops")
  1049.         n% = SetIniKey(szWMailPath$, "cc:Edit", "LMargin")
  1050.         n% = SetIniKey(szWMailPath$, "cc:Edit", "RMargin")
  1051.         n% = SetIniKey(szWMailPath$, "cc:Edit", "DefAttr")
  1052.         n% = SetIniKey(szWMailPath$, "cc:Edit", "ShowRuler")
  1053.  
  1054.  
  1055.         IF DoesIniKeyExist(szWMailPath$, "cc:Archive", "MaxArchive") = 0 THEN
  1056.             szKey$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, "MaxArchive")
  1057.             IF szKey$ <> "" THEN
  1058.                 CreateIniKeyValue szWMailPath$, "cc:Archive", "MaxArchive", szKey$, cmoOverwrite
  1059.          
  1060.                 nMaxArchive% = AsciiToInt(szKey$)
  1061.                 FOR i% = 1 TO nMaxArchive% STEP 1
  1062.                     lReturn& = IntToAscii(i%, szTemp2$)
  1063.                     szKey$ = "Archive#" + szTemp2$
  1064.                     szTemp1$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$)
  1065.                     IF szTemp1$ <> "" THEN
  1066.                         CreateIniKeyValue szWMailPath$, "cc:Archive", szKey$, szTemp1$, cmoOverwrite
  1067.                     END IF
  1068.                 NEXT i%
  1069.             END IF
  1070.         END IF
  1071.  
  1072.         IF DoesIniKeyExist(szWMailPath$, INI_CCMAILSECTION$, "TotalApps") = 0 THEN
  1073.             szKey$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, "TotalApps")
  1074.             IF szKey$ <> "" THEN
  1075.                 CreateIniKeyValue szWMailPath$,  INI_CCMAILSECTION$, "TotalApps", szKey$, cmoOverwrite
  1076.             END IF
  1077.  
  1078.             nTotalApp% = AsciiToInt(szKey$)
  1079.             FOR i% = 1 TO nTotalApp% STEP 1
  1080.                 lReturn& = IntToAscii(i%, szTemp2$)
  1081.                 szKey$ = "APP" + szTemp2$
  1082.                 szTemp1$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$)
  1083.                 IF szTemp1$ <> "" THEN
  1084.                     CreateIniKeyValue szWMailPath$, INI_CCMAILSECTION$, szKey$, szTemp1$, cmoOverwrite
  1085.                 END IF
  1086.             NEXT i%
  1087.  
  1088.             szKey$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, "LastAppID")
  1089.             IF szKey$ <> "" THEN
  1090.                 CreateIniKeyValue szWMailPath$, INI_CCMAILSECTION$, "LastAppID", szKey$, cmoOverwrite
  1091.             END IF
  1092.         END IF
  1093.  
  1094.         ''
  1095.         ''  If moving INI section info, delete original section.
  1096.         ''
  1097.         IF szRemoveIniInfo$ = "Y" THEN
  1098.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Path", cmoNone
  1099.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Name", cmoNone
  1100.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Password", cmoNone
  1101.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "DefaultWorkPath", cmoNone
  1102.  
  1103.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "SaveWindow", cmoNone
  1104.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "MaxArchive", cmoNone
  1105.             FOR i% = 1 TO nMaxArchive% STEP 1
  1106.                 lReturn& = IntToAscii(i%, szTemp2$)
  1107.                 szKey$ = "Archive#" + szTemp2$
  1108.                 RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, cmoNone
  1109.             NEXT i%
  1110.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Compress", cmoNone
  1111.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "TotalApps", cmoNone
  1112.             FOR i% = 1 TO nTotalApp% STEP 1
  1113.                 lReturn& = IntToAscii(i%, szTemp2$)
  1114.                 szKey$ = "APP" + szTemp2$
  1115.                 RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, szKey$, cmoNone
  1116.             NEXT i%
  1117.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "LastAppID", cmoNone
  1118.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "FaxExt", cmoNone
  1119.    
  1120.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "InboxCacheSize", cmoNone
  1121.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "BBoardCacheSize", cmoNone
  1122.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "FolderCacheSize", cmoNone
  1123.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "ArchiveCacheSize", cmoNone
  1124.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "OS2Cache", cmoNone
  1125.  
  1126.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "List", cmoNone
  1127.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Options", cmoNone
  1128.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Confirm", cmoNone
  1129.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Message", cmoNone
  1130.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Notify", cmoNone
  1131.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "InboxPollInterval", cmoNone
  1132.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "BBoardPollInterval", cmoNone
  1133.  
  1134.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Fax Scale", cmoNone
  1135.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "View Style", cmoNone
  1136.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Horz Pages", cmoNone
  1137.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Vert Pages", cmoNone
  1138.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Use Print Offset", cmoNone
  1139.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "FindX", cmoNone
  1140.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "FindY", cmoNone
  1141.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "SystemResourceCheck", cmoNone
  1142.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "PrMargin", cmoNone
  1143.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "TextEditorExt", cmoNone
  1144.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "GraphicsEditorExt", cmoNone
  1145.       
  1146.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "InboxFont", cmoNone
  1147.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "BBListFont", cmoNone
  1148.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "BBoardFont", cmoNone
  1149.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "MListFont", cmoNone
  1150.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "MListListFont", cmoNone
  1151.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "PrivMListListFont", cmoNone
  1152.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "PrivMListFont", cmoNone
  1153.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "DirFont", cmoNone
  1154.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "FolderListFont", cmoNone
  1155.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "FolderFont", cmoNone
  1156.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "EditFont", cmoNone
  1157.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "MessageFont", cmoNone
  1158.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "AllFont", cmoNone
  1159.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Error!Font", cmoNone
  1160.   
  1161.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "MultiLogin", cmoNone
  1162.  
  1163.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "SmartIconTextEnable", cmoNone
  1164.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "Mono", cmoNone
  1165.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "EnableMargins", cmoNone
  1166.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "TabStops", cmoNone
  1167.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "LMargin", cmoNone
  1168.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "RMargin", cmoNone
  1169.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "DefAttr", cmoNone
  1170.             RemoveIniKey FILE_WIN_INI$, INI_CCMAILSECTION$, "ShowRuler", cmoNone
  1171.    
  1172.             szTempPath$ = GetWindowsDir() + "ccMail.CFG"
  1173.             RemoveFile szTempPath$, cmoNone
  1174.         END IF
  1175.     END IF
  1176.  
  1177. END SUB
  1178.  
  1179.  
  1180. '*************************************************************************
  1181. '**
  1182. '** SetupLotusIni
  1183. '**     Set up the Lotus.INI file - our program path
  1184. '**
  1185. '*************************************************************************
  1186.  
  1187. SUB SetupLotusIni STATIC
  1188.  
  1189.     szTempPath$ = szWindowDir$ + "Lotus.INI"
  1190.     IF (szCopyAllFiles = "Y") AND (szLocalProgPath$ <> "") THEN
  1191.         szTemp1$ = szLocalProgPath$ + "\WMAIL.EXE cc:Mail"
  1192.     ELSE
  1193.         szTemp1$ = szProgFileDir$ + "\WMAIL.EXE cc:Mail"
  1194.     END IF
  1195.     CreateIniKeyValue szTempPath$, "Lotus Applications", "ccMail", szTemp1$, cmoOverwrite
  1196.  
  1197. END SUB
  1198.  
  1199.  
  1200. '*************************************************************************
  1201. '**
  1202. '** SetupProg
  1203. '**     - Build the group file, icon and program properties
  1204. '**
  1205. '*************************************************************************
  1206.  
  1207. SUB SetupProg STATIC
  1208.  
  1209.     IF szIcon$ = "Y" THEN
  1210.  
  1211.         IF (szCopyAllFiles = "Y") AND (szLocalProgPath$ <> "") THEN
  1212.             szTemp1$ = szLocalProgPath$
  1213.         ELSE
  1214.             szTemp1$ = szProgFileDir$
  1215.         END IF
  1216.  
  1217.         IF wsAddGroup(nHinst%, GROUP_TITLE$) = 1 THEN
  1218.  
  1219.             IF szCmdLine$ = "Y" THEN
  1220.                 szTempPath$ = szTemp1$ + "\WMail.EXE" 
  1221.                 nReturn% = wsAddCmdLine(MAIL_DESCRIPTION$, szTempPath$, szPODir$, szUserName$, "PASSWORD")
  1222.             ELSE
  1223.                 szTempPath$ = szTemp1$ + "\WMail.EXE " 
  1224.                 nReturn% = wsAddItem(MAIL_DESCRIPTION$, szTempPath$)
  1225.             END IF
  1226.  
  1227.             nReturn% = wsAddItem(SETUP_DESCRIPTION$, szTemp1$ + "\Setup.exe")
  1228.  
  1229.             nReturn% = wsCloseGroup(GROUP_TITLE$)
  1230.  
  1231.         END IF
  1232.  
  1233.     END IF
  1234.  
  1235. END SUB
  1236.  
  1237.  
  1238. '*************************************************************************
  1239. '**
  1240. '** SetIniKey
  1241. '**     - Query if the key already existed in WMail.INI file.  
  1242. '**       If yes, don't update.  Otherwise, check if key exists in Win.INI.
  1243. '**       If exists, set in here.
  1244. '**     - Returns TRUE if key moved, FALSE if else
  1245. '**
  1246. '*************************************************************************
  1247. FUNCTION SetIniKey (szIniPath$, szSection$, szKeyName$) STATIC AS INTEGER
  1248.  
  1249.     IF DoesIniKeyExist(szIniPath$, szSection$, szKeyName$) = 0 THEN
  1250.         szKey$ = GetIniKeyString(FILE_WIN_INI$, INI_CCMAILSECTION$, szKeyName$)
  1251.         IF szKey$ <> "" THEN
  1252.             CreateIniKeyValue szIniPath$, szSection$, szKeyName$, szKey$, cmoOverwrite
  1253.             SetIniKey = 1
  1254.         ELSE
  1255.             SetIniKey = 0
  1256.         END IF
  1257.     ELSE
  1258.         SetIniKey = 0
  1259.     END IF
  1260.  
  1261. END FUNCTION
  1262.  
  1263.  
  1264.  
  1265. '************************************************************************
  1266. '**
  1267. '** Install:
  1268. '**    - Build the copy list and performs all installation operations.
  1269. '**
  1270. '************************************************************************
  1271. SUB Install STATIC
  1272.  
  1273.     IF szCopyAllFiles$ = "Y" THEN
  1274.     ''
  1275.     ''  Copy all program files
  1276.     ''
  1277.         CreateDir szLocalProgPath$, cmoNone
  1278.         ClearCopyList
  1279.         AddSectionFilesToCopyList "FILES", szProgFileDir$, szLocalProgPath$
  1280.         AddSectionFilesTOCopyList "INSTALL", szProgFileDir$, szLocalProgPath$
  1281.         CopyFilesInCopyList
  1282.         CopyFile szProgFileDir$+"\ReadMe.TXT", szLocalProgPath$+"\ReadMe.TXT", cmoOverwrite,0
  1283.         CopyFile szProgFileDir$+"\Install.INI", szLocalProgPath$+"\Install.INI", cmoOverwrite,0
  1284.     END IF
  1285.  
  1286.     nCursor% = ShowWaitCursor()
  1287.     hwndProg% = ProgressBegin("PROGRESSTEMPLATE", "Copying user files...")
  1288.  
  1289.     CreateDir szUserDir$, cmoNone
  1290.  
  1291.     ''
  1292.     ''  Copy all files in the subdirectory CCMAIL into user directory
  1293.     ''  and also to default user directory.
  1294.     ''       
  1295.     szTempPath$ = SrcDir$ + "CCUSER"
  1296.     szWMailPath$ = AppendPath$(szUserDir$, "WMail.INI")
  1297.  
  1298.     n% = wCopyCannedFiles(szTempPath$, szUserDir$, szWMailPath$) 
  1299.     n% = wCopyDir(szTempPath$, szCCMailDir$, 0)
  1300.     n% = SetFileTimeForDir(szUserDir$, FILETIME, 0)
  1301.     n% = SetFileTimeForDir(szCCMailDir$, FILETIME, 0)
  1302.  
  1303.     IF szCopyAllFiles$ = "Y" THEN
  1304.         CreateDir szLocalProgPath$ + "\CCUSER", cmoNone
  1305.         szPath1$ = szProgFileDir$ + "CCUSER"
  1306.         szPath2$ = szLocalProgPath$ + "\CCUSER"
  1307.         n% = wCopyDir(szPath1$, szPath2$, 0)
  1308.     END IF
  1309.  
  1310. END SUB
  1311.  
  1312.  
  1313.  
  1314. '*************************************************************************
  1315. '**
  1316. '** AddPath - Add our program path to PATH variable in AutoExec.BAT
  1317. '**
  1318. '*************************************************************************
  1319.  
  1320. SUB AddPath STATIC 
  1321.  
  1322.     nModify% = bSetPathInAutoExec(szProgFileDir$, 0)
  1323.  
  1324.     IF nModify% = 1 THEN
  1325.  
  1326.         WARNAUTOEXEC_DLG:
  1327.  
  1328.         sz$ = UIStartDlg(CUIDLL$, WARN_AUTOEXEC, "WarnAutoexecDlgProc", APPHELP, HELPPROC$)
  1329.         UIPop 1
  1330.         nDoIt% = 0
  1331.         IF sz$ = "CONTINUE" THEN
  1332.             nDoIt% = 1
  1333.  
  1334.         ELSEIF sz$ = "CANCEL" THEN
  1335.             sz$ = UIStartDlg(CUIDLL$, WARN_SKIPCHANGE, "WarnSkipChangeDlgProc", APPHELP, HELPPROC$)
  1336.             UIPop 1
  1337.  
  1338.             IF sz$ = "BACK" THEN
  1339.                 GOTO WARNAUTOEXEC_DLG
  1340.  
  1341.             ELSEIF sz$ = "EXIT" THEN
  1342.                 DoAskQuit
  1343.                 GOTO WARNAUTOEXEC_DLG
  1344.             END IF
  1345.  
  1346.         ELSEIF sz$ = "EXIT" THEN
  1347.             DoAskQuit
  1348.             GOTO WARNAUTOEXEC_DLG
  1349.         END IF
  1350.  
  1351.         IF nDoIt% = 1 THEN
  1352.             n% = bRenameAutoExec()
  1353.             bNeedRestart% = 1
  1354.         END IF
  1355.     END IF
  1356.  
  1357. END SUB
  1358.  
  1359.  
  1360. '*************************************************************************
  1361. '**
  1362. '** CheckEnvironment
  1363. '**     Check the user's environment (TEMP)
  1364. '**
  1365. '*************************************************************************
  1366.  
  1367. SUB CheckEnvironment STATIC
  1368.  
  1369.     szTemp$ = GetEnvVariableValue("TEMP")
  1370.  
  1371.     IF szTemp$ <> "" THEN
  1372.         ''
  1373.         '' Check if we can write to that directory.
  1374.         ''
  1375.         IF IsDirWritable(szTemp$) = 0 THEN
  1376.             sz$ = UIStartDlg(CUIDLL$, BADTEMPDIR, "TempDirDlgProc", 0, "")
  1377.             UIPop 1
  1378.         END IF
  1379.     ELSE
  1380.         sz$ = UIStartDlg(CUIDLL$, NOTEMPDIR, "TempDirDlgProc", 0, "")
  1381.         UIPop 1
  1382.     END IF
  1383.  
  1384. END SUB
  1385.  
  1386.  
  1387.  
  1388. '*************************************************************************
  1389. '**
  1390. '** SayTooBig - not enough disk space
  1391. '**
  1392. '*************************************************************************
  1393.  
  1394. SUB SayTooBig STATIC
  1395.  
  1396.     SAYTOOBIG_LABEL:
  1397.  
  1398.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  1399.     IF sz$ = "REACTIVATE" THEN
  1400.         GOTO SAYTOOBIG_LABEL
  1401.     END IF
  1402.     UIPop 1
  1403.  
  1404. END SUB
  1405.  
  1406.  
  1407. '*************************************************************************
  1408. '**
  1409. '** DoAskQuit - confirm for exit
  1410. '**
  1411. '*************************************************************************
  1412.  
  1413. SUB DoAskQuit STATIC
  1414.  
  1415.     ASKQUIT_LABEL:
  1416.  
  1417.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  1418.  
  1419.     IF sz$ = "EXIT" THEN
  1420.         UIPopAll
  1421.         ERROR STFQUIT
  1422.     ELSEIF sz$ = "REACTIVATE" THEN
  1423.         GOTO ASKQUIT_LABEL
  1424.     ELSE
  1425.         UIPop 1
  1426.     END IF
  1427.       
  1428. END SUB
  1429.  
  1430.  
  1431.