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

  1. '************************************************************************
  2. '*                                                                      *
  3. '*              cc:Mail Post Office 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. '*-------------------------------------------------------------------------
  20. '*  Subroutine/Function Declarations
  21. '*-------------------------------------------------------------------------
  22.  
  23. DECLARE SUB ExecAdminUtil
  24. DECLARE SUB DoAskQuit
  25. DECLARE SUB SayTooBig
  26. DECLARE SUB Install
  27.  
  28. DECLARE FUNCTION InitFunc           AS INTEGER
  29. DECLARE FUNCTION GetPOInfo          AS INTEGER
  30. DECLARE FUNCTION AskCopyAdmin       AS INTEGER
  31. DECLARE FUNCTION DoCopyOnly         AS INTEGER
  32. DECLARE FUNCTION EnoughSpace        AS INTEGER
  33. DECLARE FUNCTION ShouldCopyVimFiles AS INTEGER
  34. DECLARE FUNCTION CopyAdminFiles     AS INTEGER
  35.  
  36. DECLARE FUNCTION CheckFileVersion (sz$, sz$, sz$) AS INTEGER
  37.  
  38. DECLARE FUNCTION IntToAscii        LIB "mscuistf.dll" (i%,sz$)       AS LONG
  39. DECLARE FUNCTION ExecUtil          LIB "mscuistf.dll" (n%,n%,sz$,sz$,sz$,sz$,sz$,sz$) AS INTEGER
  40. DECLARE FUNCTION ChangeDrive       LIB "mscuistf.dll" (SrcDir$) AS INTEGER
  41. DECLARE FUNCTION ResetDrive        LIB "mscuistf.dll" (nReturn%) AS INTEGER
  42. DECLARE FUNCTION StripPath         LIB "mscuistf.dll" (szProgFileDir$, szDrive$) AS INTEGER
  43. DECLARE FUNCTION fileExists        LIB "mscuistf.dll" (sz$) AS INTEGER
  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 GetCurrentDir     LIB "mscuistf.dll" (szTempPath$) AS INTEGER
  47. DECLARE FUNCTION CheckFileVer      LIB "mscuistf.dll" (sz$, sz$, sz$) AS INTEGER
  48. DECLARE FUNCTION SetFrame          LIB "mscuistf.dll" (nHwndFrame%)
  49. DECLARE FUNCTION SetInst           LIB "mscuistf.dll" (nHwndInst%)
  50. DECLARE FUNCTION MeIsPO            LIB "mscuistf.dll" (sz$,sz$,sz$) AS INTEGER
  51. DECLARE FUNCTION DeleteDir         LIB "mscuistf.dll" (sz$) AS INTEGER
  52. DECLARE FUNCTION AsciiToInt        LIB "mscuistf.dll" (sz$) AS INTEGER
  53. DECLARE FUNCTION MaximizeWindow    LIB "mscuistf.dll" (n%) AS INTEGER
  54. DECLARE FUNCTION CheckMailEngVer   LIB "mscuistf.dll" (sz$, sz$) AS INTEGER
  55. DECLARE FUNCTION SetFileTimeForDir LIB "mscuistf.dll" (sz$,sz$,n%) AS INTEGER
  56. DECLARE FUNCTION ProgressBegin     LIB "mscuistf.dll" (sz$,sz$) AS INTEGER
  57. DECLARE FUNCTION ProgressEnd       LIB "mscuistf.dll" (n%) AS INTEGER
  58. DECLARE FUNCTION CopyDir_Show      LIB "mscuistf.dll" (n%,n%,n%,sz$,sz$,n%) AS INTEGER
  59. DECLARE FUNCTION ExecBatch         LIB "mscuistf.dll" (n%,n%,sz$,sz$,sz$,sz$,sz$,sz$,sz$)
  60. DECLARE FUNCTION RenameWithNewExt  LIB "mscuistf.dll" (sz$,sz$,n%,n%) AS INTEGER
  61.  
  62.  
  63. '*-------------------------------------------------------------------------
  64. '*  Defines
  65. '*-------------------------------------------------------------------------
  66.  
  67. ''$DEFINE DEBUG ''Define for script development/debugging 
  68.  
  69. CONST FILETIME = "0200"
  70.  
  71. CONST SPACENEEDED     = 4730000
  72. CONST SPACEWITHADMIN  =  420000
  73.  
  74. CONST PROGRAMFILES = 1
  75. CONST ADMINFILES   = 2
  76.  
  77. CONST FILE_MISSING = 0
  78. CONST FILE_OLDER   = 1
  79. CONST FILE_SAME    = 2
  80. CONST FILE_NEWER   = 3
  81.  
  82.  
  83. '*-------------------------------------------------------------------------
  84. '*  String Constants / Messages
  85. '*-------------------------------------------------------------------------
  86.  
  87. CONST PATH_PO$            = "M:\CCDATA"
  88. CONST PATH_PROGFILE$      = "M:\CCMAIL"
  89. CONST PATH_ADMIN$         = "M:\CCADMIN"
  90. CONST PATH_RECLAIM$       = "M:\CCDATA.OUT"
  91.  
  92. CONST STR_TITLE$          = "cc:Mail Version 2.0 - Program and Post Office Install"
  93. CONST STR_ABOUTSTR$       = "Copyright (C) 1993 Lotus Development Corporation."
  94. CONST STR_ALERT$          = "Alert"
  95. CONST STR_ERRTITLE$       = "cc:Mail Setup Error"
  96. CONST STR_CORRUPT$        = "Setup sources were corrupted!"
  97. CONST STR_WRITEFAIL$      = "Cannot write to directory"
  98. CONST STR_NEEDRECLAIMDIR$ = "Please specify reclaim directory."
  99. CONST STR_CREATEDIRFAIL$  = "Cannot create directory"
  100. CONST STR_BADPROGFILEDIR$ = "Program file directory cannot be same as source directory"
  101. CONST STR_INSERTADMIN$    = "Please insert diskette labeled DISK 4"
  102. CONST STR_OVERWRITEPROG$  = "Overwrite program files in "
  103. CONST STR_OVERWRITEADMIN$ = "Overwrite administrative utilities in "
  104. CONST STR_CREATEPO1$      = "Please continue to create the post office ("
  105. CONST STR_CREATEPO2$      = ") now"
  106. CONST STR_CREATEPO3$      = "Please insert the disk labeled DISK 4 to create the post office ("
  107. CONST STR_CREATEPO4$      = ") now"
  108. CONST STR_CREATEPOTITLE$  = "Create New Post Office"
  109. CONST STR_UTILTITLE$      = "Chkstat/Reclaim Utilities"
  110. CONST STR_POCOMPLETE$     = "The cc:Mail post office installation is complete."
  111. CONST STR_COPYCOMPLETE$   = "The cc:Mail program files have been upgraded."
  112. CONST STR_COPYADMINCOMPLETE$ = "The cc:Mail administrative utilites have been upgraded."
  113. CONST STR_BADPODRIVE$     = "Invalid drive for post office directory."
  114. CONST STR_BADPROGDRIVE$   = "Invalid drive for program file directory."
  115.  
  116. CONST TOTALSPACE_TEXT   = "4,700 Kbytes"
  117. CONST ADMINSPACE_TEXT   = " 420 Kbytes"
  118.  
  119. ''  Version of ADMIN utilities
  120. ''
  121. CONST ADMINVER_MAJOR% = 4
  122. CONST ADMINVER_MINOR% = 2
  123.  
  124.  
  125. '*-------------------------------------------------------------------------
  126. '*  Variables
  127. '*-------------------------------------------------------------------------
  128.  
  129. GLOBAL CUIDLL$          ''Custom DLL name
  130. GLOBAL HELPPROC$        ''Generic help procedure name
  131.  
  132. GLOBAL SrcDir$         ''Default source directory
  133. GLOBAL OPTCUR$         ''Option selection from option dialog.
  134. GLOBAL szProgFileDir$  ''Program File Directory
  135. GLOBAL szPOName$       ''Post Office Name
  136. GLOBAL szPOPass$       ''Post Office Password
  137. GLOBAL szEncryptKey$     ''Encryption Key
  138. GLOBAL szAdmProgDir$   ''Administrative Programs Directory
  139. GLOBAL szPODir$        ''Post Office Directory
  140. GLOBAL szCopyProgFiles$ ''flag for copying all program files
  141. GLOBAL szWMailPath$     ''WMail.ini path
  142. GLOBAL szDoAdmin$       ''Install Admin files
  143. GLOBAL nHwndFrame%
  144. GLOBAL nHinst%
  145. GLOBAL szTempPath$
  146. GLOBAL nReturn%
  147. GLOBAL nDrive%
  148. GLOBAL lDiskSpace&
  149. GLOBAL lSpaceRequired&
  150. GLOBAL szDrive$
  151. GLOBAL szMenu$
  152. GLOBAL szReclaimDir$
  153.  
  154. GLOBAL bOlder%
  155. GLOBAL bNewer%
  156. GLOBAL bMissing%
  157.  
  158. GLOBAL PROGRAMOPT$
  159. GLOBAL ADMINOPT$
  160.  
  161. GLOBAL PROGRAMNEEDS$
  162. GLOBAL ADMINNEEDS$
  163. GLOBAL EXTRACOSTS$
  164. GLOBAL BIGLIST$
  165.  
  166. GLOBAL CHECKSTATE$
  167. GLOBAL STATUSTEXT$
  168. GLOBAL DRIVETEXT$
  169.  
  170.  
  171. '************************************************************************
  172. '*                                                                      *
  173. '*                            Start                                     *
  174. '*                                                                      *
  175. '************************************************************************
  176.  
  177.  
  178.     '*---------------------------------------------------------------------
  179.     '*  Initialization
  180.     '*---------------------------------------------------------------------
  181.  
  182. INIT:
  183.     IF InitFunc = 0 THEN
  184.         GOTO QUIT
  185.     END IF
  186.  
  187.  
  188.     '*---------------------------------------------------------------------
  189.     '*  Check Windows version, don't install if 3.0 or below
  190.     '*---------------------------------------------------------------------
  191.  
  192.     IF CheckWinVer = 0 THEN
  193.         GOTO QUIT
  194.     END IF
  195.  
  196.  
  197.     '*---------------------------------------------------------------------
  198.     '*  Welcome dialog 
  199.     '*---------------------------------------------------------------------
  200.  
  201.     sz$ = UIStartDlg(CUIDLL$, POWELCOME, "WelcomeDlgProc", HELP_POWELCOME, HELPPROC$)
  202.     UIPop 1
  203.     IF sz$ = "EXIT" THEN
  204.         END
  205.     END IF
  206.  
  207.  
  208.     '*---------------------------------------------------------------------
  209.     '*  Warn to shut down post office
  210.     '*---------------------------------------------------------------------
  211.  
  212.     sz$ = UIStartDlg(CUIDLL$, WARNSHUTDOWN, "WarnShutDownDlgProc", 0, "")
  213.     UIPop 1
  214.     IF sz$ = "EXIT" THEN
  215.         END
  216.     END IF
  217.         
  218.  
  219.     '*---------------------------------------------------------------------
  220.     '*  Main Menu 
  221.     '*---------------------------------------------------------------------
  222.  
  223.     MAINMENU_LABEL:
  224.  
  225.     SetSymbolValue "RadioDefault", OPTCUR$
  226.     SetSymbolValue "SourcePath", SrcDir$
  227.  
  228.     szMenu$ = UIStartDlg(CUIDLL$, POMENU, "FRadioDlgProc", HELP_POMENU, HELPPROC$)
  229.     OPTCUR$ = GetSymbolValue("ButtonChecked")
  230.     SetSymbolValue "RadioDefault", OPTCUR$
  231.  
  232.     UIPop 1
  233.  
  234.     IF szMenu$ = "POInst" THEN
  235.         GOTO GETPOINFO_LABEL
  236.  
  237.     ELSEIF szMenu$ = "CopyOnly" THEN
  238.         GOTO COPYONLY_LABEL
  239.  
  240.     ELSEIF szMenu$ = "REACTIVATE" THEN
  241.         GOTO MAINMENU_LABEL
  242.  
  243.     ELSE
  244.         UIPop 1
  245.         END 
  246.     END IF
  247.  
  248.  
  249.     '*---------------------------------------------------------------------
  250.     '*  Retrieve Post Office Installation Info  
  251.     '*---------------------------------------------------------------------
  252.  
  253.     GETPOINFO_LABEL:
  254.  
  255.     IF GetPOInfo = 0 THEN
  256.         GOTO MAINMENU_LABEL
  257.     END IF
  258.  
  259.  
  260.     '*---------------------------------------------------------------------
  261.     '*  Option whether to install admin
  262.     '*---------------------------------------------------------------------
  263.     
  264.     ASKCOPYADMIN_LABEL:
  265.  
  266.     IF AskCopyAdmin = 0 THEN
  267.         GOTO GETPOINFO_LABEL
  268.     END IF
  269.  
  270.     GOTO CHECK_DISKSPACE_LABEL
  271.  
  272.  
  273.     '*---------------------------------------------------------------------
  274.     '*  This is the option to only copy the executables  
  275.     '*---------------------------------------------------------------------
  276.  
  277.     COPYONLY_LABEL:
  278.  
  279.     IF DoCopyOnly = 0 THEN
  280.         GOTO MAINMENU_LABEL
  281.     END IF
  282.  
  283.  
  284.     '*---------------------------------------------------------------------
  285.     '*  Check for enough disk space  
  286.     '*---------------------------------------------------------------------
  287.  
  288.     CHECK_DISKSPACE_LABEL:
  289.     
  290.     nCursor% = ShowWaitCursor()
  291.     IF EnoughSpace = 0 THEN
  292.         RestoreCursor nCursor%
  293.         SayTooBig
  294.         IF szMenu$ = "CopyOnly" THEN
  295.             GOTO COPYONLY_LABEL
  296.         ELSE
  297.             GOTO GETPOINFO_LABEL
  298.         END IF
  299.     END IF
  300.  
  301.  
  302.     '*---------------------------------------------------------------------
  303.     '*  Prepare the file list  
  304.     '*---------------------------------------------------------------------
  305.  
  306.     ClearCopyList
  307.  
  308.     IF szCopyProgFiles$ = "ON" THEN
  309.  
  310.         AddSectionFilesToCopyList "SETUP DISK", SrcDir$, szProgFileDir$
  311.         AddSectionFilesToCopyList "DEFAULTS", SrcDir$, szProgFileDir$
  312.         AddSectionFilesToCopyList "DISK 2",   SrcDir$, szProgFileDir$
  313.         AddSectionFilesToCopyList "DISK 3",   SrcDir$, szProgFileDir$
  314.         AddSectionFilesToCopyList "INSTALL", SrcDir$, szProgFileDir$
  315.  
  316.         '*-----------------------------------------------------------------
  317.         '*  Check if we need to install the VIM files
  318.         '*-----------------------------------------------------------------
  319.     
  320.         IF ShouldCopyVimFiles = 1 THEN
  321.             AddSectionFilesToCopyList "VIM", SrcDir$, szProgFileDir$
  322.         END IF
  323.  
  324.         '*-----------------------------------------------------------------
  325.         '*  Do the installation 
  326.         '*-----------------------------------------------------------------
  327.     
  328.         RestoreCursor nCursor%
  329.         Install
  330.  
  331.     ELSE
  332.         RestoreCursor nCursor%
  333.     END IF
  334.  
  335.  
  336.     '*---------------------------------------------------------------------
  337.     '*  Copy all files from the ADMIN diskette
  338.     '*---------------------------------------------------------------------
  339.  
  340.     COPYADMIN_LABEL:
  341.  
  342.     IF szDoAdmin$ = "ON" THEN
  343.         IF CopyAdminFiles = 0 THEN
  344.             DoAskQuit
  345.             GOTO COPYADMIN_LABEL
  346.         END IF
  347.     END IF
  348.  
  349.  
  350.     '*---------------------------------------------------------------------
  351.     '*  Execute the DOS Admin or Chkstat/Reclaim utilities  
  352.     '*---------------------------------------------------------------------
  353.     
  354.     IF szMenu$ <> "CopyOnly" THEN
  355.         ExecAdminUtil
  356.     END IF
  357.  
  358.  
  359.     '*---------------------------------------------------------------------
  360.     '*  Done:  Successful / Error 
  361.     '*---------------------------------------------------------------------
  362.  
  363.     IF szMenu$ = "POInst" THEN
  364.         sz$ = STR_POCOMPLETE$
  365.     ELSE
  366.         IF szCopyProgFiles$ = "ON" THEN
  367.             sz$ = STR_COPYCOMPLETE$
  368. ''            i% = DoMsgBox(sz$, STR_TITLE$, MB_OK)
  369.         ELSE
  370.             sz$ = STR_COPYADMINCOMPLETE$
  371.             i% = DoMsgBox(sz$, STR_TITLE$, MB_OK)
  372.         END IF
  373.     END IF
  374.  
  375. QUIT:
  376.  
  377.     ON ERROR GOTO ERRQUIT
  378.  
  379.     IF ERR = 0 THEN
  380.         dlg% = POEXITSUCCESS
  381.     ELSEIF ERR = STFQUIT THEN
  382.         dlg% = EXITQUIT
  383.     ELSE
  384.         dlg% = EXITFAILURE
  385.     END IF
  386.  
  387. QUITL1:
  388.  
  389.     IF dlg% = POEXITSUCCESS THEN
  390.         sz$ = UIStartDlg(CUIDLL$, dlg%, "ExitDlgProc", 0, "")
  391.     ELSE
  392.         sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  393.     END IF
  394.     IF sz$ = "REACTIVATE" THEN
  395.         GOTO QUITL1
  396.     END IF
  397.     UIPop 1
  398.  
  399.     '*---------------------------------------------------------------------
  400.     '*  Exit
  401.     '*---------------------------------------------------------------------
  402.  
  403. DONE:
  404.     END
  405.  
  406.  
  407.  
  408. '*************************************************************************
  409. '**
  410. '** ERRQUIT - exit on error
  411. '**
  412. '*************************************************************************
  413.  
  414.     ERRQUIT:
  415.  
  416.     i% = DoMsgBox(STR_CORRUPT$, STR_ERRTITLE$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  417.     END
  418.  
  419.  
  420. '*************************************************************************
  421. '**
  422. '** SayTooBig - not enough disk space
  423. '**
  424. '*************************************************************************
  425.  
  426. SUB SayTooBig STATIC
  427.  
  428.     SAYTOOBIG_LABEL:
  429.  
  430.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  431.     IF sz$ = "REACTIVATE" THEN
  432.         GOTO SAYTOOBIG_LABEL
  433.     END IF
  434.     UIPop 1
  435.  
  436. END SUB
  437.  
  438.  
  439. '*************************************************************************
  440. '**
  441. '** DoAskQuit - confirm for exit
  442. '**
  443. '*************************************************************************
  444.  
  445. SUB DoAskQuit STATIC
  446.  
  447.     ASKQUIT_LABEL:
  448.  
  449.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  450.  
  451.     IF sz$ = "EXIT" THEN
  452.         UIPopAll
  453.         ERROR STFQUIT
  454.     ELSEIF sz$ = "REACTIVATE" THEN
  455.         GOTO ASKQUIT_LABEL
  456.     ELSE
  457.         UIPop 1
  458.     END IF
  459.  
  460. END SUB
  461.  
  462.  
  463. '*************************************************************************
  464. '**
  465. '** InitFunc
  466. '**     - initialization
  467. '**
  468. '*************************************************************************
  469.  
  470. FUNCTION InitFunc STATIC AS INTEGER
  471.  
  472.     n% = MaximizeWindow(HwndFrame())
  473.     
  474.     SetAbout STR_TITLE$, STR_ABOUTSTR$
  475.  
  476.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  477.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  478.  
  479.     SetBitmap CUIDLL$, BMP_LOTUS
  480.     SetTitle STR_TITLE$
  481.  
  482. ''    n% = SetCopyMode(0)
  483.  
  484.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  485.     IF szInf$ = "" THEN
  486.         szInf$ = GetSymbolValue("STF_CWDDIR") + "PO.INF"
  487.     END IF
  488.     ReadInfFile szInf$
  489.  
  490.     OPTCUR$ = "1"
  491.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  492.     szWindowDir$ = "C:\WINDOWS"
  493.  
  494.     '
  495.     '   Defaults for paths
  496.     '
  497.     szPOName$      = ""
  498.     szPOPass$      = ""
  499.     szPODir$       = PATH_PO$
  500.     szEncryptKey$  = ""
  501.     szProgFileDir$ = PATH_PROGFILE$
  502.     szAdmProgDir$  = PATH_ADMIN$
  503.     szReclaimDir$  = PATH_RECLAIM$
  504.     szCopyProgFiles$ = "ON"
  505.  
  506.  
  507.     ''  Retrieve the application instance and handle to the frame window.
  508.     ''
  509.     nHinst%     = HinstFrame()
  510.     nHwndFrame% = HwndFrame()
  511.     n% = SetFrame(nHwndFrame%)
  512.     n% = SetInst(nHinst%)
  513.  
  514.     InitFunc = 1
  515.  
  516. END FUNCTION
  517.  
  518.  
  519.  
  520. '*************************************************************************
  521. '**
  522. '** GetPOInfo
  523. '**     - Retrieve post office information
  524. '**
  525. '*************************************************************************
  526.  
  527. FUNCTION GetPOInfo STATIC AS INTEGER
  528.  
  529.     POINFO_INIT:
  530.  
  531.     SetSymbolValue "EditTextIn1", szPOName$
  532.     SetSymbolValue "EditTextIn2", szPOPass$
  533.     SetSymbolValue "EditTextIn3", szPODir$
  534.     SetSymbolValue "EditTextIn4", szEncryptKey$
  535.     SetSymbolValue "EditTextIn5", szReclaimDir$
  536.     SetSymbolValue "EditTextIn6", szProgFileDir$
  537.     SetSymbolValue "EditFocus",   "END"
  538.  
  539.     POINFO_L1:
  540.  
  541.     sz$ = UIStartDlg(CUIDLL$, POINFO, "FPOInfoDlgProc", HELP_POINFO, HELPPROC$)
  542.     szPOName$      = GetSymbolValue("EditTextOut1")
  543.     szPOPass$      = GetSymbolValue("EditTextOut2")
  544.     szPODir$       = GetSymbolValue("EditTextOut3")
  545.     szEncryptKey$  = GetSymbolValue("EditTextOut4")
  546.     IF szEncryptKey$ = "" THEN
  547.         szEncryptKey$ = szPOPass$
  548.     END IF
  549.     szReclaimDir$  = GetSymbolValue("EditTextOut5")
  550.     szProgFileDir$ = GetSymbolValue("EditTextOut6")
  551.  
  552.     SetSymbolValue "EditTextIn1", szPOName$
  553.     SetSymbolValue "EditTextIn2", szPOPass$
  554.     SetSymbolValue "EditTextIn3", szPODir$
  555.     SetSymbolValue "EditTextIn4", szEncryptKey$
  556.     SetSymbolValue "EditTextIn5", szReclaimDir$
  557.     SetSymbolValue "EditTextIn6", szProgFileDir$
  558.  
  559.     IF sz$ = "CONTINUE" THEN
  560.         ''
  561.         ''  Check if we have write access to post office directory.
  562.         ''
  563.         IF IsDriveValid(szPODir$) = 0 THEN
  564.             nReturn% = InvalidPath(szPODir$, STR_BADPODRIVE$)
  565.             GOTO POINFO_L1
  566.         END IF
  567.         IF DoesDirExist(szPODir$) = 1 THEN
  568.             IF IsDirWritable(szPODir$) = 0 THEN
  569.                 nReturn% = InvalidPath(szPODir$, STR_WRITEFAIL$)
  570.                 GOTO POINFO_L1
  571.             END IF
  572.         ELSE
  573.             CreateDir szPODir$, cmoNone
  574.             IF DoesDirExist(szPODir$) = 0 THEN
  575.                 nReturn% = InvalidPath(szPODir$, STR_CREATEDIRFAIL$)
  576.                 GOTO POINFO_L1
  577.             END IF
  578.         END IF
  579.  
  580.         ''
  581.         ''      Check if post office files exist.
  582.         ''
  583.         szTempPath$ = szPODir$ + "\MLANDATA"
  584.         IF fileExists(szTempPath$) = 1 THEN
  585.             ''
  586.             '' Don't verify post office name and password because we may
  587.             '' be upgrading an old database and the mail engine functions
  588.             '' will not work.
  589.             ''
  590.             '' IF MeIsPO(szPOName$, szPOPass$, szPODir$) = 0 THEN
  591.             ''    GOTO POINFO_L1
  592.             '' END IF       
  593.  
  594.             ''
  595.             ''  Post office already there.  Check if reclaim directory valid.
  596.             ''
  597.             IF szReclaimDir$ = "" THEN
  598.                 nReturn% = InvalidPath(szReclaimDir$, STR_NEEDRECLAIMDIR$)
  599.                 GOTO POINFO_L1
  600.             ELSE
  601.                 IF DoesDirExist(szReclaimDir$) = 1 THEN
  602.                     IF IsDirWritable(szReclaimDir$) = 0 THEN
  603.                         nReturn% = InvalidPath(szReclaimDir$, STR_WRITEFAIL$)
  604.                         GOTO POINFO_L1
  605.                     END IF
  606.                 ELSE
  607.                     IF IsDriveValid(szReclaimDir$) = 1 THEN
  608.                         ''
  609.                         ''  Create it.
  610.                         ''
  611.                         CreateDir szReclaimDir$, cmoNone
  612.  
  613.                         ''
  614.                         ''  Make sure it has been created.
  615.                         ''
  616.                         IF DoesDirExist(szReclaimDir$) = 0 THEN
  617.                             nReturn% = InvalidPath(szReclaimDir$, STR_CREATEDIRFAIL$)
  618.                             GOTO POINFO_L1
  619.                         END IF
  620.                     ELSE
  621.                         nReturn% = InvalidPath(szReclaimDir$, STR_CREATEDIRFAIL$)
  622.                         GOTO POINFO_L1
  623.                     END IF
  624.                 END IF
  625.             END IF
  626.         END IF
  627.  
  628.         ''
  629.         ''  Check if we have write access to program file directory.
  630.         ''
  631.         IF IsDriveValid(szProgFileDir$) = 0 THEN
  632.             nReturn% = InvalidPath(szProgFileDir$, STR_BADPROGDRIVE$)
  633.             GOTO POINFO_L1
  634.         END IF
  635.         IF DoesDirExist(szProgFileDir$) = 1 THEN
  636.             IF IsDirWritable(szProgFileDir$) = 0 THEN
  637.                 nReturn% = InvalidPath(szProgFileDir$, STR_WRITEFAIL$)
  638.                 GOTO POINFO_L1
  639.             END IF
  640.         ELSE
  641.             CreateDir szProgFileDir$, cmoNone
  642.             IF DoesDirExist(szProgFileDir$) = 0 THEN
  643.                 nReturn% = InvalidPath(szProgFileDir$, STR_CREATEDIRFAIL$)
  644.                 GOTO POINFO_L1
  645.             END IF
  646.         END IF
  647.  
  648.         ''
  649.         ''  Check if they're using the same directory as source.
  650.         ''
  651.         nReturn% = SzToUpper(szProgFileDir$)
  652.         IF szProgFileDir$ = SrcDir$ THEN
  653.             nReturn% = InvalidPath(szProgFileDir$, STR_BADPROGFILEDIR$)
  654.             GOTO POINFO_L1
  655.         END IF            
  656.  
  657.         ''
  658.         ''  Check if post office is on local drive.  If yes, warn them to run
  659.         ''  SHARE first.
  660.         ''
  661.         SHARE_INIT:
  662.  
  663.         IF IsDriveLocalHard(szPODir$) = 1 THEN
  664.             sz$ = UIStartDlg(CUIDLL$, WARNSHARE, "WarnShareDlgProc", APPHELP, HELPPROC$)
  665.             UIPop 1
  666.             IF sz$ = "REACTIVATE" THEN
  667.                 GOTO SHARE_INIT
  668.             ELSEIF sz$ = "BACK" THEN
  669.                 UIPop 1
  670.                 GOTO POINFO_INIT
  671.             ELSEIF sz$ = "EXIT" THEN
  672.                 DoAskQuit
  673.                 GOTO POINFO_INIT
  674.             END IF
  675.         END IF
  676.  
  677.  
  678.         ''
  679.         ''  Check if we're overwriting program files.
  680.         ''
  681.         szTempPath$ = szProgFileDir$ + "\WMail.EXE" 
  682.         IF fileExists(szTempPath$) = 1 THEN
  683.             SetSymbolValue "TitleTextIn", STR_ALERT$
  684.             szTempPath$ = STR_OVERWRITEPROG$ + szProgFileDir$ + "?"
  685.             SetSymbolValue "MsgTextIn", szTempPath$
  686.             sz2$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
  687.             UIPop 1
  688.             IF sz2$ = "CANCEL" THEN
  689.                 UIPop 1
  690.                 SetSymbolValue "EditFocus", "EditTextIn5"
  691.                 GOTO POINFO_L1
  692.             END IF    
  693.         END IF
  694.         UIPop 1
  695.         GetPOInfo = 1
  696.  
  697.     ELSEIF sz$ = "REACTIVATE" THEN
  698.         GOTO POINFO_L1
  699.     ELSEIF sz$ = "BACK" THEN
  700.         UIPop 1
  701.         GetPOInfo = 0
  702.     ELSEIF sz$ = "CONTINUE" THEN
  703.         GetPOInfo = 1
  704.     ELSE
  705.         UIPop 1
  706.         DoAskQuit
  707.         GOTO POINFO_INIT
  708.     END IF
  709.  
  710. END FUNCTION
  711.  
  712.  
  713. '*************************************************************************
  714. '**
  715. '** AskCopyAdmin
  716. '**     - Ask if we should copy the admin utilities
  717. '**
  718. '*************************************************************************
  719.  
  720. FUNCTION AskCopyAdmin STATIC AS INTEGER
  721.  
  722.     POOPTION_INIT:
  723.  
  724.     SetSymbolValue "CheckIn1", "ON"
  725.     SetSymbolValue "EditTextIn1", szAdmProgDir$
  726.     SetSymbolValue "CheckIn2", "ON"
  727.     SetSymbolValue "StaticText1", ADMINSPACE_TEXT
  728.     SetSymbolValue "EditFocus",   "END"
  729.  
  730.     POOPTION_L1:
  731.  
  732.     sz$ = UIStartDlg(CUIDLL$, COPYADMINOPTION, "CopyAdminOptionDlgProc", HELP_COPYADMINOPTION, HELPPROC$)
  733.     szDoAdmin$    = GetSymbolValue("CheckOut1")
  734.     szAdmProgDir$ = GetSymbolValue("EditTextOut1")
  735.     SetSymbolValue "EditTextIn1", szAdmProgDir$
  736.     SetSymbolValue "CheckIn1", szDoAdmin$
  737.  
  738.     IF sz$ = "CONTINUE" THEN
  739.         IF szDoAdmin$ = "ON" THEN
  740.             ''
  741.             '' Are we overwriting existing files?
  742.             ''
  743.             szTemp$ = szAdmProgDir$ + "\ADMIN.EXE"
  744.             IF fileExists(szTemp$) = 1 THEN
  745.                 ''
  746.                 '' Overwrite warning
  747.                 ''
  748.                 SetSymbolValue "TitleTextIn", STR_ALERT$
  749.                 szTemp$ = STR_OVERWRITEADMIN$ + szAdmProgDir$ + "?"
  750.                 SetSymbolValue "MsgTextIn", szTemp$
  751.                 sz$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
  752.                 UIPop 1
  753.                 IF sz$ = "CANCEL" THEN
  754.                     UIPop 1
  755.                     GOTO POOPTION_INIT
  756.                 END IF
  757.  
  758.                 ''
  759.                 '' Check version of files.
  760.                 ''
  761.                 szTemp$ = szAdmProgDir$ + "\ADMIN.EXE"
  762.                 szDDate$ = GetDateOfFile(szTemp$)
  763.                 nHour% = GetHourFromDate(szDDate$)
  764.                 nMin%  = GetMinuteFromDate(szDDate$)
  765.                 
  766.                 ''
  767.                 '' If this is version prior to 3.2, save it since we may
  768.                 '' need to run these programs to upgrade the po.
  769.                 ''
  770.                 IF (nHour% > 0) OR (nMin% > 0) THEN
  771.                     l& = IntToAscii(nHour%, szHour$)
  772.                     l& = IntToAscii(nMin%,  szMin$)
  773.                     IF (nHour% < 3) OR ((nHour% = 3) AND (nMin% < 20)) THEN
  774.                         n%=RenameWithNewExt(szAdmProgDir$, "ADMIN", nHour%, nMin%)
  775.                         n%=RenameWithNewExt(szAdmProgDir$, "CCBACKUP", nHour%, nMin%)
  776.                         n%=RenameWithNewExt(szAdmProgDir$, "CHKSTAT", nHour%, nMin%)
  777.                         n%=RenameWithNewExt(szAdmProgDir$, "RECLAIM", nHour%, nMin%)
  778.                         n%=RenameWithNewExt(szAdmProgDir$, "DIALIN", nHour%, nMin%)
  779.     
  780.                         szSuffix$ = szHour$ + "." + szMin$
  781.                         SetSymbolValue "TitleTextIn", "ADMIN Utilities" 
  782.                         szTemp$ = "The old "+szSuffix$+" ADMIN utilities have been renamed to files with extension "+szHour$+szMin$
  783.                         SetSymbolValue "MsgTextIn", szTemp$
  784.                         n%=DoMsgBox(szTemp$, "Old ADMIN Utilities", MB_ICONINFORMATION)
  785.                     END IF
  786.                 END IF
  787.  
  788.             END IF
  789.                 
  790.             IF IsDirWritable(szAdmProgDir$) = 0 THEN
  791.                 nReturn% = InvalidPath(szAdmProgDir$, STR_WRITEFAIL$)
  792.                 GOTO POOPTION_L1
  793.             END IF
  794.         END IF
  795.         UIPop 1
  796.         AskCopyAdmin = 1
  797.  
  798.     ELSEIF sz$ = "REACTIVATE" THEN
  799.         GOTO POOPTION_L1
  800.     ELSEIF sz$ = "BACK" THEN
  801.         UIPop 1
  802.         AskCopyAdmin = 0
  803.     ELSE
  804.         UIPop 1
  805.         DoAskQuit
  806.         GOTO POOPTION_INIT
  807.     END IF
  808.  
  809. END FUNCTION
  810.  
  811.  
  812. '*************************************************************************
  813. '**
  814. '** DoCopyOnly
  815. '**     - Copy program files only
  816. '**
  817. '*************************************************************************
  818.  
  819. FUNCTION DoCopyOnly STATIC AS INTEGER
  820.  
  821.     COPYFILE_INIT:
  822.  
  823.     SetSymbolValue "EditTextIn1", szProgFileDir$
  824.     SetSymbolValue "CheckIn1", "ON"
  825.     SetSymbolValue "EditTextIn2", szAdmProgDir$
  826.     SetSymbolValue "CheckIn2", "ON"
  827.     SetSymbolValue "StaticText1", TOTALSPACE_TEXT
  828.     SetSymbolValue "StaticText2", ADMINSPACE_TEXT
  829.     SetSymbolValue "EditFocus", "END"
  830.  
  831.     COPYFILE_L1:
  832.  
  833.     sz$ = UIStartDlg(CUIDLL$, COPYONLY, "CopyExeDlgProc", HELP_COPYONLY, HELPPROC$)
  834.     szProgFileDir$   = GetSymbolValue("EditTextOut1")
  835.     szAdmProgDir$    = GetSymbolValue("EditTextOut2")
  836.     szCopyProgFiles$ = GetSymbolValue("CheckOut1")
  837.     szDoAdmin$       = GetSymbolValue("CheckOut2")
  838.     SetSymbolValue "CheckIn1",    szCopyProgFiles$
  839.     SetSymbolValue "CheckIn2",    szDoAdmin$
  840.     SetSymbolValue "EditTextIn1", szProgFileDir$
  841.     SetSymbolValue "EditTextIn2", szAdmProgDir$
  842.  
  843.       IF sz$ = "CONTINUE" THEN
  844.         ''
  845.         '' Install only if it will fit.
  846.         ''
  847.         UIPop 1
  848.  
  849.         IF szCopyProgFiles$ = "ON" THEN
  850.             IF IsDirWritable(szProgFileDir$) = 0 THEN
  851.                 nReturn% = InvalidPath(szProgFileDir$, STR_WRITEFAIL$)
  852.                 GOTO COPYFILE_L1
  853.             END IF
  854.         END IF
  855.         IF szDoAdmin$ = "ON" THEN
  856.             IF IsDirWritable(szAdmProgDir$) = 0 THEN
  857.                 nReturn% = InvalidPath(szAdmProgDir$, STR_WRITEFAIL$)
  858.                 GOTO COPYFILE_L1
  859.             END IF
  860.             ''
  861.             '' Are we overwriting existing files?
  862.             ''
  863.             szTemp$ = szAdmProgDir$ + "\ADMIN.EXE"
  864.             IF fileExists(szTemp$) = 1 THEN
  865.                 ''
  866.                 '' Check version of files.
  867.                 ''
  868.                 szDDate$ = GetDateOfFile(szTemp$)
  869.                 szDHour% = GetHourFromDate(szDDate$)
  870.                 szDMin%  = GetMinuteFromDate(szDDate$)
  871.                 
  872.                 ''
  873.                 '' If not same version as ours, give warning.
  874.                 ''
  875.                 IF (szDHour% <> ADMINVER_MAJOR%) OR (szDMin% <> ADMINVER_MINOR%) THEN
  876.                     SetSymbolValue "TitleTextIn", STR_ALERT$
  877.                     szTemp$ = STR_OVERWRITEADMIN$ + szAdmProgDir$ + "?"
  878.                     SetSymbolValue "MsgTextIn", szTemp$
  879.                     sz$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
  880.                     UIPop 1
  881.                     IF sz$ = "CANCEL" THEN
  882.                         UIPop 1
  883.                         SetSymbolValue "EditFocus", "EditTextIn2"
  884.                         GOTO COPYFILE_INIT
  885.                     END IF
  886.                 END IF
  887.  
  888.             END IF
  889.         END IF
  890.  
  891.         IF szCopyProgFiles$ = "ON" THEN
  892.             ''
  893.             ''  Check if we're overwriting program files.
  894.             ''
  895.             szTempPath$ = szProgFileDir$ + "\WMail.EXE" 
  896.             IF fileExists(szTempPath$) = 1 THEN
  897.                 SetSymbolValue "TitleTextIn", "Warning"
  898.                 szTempPath$ = "Overwrite program files in " + szProgFileDir$ + "?"
  899.                 SetSymbolValue "MsgTextIn", szTempPath$
  900.                 sz$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
  901.                 UIPop 1
  902.                 IF sz$ = "CANCEL" THEN
  903.                     SetSymbolValue "EditFocus", "EditTextIn1"
  904.                     GOTO COPYFILE_INIT
  905.                 END IF    
  906.             END IF
  907.         END IF
  908.  
  909.         DoCopyOnly = 1
  910.  
  911.     ELSEIF sz$ = "REACTIVATE" THEN
  912.         GOTO COPYFILE_L1
  913.     ELSEIF sz$ = "BACK" THEN
  914.         UIPop 1
  915.         DoCopyOnly = 0
  916.     ELSE
  917.         UIPop 1
  918.         DoAskQuit
  919.         GOTO COPYFILE_INIT
  920.     END IF
  921.  
  922. END FUNCTION
  923.  
  924.  
  925. '*************************************************************************
  926. '**
  927. '** EnoughSpace:
  928. '**     - Check if there is enough disk space.
  929. '**
  930. '*************************************************************************
  931.  
  932. FUNCTION EnoughSpace STATIC AS INTEGER
  933.  
  934.     lSpaceRequired& = 0
  935.  
  936.     IF StripPath(szProgFileDir$,szProgDrive$) = 0 THEN
  937.         EnoughSpace = 1
  938.     END IF
  939.     IF (szDoAdmin$ = "ON") AND (StripPath(szAdmProgDir$, szAdmDrive$) = 0) THEN
  940.         EnoughSpace = 1
  941.     END IF
  942.     lProgSpaceAvailable& = GetFreeSpaceForDrive(szProgDrive$)
  943.     IF (szDoAdmin$ = "ON") AND (szProgDrive$ <> szAdmDrive$) THEN
  944.         lAdmSpaceAvailable&  = GetFreeSpaceForDrive(szAdmDrive$)
  945.     ELSE
  946.         lAdmSpaceAvailable& = lProgSpaceAvailable&
  947.     END IF
  948.  
  949.     IF szCopyProgFiles$ = "ON" THEN
  950.         IF (szDoAdmin$ = "ON") AND (szProgDrive$ = szAdmDrive$) THEN
  951.             lSpaceRequired& = SPACENEEDED + SPACEWITHADMIN
  952.         ELSE
  953.             lSpaceRequired& = SPACENEEDED
  954.         END IF
  955.         IF lProgSpaceAvailable& < lSpaceRequired& THEN
  956.             EnoughSpace = 0
  957.         ELSE
  958.             IF szDoAdmin$ = "ON" THEN
  959.                 lSpaceRequired& = SPACEWITHADMIN
  960.                 IF lAdmSpaceAvailable& < lSpaceRequired& THEN
  961.                     EnoughSpace = 0
  962.                 ELSE
  963.                     EnoughSpace = 1
  964.                 END IF
  965.             ELSE
  966.                 EnoughSpace = 1
  967.             END IF
  968.         END IF
  969.     ELSE
  970.         IF szDoAdmin$ = "ON" THEN
  971.             lSpaceRequired& = SPACEWITHADMIN
  972.             IF lAdmSpaceAvailable& < lSpaceRequired& THEN
  973.                 EnoughSpace = 0
  974.             ELSE
  975.                 EnoughSpace = 1
  976.             END IF
  977.         ELSE
  978.             EnoughSpace = 1
  979.         END IF
  980.     END IF
  981.  
  982. END FUNCTION
  983.  
  984.  
  985. '*************************************************************************
  986. '**
  987. '** ShouldCopyVimFiles
  988. '**     - Check if we should install the VIM common DLL's
  989. '**
  990. '*************************************************************************
  991.  
  992. FUNCTION ShouldCopyVimFiles STATIC AS INTEGER
  993.  
  994.     bNewer% = 0
  995.     bOlder% = 0
  996.     bMissing% = 0
  997.  
  998.     '' Check if the VIM DLL's already exist in the directory that 
  999.     '' we're installing to.
  1000.     ''
  1001.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "MAILENG.DLL") 
  1002.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CCEDIT.DLL")
  1003.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CCUTIL.DLL")
  1004.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CHARSET.DLL")
  1005.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "MEMMAN.DLL")
  1006.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CCSMI.DLL")
  1007.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CDVIM.DLL")
  1008.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "SMI.DLL")
  1009.     n% = CheckFileVersion (SrcDir$, szProgFileDir$, "VIM.DLL")
  1010.  
  1011.     IF bOlder% > 0 THEN
  1012.         IF (bNewer%) OR (bMissing%) THEN
  1013.             ''
  1014.             '' Some of our DLL's are older, some newer.  May be some missing.
  1015.             ''
  1016.             SetSymbolValue "BadDllDir", szProgFileDir$
  1017.             sz$ = UIStartDlg(CUIDLL$, BADDLLSET, "BadDllSetDlgProc", HELP_BADDLLSET, HELPPROC$)
  1018.             UIPop 1
  1019.         ELSE
  1020.             ''
  1021.             '' Existing version newer than ours.  Don't install.
  1022.             ''
  1023.         END IF
  1024.  
  1025.     ELSEIF bNewer% > 0 THEN
  1026.         ''
  1027.         '' Our version is newer.  Install.
  1028.         ''
  1029.         ShouldCopyVimFiles = 1
  1030.  
  1031.     END IF
  1032.  
  1033.     ShouldCopyVimFiles = 0
  1034.  
  1035. END FUNCTION
  1036.  
  1037.  
  1038. '*************************************************************************
  1039. '**
  1040. '** CheckFileVersion
  1041. '**     - Check if the file exists in the destination directory and 
  1042. '**       check the version of the file.
  1043. '**
  1044. '**     - Parameters:
  1045. '**       szSrcDir$    source directory
  1046. '**       szDstDir$    target directory
  1047. '**       szFile$      file to look for
  1048. '**
  1049. '**     - Return:
  1050. '**       0 if file does not exist (FILE_MISSING)
  1051. '**       1 if our version is older (FILE_OLDER)
  1052. '**       2 if versions are same (FILE_SAME)
  1053. '**       3 if our version is newer (FILE_NEWER)
  1054. '**
  1055. '*************************************************************************
  1056.  
  1057. FUNCTION CheckFileVersion (szSrcDir$, szDstDir$, szFile$) STATIC AS INTEGER
  1058.  
  1059.     szSrcFile$ = AppendPath$ (szSrcDir$, szFile$)
  1060.     szDstFile$ = AppendPath$ (szDstDir$, szFile$)
  1061.  
  1062.     '' Does file exist in destination directory?
  1063.     ''
  1064.     IF fileExists (szDstFile$) = 0 THEN
  1065.         bMissing% = bMissing% + 1
  1066.         CheckFileVersion = FILE_MISSING
  1067.     END IF
  1068.  
  1069.     '' Get version of source file
  1070.     ''
  1071.     szSrcVer$ = GetVersionOfFile(szSrcFile$)
  1072.     lSrcVer&  = GetVersionNthField(szSrcVer$, 1)
  1073.  
  1074.     '' Get version of file in destination directory
  1075.     ''
  1076.     szDstVer$ = GetVersionOfFile(szDstFile$)
  1077.     lDstVer&  = GetVersionNthField(szDstVer$, 1)
  1078.  
  1079.     '' Compare versions
  1080.     ''
  1081.     IF lSrcVer& < lDstVer& THEN
  1082.         bOlder% = bOlder% + 1
  1083.         CheckFileVersion = FILE_OLDER
  1084.  
  1085.     ELSEIF lSrcVer& > lDstVer& THEN
  1086.         bNewer% = bNewer% + 1
  1087.         CheckFileVersion = FILE_NEWER
  1088.  
  1089.     ELSE
  1090.         '' Versions are the same.
  1091.         '' Exception is for CDVIM.DLL, should check the 2nd digit also.
  1092.         ''
  1093.         IF szFile$ = "CDVIM.DLL" THEN
  1094.             lSrcVer& = GetVersionNthField(szSrcVer$, 2)
  1095.             lDstVer& = GetVersionNthField(szDstVer$, 2)
  1096.             IF lSrcVer& < lDstVer& THEN
  1097.                 bOlder% = bOlder% + 1
  1098.                 CheckFileVersion = FILE_OLDER
  1099.             ELSEIF lSrcVer& > lDstVer& THEN
  1100.                 bNewer% = bNewer% + 1
  1101.                 CheckFileVersion = FILE_NEWER
  1102.             ELSE
  1103.                 CheckFileVersion = FILE_SAVE
  1104.             END IF
  1105.         
  1106.         ELSE 
  1107.             CheckFileVersion = FILE_SAME
  1108.         END IF
  1109.  
  1110.     END IF
  1111.  
  1112. END FUNCTION
  1113.  
  1114.  
  1115. '*************************************************************************
  1116. '**
  1117. '** Install:
  1118. '**     - Build the copy list and performs all installation operations.
  1119. '**
  1120. '*************************************************************************
  1121.  
  1122. SUB Install STATIC
  1123.  
  1124.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1125.  
  1126.     IF szCopyProgFiles$ = "ON" THEN
  1127.         szTemp1$ = SrcDir$ + "ReadMe.TXT"
  1128.         szTemp2$ = szProgFileDir$ + "\ReadMe.TXT"
  1129.         CopyFile szTemp1$, szTemp2$, cmoOverwrite, 0
  1130. ''        szTemp1$ = SrcDir$ + "Install.TXT"
  1131. ''        szTemp2$ = szProgFileDir$ + "\Install.TXT"
  1132. ''        CopyFile szTemp1$, szTemp2$, cmoOverwrite, 0
  1133.     END IF
  1134.  
  1135.     CopyFilesInCopyList
  1136.  
  1137.     n% = SetFileTimeForDir(szProgFileDir$, FILETIME, 1)
  1138.     n% = SetFileTimeForDir(szProgFileDir$ + "\CCUSER", FILETIME, 1)
  1139.  
  1140. END SUB
  1141.  
  1142.  
  1143.  
  1144. '*************************************************************************
  1145. '**
  1146. '** CopyAdminFiles
  1147. '**     - Copy the admin utilities
  1148. '**
  1149. '*************************************************************************
  1150.  
  1151. FUNCTION CopyAdminFiles STATIC AS INTEGER
  1152.  
  1153.     INSERT_ADMIN:
  1154.  
  1155.     SetSymbolValue "TextIn1", "Disk 4"
  1156.     SetSymbolValue "TextIn2", SrcDir$
  1157.     sz$ = UIStartDlg(CUIDLL$, INSERTDISK, "InsertDiskDlgProc", 0, "")
  1158.     UIPop 1
  1159.     IF sz$ = "CANCEL" THEN
  1160.         CopyAdminFiles = 0        
  1161.         GOTO COPYADMINFILES_END
  1162.     END IF
  1163.     szTempPath$ = SrcDir$ + "Admin.EXE"
  1164.     IF fileExists(szTempPath$) = 0 THEN
  1165.         GOTO INSERT_ADMIN
  1166.     END IF
  1167.     CreateDir szAdmProgDir$, cmoNone
  1168.  
  1169.     nCursor% = ShowWaitCursor()
  1170.  
  1171.     SetSymbolValue "TitleIn", "Disk 4"
  1172.     SetSymbolValue "SrcDir", SrcDir$
  1173.     SetSymbolValue "DstDir", szAdmProgDir$
  1174.  
  1175.     sz$ = UIStartDlg(CUIDLL$, COPYDISK, "CopyDiskDlgProc", 0, "")
  1176.     UIPop 1
  1177.  
  1178.     RestoreCursor nCursor%
  1179.     CopyAdminFiles = 1
  1180.  
  1181.     COPYADMINFILES_END:
  1182.  
  1183. END FUNCTION
  1184.  
  1185.  
  1186. '*************************************************************************
  1187. '**
  1188. '** ExecAdminUtil
  1189. '**     - Spawn the Admin or Chkstat/Reclaim utilities
  1190. '**
  1191. '*************************************************************************
  1192.  
  1193. SUB ExecAdminUtil STATIC
  1194.  
  1195.     ''
  1196.     ''  If database not already exists, spawn Admin to create new po.
  1197.     ''
  1198.     szTempPath$ = szPODir$ + "\MLANDATA"
  1199.  
  1200.     IF fileExists(szTempPath$) = 0 THEN
  1201.         CreateDir szPODir$, cmoNone
  1202.         nHwndFrame% = HwndFrame()
  1203.         IF szDoAdmin$ = "ON" THEN
  1204.             szTemp$ = STR_CREATEPO1$ + szPOName$ + STR_CREATEPO2$
  1205.             szTempPath$ = szAdmProgDir$ + "\Admin.EXE"
  1206.         ELSE
  1207.             szTemp$ = STR_CREATEPO3$ + szPOName$ + STR_CREATEPO4$
  1208.             szTempPath$ = SrcDir$ + "Admin.EXE"
  1209.             ASK_FOR_DISK_1:
  1210.             
  1211.             nReturn% = DoMsgBox(STR_INSERTADMIN$, STR_UTILTITLE$, MB_ICONEXCLAMATION)
  1212.             IF fileExists(szTempPath$) = 0 THEN
  1213.                 GOTO ASK_FOR_DISK_1
  1214.             END IF
  1215.         END IF
  1216.         IF szEncryptKey$ = "" THEN
  1217.             szEncryptKey$ = szPOPass$
  1218.         END IF
  1219.         szEKey$ = "/EKEY/" + szEncryptKey$
  1220.         SetSymbolValue "TitleTextIn", STR_CREATEPOTITLE$
  1221.         SetSymbolValue "MsgTextIn", szTemp$
  1222.         sz$ = UIStartDlg(CUIDLL$, MESSAGEBOX_NOEXIT, "FMsgBoxDlgProc", HELP_MESSAGEBOX, HELPPROC$)
  1223.         UIPop 1
  1224.         nCursor% = ShowWaitCursor()
  1225.         nReturn% = ExecUtil(nHwndFrame%, nHinst%, szPOName$, szPOPass$, szPODir$, szTempPath$, szEKey$, "")
  1226.         RestoreCursor(nCursor%)
  1227.  
  1228.         szTempPath$ = szPODir$ + "\MLANDATA"
  1229.         IF fileExists(szTempPath$) = 0 THEN
  1230.             n% = DoMsgBox("Failed to create new post office!  Please run ADMIN again after installation.", "!! Error !!", MB_ICONSTOP)
  1231.         END IF
  1232.  
  1233.     ELSE
  1234.         ''  Database files exist.  Give option for administrator to run 
  1235.         ''  ChkStat and Reclaim to upgrade the database files.
  1236.         ''
  1237.         sz$ = UIStartDlg(CUIDLL$, RUNUTIL, "RunUtilDlgProc", APPHELP, HELPPROC$)
  1238.         IF sz$ = "CONTINUE" THEN
  1239.             IF szDoAdmin$ = "ON" THEN
  1240.                 szTempPath$ = szAdmProgDir$
  1241.             ELSE
  1242.                 szTempPath$ = SrcDir$ + "RECLAIM.EXE"
  1243.  
  1244.                 ASK_FOR_DISK_2:
  1245.  
  1246.                 nReturn% = DoMsgBox(STR_INSERTADMIN$, STR_UTILTITLE$, MB_ICONEXCLAMATION) 
  1247.                 IF fileExists(szTempPath$) = 0 THEN
  1248.                     GOTO ASK_FOR_DISK_2
  1249.                 END IF
  1250.             END IF
  1251.  
  1252.             szBatPath$ = AppendPath$ (szProgFileDir$, "CCUPDB")
  1253.  
  1254.             nCursor% = ShowWaitCursor()
  1255.  
  1256.             nReturn% = ExecBatch(nHwndFrame%, nHinst%, "", szBatPath$, szTempPath$, szPOName$, szPOPass$, szPODir$, szReclaimDir$)
  1257.  
  1258.             IF nReturn% = 1 THEN
  1259.                 ''
  1260.                 ''  Copy the database files back
  1261.                 ''
  1262.                 nReturn% = wCopyDir(szReclaimDir$, szPODir$, 0)
  1263.  
  1264.                 n% = DeleteDir(szReclaimDir$)
  1265.  
  1266.             ELSE
  1267.                 n% = DoMsgBox("RECLAIM/CHKSTAT utilities failed!  Please run those utilities again after installation!", "!! Error !!", MB_ICONSTOP)
  1268.             END IF
  1269.             RestoreCursor(nCursor%)
  1270.         END IF
  1271.         UIPop 1
  1272.     END IF
  1273.  
  1274. END SUB
  1275.  
  1276.  
  1277.