home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-04-13 | 40.9 KB | 1,277 lines |
- '************************************************************************
- '* *
- '* cc:Mail Post Office Installation Script *
- '* *
- '************************************************************************
-
-
- '*-------------------------------------------------------------------------
- '* Includes
- '*-------------------------------------------------------------------------
-
- '$INCLUDE 'setupapi.inc'
- '$INCLUDE 'msdetect.inc'
- '$INCLUDE 'winstall.inc'
-
- '$INCLUDE 'wutil.mst'
-
-
- '*-------------------------------------------------------------------------
- '* Subroutine/Function Declarations
- '*-------------------------------------------------------------------------
-
- DECLARE SUB ExecAdminUtil
- DECLARE SUB DoAskQuit
- DECLARE SUB SayTooBig
- DECLARE SUB Install
-
- DECLARE FUNCTION InitFunc AS INTEGER
- DECLARE FUNCTION GetPOInfo AS INTEGER
- DECLARE FUNCTION AskCopyAdmin AS INTEGER
- DECLARE FUNCTION DoCopyOnly AS INTEGER
- DECLARE FUNCTION EnoughSpace AS INTEGER
- DECLARE FUNCTION ShouldCopyVimFiles AS INTEGER
- DECLARE FUNCTION CopyAdminFiles AS INTEGER
-
- DECLARE FUNCTION CheckFileVersion (sz$, sz$, sz$) AS INTEGER
-
- DECLARE FUNCTION IntToAscii LIB "mscuistf.dll" (i%,sz$) AS LONG
- DECLARE FUNCTION ExecUtil LIB "mscuistf.dll" (n%,n%,sz$,sz$,sz$,sz$,sz$,sz$) AS INTEGER
- DECLARE FUNCTION ChangeDrive LIB "mscuistf.dll" (SrcDir$) AS INTEGER
- DECLARE FUNCTION ResetDrive LIB "mscuistf.dll" (nReturn%) AS INTEGER
- DECLARE FUNCTION StripPath LIB "mscuistf.dll" (szProgFileDir$, szDrive$) AS INTEGER
- DECLARE FUNCTION fileExists LIB "mscuistf.dll" (sz$) AS INTEGER
- DECLARE FUNCTION SzToUpper LIB "mscuistf.dll" (sz$) AS INTEGER
- DECLARE FUNCTION wCopyDir LIB "mscuistf.dll" (sz$,sz$,n%) AS INTEGER
- DECLARE FUNCTION GetCurrentDir LIB "mscuistf.dll" (szTempPath$) AS INTEGER
- DECLARE FUNCTION CheckFileVer LIB "mscuistf.dll" (sz$, sz$, sz$) AS INTEGER
- DECLARE FUNCTION SetFrame LIB "mscuistf.dll" (nHwndFrame%)
- DECLARE FUNCTION SetInst LIB "mscuistf.dll" (nHwndInst%)
- DECLARE FUNCTION MeIsPO LIB "mscuistf.dll" (sz$,sz$,sz$) AS INTEGER
- DECLARE FUNCTION DeleteDir LIB "mscuistf.dll" (sz$) AS INTEGER
- DECLARE FUNCTION AsciiToInt LIB "mscuistf.dll" (sz$) AS INTEGER
- DECLARE FUNCTION MaximizeWindow LIB "mscuistf.dll" (n%) AS INTEGER
- DECLARE FUNCTION CheckMailEngVer LIB "mscuistf.dll" (sz$, sz$) AS INTEGER
- DECLARE FUNCTION SetFileTimeForDir LIB "mscuistf.dll" (sz$,sz$,n%) AS INTEGER
- DECLARE FUNCTION ProgressBegin LIB "mscuistf.dll" (sz$,sz$) AS INTEGER
- DECLARE FUNCTION ProgressEnd LIB "mscuistf.dll" (n%) AS INTEGER
- DECLARE FUNCTION CopyDir_Show LIB "mscuistf.dll" (n%,n%,n%,sz$,sz$,n%) AS INTEGER
- DECLARE FUNCTION ExecBatch LIB "mscuistf.dll" (n%,n%,sz$,sz$,sz$,sz$,sz$,sz$,sz$)
- DECLARE FUNCTION RenameWithNewExt LIB "mscuistf.dll" (sz$,sz$,n%,n%) AS INTEGER
-
-
- '*-------------------------------------------------------------------------
- '* Defines
- '*-------------------------------------------------------------------------
-
- ''$DEFINE DEBUG ''Define for script development/debugging
-
- CONST FILETIME = "0200"
-
- CONST SPACENEEDED = 4730000
- CONST SPACEWITHADMIN = 420000
-
- CONST PROGRAMFILES = 1
- CONST ADMINFILES = 2
-
- CONST FILE_MISSING = 0
- CONST FILE_OLDER = 1
- CONST FILE_SAME = 2
- CONST FILE_NEWER = 3
-
-
- '*-------------------------------------------------------------------------
- '* String Constants / Messages
- '*-------------------------------------------------------------------------
-
- CONST PATH_PO$ = "M:\CCDATA"
- CONST PATH_PROGFILE$ = "M:\CCMAIL"
- CONST PATH_ADMIN$ = "M:\CCADMIN"
- CONST PATH_RECLAIM$ = "M:\CCDATA.OUT"
-
- CONST STR_TITLE$ = "cc:Mail Version 2.0 - Program and Post Office Install"
- CONST STR_ABOUTSTR$ = "Copyright (C) 1993 Lotus Development Corporation."
- CONST STR_ALERT$ = "Alert"
- CONST STR_ERRTITLE$ = "cc:Mail Setup Error"
- CONST STR_CORRUPT$ = "Setup sources were corrupted!"
- CONST STR_WRITEFAIL$ = "Cannot write to directory"
- CONST STR_NEEDRECLAIMDIR$ = "Please specify reclaim directory."
- CONST STR_CREATEDIRFAIL$ = "Cannot create directory"
- CONST STR_BADPROGFILEDIR$ = "Program file directory cannot be same as source directory"
- CONST STR_INSERTADMIN$ = "Please insert diskette labeled DISK 4"
- CONST STR_OVERWRITEPROG$ = "Overwrite program files in "
- CONST STR_OVERWRITEADMIN$ = "Overwrite administrative utilities in "
- CONST STR_CREATEPO1$ = "Please continue to create the post office ("
- CONST STR_CREATEPO2$ = ") now"
- CONST STR_CREATEPO3$ = "Please insert the disk labeled DISK 4 to create the post office ("
- CONST STR_CREATEPO4$ = ") now"
- CONST STR_CREATEPOTITLE$ = "Create New Post Office"
- CONST STR_UTILTITLE$ = "Chkstat/Reclaim Utilities"
- CONST STR_POCOMPLETE$ = "The cc:Mail post office installation is complete."
- CONST STR_COPYCOMPLETE$ = "The cc:Mail program files have been upgraded."
- CONST STR_COPYADMINCOMPLETE$ = "The cc:Mail administrative utilites have been upgraded."
- CONST STR_BADPODRIVE$ = "Invalid drive for post office directory."
- CONST STR_BADPROGDRIVE$ = "Invalid drive for program file directory."
-
- CONST TOTALSPACE_TEXT = "4,700 Kbytes"
- CONST ADMINSPACE_TEXT = " 420 Kbytes"
-
- '' Version of ADMIN utilities
- ''
- CONST ADMINVER_MAJOR% = 4
- CONST ADMINVER_MINOR% = 2
-
-
- '*-------------------------------------------------------------------------
- '* Variables
- '*-------------------------------------------------------------------------
-
- GLOBAL CUIDLL$ ''Custom DLL name
- GLOBAL HELPPROC$ ''Generic help procedure name
-
- GLOBAL SrcDir$ ''Default source directory
- GLOBAL OPTCUR$ ''Option selection from option dialog.
- GLOBAL szProgFileDir$ ''Program File Directory
- GLOBAL szPOName$ ''Post Office Name
- GLOBAL szPOPass$ ''Post Office Password
- GLOBAL szEncryptKey$ ''Encryption Key
- GLOBAL szAdmProgDir$ ''Administrative Programs Directory
- GLOBAL szPODir$ ''Post Office Directory
- GLOBAL szCopyProgFiles$ ''flag for copying all program files
- GLOBAL szWMailPath$ ''WMail.ini path
- GLOBAL szDoAdmin$ ''Install Admin files
- GLOBAL nHwndFrame%
- GLOBAL nHinst%
- GLOBAL szTempPath$
- GLOBAL nReturn%
- GLOBAL nDrive%
- GLOBAL lDiskSpace&
- GLOBAL lSpaceRequired&
- GLOBAL szDrive$
- GLOBAL szMenu$
- GLOBAL szReclaimDir$
-
- GLOBAL bOlder%
- GLOBAL bNewer%
- GLOBAL bMissing%
-
- GLOBAL PROGRAMOPT$
- GLOBAL ADMINOPT$
-
- GLOBAL PROGRAMNEEDS$
- GLOBAL ADMINNEEDS$
- GLOBAL EXTRACOSTS$
- GLOBAL BIGLIST$
-
- GLOBAL CHECKSTATE$
- GLOBAL STATUSTEXT$
- GLOBAL DRIVETEXT$
-
-
- '************************************************************************
- '* *
- '* Start *
- '* *
- '************************************************************************
-
-
- '*---------------------------------------------------------------------
- '* Initialization
- '*---------------------------------------------------------------------
-
- INIT:
- IF InitFunc = 0 THEN
- GOTO QUIT
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Check Windows version, don't install if 3.0 or below
- '*---------------------------------------------------------------------
-
- IF CheckWinVer = 0 THEN
- GOTO QUIT
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Welcome dialog
- '*---------------------------------------------------------------------
-
- sz$ = UIStartDlg(CUIDLL$, POWELCOME, "WelcomeDlgProc", HELP_POWELCOME, HELPPROC$)
- UIPop 1
- IF sz$ = "EXIT" THEN
- END
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Warn to shut down post office
- '*---------------------------------------------------------------------
-
- sz$ = UIStartDlg(CUIDLL$, WARNSHUTDOWN, "WarnShutDownDlgProc", 0, "")
- UIPop 1
- IF sz$ = "EXIT" THEN
- END
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Main Menu
- '*---------------------------------------------------------------------
-
- MAINMENU_LABEL:
-
- SetSymbolValue "RadioDefault", OPTCUR$
- SetSymbolValue "SourcePath", SrcDir$
-
- szMenu$ = UIStartDlg(CUIDLL$, POMENU, "FRadioDlgProc", HELP_POMENU, HELPPROC$)
- OPTCUR$ = GetSymbolValue("ButtonChecked")
- SetSymbolValue "RadioDefault", OPTCUR$
-
- UIPop 1
-
- IF szMenu$ = "POInst" THEN
- GOTO GETPOINFO_LABEL
-
- ELSEIF szMenu$ = "CopyOnly" THEN
- GOTO COPYONLY_LABEL
-
- ELSEIF szMenu$ = "REACTIVATE" THEN
- GOTO MAINMENU_LABEL
-
- ELSE
- UIPop 1
- END
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Retrieve Post Office Installation Info
- '*---------------------------------------------------------------------
-
- GETPOINFO_LABEL:
-
- IF GetPOInfo = 0 THEN
- GOTO MAINMENU_LABEL
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Option whether to install admin
- '*---------------------------------------------------------------------
-
- ASKCOPYADMIN_LABEL:
-
- IF AskCopyAdmin = 0 THEN
- GOTO GETPOINFO_LABEL
- END IF
-
- GOTO CHECK_DISKSPACE_LABEL
-
-
- '*---------------------------------------------------------------------
- '* This is the option to only copy the executables
- '*---------------------------------------------------------------------
-
- COPYONLY_LABEL:
-
- IF DoCopyOnly = 0 THEN
- GOTO MAINMENU_LABEL
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Check for enough disk space
- '*---------------------------------------------------------------------
-
- CHECK_DISKSPACE_LABEL:
-
- nCursor% = ShowWaitCursor()
- IF EnoughSpace = 0 THEN
- RestoreCursor nCursor%
- SayTooBig
- IF szMenu$ = "CopyOnly" THEN
- GOTO COPYONLY_LABEL
- ELSE
- GOTO GETPOINFO_LABEL
- END IF
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Prepare the file list
- '*---------------------------------------------------------------------
-
- ClearCopyList
-
- IF szCopyProgFiles$ = "ON" THEN
-
- AddSectionFilesToCopyList "SETUP DISK", SrcDir$, szProgFileDir$
- AddSectionFilesToCopyList "DEFAULTS", SrcDir$, szProgFileDir$
- AddSectionFilesToCopyList "DISK 2", SrcDir$, szProgFileDir$
- AddSectionFilesToCopyList "DISK 3", SrcDir$, szProgFileDir$
- AddSectionFilesToCopyList "INSTALL", SrcDir$, szProgFileDir$
-
- '*-----------------------------------------------------------------
- '* Check if we need to install the VIM files
- '*-----------------------------------------------------------------
-
- IF ShouldCopyVimFiles = 1 THEN
- AddSectionFilesToCopyList "VIM", SrcDir$, szProgFileDir$
- END IF
-
- '*-----------------------------------------------------------------
- '* Do the installation
- '*-----------------------------------------------------------------
-
- RestoreCursor nCursor%
- Install
-
- ELSE
- RestoreCursor nCursor%
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Copy all files from the ADMIN diskette
- '*---------------------------------------------------------------------
-
- COPYADMIN_LABEL:
-
- IF szDoAdmin$ = "ON" THEN
- IF CopyAdminFiles = 0 THEN
- DoAskQuit
- GOTO COPYADMIN_LABEL
- END IF
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Execute the DOS Admin or Chkstat/Reclaim utilities
- '*---------------------------------------------------------------------
-
- IF szMenu$ <> "CopyOnly" THEN
- ExecAdminUtil
- END IF
-
-
- '*---------------------------------------------------------------------
- '* Done: Successful / Error
- '*---------------------------------------------------------------------
-
- IF szMenu$ = "POInst" THEN
- sz$ = STR_POCOMPLETE$
- ELSE
- IF szCopyProgFiles$ = "ON" THEN
- sz$ = STR_COPYCOMPLETE$
- '' i% = DoMsgBox(sz$, STR_TITLE$, MB_OK)
- ELSE
- sz$ = STR_COPYADMINCOMPLETE$
- i% = DoMsgBox(sz$, STR_TITLE$, MB_OK)
- END IF
- END IF
-
- QUIT:
-
- ON ERROR GOTO ERRQUIT
-
- IF ERR = 0 THEN
- dlg% = POEXITSUCCESS
- ELSEIF ERR = STFQUIT THEN
- dlg% = EXITQUIT
- ELSE
- dlg% = EXITFAILURE
- END IF
-
- QUITL1:
-
- IF dlg% = POEXITSUCCESS THEN
- sz$ = UIStartDlg(CUIDLL$, dlg%, "ExitDlgProc", 0, "")
- ELSE
- sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
- END IF
- IF sz$ = "REACTIVATE" THEN
- GOTO QUITL1
- END IF
- UIPop 1
-
- '*---------------------------------------------------------------------
- '* Exit
- '*---------------------------------------------------------------------
-
- DONE:
- END
-
-
-
- '*************************************************************************
- '**
- '** ERRQUIT - exit on error
- '**
- '*************************************************************************
-
- ERRQUIT:
-
- i% = DoMsgBox(STR_CORRUPT$, STR_ERRTITLE$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
- END
-
-
- '*************************************************************************
- '**
- '** SayTooBig - not enough disk space
- '**
- '*************************************************************************
-
- SUB SayTooBig STATIC
-
- SAYTOOBIG_LABEL:
-
- sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
- IF sz$ = "REACTIVATE" THEN
- GOTO SAYTOOBIG_LABEL
- END IF
- UIPop 1
-
- END SUB
-
-
- '*************************************************************************
- '**
- '** DoAskQuit - confirm for exit
- '**
- '*************************************************************************
-
- SUB DoAskQuit STATIC
-
- ASKQUIT_LABEL:
-
- sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
-
- IF sz$ = "EXIT" THEN
- UIPopAll
- ERROR STFQUIT
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO ASKQUIT_LABEL
- ELSE
- UIPop 1
- END IF
-
- END SUB
-
-
- '*************************************************************************
- '**
- '** InitFunc
- '** - initialization
- '**
- '*************************************************************************
-
- FUNCTION InitFunc STATIC AS INTEGER
-
- n% = MaximizeWindow(HwndFrame())
-
- SetAbout STR_TITLE$, STR_ABOUTSTR$
-
- CUIDLL$ = "mscuistf.dll" ''Custom user interface dll
- HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure
-
- SetBitmap CUIDLL$, BMP_LOTUS
- SetTitle STR_TITLE$
-
- '' n% = SetCopyMode(0)
-
- szInf$ = GetSymbolValue("STF_SRCINFPATH")
- IF szInf$ = "" THEN
- szInf$ = GetSymbolValue("STF_CWDDIR") + "PO.INF"
- END IF
- ReadInfFile szInf$
-
- OPTCUR$ = "1"
- SrcDir$ = GetSymbolValue("STF_SRCDIR")
- szWindowDir$ = "C:\WINDOWS"
-
- '
- ' Defaults for paths
- '
- szPOName$ = ""
- szPOPass$ = ""
- szPODir$ = PATH_PO$
- szEncryptKey$ = ""
- szProgFileDir$ = PATH_PROGFILE$
- szAdmProgDir$ = PATH_ADMIN$
- szReclaimDir$ = PATH_RECLAIM$
- szCopyProgFiles$ = "ON"
-
-
- '' Retrieve the application instance and handle to the frame window.
- ''
- nHinst% = HinstFrame()
- nHwndFrame% = HwndFrame()
- n% = SetFrame(nHwndFrame%)
- n% = SetInst(nHinst%)
-
- InitFunc = 1
-
- END FUNCTION
-
-
-
- '*************************************************************************
- '**
- '** GetPOInfo
- '** - Retrieve post office information
- '**
- '*************************************************************************
-
- FUNCTION GetPOInfo STATIC AS INTEGER
-
- POINFO_INIT:
-
- SetSymbolValue "EditTextIn1", szPOName$
- SetSymbolValue "EditTextIn2", szPOPass$
- SetSymbolValue "EditTextIn3", szPODir$
- SetSymbolValue "EditTextIn4", szEncryptKey$
- SetSymbolValue "EditTextIn5", szReclaimDir$
- SetSymbolValue "EditTextIn6", szProgFileDir$
- SetSymbolValue "EditFocus", "END"
-
- POINFO_L1:
-
- sz$ = UIStartDlg(CUIDLL$, POINFO, "FPOInfoDlgProc", HELP_POINFO, HELPPROC$)
- szPOName$ = GetSymbolValue("EditTextOut1")
- szPOPass$ = GetSymbolValue("EditTextOut2")
- szPODir$ = GetSymbolValue("EditTextOut3")
- szEncryptKey$ = GetSymbolValue("EditTextOut4")
- IF szEncryptKey$ = "" THEN
- szEncryptKey$ = szPOPass$
- END IF
- szReclaimDir$ = GetSymbolValue("EditTextOut5")
- szProgFileDir$ = GetSymbolValue("EditTextOut6")
-
- SetSymbolValue "EditTextIn1", szPOName$
- SetSymbolValue "EditTextIn2", szPOPass$
- SetSymbolValue "EditTextIn3", szPODir$
- SetSymbolValue "EditTextIn4", szEncryptKey$
- SetSymbolValue "EditTextIn5", szReclaimDir$
- SetSymbolValue "EditTextIn6", szProgFileDir$
-
- IF sz$ = "CONTINUE" THEN
- ''
- '' Check if we have write access to post office directory.
- ''
- IF IsDriveValid(szPODir$) = 0 THEN
- nReturn% = InvalidPath(szPODir$, STR_BADPODRIVE$)
- GOTO POINFO_L1
- END IF
- IF DoesDirExist(szPODir$) = 1 THEN
- IF IsDirWritable(szPODir$) = 0 THEN
- nReturn% = InvalidPath(szPODir$, STR_WRITEFAIL$)
- GOTO POINFO_L1
- END IF
- ELSE
- CreateDir szPODir$, cmoNone
- IF DoesDirExist(szPODir$) = 0 THEN
- nReturn% = InvalidPath(szPODir$, STR_CREATEDIRFAIL$)
- GOTO POINFO_L1
- END IF
- END IF
-
- ''
- '' Check if post office files exist.
- ''
- szTempPath$ = szPODir$ + "\MLANDATA"
- IF fileExists(szTempPath$) = 1 THEN
- ''
- '' Don't verify post office name and password because we may
- '' be upgrading an old database and the mail engine functions
- '' will not work.
- ''
- '' IF MeIsPO(szPOName$, szPOPass$, szPODir$) = 0 THEN
- '' GOTO POINFO_L1
- '' END IF
-
- ''
- '' Post office already there. Check if reclaim directory valid.
- ''
- IF szReclaimDir$ = "" THEN
- nReturn% = InvalidPath(szReclaimDir$, STR_NEEDRECLAIMDIR$)
- GOTO POINFO_L1
- ELSE
- IF DoesDirExist(szReclaimDir$) = 1 THEN
- IF IsDirWritable(szReclaimDir$) = 0 THEN
- nReturn% = InvalidPath(szReclaimDir$, STR_WRITEFAIL$)
- GOTO POINFO_L1
- END IF
- ELSE
- IF IsDriveValid(szReclaimDir$) = 1 THEN
- ''
- '' Create it.
- ''
- CreateDir szReclaimDir$, cmoNone
-
- ''
- '' Make sure it has been created.
- ''
- IF DoesDirExist(szReclaimDir$) = 0 THEN
- nReturn% = InvalidPath(szReclaimDir$, STR_CREATEDIRFAIL$)
- GOTO POINFO_L1
- END IF
- ELSE
- nReturn% = InvalidPath(szReclaimDir$, STR_CREATEDIRFAIL$)
- GOTO POINFO_L1
- END IF
- END IF
- END IF
- END IF
-
- ''
- '' Check if we have write access to program file directory.
- ''
- IF IsDriveValid(szProgFileDir$) = 0 THEN
- nReturn% = InvalidPath(szProgFileDir$, STR_BADPROGDRIVE$)
- GOTO POINFO_L1
- END IF
- IF DoesDirExist(szProgFileDir$) = 1 THEN
- IF IsDirWritable(szProgFileDir$) = 0 THEN
- nReturn% = InvalidPath(szProgFileDir$, STR_WRITEFAIL$)
- GOTO POINFO_L1
- END IF
- ELSE
- CreateDir szProgFileDir$, cmoNone
- IF DoesDirExist(szProgFileDir$) = 0 THEN
- nReturn% = InvalidPath(szProgFileDir$, STR_CREATEDIRFAIL$)
- GOTO POINFO_L1
- END IF
- END IF
-
- ''
- '' Check if they're using the same directory as source.
- ''
- nReturn% = SzToUpper(szProgFileDir$)
- IF szProgFileDir$ = SrcDir$ THEN
- nReturn% = InvalidPath(szProgFileDir$, STR_BADPROGFILEDIR$)
- GOTO POINFO_L1
- END IF
-
- ''
- '' Check if post office is on local drive. If yes, warn them to run
- '' SHARE first.
- ''
- SHARE_INIT:
-
- IF IsDriveLocalHard(szPODir$) = 1 THEN
- sz$ = UIStartDlg(CUIDLL$, WARNSHARE, "WarnShareDlgProc", APPHELP, HELPPROC$)
- UIPop 1
- IF sz$ = "REACTIVATE" THEN
- GOTO SHARE_INIT
- ELSEIF sz$ = "BACK" THEN
- UIPop 1
- GOTO POINFO_INIT
- ELSEIF sz$ = "EXIT" THEN
- DoAskQuit
- GOTO POINFO_INIT
- END IF
- END IF
-
-
- ''
- '' Check if we're overwriting program files.
- ''
- szTempPath$ = szProgFileDir$ + "\WMail.EXE"
- IF fileExists(szTempPath$) = 1 THEN
- SetSymbolValue "TitleTextIn", STR_ALERT$
- szTempPath$ = STR_OVERWRITEPROG$ + szProgFileDir$ + "?"
- SetSymbolValue "MsgTextIn", szTempPath$
- sz2$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
- UIPop 1
- IF sz2$ = "CANCEL" THEN
- UIPop 1
- SetSymbolValue "EditFocus", "EditTextIn5"
- GOTO POINFO_L1
- END IF
- END IF
- UIPop 1
- GetPOInfo = 1
-
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO POINFO_L1
- ELSEIF sz$ = "BACK" THEN
- UIPop 1
- GetPOInfo = 0
- ELSEIF sz$ = "CONTINUE" THEN
- GetPOInfo = 1
- ELSE
- UIPop 1
- DoAskQuit
- GOTO POINFO_INIT
- END IF
-
- END FUNCTION
-
-
- '*************************************************************************
- '**
- '** AskCopyAdmin
- '** - Ask if we should copy the admin utilities
- '**
- '*************************************************************************
-
- FUNCTION AskCopyAdmin STATIC AS INTEGER
-
- POOPTION_INIT:
-
- SetSymbolValue "CheckIn1", "ON"
- SetSymbolValue "EditTextIn1", szAdmProgDir$
- SetSymbolValue "CheckIn2", "ON"
- SetSymbolValue "StaticText1", ADMINSPACE_TEXT
- SetSymbolValue "EditFocus", "END"
-
- POOPTION_L1:
-
- sz$ = UIStartDlg(CUIDLL$, COPYADMINOPTION, "CopyAdminOptionDlgProc", HELP_COPYADMINOPTION, HELPPROC$)
- szDoAdmin$ = GetSymbolValue("CheckOut1")
- szAdmProgDir$ = GetSymbolValue("EditTextOut1")
- SetSymbolValue "EditTextIn1", szAdmProgDir$
- SetSymbolValue "CheckIn1", szDoAdmin$
-
- IF sz$ = "CONTINUE" THEN
- IF szDoAdmin$ = "ON" THEN
- ''
- '' Are we overwriting existing files?
- ''
- szTemp$ = szAdmProgDir$ + "\ADMIN.EXE"
- IF fileExists(szTemp$) = 1 THEN
- ''
- '' Overwrite warning
- ''
- SetSymbolValue "TitleTextIn", STR_ALERT$
- szTemp$ = STR_OVERWRITEADMIN$ + szAdmProgDir$ + "?"
- SetSymbolValue "MsgTextIn", szTemp$
- sz$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
- UIPop 1
- IF sz$ = "CANCEL" THEN
- UIPop 1
- GOTO POOPTION_INIT
- END IF
-
- ''
- '' Check version of files.
- ''
- szTemp$ = szAdmProgDir$ + "\ADMIN.EXE"
- szDDate$ = GetDateOfFile(szTemp$)
- nHour% = GetHourFromDate(szDDate$)
- nMin% = GetMinuteFromDate(szDDate$)
-
- ''
- '' If this is version prior to 3.2, save it since we may
- '' need to run these programs to upgrade the po.
- ''
- IF (nHour% > 0) OR (nMin% > 0) THEN
- l& = IntToAscii(nHour%, szHour$)
- l& = IntToAscii(nMin%, szMin$)
- IF (nHour% < 3) OR ((nHour% = 3) AND (nMin% < 20)) THEN
- n%=RenameWithNewExt(szAdmProgDir$, "ADMIN", nHour%, nMin%)
- n%=RenameWithNewExt(szAdmProgDir$, "CCBACKUP", nHour%, nMin%)
- n%=RenameWithNewExt(szAdmProgDir$, "CHKSTAT", nHour%, nMin%)
- n%=RenameWithNewExt(szAdmProgDir$, "RECLAIM", nHour%, nMin%)
- n%=RenameWithNewExt(szAdmProgDir$, "DIALIN", nHour%, nMin%)
-
- szSuffix$ = szHour$ + "." + szMin$
- SetSymbolValue "TitleTextIn", "ADMIN Utilities"
- szTemp$ = "The old "+szSuffix$+" ADMIN utilities have been renamed to files with extension "+szHour$+szMin$
- SetSymbolValue "MsgTextIn", szTemp$
- n%=DoMsgBox(szTemp$, "Old ADMIN Utilities", MB_ICONINFORMATION)
- END IF
- END IF
-
- END IF
-
- IF IsDirWritable(szAdmProgDir$) = 0 THEN
- nReturn% = InvalidPath(szAdmProgDir$, STR_WRITEFAIL$)
- GOTO POOPTION_L1
- END IF
- END IF
- UIPop 1
- AskCopyAdmin = 1
-
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO POOPTION_L1
- ELSEIF sz$ = "BACK" THEN
- UIPop 1
- AskCopyAdmin = 0
- ELSE
- UIPop 1
- DoAskQuit
- GOTO POOPTION_INIT
- END IF
-
- END FUNCTION
-
-
- '*************************************************************************
- '**
- '** DoCopyOnly
- '** - Copy program files only
- '**
- '*************************************************************************
-
- FUNCTION DoCopyOnly STATIC AS INTEGER
-
- COPYFILE_INIT:
-
- SetSymbolValue "EditTextIn1", szProgFileDir$
- SetSymbolValue "CheckIn1", "ON"
- SetSymbolValue "EditTextIn2", szAdmProgDir$
- SetSymbolValue "CheckIn2", "ON"
- SetSymbolValue "StaticText1", TOTALSPACE_TEXT
- SetSymbolValue "StaticText2", ADMINSPACE_TEXT
- SetSymbolValue "EditFocus", "END"
-
- COPYFILE_L1:
-
- sz$ = UIStartDlg(CUIDLL$, COPYONLY, "CopyExeDlgProc", HELP_COPYONLY, HELPPROC$)
- szProgFileDir$ = GetSymbolValue("EditTextOut1")
- szAdmProgDir$ = GetSymbolValue("EditTextOut2")
- szCopyProgFiles$ = GetSymbolValue("CheckOut1")
- szDoAdmin$ = GetSymbolValue("CheckOut2")
- SetSymbolValue "CheckIn1", szCopyProgFiles$
- SetSymbolValue "CheckIn2", szDoAdmin$
- SetSymbolValue "EditTextIn1", szProgFileDir$
- SetSymbolValue "EditTextIn2", szAdmProgDir$
-
- IF sz$ = "CONTINUE" THEN
- ''
- '' Install only if it will fit.
- ''
- UIPop 1
-
- IF szCopyProgFiles$ = "ON" THEN
- IF IsDirWritable(szProgFileDir$) = 0 THEN
- nReturn% = InvalidPath(szProgFileDir$, STR_WRITEFAIL$)
- GOTO COPYFILE_L1
- END IF
- END IF
- IF szDoAdmin$ = "ON" THEN
- IF IsDirWritable(szAdmProgDir$) = 0 THEN
- nReturn% = InvalidPath(szAdmProgDir$, STR_WRITEFAIL$)
- GOTO COPYFILE_L1
- END IF
- ''
- '' Are we overwriting existing files?
- ''
- szTemp$ = szAdmProgDir$ + "\ADMIN.EXE"
- IF fileExists(szTemp$) = 1 THEN
- ''
- '' Check version of files.
- ''
- szDDate$ = GetDateOfFile(szTemp$)
- szDHour% = GetHourFromDate(szDDate$)
- szDMin% = GetMinuteFromDate(szDDate$)
-
- ''
- '' If not same version as ours, give warning.
- ''
- IF (szDHour% <> ADMINVER_MAJOR%) OR (szDMin% <> ADMINVER_MINOR%) THEN
- SetSymbolValue "TitleTextIn", STR_ALERT$
- szTemp$ = STR_OVERWRITEADMIN$ + szAdmProgDir$ + "?"
- SetSymbolValue "MsgTextIn", szTemp$
- sz$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
- UIPop 1
- IF sz$ = "CANCEL" THEN
- UIPop 1
- SetSymbolValue "EditFocus", "EditTextIn2"
- GOTO COPYFILE_INIT
- END IF
- END IF
-
- END IF
- END IF
-
- IF szCopyProgFiles$ = "ON" THEN
- ''
- '' Check if we're overwriting program files.
- ''
- szTempPath$ = szProgFileDir$ + "\WMail.EXE"
- IF fileExists(szTempPath$) = 1 THEN
- SetSymbolValue "TitleTextIn", "Warning"
- szTempPath$ = "Overwrite program files in " + szProgFileDir$ + "?"
- SetSymbolValue "MsgTextIn", szTempPath$
- sz$ = UIStartDlg(CUIDLL$, YESNO, "FMsgBoxDlgProc", APPHELP, HELPPROC$)
- UIPop 1
- IF sz$ = "CANCEL" THEN
- SetSymbolValue "EditFocus", "EditTextIn1"
- GOTO COPYFILE_INIT
- END IF
- END IF
- END IF
-
- DoCopyOnly = 1
-
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO COPYFILE_L1
- ELSEIF sz$ = "BACK" THEN
- UIPop 1
- DoCopyOnly = 0
- ELSE
- UIPop 1
- DoAskQuit
- GOTO COPYFILE_INIT
- END IF
-
- END FUNCTION
-
-
- '*************************************************************************
- '**
- '** EnoughSpace:
- '** - Check if there is enough disk space.
- '**
- '*************************************************************************
-
- FUNCTION EnoughSpace STATIC AS INTEGER
-
- lSpaceRequired& = 0
-
- IF StripPath(szProgFileDir$,szProgDrive$) = 0 THEN
- EnoughSpace = 1
- END IF
- IF (szDoAdmin$ = "ON") AND (StripPath(szAdmProgDir$, szAdmDrive$) = 0) THEN
- EnoughSpace = 1
- END IF
- lProgSpaceAvailable& = GetFreeSpaceForDrive(szProgDrive$)
- IF (szDoAdmin$ = "ON") AND (szProgDrive$ <> szAdmDrive$) THEN
- lAdmSpaceAvailable& = GetFreeSpaceForDrive(szAdmDrive$)
- ELSE
- lAdmSpaceAvailable& = lProgSpaceAvailable&
- END IF
-
- IF szCopyProgFiles$ = "ON" THEN
- IF (szDoAdmin$ = "ON") AND (szProgDrive$ = szAdmDrive$) THEN
- lSpaceRequired& = SPACENEEDED + SPACEWITHADMIN
- ELSE
- lSpaceRequired& = SPACENEEDED
- END IF
- IF lProgSpaceAvailable& < lSpaceRequired& THEN
- EnoughSpace = 0
- ELSE
- IF szDoAdmin$ = "ON" THEN
- lSpaceRequired& = SPACEWITHADMIN
- IF lAdmSpaceAvailable& < lSpaceRequired& THEN
- EnoughSpace = 0
- ELSE
- EnoughSpace = 1
- END IF
- ELSE
- EnoughSpace = 1
- END IF
- END IF
- ELSE
- IF szDoAdmin$ = "ON" THEN
- lSpaceRequired& = SPACEWITHADMIN
- IF lAdmSpaceAvailable& < lSpaceRequired& THEN
- EnoughSpace = 0
- ELSE
- EnoughSpace = 1
- END IF
- ELSE
- EnoughSpace = 1
- END IF
- END IF
-
- END FUNCTION
-
-
- '*************************************************************************
- '**
- '** ShouldCopyVimFiles
- '** - Check if we should install the VIM common DLL's
- '**
- '*************************************************************************
-
- FUNCTION ShouldCopyVimFiles STATIC AS INTEGER
-
- bNewer% = 0
- bOlder% = 0
- bMissing% = 0
-
- '' Check if the VIM DLL's already exist in the directory that
- '' we're installing to.
- ''
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "MAILENG.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CCEDIT.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CCUTIL.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CHARSET.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "MEMMAN.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CCSMI.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "CDVIM.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "SMI.DLL")
- n% = CheckFileVersion (SrcDir$, szProgFileDir$, "VIM.DLL")
-
- IF bOlder% > 0 THEN
- IF (bNewer%) OR (bMissing%) THEN
- ''
- '' Some of our DLL's are older, some newer. May be some missing.
- ''
- SetSymbolValue "BadDllDir", szProgFileDir$
- sz$ = UIStartDlg(CUIDLL$, BADDLLSET, "BadDllSetDlgProc", HELP_BADDLLSET, HELPPROC$)
- UIPop 1
- ELSE
- ''
- '' Existing version newer than ours. Don't install.
- ''
- END IF
-
- ELSEIF bNewer% > 0 THEN
- ''
- '' Our version is newer. Install.
- ''
- ShouldCopyVimFiles = 1
-
- END IF
-
- ShouldCopyVimFiles = 0
-
- END FUNCTION
-
-
- '*************************************************************************
- '**
- '** CheckFileVersion
- '** - Check if the file exists in the destination directory and
- '** check the version of the file.
- '**
- '** - Parameters:
- '** szSrcDir$ source directory
- '** szDstDir$ target directory
- '** szFile$ file to look for
- '**
- '** - Return:
- '** 0 if file does not exist (FILE_MISSING)
- '** 1 if our version is older (FILE_OLDER)
- '** 2 if versions are same (FILE_SAME)
- '** 3 if our version is newer (FILE_NEWER)
- '**
- '*************************************************************************
-
- FUNCTION CheckFileVersion (szSrcDir$, szDstDir$, szFile$) STATIC AS INTEGER
-
- szSrcFile$ = AppendPath$ (szSrcDir$, szFile$)
- szDstFile$ = AppendPath$ (szDstDir$, szFile$)
-
- '' Does file exist in destination directory?
- ''
- IF fileExists (szDstFile$) = 0 THEN
- bMissing% = bMissing% + 1
- CheckFileVersion = FILE_MISSING
- END IF
-
- '' Get version of source file
- ''
- szSrcVer$ = GetVersionOfFile(szSrcFile$)
- lSrcVer& = GetVersionNthField(szSrcVer$, 1)
-
- '' Get version of file in destination directory
- ''
- szDstVer$ = GetVersionOfFile(szDstFile$)
- lDstVer& = GetVersionNthField(szDstVer$, 1)
-
- '' Compare versions
- ''
- IF lSrcVer& < lDstVer& THEN
- bOlder% = bOlder% + 1
- CheckFileVersion = FILE_OLDER
-
- ELSEIF lSrcVer& > lDstVer& THEN
- bNewer% = bNewer% + 1
- CheckFileVersion = FILE_NEWER
-
- ELSE
- '' Versions are the same.
- '' Exception is for CDVIM.DLL, should check the 2nd digit also.
- ''
- IF szFile$ = "CDVIM.DLL" THEN
- lSrcVer& = GetVersionNthField(szSrcVer$, 2)
- lDstVer& = GetVersionNthField(szDstVer$, 2)
- IF lSrcVer& < lDstVer& THEN
- bOlder% = bOlder% + 1
- CheckFileVersion = FILE_OLDER
- ELSEIF lSrcVer& > lDstVer& THEN
- bNewer% = bNewer% + 1
- CheckFileVersion = FILE_NEWER
- ELSE
- CheckFileVersion = FILE_SAVE
- END IF
-
- ELSE
- CheckFileVersion = FILE_SAME
- END IF
-
- END IF
-
- END FUNCTION
-
-
- '*************************************************************************
- '**
- '** Install:
- '** - Build the copy list and performs all installation operations.
- '**
- '*************************************************************************
-
- SUB Install STATIC
-
- SrcDir$ = GetSymbolValue("STF_SRCDIR")
-
- IF szCopyProgFiles$ = "ON" THEN
- szTemp1$ = SrcDir$ + "ReadMe.TXT"
- szTemp2$ = szProgFileDir$ + "\ReadMe.TXT"
- CopyFile szTemp1$, szTemp2$, cmoOverwrite, 0
- '' szTemp1$ = SrcDir$ + "Install.TXT"
- '' szTemp2$ = szProgFileDir$ + "\Install.TXT"
- '' CopyFile szTemp1$, szTemp2$, cmoOverwrite, 0
- END IF
-
- CopyFilesInCopyList
-
- n% = SetFileTimeForDir(szProgFileDir$, FILETIME, 1)
- n% = SetFileTimeForDir(szProgFileDir$ + "\CCUSER", FILETIME, 1)
-
- END SUB
-
-
-
- '*************************************************************************
- '**
- '** CopyAdminFiles
- '** - Copy the admin utilities
- '**
- '*************************************************************************
-
- FUNCTION CopyAdminFiles STATIC AS INTEGER
-
- INSERT_ADMIN:
-
- SetSymbolValue "TextIn1", "Disk 4"
- SetSymbolValue "TextIn2", SrcDir$
- sz$ = UIStartDlg(CUIDLL$, INSERTDISK, "InsertDiskDlgProc", 0, "")
- UIPop 1
- IF sz$ = "CANCEL" THEN
- CopyAdminFiles = 0
- GOTO COPYADMINFILES_END
- END IF
- szTempPath$ = SrcDir$ + "Admin.EXE"
- IF fileExists(szTempPath$) = 0 THEN
- GOTO INSERT_ADMIN
- END IF
- CreateDir szAdmProgDir$, cmoNone
-
- nCursor% = ShowWaitCursor()
-
- SetSymbolValue "TitleIn", "Disk 4"
- SetSymbolValue "SrcDir", SrcDir$
- SetSymbolValue "DstDir", szAdmProgDir$
-
- sz$ = UIStartDlg(CUIDLL$, COPYDISK, "CopyDiskDlgProc", 0, "")
- UIPop 1
-
- RestoreCursor nCursor%
- CopyAdminFiles = 1
-
- COPYADMINFILES_END:
-
- END FUNCTION
-
-
- '*************************************************************************
- '**
- '** ExecAdminUtil
- '** - Spawn the Admin or Chkstat/Reclaim utilities
- '**
- '*************************************************************************
-
- SUB ExecAdminUtil STATIC
-
- ''
- '' If database not already exists, spawn Admin to create new po.
- ''
- szTempPath$ = szPODir$ + "\MLANDATA"
-
- IF fileExists(szTempPath$) = 0 THEN
- CreateDir szPODir$, cmoNone
- nHwndFrame% = HwndFrame()
- IF szDoAdmin$ = "ON" THEN
- szTemp$ = STR_CREATEPO1$ + szPOName$ + STR_CREATEPO2$
- szTempPath$ = szAdmProgDir$ + "\Admin.EXE"
- ELSE
- szTemp$ = STR_CREATEPO3$ + szPOName$ + STR_CREATEPO4$
- szTempPath$ = SrcDir$ + "Admin.EXE"
- ASK_FOR_DISK_1:
-
- nReturn% = DoMsgBox(STR_INSERTADMIN$, STR_UTILTITLE$, MB_ICONEXCLAMATION)
- IF fileExists(szTempPath$) = 0 THEN
- GOTO ASK_FOR_DISK_1
- END IF
- END IF
- IF szEncryptKey$ = "" THEN
- szEncryptKey$ = szPOPass$
- END IF
- szEKey$ = "/EKEY/" + szEncryptKey$
- SetSymbolValue "TitleTextIn", STR_CREATEPOTITLE$
- SetSymbolValue "MsgTextIn", szTemp$
- sz$ = UIStartDlg(CUIDLL$, MESSAGEBOX_NOEXIT, "FMsgBoxDlgProc", HELP_MESSAGEBOX, HELPPROC$)
- UIPop 1
- nCursor% = ShowWaitCursor()
- nReturn% = ExecUtil(nHwndFrame%, nHinst%, szPOName$, szPOPass$, szPODir$, szTempPath$, szEKey$, "")
- RestoreCursor(nCursor%)
-
- szTempPath$ = szPODir$ + "\MLANDATA"
- IF fileExists(szTempPath$) = 0 THEN
- n% = DoMsgBox("Failed to create new post office! Please run ADMIN again after installation.", "!! Error !!", MB_ICONSTOP)
- END IF
-
- ELSE
- '' Database files exist. Give option for administrator to run
- '' ChkStat and Reclaim to upgrade the database files.
- ''
- sz$ = UIStartDlg(CUIDLL$, RUNUTIL, "RunUtilDlgProc", APPHELP, HELPPROC$)
- IF sz$ = "CONTINUE" THEN
- IF szDoAdmin$ = "ON" THEN
- szTempPath$ = szAdmProgDir$
- ELSE
- szTempPath$ = SrcDir$ + "RECLAIM.EXE"
-
- ASK_FOR_DISK_2:
-
- nReturn% = DoMsgBox(STR_INSERTADMIN$, STR_UTILTITLE$, MB_ICONEXCLAMATION)
- IF fileExists(szTempPath$) = 0 THEN
- GOTO ASK_FOR_DISK_2
- END IF
- END IF
-
- szBatPath$ = AppendPath$ (szProgFileDir$, "CCUPDB")
-
- nCursor% = ShowWaitCursor()
-
- nReturn% = ExecBatch(nHwndFrame%, nHinst%, "", szBatPath$, szTempPath$, szPOName$, szPOPass$, szPODir$, szReclaimDir$)
-
- IF nReturn% = 1 THEN
- ''
- '' Copy the database files back
- ''
- nReturn% = wCopyDir(szReclaimDir$, szPODir$, 0)
-
- n% = DeleteDir(szReclaimDir$)
-
- ELSE
- n% = DoMsgBox("RECLAIM/CHKSTAT utilities failed! Please run those utilities again after installation!", "!! Error !!", MB_ICONSTOP)
- END IF
- RestoreCursor(nCursor%)
- END IF
- UIPop 1
- END IF
-
- END SUB
-
-
-