home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1999 January
/
pcwk_01_1999_B.iso
/
Lotus123
/
SPANISH
/
INSTALL1.DSK
/
SUIT.LSS
< prev
next >
Wrap
Text File
|
1996-12-05
|
135KB
|
3,568 lines
''*********************************************************************
''
''
'' Module Name: SUIT.lss
''
'' Module Code: COMINST
''
'' Author:
''
'' Creation Date: Jan 26, 1994
''
'' Copyright Lotus Development Corporation, (c) 1994
''
''
''
'' Description:
''
''
'' Additional authors:
''
'' Change History:
'' $Log: //bluebird/logfiles/GEMINI/cisdk/suit/suit.lss $
''
'' Rev 1.16 05 Dec 1996 09:07:36 mhishinu
'' Fixed DBCS string truncation problem. (SPR #29486)
''
'' Rev 1.15 01 Dec 1996 01:08:58 mhishinu
'' Fixed MLC install problem. (SPR #28715)
''
'' Rev 1.14 11 Oct 1996 17:19:32 jlu
'' Fix obsolete file not being removed.
''
'' Rev 1.13 01 Oct 1996 02:43:10 mhishinu
'' Modified for billboards.
''
'' Rev 1.12 25 Sep 1996 13:20:38 jlu
'' Turned everything on for default server, except OBSFILES1
''
'' Rev 1.11 10 Sep 1996 20:18:36 mhishinu
'' Added a Lot_GetFirst call to InitCopyConfig.
'' Added code for Run From Rom to PostSuccessReg.
''
'' Rev 1.10 30 Aug 1996 18:14:38 mhishinu
'' Added new billboards.
''
'' Rev 1.9 22 Aug 1996 16:11:16 mhishinu
'' Modified .INF file names in PostCopyConfig123 function. (SPR #22551)
''
'' Rev 1.8 17 Jul 1996 19:00:00 mhishinu
'' Modified APPSELCB and AppSelComboChanged for language install.
''
'' Rev 1.7 06 Jul 1996 17:44:38 mhishinu
'' No billboards for Node install.
''
'' Rev 1.6 29 Jun 1996 20:04:12 mhishinu
'' Changed "Sepecify 1-2-3 Folder" dialog so that not only 1-2-3 path
'' but Approach path can be specified.
'' Modified APPSELCB sub and DlgAppSelSetProdInfo function.
'' Added AppSelComboChanged sub.
'' Deleted DlgAppSelDispOneLCB function and DlgAppSelMakeProdLineString
'' function because they are not called at all.
''
'' Rev 1.5 31 May 1996 19:55:58 jlu
'' Modified PostCopyConfig to remove enable AddReg...
''
'' Rev 1.4 23 May 1996 13:58:00 jlu
'' Back off commented Reg_SetShareFlags
''
'' Rev 1.3 22 May 1996 18:27:20 jlu
'' Disabled suite icons and registries.
''
'' Rev 1.2 21 May 1996 15:20:46 jlu
'' Changed default program group.
''
'' Rev 1.1 17 May 1996 19:47:44 jlu
'' Removed Combobox for customize
''
'' Rev 1.0 08 May 1996 22:31:28 amello
'' Initial Revision
''
'' Rev 1.8 24 Apr 1996 20:26:40 mnatsis
'' removed logic that determined DOC was a 16 bit app and restricted pathing
''
'' Rev 1.7 18 Apr 1996 17:55:38 dburner
'' Fixed two end-of-line errors
''
'' Rev 1.6 18 Apr 1996 16:44:38 dburner
'' Changed MLC handling in APPSELCB to reflect MLC-ity of individual
'' products, rather than the suite.
''
'' Removed surfacing of dialog for UNC warning dialog.
''
'' Rev 1.5 18 Mar 1996 14:53:50 vshing
'' Update22 for Bld13; 3-18-96, late, should have been 3-15-96
''
'' Rev 1.4 29 Feb 1996 15:55:02 glutz
'' Callbacks with combo/edit pairs now use ComboSelChanged and
'' GetPathFromComboEdit for path handling. Also addressed SPR JHOH32SKMW
'' The callback was catching the invalid path but not exiting the sub.
''
'' Rev 1.3 28 Feb 1996 15:38:32 mnatsis
'' added code to grey out browse button if lcb is deselected
''
'' Rev 1.2 27 Feb 1996 17:07:46 mnatsis
'' changed logic for greying out setdirs button - SPR#:BODN2YWLEK
''
'' Rev 1.1 16 Feb 1996 15:50:44 vtshing
'' Changes/Fix by MikeNatsis
''
'' Rev 1.89 14 Feb 1996 16:07:18 mnatsis
''Added MLC - In InitSUIT under node case and UNINSTALL code in postcopyconfig
''
'' Rev 1.88 10 Nov 1995 15:52:32 dburner
''UNC path for server parent dir is now an error.
''
'' Rev 1.87 09 Nov 1995 11:57:52 dburner
''Fixed problem with Suite Dir browse button SYMTAB error:
''Inst% was not being set to 1.
''
'' Rev 1.86 06 Nov 1995 14:07:24 dburner
''Yes, no, yes, no, yes, no.
''
'' Rev 1.85 06 Nov 1995 13:22:36 dburner
''Added UNCLONGPARENT_CB to eliminate symtab error.
''
'' Rev 1.84 06 Nov 1995 12:42:24 dburner
''Removed 16-bit apps from MLC install
''
'' Rev 1.83 04 Nov 1995 16:35:24 dburner
''Added 16-bit products to MLC install UI
''
'' Rev 1.82 03 Nov 1995 17:03:12 dburner
''Fixed problems in Select SSAPPS with exiting the dialog on error,
''instead of staying until error is resolved
''
'' Rev 1.81 03 Nov 1995 16:23:50 bkelly
''
''Fixed SPR RMOO2XDPK9; Suite picks up old dir even if deleted
''
'' Rev 1.80 03 Nov 1995 15:54:30 dburner
''Fixed long/UNC warning dialog validation
''
'' Rev 1.79 02 Nov 1995 19:12:32 dburner
''Added server warning dialog. Changed location of UNCLONGPARENT
''callback to SUITEDIR.
''
'' Rev 1.78 02 Nov 1995 16:10:58 bkelly
''
''Fixed SPR MSTT9251EW; picks up suit.ri for wlecome dlg
''
'' Rev 1.77 02 Nov 1995 10:19:24 dburner
''Removed a bazillion extraneous "print" statements
''
'' Rev 1.76 01 Nov 1995 17:48:44 dburner
''MLC greying
''
'' Rev 1.75 01 Nov 1995 14:23:14 schen
''
''add automation removeobsfiles function
''
'' Rev 1.74 01 Nov 1995 10:29:26 bkelly
''Fixed SPR BJON2XJQLM; cinstall.ini set to OVERWRITE=NEVER
''
'' Rev 1.73 31 Oct 1995 11:29:24 bkelly
''Fixed SPR RMOO2XFLLC
''
'' Rev 1.72 28 Oct 1995 17:59:12 dburner
''MLC UI
''
'' Rev 1.71 28 Oct 1995 16:28:16 dburner
''Fixed test for surfacing UNC/long dialog
''
'' Rev 1.70 28 Oct 1995 15:04:34 dburner
''Added code for long/UNC warning dialog
''
'' Rev 1.69 27 Oct 1995 17:05:30 vtshing
''Build 24.5 manually updated
''
'' Rev 1.69 27 Oct 1995 16:49:30 vtshing
''Build 24.5 manually updated
''
'' Rev 1.68 27 Oct 1995 13:48:14 dburner
''UNC fixes for SUITEDIR and APPSEL -- per Greg Lutz
''
'' Rev 1.67 27 Oct 1995 11:10:30 bkelly
''PreCopyConfigSuit: changed Node case for inf files to look for INSTFILES +
''
'' Rev 1.66 26 Oct 1995 14:56:30 bkelly
''Added code to PreCopyConfigSuit for copying uninstall *.inf files
''
'' Rev 1.65 26 Oct 1995 11:19:42 dburner
''Fixed problem with Suite dialogs in case that previous installation
''
''
'' Rev 1.64 25 Oct 1995 17:24:26 dburner
''Fixed DHUN2X8PDQ
''Unmapped drive when UNC used for default directory
''
'' Rev 1.63 24 Oct 1995 14:17:02 schen
''
''move addregistrylaugage to postcopyconfigsuit
''
'' Rev 1.62 23 Oct 1995 17:27:32 schen
''change install.rsp to instsuit.rsp
''
'' Rev 1.61 23 Oct 1995 14:29:42 schen
''
''add getsuitpathfromregistry functions
''
'' Rev 1.59 17 Oct 1995 16:38:08 mnatsis
''added code to turn off instop section if a lang install of the prod is occuri
''
'' Rev 1.58 17 Oct 1995 16:27:38 schen
''fix for DWORD type
''
'' Rev 1.57 16 Oct 1995 18:03:34 mnatsis
''Added grey out code for SET DIR'S button for SMARTCNTR
''
'' Rev 1.56 16 Oct 1995 16:24:12 bkelly
''
'' Rev 1.55 16 Oct 1995 12:23:50 bkelly
''
''Fixed spr RMOO2UZHBT; distribution dir to lotus\lotsuite, and spr RMOO2WVSF
''
'' Rev 1.54 13 Oct 1995 16:38:00 schen
''
''
''
''
'' Rev 1.53 13 Oct 1995 10:50:54 builder
'' Build 22.4
''
'' Rev 1.52 13 Oct 1995 10:40:22 vtshing
'' Build 22.4
''
'' Rev 1.51 11 Oct 1995 13:58:06 mnatsis
'' removed alot of old code, debug code and misc uneeded comments
''
'' Rev 1.50 11 Oct 1995 12:43:42 mnatsis
'' modifed InitLanguage - implemented MLC for SUITE
''
'' Rev 1.49 11 Oct 1995 12:08:30 bkelly
''
'' Rev 1.48 11 Oct 1995 11:26:48 bkelly
''
'' Rev 1.47 11 Oct 1995 09:30:48 bkelly
'' Call RemoveFiles only in Standard Install
''
'' Rev 1.46 11 Oct 1995 09:07:30 bkelly
''
'' Rev 1.45 10 Oct 1995 16:46:28 bkelly
'' Fix SPR HUT2W8RPJ - Cleans old WINHELP.INI ; Added InitList & CleanWinHelpI
''
'' Rev 1.0 08 May 1995 09:59:38 jbrodeur
'' Initial Revision
''
'' Rev 1.0 29 Mar 1995 14:50:58 jshaw
'' Initial Revision
''
'' Rev 1.4 02 Feb 1995 11:59:32 jshaw
''
'' pulled out pipeline changes
''
'' Rev 1.3 01 Feb 1995 14:57:20 jshaw
'' removed set_normal_font on registration billboard for idc_text4
''
'' Rev 1.2 25 Jan 1995 17:12:12 bkelly
'' Commented out Licenser work-around in PreCopyConfig per CIT bugfix
''
'' Rev 1.1 08 Nov 1994 10:21:46 jshaw
'' No change.
''
'' Rev 1.0 24 Oct 1994 17:42:54 jshaw
'' Initial Revision
''
'' Rev 1.0 16 Aug 1994 11:18:20 jshaw
'' Initial Revision
''
'' BMK: July 20, 1994
'' Added EXISTINGPRODCB. Enabled Node in PostCopyConfig
''
'' bmk: July 13 1994
'' INITCOPYLIST; enabled SUIT section in inf files
''
'' BMK: July 12 1994
'' added IDC_TEXT1 to APPSELCB to unbold icon text
'' changed APPSELCB to refresh disabled text for deselected apps
''
'' BMK/TV: JUNE 1994 Added NODE case to APPSELCB
''
'' BMK: 01 June 1994
'' add lotus.ini entry and PrevVersionSUIT()
'' BMK: 19 May 1994
'' add Billboards
''
'' BMK: Rev 1.5 02 May 1994 19:18:16 mzgripce
''
'' add AddIconsXXX
''
'' Rev 1.34 31 May 1994 13:41:32 mmeth
'' added PrevVersionSUIT function
''
'' Rev 1.33 18 May 1994 14:54:44 tingmann
'' add SetYieldActive calls during lcb handling
''
'' Rev 1.32 17 May 1994 14:27:04 cmoy
''
'' removed updates of idc_text2 and 3 controls in DlgAppSelSetProdInfo
''
'' Rev 1.31 12 May 1994 14:35:22 ddupre
'' Added setting focus on the Customize button. JGreene
''
'' Rev 1.30 11 May 1994 17:14:38 ddupre
''
'' Updated the SETTABS to be 30, 51, 80, 130 for text alignment. JGreene.
''
'' Rev 1.29 06 May 1994 15:05:46 mzgripce
''
'' added addicons() function
''
'' Rev 1.28 03 May 1994 10:49:08 thangv
'' Fixed 1. Invalid dir entry 2. REg_SetUIInorOut correctly.
'' Modifications in APPSELCB.
''
'' Rev 1.27 02 May 1994 13:59:02 mmeth
'' changedir foucs problem fixed.
''
'' Rev 1.25 21 Apr 1994 17:58:04 thangv
'' Fixed the Smartsuite bug: In a server install, you don not get
'' to choose a minimum install of a product.Only full and custom
'' installs.
''
'' Rev 1.24 13 Apr 1994 14:20:14 cmoy
''
'' Made text bold in callbacks appselcb and customizeappscb
''
'' Rev 1.23 17 Mar 1994 16:56:58 mmeth
'' Added a new CUSTOMIZESUITE dialog
''
'' Rev 1.22 07 Mar 1994 23:42:08 mmeth
''
'' Removed an extrenuous print.
''
'' Rev 1.21 07 Mar 1994 23:32:36 mmeth
'' Set The Currebt Product in the DLGINIT for CUSTOMIZEPROD
''
'' Rev 1.20 07 Mar 1994 19:51:20 mmeth
'' Fixed the Lotusapp dir dlg. fixed resetwinwinsyssymbols.
''
'' Rev 1.19 07 Mar 1994 18:02:34 mmeth
'' (TV) Added ResetWinWinsyssymbols to SuitedirCb
'' (TV) Made Chnages to srvlotusappdircb(fixed it)
''
'' Rev 1.18 07 Mar 1994 16:08:42 mzgripce
'' added call to refresh destination in appselcb subroutine
''
'' Rev 1.17 04 Mar 1994 19:15:52 mzgripce
'' check for empty path and refresh destination (appselcb)
''
'' Rev 1.16 04 Mar 1994 14:01:18 mmeth
'' added Full, Custom, Laptop Key Words
''
'' Rev 1.15 02 Mar 1994 17:38:42 thangv
''
'' Turned the share flag on in ProductReg fn.
''
'' Rev 1.14 02 Mar 1994 17:24:34 thangv
''
'' Added SmartSuite Lotusappdir dlg for server
'' installation.
''
'' Rev 1.13 02 Mar 1994 14:25:18 tingmann
'' work on the app selected dialog callback
''
'' Rev 1.12 02 Mar 1994 11:54:20 mmeth
''
'' Worked on Customize Aplications
''
'' Rev 1.11 01 Mar 1994 16:24:48 thangv
'' Fixed the Suitedir Callback so that the selected driveis
'' in focus when you go forward and then come back to the
'' dlg.
''
'' Rev 1.10 01 Mar 1994 16:14:02 mmeth
'' SUITDIR noew the same as BASEDIR
''
'' Rev 1.9 28 Feb 1994 18:31:44 thangv
'' Added SUITEDIR Callback which deals with basedir for SmartSuite
''
'' Rev 1.8 24 Feb 1994 16:53:24 tingmann
'' use some resources, and fix some ss app sel callback problems
''
'' Rev 1.7 24 Feb 1994 13:37:12 tingmann
'' fix a couple of suit app select dialog problems
''
'' Rev 1.6 17 Feb 1994 17:28:34 mmeth
''
'' Continuing work on Custom Apps Dialog.
''
'' Rev 1.5 17 Feb 1994 16:31:38 tingmann
'' use reg_getallowuser...
''
'' Rev 1.4 17 Feb 1994 10:36:00 mmeth
'' Added CUSTOMIZEAPPSCB for smart suite custom dialog.
'' plenty of work still to do
''
'' Rev 1.3 16 Feb 1994 16:26:22 tingmann
'' don't actually pop appsel dialog yet
''
'' Rev 1.2 16 Feb 1994 16:16:04 tingmann
'' put in dialog for application sel (called in wrong place right now)
''
'' Rev 1.1 15 Feb 1994 14:41:56 mmeth
'' included org in lyt & scr
''
'' Rev 1.0 14 Feb 1994 10:40:10 mmeth
'' Initial Revision
'' $Log$
''
'' Rev 1.30 23 Jun 1995 13:55:56 mzgripce
'' remove autoinst.rsp from the uninstaller registration example
''
'' Rev 1.29 23 Jun 1995 13:24:56 mzgripce
'' added an example for the Program_group class registration
''
'' Rev 1.28 22 Jun 1995 18:38:14 mzgripce
'' register the components that are going with the suit product:aswan and its
'' dependency: LotusScript,Bento and Shared help
''
'' Rev 1.27 21 Jun 1995 18:01:26 mzgripce
'' add examples for the other object clases registration for uninstall
''
'' Rev 1.26 21 Jun 1995 12:48:08 jdonohue
'' SYM_INSTALLKIND global symbol, not product specific
''
'' Rev 1.25 21 Jun 1995 09:09:42 jdonohue
'' Moved AddRegistryLanguage to AddRegistryKeysSUIT
''
'' Rev 1.24 19 Jun 1995 17:41:56 mzgripce
'' change the suit version to 2.1 and enable the uninstaller registration
''
'' Rev 1.23 19 Jun 1995 16:53:24 mzgripce
'' add examples calls to Lot_RegisterObject()
''
'' Rev 1.22 16 Jun 1995 17:08:02 pdonahue
'' added registry entries for suit.
''
'' Rev 1.21 09 Jun 1995 17:00:58 mzgripce
'' added call example in PostCopyConfig to register the uninstaller
''
'' Rev 1.20 07 Jun 1995 16:32:08 amontalv
'' Changed the Win95 start folder so that it initializes
'' earlier in the program. This should make automation
'' easier to implement for it. There are still a couple of
'' bugs that I need to work out, but I feel that I should
'' check what I have now. I also changed the name of some
'' of the functions to conform more to current names.
''
'' Rev 1.19 01 Jun 1995 14:54:10 amontalv
'' Had the check incorrect for creating links. It tried to create links
'' when not in Win95 instead of when in Win95.
''
'' Rev 1.18 01 Jun 1995 11:11:52 amontalv
'' Added API function CreateLink to create shortcuts. Also added functions
'' to save and get the link path to support the CreateLink. I also changed
'' the startup program folder code to use the default dialog proc and changed
'' the default dialog proc to process directory trees.
''
'' Rev 1.17 30 May 1995 16:01:00 jdonohue
'' Set symbols for product and version for language install
''
'' Rev 1.16 21 May 1995 17:30:24 mzgripce
'' add an example for share32 support
''
'' Rev 1.15 19 May 1995 15:31:28 mzgripce
'' use the parent dir in the product default destination
''
'' Rev 1.14 19 May 1995 14:42:44 jdonohue
'' Remove redundant symbol for language subdirectory
''
'' Rev 1.13 19 May 1995 13:23:46 jdonohue
'' Added call to Lot_SetLanguageSectionsOn
''
'' Rev 1.12 18 May 1995 15:36:52 jdonohue
'' Added language install code
''
'' Rev 1.11 18 May 1995 10:18:52 jdonohue
'' Added language install function InitLanguage
''
'' Rev 1.9 02 May 1995 12:54:06 cmoy
'' Merged c2 into cf build
''
'' Rev 1.9 10 Apr 1995 18:11:28 amontalv
'' Changed comments to reflect change of function reference.
''
'' Rev 1.8 31 May 1994 13:54:42 mmeth
''
'' Added PrevVersionSUIT
''
'' Rev 1.7 13 May 1994 14:09:20 thangv
''
'' Added the else part to the default code in InitSUIT case node.
''
'' Rev 1.6 06 May 1994 09:24:52 mmeth
'' wrong return for function
''
'' Rev 1.5 02 May 1994 19:18:16 mzgripce
''
'' add AddIconsSUIT
''
'' Rev 1.4 28 Mar 1994 17:25:50 thangv
''
'' Resourced strings that were not. SID_SUIT_SERVER_DIRNAME, SID_SUIT_DIST_DIRNA
''
'' Rev 1.3 22 Mar 1994 09:24:46 mmeth
'' Modified AddTo Billboard List to use IDD_SUITBILLBD1,...
''
'' Rev 1.2 17 Feb 1994 17:44:44 thangv
'' Fixed the trailing \ and SUIT_DIR
''
'' Rev 1.1 15 Feb 1994 14:36:20 mmeth
'' moved the EXIT FUNCTION CALL in
''
'' Rev 1.0 11 Feb 1994 10:53:40 jbrodeur
'' Initial Revision
''----------------------------------------------------------------------
'' Date Vers. Pgmr SPR# Change
''----------------------------------------------------------------------
'' !
'' 02-07-94 0000 Initial Product Shipment
''
''----------------------------------------------------------------------
''
''*********************************************************************/
'** This file contains detailed comments. PLEASE READ THEM! They provide
'** information that will make writing Install much easier. In some
'** cases, you will not find this information in any other sources.
''*********************************************************************/
'**
USE "CALLBACK"
USE "TOOLKIT"
USE "LANGUAGE"
OPTION DECLARE
'** These Are the Required Functions that Products must provide
'***************************************************************
DECLARE PUBLIC FUNCTION ProductRegSUIT (prodno%, network$, direction$) AS STRING
DECLARE PUBLIC FUNCTION DefaultUserRegSUIT (prodno%, network$, direction$) AS STRING
DECLARE PUBLIC FUNCTION InitSUIT (prodno%, network$, direction$, basedir$) AS STRING
DECLARE PUBLIC FUNCTION PrevVersionsSUIT (prodno%, network$, direction$) AS STRING
DECLARE PUBLIC FUNCTION PathChangeSUIT (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
DECLARE PUBLIC FUNCTION InitCopyListSUIT (prodno%, network$, direction$) AS STRING
DECLARE PUBLIC FUNCTION PreCopyConfigSUIT (prodno%, network$, direction$, lic%) AS STRING
DECLARE PUBLIC FUNCTION AddTheBillBoardsSUIT (prodno%, network$, direction$, nbytes&) AS STRING
DECLARE PUBLIC FUNCTION PostCopyConfigSUIT (prodno%, network$, direction$, programgroup$) AS STRING
DECLARE PUBLIC FUNCTION AddIconsSUIT (prodno%, network$, direction$, programgroup$) AS STRING
DECLARE PUBLIC FUNCTION UISUIT (prodno%, network$, direction$) AS STRING
DECLARE PUBLIC FUNCTION PostSuccessRegSUIT (prodno%, network$, direction$) AS STRING
DECLARE PUBLIC SUB AddRegistryKeysSUIT (prodno%, network$)
DECLARE PUBLIC FUNCTION InitLanguageSUIT (prodno%, network$, direction$) AS STRING
'** Product specific functions
'*****************************
DECLARE FUNCTION GetSUITPathfromLotusIni() AS STRING
DECLARE FUNCTION GetSUITPathfromRegistry () AS STRING
DECLARE FUNCTION CreateListString( BYVAL prodIndex%, BYVAL sizetype$) AS STRING
DECLARE SUB SetCombo(hDlg&, BYVAL prodIndex%, BYVAL sizetype$)
DECLARE FUNCTION DlgAppSelSetProdInfo (hDlg&, prodNum%, editNum%) AS INTEGER
DECLARE SUB WriteSUITInLotusIni(prodno%)
DECLARE SUB DlgRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, Inst&)
DECLARE Public Sub CleanWinHelpIni
DECLARE Sub InitList
DECLARE Public Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileStringA" _
( ByVal lpSectionName As String, _
ByVal lpKeyName As String, _
ByVal lpStringToAdd As Any, _
ByVal lpINIFileName As String ) _
As Integer
DECLARE FUNCTION CopyFileA LIB "kernel32" ALIAS "CopyFileA" (Byval szSrc$, Byval szDest$, Byval cmo&) AS LONG
DECLARE FUNCTION SetFileAttributesA LIB "kernel32" ALIAS "SetFileAttributesA" (Byval szFile$, Byval dwFileAttributes&) AS LONG
DECLARE SUB AppSelComboChanged(hDlg&, inst%)
'DECLARE PUBLIC FUNCTION PrevVersionsSUIT(prodno%, network$, direction$) AS STRING
'DECLARE SUB ProdSizeSUIT(prodno%)
'DECLARE SUB EXISTINGPRODCB(hDlg&, CtrlId%, Classes$, Inst&)
'** RunFromRom
DECLARE FUNCTION ChangeLSTStr LIB "ssuite.dll" ALIAS "_ChangeLSTStr@16" (ByVal FilePath$, ByVal szSect$, ByVal oldStr$, ByVal newStr$) AS INTEGER
'** ----------------------------- Constants --------------------------------
CONST MAX_NO_DRIVECOMBOS = 4
CONST NUM_FILES = 40 'Number of filenames
CONST LCBITEM_PRODUCT = LCBITEM_CHAPTER
CONST MAX_CHPTS = 6
CONST CB_GETCURSEL = &H0147
CONST FILE_ATTRIBUTE_NORMAL& = &h00000080
'*------------------------------------------------------------------------
'* Globals
'*------------------------------------------------------------------------
'list of filenames to remove from winhelp.ini
DIM filelist (1 TO NUM_FILES) as String
DIM gCUSTOMSTR$, gFULLSTR$, gMINIMUMSTR$
'*************************************************************************
'**************************** Required Functions *************************
'*************************************************************************
'*************************************************************************
'** SUB Initialize
'**
'** Purpose: The only purpose of this routine is to register your product.
'** This routine assigns your acronym to your product.
'** Without this function, your product will not install.
'** All you need to do in this subroutine is:
'** modify SUIT -> your acronym.
'**
'** ASSUMPTIONS: Many things in the toolkit key off of your
'** acronym. These are the constraints:
'** 1. Your top level chapter in the INF must
'** have a KEYWORD of your acronym +"TOP"
'** e.g. acronymTOP
'** Author: Marcel Meth
'** Arguments: None
'** Returns: NONE
'*************************************************************************
SUB Initialize
Reg_RegisterProductNames "SUIT", LdString(SID_SUIT)
END SUB
'*************************************************************************
'** FUNCTION ProductRegSUIT (prodno%, network$, direction$) AS INTEGER
'**
'** Purpose: This function allows your product to register itself
'** in the Install Product Registry. The toolkit stores
'** the information provided and will provide you with
'** various features accordingly. For example, if you support
'** shared files, the toolkit will do most of the work
'** for the LOTUSAPP directory.
'**
'** For the most part you should use only Reg_Set... Functions.
'**
'**
'** If you turn on ATM, LICENSING, or SHARED tools, then
'** you must be sure to add the appropriate lines and files
'** in your acronym.SCR and acronym.LYT, respectively.
'** See Cookbook.
'**
'** If you support server install, (because you need the files
'** for Licenser), you will have to make sure that you have
'** the correct **entire** contents of install.lyt and install.scr
'** for the install files in your acronym.SCR and acronym.LYT
'**
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: UNINITIALIZED
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards, i.e start at your last dialog
'** first.
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'*************************************************************************
PUBLIC FUNCTION ProductRegSUIT (prodno%, network$, direction$) AS STRING
ProductRegSUIT = gNEXT
SetSymbolValue SYM_SINGLESMARTSUITE, gSMARTSUITE$
'** FOR a complete set of things to register
'** see API doc under Reg_Set...
Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
Reg_SetProdSizes prodno%, 0, 0
'** If you need Lotusapp or datalens support turn this on.
Reg_SetShareFlags prodno%, 1, 0, 0, 0
Reg_SetAllowUserToPickInSuite prodno%, 0
'** If you need Components directory turn this on. NEW CODE USING:MN
Reg_SetShare32Flag prodno%, 1
'** Coming to an install program near you soon
'Reg_SetCDOption prodno%,Inst&,CDOptStr$ OLD CODE IF USE CHANGE Inst&:MN
'Reg_SetCDOption prodno%,Inst%,CDOptStr$ NEW
'Reg_SetCDOptionSelected ProdNo%,Inst&,Selection% OLD CODE IF USE CHANGE Inst&:MN
'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% NEW
'** Any options that you want your sys-admin and node user to see
'** must be entered here. They must correspond with keywrods in the
'** inf file. This functionality will be avilable March 4, but you
'** can set these fields now!
'Reg_SetNodeOption ProdNo%,Inst&,NodeOptStr$ OLD CODE IF USE CHANGE Inst&:MN
'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$ NEW
'Reg_SetNodeOptionSelected ProdNo%,Inst&,Selection% OLD CODE IF USE CHANGE Inst&:MN
'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% NEW
'** Toolkit default is for no server supprt, turn on if desired.
Reg_SetSrvSupport prodno%, 1
'** Toolkit default is for no server supprt, turn on if desired.
'** license support only available for server install.
Reg_SetLicenseSupport prodno%, 1
'** Toolkit default is no ATM support
'Reg_SetATMSupport prodno%, 0
'** This is the default value the user will see.
Reg_SetProgManagerGroup prodno%, LdString(SID_123_GROUPTITLE)
'** The functions below register the information needed to support
'** the additional directories functionality
Reg_GetMoreDirsCBName prodno% '** Contol Box ID
Reg_GetMoreDirsDlgID prodno% '** Dialog ID
Reg_GetMoreDirsHlpID prodno% '** Help ID
END FUNCTION
'*************************************************************************
'** FUNCTION DefaultUserRegSUIT (prodno%, network$, direction$) AS STRING
'**
'** Purpose: **Only** the first registered product gets called.
'** For SmartSuite, this will be SmartSuite.
'** This function allows you to set the default user registration
'** information that the user will be shown. The toolkit
'** will provide default values from MS-Windows. If you disagree
'** with them you should modify them in this function using:
'** SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
'**
'** It is up to you how you store registration information.
'** It will not be stored until later in PostCopyConfigSUIT.
'** The CIT provides functions that allow you to access .ri
'** files: Lot_ReadDefaultsfromRi(ripath$).
'**
'** If you need to write back to the floppy, do it here.
'** Most Lotus products will no longer write back to the floppy.
'** Remeber, you can't write back to a CD or network!
'**
'** In Symbols : SYM_NAME$, SYM_COMPANY$
'** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: UNINITIALIZED
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'**
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards, i.e start at your last dialog
'** first.
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'*************************************************************************
PUBLIC FUNCTION DefaultUserRegSUIT (prodno%, network$, direction$) AS STRING
DIM ripath$, defdir$, temp%, rc%
DefaultUserRegSUIT = gNEXT
If network$ = gNODE$ Then
ripath$ = Lot_GetInstallDir() + "suit.ri"
ElseIf network$ = gSTANDARD$ Then
'** GetSUIT.... is in this file and illustrates how to
'** retrieve you prod. from lotus.ini
defdir$ = GetSUITPathfromRegistry() 'does not return path with suit.ri
IF defdir$ = "" THEN
goto rinotfound
ELSE
defdir$ = defdir$ + LdString(SID_SUIT_SUITRI)
END IF
temp% = INSTR(1,LCASE$(defdir$),"suit.ri")
if temp% = 0 goto rinotfound
ripath$ = MID$(defdir$,1,(temp%-1))
ripath$ = ripath$ + "suit.ri"
End If
'' RETURNS TRUE IF SUCCESSFULLY FOUND RI FILE AND READ INFORMATION
'' This functions populates: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
rc% = Lot_ReadDefaultsfromRi(ripath$)
rinotfound:
END FUNCTION
'*************************************************************************
'** FUNCTION InitSUIT (prodno%, network$, direction$, basedir$) AS STRING
'**
'** Purpose: This function will be called after the Welcome dialog has been
'** filled in by the user. This is the first time you will be
'** called when the server parameter is valid.
'** You need to use this function to intialize certain things.
'** (See the MUST DO below).
'**
'** This is a good place to put up a LotusScript messagebox warning the user
'** of a previous version of your product. If there is a previous
'** version you might want to steer them towards overwriting it,
'** deleting the old version, or allowing both versions to exist.
'**
'**
'** Must Do: You **MUST** set inital values for all of the destination
'** ======= directories that you refer to in your INF file. If you do not,
'** then InitCopylist will fail! e.g. SetSymbolValue "SUITDIR", basedir$
'** Of course you may be more intelligent. You should preface your
'** directory with basedir$. The toolkit is finding a good drive
'** letter and basedirectory. Also, remeber all paths end in a
'** \ and are lower case.
'**
'** You should **NOT** define LOTUSAPPDIR, NETLOTUSAPPDIR, WINDIR, &
'** WINSYSDIR. The toolkit does this for you.
'**
'** Once you have defined destdir symbols, you need to register
'** them with the toolkit. (See the code below)
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'**
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards, i.e start at your last dialog
'** first.
'**
'** basedir$: The toolkit has found a good base. for your directory.
'** This is it. You should use it. This will make Smart
'** Suite work, and will pick a good drive letter for you.
'**
'**
'** parentdir$: The toolkit has found a good base. for your directory.
'** This is it. You should use it. This will make Smart
'** Suite work, and will pick a good drive letter for you.
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'**
'*************************************************************************
PUBLIC FUNCTION InitSUIT (prodno%, network$, direction$, basedir$) AS STRING
DIM sym$, symname$, defdir$, position%, proddir$, iniPath$, rv%
DIM initsuitdir$, prodcount%, index%
DIM initpath$
InitSUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
gCUSTOMSTR$ = LdString(SID_SUIT_CUSTOM)
gFULLSTR$ = LdString(SID_SUIT_FULL)
gMINIMUMSTR$ = LdString(SID_SUIT_MINIMUM)
'' Setup Default directory settings and the associated
'' text that the user will see
sym$ = Reg_GetDirSymbolList(prodno%)
symname$ = sym$ + gNAME
''These two line register it with the toolkit.
SetListItem sym$, 1, "SUITDIR"
SetListItem symname$, 1, "SUITDIRNAME"
initpath$ = GetSymbolValue(SYM_BASEDIR)
'** NOTE The path in the string table is lower case and ends with a slash
'SetSymbolValue "SUITDIR", basedir$ + LdString(SID_SUIT_DIR)
SetSymbolValue "SUITDIR", basedir$
'** This will be the name of the directory that shows up in captions in
'** toolkit dialogs (Static text)
'SetSymbolValue "SUITDIRNAME", LdString(SID_SUIT_DIRNAME)
SELECT CASE network$
CASE gSERVER$
SetSymbolValue "SUITNAME", LdString(SID_SUIT_SERVER_DIRNAME)
CASE gDISTRIBUTION$
'bmk: set explicit value using basedir$ for distribution directory
'jhs: we need to lok at this
'bmk 10/16/95: Distribution dir needs to be \lotus + \lotsuite
SetSymbolValue "SUITDIR", basedir$ + LdString(SID_SUIT_DISTDIR)
SetSymbolValue "SUITNAME", LdString(SID_SUIT_DISTDIRNAME)
CASE gSTANDARD$, gNODE$
'' check if there is an existing product
defdir$ = GetSymbolValue(SYM_BASEDIR$)
initpath$ = GetSUITPathFromRegistry()
IF defdir$ <> "" THEN
proddir$ = defdir$
ELSE
proddir$ = basedir$
END IF
SetSymbolValue "SUITDIR", proddir$
'10/19/95 by shu chen
'SUIT CASE gNODE$
'SUIT iniPath$ = GetWindowsDir() + "suit.ini"
'SUIT IF DoesFileExist(iniPath$, femExists) THEN
'SUIT proddir$ = GetIniKeyString(iniPath$,"DIRECTORIES","personal")
'SUIT IF proddir$ <> "" THEN ' SUIT added
'SUIT rv% = Lot_CleanPath(proddir$)
'SUIT ELSE ' SUIT added
'SUIT proddir$ = basedir$
'SUIT
'SUIT END IF
'SUIT ELSE
'SUIT proddir$ = basedir$
'SUIT END IF
'SUIT
'SUIT SetSymbolValue "SUITDIR", proddir$
'SUIT initsuitdir$ = GetSymbolValue ("SUITDIR")
''MN - If node and 2ndary lang install then append lang dir.
MarkFixupSourceDirSymbol("INSTDIR")
'Give it some sort of default
SetSymbolValue "INSTDIR", proddir$
END SELECT
'bmk: Suite does not need a license directory, but licenser doesn't work without this function call
'Reg_SetCountDirectory prodno%, LEFT(basedir$,3) + LdString(SID_SUIT_LICDIR)
If network$ = gSERVER$ Then
prodcount% = Reg_GetNumberofProducts()
FOR index% = 2 TO prodcount%
Reg_SetLicenseSelected index%, 0
NEXT
End If
'' ****** Language Install Code ******
'' Find out if we're a language install and set symbols
'' You need to have set string resources for SID_SUIT_PROD_NAME
'' and SID_SUIT_PROD_VER, and it will set symbol SYM_INSTALLKIND$
'' InitLanguageSUIT
'' For each component that will have language subdirectories for the
'' non-primary language, set the symbols appropriately
If GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$ Then
SetLanguageSubdir "SUITLANGDIR", "SUITDIR"
Else
SetSymbolValue "SUITLANGDIR", GetSymbolValue("SUITDIR")
End if
END FUNCTION
'*************************************************************************
'** FUNCTION PrevVersionsSUIT (prodno%, network$, direction$) AS STRING
'**
'** Purpose: This function is called only for SmartSUite. It is called
'** immediately after all the other product functions for
'** InitSUIT are called. It allows SmartSuite to assess whether
'** there are older versions of products around.
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'**
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards, i.e start at your last dialog
'** first.
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'*b* allow the user to step backwards.)
'**
'*************************************************************************
'PUBLIC FUNCTION PrevVersionsSUIT (prodno%, network$, direction$) AS STRING
'DIM nProducts%, prodIndex%, i%
'
' nProducts% = Reg_GetNumberOfProducts()
' FOR prodIndex% = 1 to nProducts%
' If Reg_GetPreviousVersion(prodIndex%) <> "" Then
' i% = DoMsgBox("Older Versions Found","", MB_OK)
' GOTO PREVPRODFOUND
' End If
' NEXT
'
'PREVPRODFOUND:
'
'END FUNCTION
'*************************************************************************
'** FUNCTION PathChangeSUIT (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
'**
'** Purpose: This function is called whenever the user proposes changes
'** to a path for your product. By the time this function calls
'** you, the paths have already been checked syntactically, and
'** the directory has been checked to see that it is writeable.
'** Your obligation is to verify that the proposed new path is ok
'** with you. If not, put up a Lotus Script :"MESSAGEBOX"
'** telling the user and return gBACK.
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'** destdirsym$: The destdir symbol that has changed. e.g. "SUITDIR"
'** mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
'** your top level product directory should change,
'** probably "SUITDIR". When it is false, it means that
'** all related directories should change. It is **YOUR
'** RESPONSIBILITY** to implement this functionality.
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'**
'*************************************************************************
PUBLIC FUNCTION PathChangeSUIT (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
DIM path$
PathChangeSUIT = gNEXT
path$ = GetSymbolValue (destdirsym$)
'' The following is a psudocode example
''''''rc$ = DetectVersionPriorToDarwin(path$)
''''''If rc$ = "BEAGLE" then
'''''' ShowPathError SID_BEAGLE_FOUND, SID_ERR_EXISTBEAGLE, path$
'''''' PathChangeSUIT = gBACK
''''''end if
END FUNCTION
'*************************************************************************
'** FUNCTION InitCopyListSUIT (prodno%, network$, direction$) AS STRING
'**
'** Purpose: Product must Initialize the copylist
'**
'** Must Do: You must initialize the copy list. However,
'** ======= if you leave the code as is (don't touch it at all),
'** it will probably work for you. Copy list must be initialized.
'** CAUTION: Make sure that your toplevel section in the
'** acronym.SCR has a keyword of "acronymTOP"
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'**
'*************************************************************************
PUBLIC FUNCTION InitCopyListSUIT (prodno%, network$, direction$) AS STRING
DIM i%, sym$, chpt$, nextprod$, notused%, FeatureToFind$
ON Error STFQUIT GOTO COPYLISTERROR
InitCopyListSUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
'bmk: 7/07/94 Check each prod for licenser support and if it was selected
'in SSAPPS. If True for one, exit loop and licenser dialog is posted.
' Problem; will licenser still create dirs
'bmk: 7/13 for Node install, we need a SUITTOP section from which to copy
' suit.ri and sn.dat to the node.
sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
chpt$ = Lot_GetChapterFromKeyWord(sym$)
If chpt$ = "" Then
ERROR STFQUIT
End IF
' type of install selected
SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
CASE gCOMPLETE$
i% = F_COMPLETE
CASE gLAPTOP$
i% = F_LAPTOP
CASE gCUSTOM$
i% = F_CUSTOM
END SELECT
'' **MMETH rem out until suite has its own files in the INF
Lot_InitializeCopyList chpt$, i%
'** Make sure to turn off all sections not available on the server.
If network$ = gNODE Then
nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)
chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)
WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
If Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE Then
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
End If
chpt$ = Lot_GetNext()
WEND
End If
'' ****** Language Install Code ******
'' We need to explicitly turn on all language sections for the current
'' language, those whose keyword suffix matches language "LANG??"
Lot_SetLanguageSectionsOn(prodno%)
EXIT FUNCTION
COPYLISTERROR:
ErrorMsg 0, "INITCOPYLIST: You need to have suit section with SUITTOP in INF file"
ERROR STFQUIT
END FUNCTION
'*************************************************************************
'** FUNCTION UISUIT (prodno%, network$, direction$) AS STRING
'**
'** Purpose: This is your chance to put up any User Interface
'** that you want. Remember, try to keep it short.
'** In SmartSuite, if every product puts up two extra
'** dialogs, then the SmartSuite will consist of 16 dialogs!
'**
'** Pay attention to the value of direction, if you are putting
'** up more than one dialog.
'**
'** The toolkit will do an accurate space computation later,
'** so you can tamper with the copy list. But you shouldn't
'** write out anything to the disk until PostCopyCofig!
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is oart of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'**
'*************************************************************************
PUBLIC FUNCTION UISUIT (prodno%, network$, direction$) AS STRING
dim nProducts%, prodIndex%, notused%
UISUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
IF network$ = gSTANDARD$ THEN
'If any Suite product has set its Obsolete Files flag
'surface Remove Files dialog and let callback process user input
nProducts% = Reg_GetNumberOfProducts()
FOR prodIndex% = 1 to nProducts%
IF Reg_GetUIInOrOut (prodindex%) <> FALSE THEN
If Reg_GetObsFiles(prodIndex%) = 1 Then
notused% = RegisterCallback("SUIT","DlgRemoveProdFilesCB")
direction$ = PopupModalDlg (DB_REMOVEPRODFILES, _
DB_REMOVEPRODFILES)
IF direction$ = gBACK Then
direction$ = gNEXT 'handle NO button on dlg
END IF
GOTO OBSFILESFOUND
End If
END If
NEXT
END IF
OBSFILESFOUND:
UISUIT = direction$
END FUNCTION
'*************************************************************************
'** FUNCTION PreCopyConfigSUIT (prodno%, network$, direction$, lic%) AS STRING
'**
'** Purpose: This is the very last function called before the space is
'** accurately computed (to the last byte) and files are copied
'** by the toolkit. If you have any last minute changes to
'** do, this is the time to do them. example:
'** Test for monitor resolution, and turn on the chapter
'** in the copy list (a memory residident version of the INF file)
'** with the appropriate resolution.
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'** lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'**
'*************************************************************************
PUBLIC FUNCTION PreCopyConfigSUIT (prodno%, network$, direction$, lic%) AS STRING
DIM prodcount%,index%, suitprodno%, notused%, chpt$, licsup%, licsel%, licdir$
DIM inout%, tempdir$, nProducts%, sym$, nIndex%
DIM prodacro$, nSuiteIndex%, szFeature$
DIM chptnum%, prodName$, NOREMOVE%, szObs$
PreCopyConfigSUIT = gNEXT
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
''** Tell the toolkit how many billboards you will have during file copy.
''** This way the toolkit will be able to calculate how long each billboard
''** should stay up
If network$ = gDISTRIBUTION$ Then
Reg_SetBillboardNumber prodno%, 12
ElseIf network$ <> gNODE Then
IF Reg_GetProdSelectedInstallType(prodno%) = gLAPTOP$ THEN
Reg_SetBillboardNumber prodno%, 5
ELSE
Reg_SetBillboardNumber prodno%, 12
END IF
Else
Reg_SetBillboardNumber prodno%, 0
End If
'******************************************************************
'*** schen 11/1/95 add for AUTOMATION RemoveObsoleteFiles
IF (GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$) THEN
IF (Lot_GetKeyValFromResponseFile("SUIT","RemoveObsoleteFiles")="1") THEN
nProducts% = Reg_GetNumberofProducts()
FOR index% = 1 TO nProducts%
notused% = Reg_GetUIInOrOut (index%)
IF Reg_GetUIInOrOut (index%) <> FALSE THEN
IF Reg_GetObsFiles(index%) = 1 THEN
prodName$ = Reg_GetProductAcronym(index%)
sym$ = prodname$ & "OBSFILES" 'build keyword with product acronym
For chptnum% = 1 TO MAX_CHPTS
szObs$ = sym$ + LTRIM$(STR$(chptnum%))
chpt$ = Lot_GetChapterFromKeyWord(szObs$)
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
END IF
NEXT
End If
END IF
NEXT
Else
FOR index% = 1 TO nProducts%
prodName$ = Reg_GetProductAcronym(index%)
sym$ = prodname$ & "OBSFILES"
FOR chptnum% = 1 TO MAX_CHPTS
szObs$ = sym$ + LTRIM$(STR$(chptnum%))
chpt$ = Lot_GetChapterFromKeyWord(szObs$)
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
END IF
NEXT
NEXT
END if
End If
'bmk: 7/26 disable licenser directories for each prod in InitCopyList
' CIT only does this
' for prod 1 (always the Suite in Suite build). Also, force copy of *.0#0
' signature file to product directory when Licenser is turned off. CIT does
' not pass the correct value for Licenser ON/OFF to the product scripts
' even though I set Reg_SetLicenseSelected index%, 0 here
' If network$ = gSERVER$ THEN
' suitprodno% = Reg_GetProductNo ("SUIT")
' IF Reg_IsLicenseSelected (suitprodno%) <> FALSE THEN
' prodcount% = Reg_GetNumberofProducts()
' FOR index% = 1 TO prodcount%
' IF Reg_GetUIInOrOut (index%) = 1 THEN
' Reg_SetLicenseSelected index%, 1
' END IF
' NEXT
' END IF
' END IF
'MN: Traverse product list and turn off section if a language install for
'MN: product is occuring.
'BMK:10/23/95
IF network$ = gSTANDARD$ THEN
nSuiteIndex% = 1
'check if Suite is a language install
' if not a language install, turn on xxx.inf sections
IF GetListItem(SYM_INSTALLKINDS$, nSuiteIndex%) <> gLANGUAGEINSTALL$ THEN
nProducts% = 0 're-initialize
nProducts% = GetListLength(SYM_INSTALLKINDS$)
'10/24 bmk: don't include Suit parent section, we want to leave it off
FOR nIndex% = 2 to nProducts%
'was product selected?
IF Reg_GetUIInOrOut (nIndex%) <> FALSE THEN
sym$ = Reg_GetProductAcronym(nIndex%)
chpt$ = Lot_GetChapterFromKeyword("INSTTOP"+sym$)
'found section in inf, turn it on
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
END IF
' Product was not selected is handled by default OFF in suit.inf
END IF 'was product selected ?
NEXT
'ELSE 'product is language install handled by default OFF in suit.inf
END IF ' is this a language install?
END IF ' standard install
'NODE Install
IF network = gNODE$ THEN
nProducts% = 0 're-initialize
nSuiteIndex% = 1
nProducts% = GetListLength(SYM_INSTALLKINDS$)
'10/24 bmk: don't include Suit parent section, we want to leave it off
FOR nIndex% = 2 to nProducts%
'product was selected
IF Reg_GetUIInOrOut (nIndex%) <> FALSE THEN
'check if Suite is a language install
' if not a language install, turn on xxxnode.inf sections
IF GetListItem(SYM_INSTALLKINDS$, nSuiteIndex%) <> gLANGUAGEINSTALL$ THEN
sym$ = Reg_GetProductAcronym(nIndex%)
szFeature$ = sym$ + "TOP"
'only prods on server should be available for Reg_getUIInOrOut()
'but I'm doublechecking
IF Lot_IsTheFeatureInstalled (szFeature$) THEN
chpt$ = Lot_GetChapterFromKeyword("INSTFILES"+sym$)
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
END IF
END IF
'ELSE
'product is language install handled by default OFF in suitnode.inf
END IF 'secondary language install
' Product was not selected is handled by default OFF in suitnode.inf
END IF ' was product selected?
NEXT
END IF
'SERVER Install
IF network = gSERVER$ THEN
nSuiteIndex% = 1
'check if Suite is a language install
' if not a language install, turn on xxx.inf sections
IF GetListItem(SYM_INSTALLKINDS$, nSuiteIndex%) <> gLANGUAGEINSTALL$ THEN
nProducts% = 0 're-initialize
nProducts% = GetListLength(SYM_INSTALLKINDS$)
'10/24 bmk: don't include Suit parent section, we want to leave it off
FOR nIndex% = 2 to nProducts%
'was product selected ?
IF Reg_GetUIInOrOut (nIndex%) <> FALSE THEN
sym$ = Reg_GetProductAcronym(nIndex%)
chpt$ = Lot_GetChapterFromKeyword("INSTFILES"+sym$)
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
END IF
' Product was not selected is handled by default OFF in suit.inf
END IF 'was product selected ?
NEXT
'ELSE 'product is language install handled by default OFF in suit.inf
END IF ' is this a language install?
END IF 'server install
'*************** turn all sections on for server/ default
DIM test$,result&,obsstr$,i%,nextprod$
IF GetSymbolValue(SYM_SIZEOFINSTALL$) = gCOMPLETE$ AND _
network$ = gSERVER$ THEN
''** turn on all sections
chpt$ = Lot_GetFirst("", F_NOTHING)
WHILE chpt$ <> ""
sym$ = "OBSFILES"
obsstr$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
result& = InStr(1,obsstr$,sym$)
'** If result is 0 then OBSFILE string was not found so it's
'** ok to turn this section on.
If result& = 0 THEN
test$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
'print "test=" test$
'print result&
notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
END If
chpt$ = Lot_GetNext()
'print "chapt=" chpt$
WEND
End If '********** turn sections on
DONEHERE:
CleanWinHelpIni
END FUNCTION
'*************************************************************************
'** FUNCTION AddTheBillBoardsSUIT (prodno%, network$, direction$, nbytes&)
'**
'** Purpose: This is where to add the billboards using the function:
'** AddToBillboardList. Use nbytes& as the last parameter to
'** the MS-SETUP function AddToBillboardList
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'** nbytes: Determines the duration of billboard timing.
'** NOTE: Make sure to use billboard Ids that are unique to
'** your product. e.g. IDD_SUITBILLBD1_BMP &
'** DB_SUITBILLBD1_BMP
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT | gBACK (If you are showing UI and you
'** allow the user to step backwards.)
'**
'*************************************************************************
PUBLIC FUNCTION AddTheBillBoardsSUIT (prodno%, network$, direction$, nbytes&) AS STRING
AddTheBillBoardsSUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
'psudo code follows as an example
''''If network$ <> gNODE$ Then
'''' SetListItem "IDC_BMP", 1, STR$(IDD_BILLBD1_BMP) OLD:MN
'''' SetListItem "IDC_BMP", 1, STR$(IDD_SUITBILLBD1_BMP) NEW:MN
'''' AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_BILLBD1, "FNameOrgDlgProc", nbytes& OLD:MN
'''' AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD1, "_FNameOrgDlgProc@16", nbytes& NEW:MN
''''End If
DIM nbytes1&, nbytes2&, nbillbd%
nbillbd% = Reg_GetBillboardNumber(1)
'** For node only display one billboard.
If nbillbd% = 12 Then
IF network$ = gDISTRIBUTION THEN
nbytes1& = INT(nbytes& * 0.95)
ELSE
nbytes1& = INT(nbytes& * 0.87)
END IF
nbytes2& = nbytes& * nbillbd% - nbytes1& * (nbillbd% - 1)
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD1_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD1, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD2_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD2, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD7_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD7, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD4_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD4, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD6_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD6, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD13_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD13, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD8_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD8, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD5_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD5, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD9_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD9, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD3_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD3, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD14_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD14, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD16_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD16, "FNameOrgDlgProc", nbytes2&
elseif nbillbd% = 5 then
nbytes1& = INT(nbytes& * 0.93)
nbytes2& = nbytes& * nbillbd% - nbytes1& * (nbillbd% - 1)
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD2_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD2, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD7_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD7, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD4_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD4, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD6_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD6, "FNameOrgDlgProc", nbytes1&
SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD13_BMP)
AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD13, "FNameOrgDlgProc", nbytes2&
End If
END FUNCTION
'*************************************************************************
'** FUNCTION PostCopyConfigSUIT (prodno%, network$, direction$, programgroup$) AS STRING
'**
'** Purpose: This is called just after file copy has completed.
'** This is your opportunity to do all the configuaration
'** you need. This includes:
'**
'** 1. Writing to all your ini files
'** Don't worry about ini files related to shared components
'** 2. Writing to OLE registration database
'** Don't worry about OLE registration related to shared
'** components
'** 3. Writing to any other config files you may support
'** 4. Writing out user registration information,
'** no matter how your product picks up this info
'** 5. Add program manager icons of those features
'** that were installed.
'** 6. Create any working directories
'** 5. Create any working directories
'** A working directory is one that does not contain any
'** files, thus the toolkit did not create it for you.
'**
'** NOTE: THERE are many subtleties in here if you are
'** dealing with node and CD installs. In particular,
'** you must be ***very*** careful to understand where the
'** things are that you are pointing to. They could
'** be on the node, server, or CD! This, in combination
'** with the INF file for Server/Node, is probably the
'** trickiest part of writing a quality install. When
'** configuring, you must be careful to consider what
'** happens if there is a pre-existing product on the
'** machine, in the same location or
'** another one! This is very very tricky. What happens
'** if you had a full installation previously in location C:\FOO
'** and now the user is installing a minimum installation in loaction
'** D:\FOO.
'**
'** Each and every thing you do for configuartion needs very
'** careful thought.
'**
'** WE support a function Lot_WhereIsFeature("FeatureID")
'** This currrently tells you the location of a feature
'** if the feature appears both in the SERVER.INF and the
'** NODE.INF referred to by the same Keyword ID.
'** We do not support CDs with this command yet, but we will
'** at some time.
'**
'** Also look out for writing to a file when the directory
'** doesn't exist. If the user deselected one of your
'** options, your install may still be running, but since
'** there were no files to copy into the directory
'** it wasn't created by the toolkit!
'**
'** Finally, remember that configuration files generally
'** hold the state that the user has customized earlier.
'** Sometimes you don't want to overwrite these!
'** You will primarily use three MS-SETUP functions
'** in here:
'** 1. CreateIniKeyValue (writing to ini files)
'** 2. SetRegKeyValue (writing to OLE reg DB)
'** 3. CreateProgmanItem (writing to progman)
'**
'** CreateProgmanGroup & ShowProgmanGroup are
'** done for you by the time you reach this
'** function.
'**
'** You will not have to do any configuration of LOTUS SHARED
'** tools. The toolkit will do this for you.
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'** programgroup$: The name of the program group where the user chose to
'** install the program manager icons
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT
'**
'*************************************************************************
PUBLIC FUNCTION PostCopyConfigSUIT (prodno%, network$, direction$, programgroup$) AS STRING
DIM ripath$, chpt$, Destdir$, ProgDir$, SmartSuiteDir$
DIM suitdir$,notused%,distdir$,InfFileName$,symdir$
PostCopyConfigSUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
'find SUIT.RI for ini file path
IF network$ = gSTANDARD$ THEN
DestDir$ = GetWindowsDir() + "lotus.ini"
ProgDir$ = Lot_WhereIsFeature(prodno%, "INSTTOP","SUIT.RI")
'SmartSuiteDir$ = Progdir$ + "suit.ri"
ELSE
DestDir$ = GetWindowsDir() + "lotus.ini"
ProgDir$ = Lot_WhereIsFeature(prodno%, "SUITTOP","SUIT.RI")
'SmartSuiteDir$ = Progdir$ + "suit.ri"
END IF
If network$ <> gNODE$ Then
SetSymbolValue SYM_CDDRIVE$, GetSymbolValue(SYM_INSTALL_SOURCE)
End If
'jhs: remove instsuit.rsp and readnet.txt in standard install
If network$ = gSTANDARD$ Then
distdir$ = Lot_GetInstallDir()
RemoveFile distdir$ + "instsuit.rsp", cmoForce
' changed for IPD - BOD 14/9/95
'RemoveFile distdir$ + "readnet.txt", cmoForce
RemoveFile distdir$ + LdString(SID_SUIT_NAG), cmoForce
'jhs: also remove lotusapp.net from lotusapp, only needed on a server
'SUIT MAN distdir$ = GetSymbolValue(SYM_LOTUSAPPDIR$)
RemoveFile distdir$ + "lotusapp.net", cmoForce
END IF
If network$ <> gSERVER$ Then
'** Write product specific registry keys
AddRegistryKeysSUIT prodno%, network$
End if
''** WRITE TO RI FILE
''*******************
'bmk:7/19 split case for NODE to find suit.ri in SUITDIR
IF network$ = gNODE$ THEN
suitdir$ = GetSymbolValue("SUITDIR")
ripath$ = GetSymbolValue("SUITDIR") + "suit.ri"
ELSE
ripath$ = Lot_GetInstallDir() + "suit.ri"
END IF
IF Lot_WriteToRiFile (ripath$) = FALSE THEN
ErrorMsg SID_SUIT,LdString(SID_SUIT_ERR_RI) + ripath$
End If
'** End PostCopyConfig for Server and Distribution Installs
If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
GOTO SKIPCONFIG
End If
'Stub all of this code. We don't write to Lotus.ini bmk:10/95
'** Log the product into \windows\lotus.ini
'IF network$ = gSTANDARD$ THEN
'chpt$ = Lot_GetChapterFromKeyWord("INSTTOP")
'If Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 Then
'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE", SmartSuiteDir$, cmoOverwrite
'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE", ProgDir$, cmoOverwrite
' CreateIniKeyValue DestDir$, "SmartSuite Version", "Version", LdString(SID_SUIT_PROD_VER), cmoOverwrite
' WriteSUITInLotusIni prodno%
'End If
'ELSE 'never gets here if it isn't a node install
'chpt$ = Lot_GetChapterFromKeyWord("SUITTOP")
'If Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 Then
'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE", SmartSuiteDir$, cmoOverwrite
'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE", ProgDir$, cmoOverwrite
'CreateIniKeyValue DestDir$, "SmartSuite Version", "Version", LdString(SID_SUIT_PROD_VER), cmoOverwrite
' WriteSUITInLotusIni prodno%
'End If
'END IF
'** Write the OLE registration
'** Create work directory for standard and node
''''' workdir$ = GetSymbolValue("123WORKDIR")
''''' CreateDir workdir$, cmoNone
''''' IF DoesDirExist(workdir$)=0 THEN
''''' ShowPathError SID_ERR_CREATEDIR, 0, workdir$
''''' END IF
'** Write the uninstaller - but only for the primary language
'** This should uninstall the entire suite
IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN _
GOTO SKIPCONFIG
IF network$ = gSTANDARD THEN
InfFileName$ = "minisuit.inf"
symdir$ = "INSTDIR"
ELSEIF network$ = gNODE THEN
InfFileName$ = "msuitnod.inf"
symdir$ = "SUITDIR"
ELSE
GOTO SKIPCONFIG
END IF
Lot_RegisterUninstaller GetSymbolValue(SYM_REG_PRODUCTNAME$),_
LdString(SID_SUIT_PROD_VER),_
LdString(SID_SUIT_COMMERCIALNAME), _
GetSymbolValue(symdir$) + InfFileName,_
TRUE,FALSE,_
GetSymbolValue(SYM_INSTALL_LANGUAGE$),"","",""
SKIPCONFIG:
END FUNCTION
'*************************************************************************
'** PUBLIC SUB AddRegistryKeysSUIT (prodno%, network$)
'**
'** Purpose: This is called just after file copy has completed.
'** 1. Add product specific Registry Keys.
'**
'** Each and every thing you do for configuartion needs very
'** careful thought.
'**
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'** programgroup$: The name of the program group where the user chose to
'** install the program manager icons
'**
'** Errors: No return code for errors, you must Raise them
'** Author: PMD
'**
'*************************************************************************
PUBLIC SUB AddRegistryKeysSUIT (prodno%, network$)
DIM LocPath$, Filename$, descript$, gbuf$, instvalue&
DIM szkey$, szkey2$, nsize&, nsize1&,nsize2&,Insttype$,nsize3&
DIM RegStatus&, keyvalue$, keyvalue1$,keyvalue2$, keyvalue3$, keyvalue4$
szkey$ = LdString(SID_SUIT_SZKEY)
descript$ = LdString(SID_SUIT_DECRIPT)
keyvalue$ = LdString(SID_SUIT_KEYVALUE)
keyvalue1$ = LdString(SID_SUIT_KEYVALUE1)
keyvalue2$ = LdString(SID_SUIT_KEYVALUE2)
Insttype$ = LdString(SID_SUIT_INSTTYPE)
Filename = LdString(SID_SUIT_FILENAME)
nsize1 = lenBP(Filename)
nsize2 = lenBP(descript$)
' *** Add registry Key for SUITE
Locpath$ = GetSymbolValue ("SUITDIR")
nsize& = lenBP(LocPath$) + 1
regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey$)
regStatus& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, REG_SZ, LocPath$, nsize&)
' *** Add registry Key for SUITE
If network$ = gNODE$ Then
instvalue& = 1
ElseIf network$ = gSTANDARD$ Then
instvalue& = 0
End if
nsize3 = lenBP(instvalue&)
If Lot_IsTheFeatureInstalled("SUITTOP") <> FALSE Then
locpath$ = Lot_WhereIsFeature(prodno%, "SUITFILES", "readme.txt")
locpath$ = GetSymbolValue(SYM_BASEDIR$)
nsize = lenBP(LocPath$)
regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey)
regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, REG_SZ, LocPath$, nsize)
regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue2$, REG_SZ, Filename, nsize1)
regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue1$, REG_SZ, descript$, nsize2)
regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, Insttype$, REG_DWORD, instvalue&, nsize3)
end if
' regStatus = DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$)
'if RegStatus = 1 then
' this is used to check the current value of an existing key.
' gbuf$ recieves the key values data.
'regStatus& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, 0, gbuf$, nsize)
'end if
'** Write the registry value to add the new language
If network$ <> gSERVER$ then
AddRegistryLanguage GetSymbolValue(SYM_REG_PRODUCTNAME$), _
GetSymbolValue(SYM_REG_PRODUCTVER$)
End if
END SUB
'*************************************************************************
'** FUNCTION AddIconsSUIT (prodno%, network$, direction$, programgroup$) AS STRING
'**
'** Purpose: This is called just after file copy has completed.
'** 1. Add program manager icons of those features
'** that were installed.
'** NOTE: THERE are many subtleties in here if you are
'** dealing with node and CD installs. In particular,
'** you must be ***very*** careful to understand where the
'** things are that you are pointing to. They could
'** be on the node, server, or CD! This, in combination
'** with the INF file for Server/Node, is probably the
'** trickiest part of writing a quality install. When
'** configuring, you must be careful to consider what
'** happens if there is a pre-existing product on the
'** machine, in the same location or
'** another one! This is very very tricky. What happens
'** if you had a full installation previously in location C:\FOO
'** and now the user is installing a minimum installation in loaction
'** D:\FOO.
'**
'** Each and every thing you do for configuartion needs very
'** careful thought.
'**
'** WE support a function Lot_WhereIsFeature("FeatureID")
'** This currrently tells you the location of a feature
'** if the feature appears both in the SERVER.INF and the
'** NODE.INF referred to by the same Keyword ID.
'** We do not support CDs with this command yet, but we will
'** at some time.
'**
'** Also look out for writing to a file when the directory
'** doesn't exist. If the user deselected one of your
'** options, your install may still be running, but since
'** there were no files to copy into the directory
'** it wasn't created by the toolkit!
'**
'** Finally, remember that configuration files generally
'** hold the state that the user has customized earlier.
'** Sometimes you don't want to overwrite these!
'** You will primarily use three MS-SETUP functions
'** in here:
'** 1. CreateProgmanItem (writing to progman)
'**
'** CreateProgmanGroup & ShowProgmanGroup are
'** done for you by the time you reach this
'** function.
'**
'** You will not have to do any configuration of LOTUS SHARED
'** tools. The toolkit will do this for you.
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
'** then step backwards
'** programgroup$: The name of the program group where the user chose to
'** install the program manager icons
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MZ
'** Returns: return: gNEXT
'**
'*************************************************************************
PUBLIC FUNCTION AddIconsSUIT (prodno%, network$, direction$, programgroup$) AS STRING
DIM chpt$,ripath$, notused%,exepath$
DIM ProgDir1$, program$, nagdir$, updates$, KeyString$,KeyValueString$, KeyHive$
AddIconsSUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
'** Write entries in Program Manager; assumes notepad.exe is available
'Not using Lot_IsTheFeatureInstalled because SUITE files are always installed.
'write readme.txt for all installs
'** Write entries in Program Manager
'IF (network$ = gSTANDARD$ OR network$ = gSERVER$) THEN
' If (network$ = gSTANDARD$ OR network$ = gSERVER$) THEN
'
' chpt$ = Lot_GetChapterFromKeyWord("SUITFILES")
' IF IsNewShell() THEN
'
' IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN
'
' ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_README))
' Updates$ = ProgDir1$ + LdString(SID_SUIT_README)
'
' notused%=Lot_AddLinkToFolder(prodno%, Updates$, LdString(SID_SUIT_FOLDER)+ LdString(SID_SUIT_READMEICON)+".lnk", LdString(SID_SUIT_READMEICON), "",ProgDir1$)
' end if
'
' ELSE
'
' IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN
' ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_README))
' Updates$ = "notepad.exe " + ProgDir1$ + LdString(SID_SUIT_README)
' CreateProgmanItem programgroup$, LdString(SID_SUIT_READMEICON), Updates$, "", cmoOverwrite
' END IF
' END IF
' END IF
'write NAG for Server install only
IF network$ = gSERVER$ THEN
chpt$ = Lot_GetChapterFromKeyWord("SUITFILES")
IF IsNewShell() THEN
IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN
ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_NAG))
Updates$ = ProgDir1$ + LdString(SID_SUIT_NAG)
'notused%=Lot_AddLinkToFolder(prodno%, nagdir$, "suit.lnk", LDString(SID_SUIT_NAGSTRING), "",nagdir$)
notused%=Lot_AddLinkToFolder(prodno%, Updates$, LdString(SID_SUIT_FOLDER)+ LdString(SID_SUIT_READNETICON)+".lnk", LdString(SID_SUIT_READNETICON), "",ProgDir1$)
End if
ELSE
IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN
ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_NAG))
nagdir$ = "notepad.exe " + ProgDir1$ + LdString(SID_SUIT_NAG)
CreateProgmanItem programgroup$, LdString(SID_SUIT_READNETICON), nagdir$, "", cmoOverwrite
END IF
END IF
END IF
'** ALL NEW CODE:MN
'AddIconsSUIT = gNEXT
'programgroup$, "SUIT Program",_
' Lot_WhereIsFeature(prodno%, "SUITA", "suit.ri")+"suit.ri",_
' "", cmoOverwrite
'To register a program Group object for uninstall the path is: ProgramGroup$
' notused%=Lot_RegisterObject("SUITA", UNIN_CLASS_PROGRAM_GROUP$,_
' programgroup$)
'To register an icon object for uninstall the path is: ProgramGroup$\+
' IconName
' notused%=Lot_RegisterObject("SUITA", UNIN_CLASS_ICON$,_
' programgroup$+"\SUIT Program")
'END IF
'To register a file object for uninstall that is not in the inf but is created at install time to
'be used by a feature
'notused%=Lot_RegisterObject("SUITFILES", UNIN_CLASS_FILE$, FilePath$)
'To register a file_group object for uninstall that is not in the inf but is created at install time to
'be used by a feature of a product (that needs to be cleanup by uninstall).
'The FilePath$ is the full path to a directory including a wildcard (*) as a file name
'notused%=Lot_RegisterObject("SUITFILES", UNIN_CLASS_FILE_GROUP$, FilePath$)
'To register a directory object for uninstall that is not in the inf (as a destination directory) but is created
'at install time to be used by a feature of a product (that needs to be cleanup by uninstall).
'The DirectoryPath$ is the full path to the directory
'notused%=Lot_RegisterObject("SUITFILES", UNIN_CLASS_DIRECTORY$, DirectoryPath$)
'End If
If Lot_IsTheFeatureInstalled("SUITTOP") <> FALSE Then
'To register a registry key for uninstall to cleanup when a feature is uninstalled.
'The KeyString$ is the full Key specification:
'KeyString$ = "HKEY_LOCAL_MACHINE\SOFTWARE\lOTUS\SmartSuite\96.0"
' notused%=Lot_RegisterObject("SUITTOP", UNIN_CLASS_REGISTRY_KEY$, KeyString$)
'To register a registry key Value for uninstall to cleanup when a feature is uninstalled.
'The KeyValueString$ is the full Key+SubKey+ValueName specification:
'KeyValueString$ = "HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\SmartSuite\96.0\Description"
'notused%=Lot_RegisterObject("SUITTOP", UNIN_CLASS_REGISTRY_VALUE$, KeyValueString$)
'To register a registry key hive for uninstall to cleanup when a feature is uninstalled (the complet
' hive will be deleted).
'The KeyHive$ is the full Key Hive specification:
'KeyHive$ = "HKEY_LOCAL_MACHINE\SOFTWARE\LOTUS\SmartSuite"
'notused%=Lot_RegisterObject("SUITTOP", UNIN_CLASS_REGISTRY_HIVE$, KeyHive$)
End If
SKIPCONFIG:
END FUNCTION
'*************************************************************************
'** FUNCTION PostSuccessRegSUIT (prodno%, network$, direction$) AS STRING
'**
'** Purpose: If you need to launch something after install runs
'** In Symbols :
'** Out Symbols:
'**
'** Arguments: All paremeters are **read only**.
'** prodno%: This is your prodno%. It is assigned to you by the
'** toolkit in the order in which you were registered.
'** When your product is part of SmartSuite, SmartSuite
'** will always be product #1. (prodno% >=1)
'** network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
'** direction$: gNEXT
'**
'** Errors: No return code for errors, you must Raise them
'** Author: MMeth
'** Returns: return: gNEXT
'**
'*************************************************************************
PUBLIC FUNCTION PostSuccessRegSUIT (prodno%, network$, direction$) AS STRING
DIM LstPath$, szKey$, szNewKey$, szSect$, noused%
PostSuccessRegSUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
'** RunFromRom
LstPath$ = GetSymbolValue("INSTDIR")+"install.lst"
szKey$ = "cinstand.ini"
szNewKey$ = "cinstall.ini"
szSect$ = "Files"
If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
noused% = ChangeLSTStr(LstPath$, szSect$, szKey$, szNewKey$)
End if
END FUNCTION
'********************************
'********************************
'** Product Specific Functions **
'********************************
'********************************
'*************************************************************************
'** FUNCTION GetSUITPathfromLotusIni() AS STRING
'**
'** Purpose: Gets the product dir path from Lotus.ini file, and searches for
'** acronym.exe in the product dir path.
'**
'** Author: JYOTI KEDIA
'** Arguments: None
'** Returns: if acronym.exe does not exist in dir specified in lotus.ini, it
'** returns "", otherwise returns the full path to the product.
'*************************************************************************
FUNCTION GetSUITPathfromLotusIni() AS STRING
DIM DestDir$, lotusinipath$, defdir$, temp%, ProdDir$, fullpath$, rv%
DestDir$ = GetWindowsDir()
lotusinipath$ = DestDir$ +"lotus.ini"
If DoesFileExist(lotusinipath$,femExists) Then
defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "SUITE")
If defdir$ <> "" Then
'bmk: 6/01/94 changed suit.exe to suit.ri, no .exe to ever find
'bmk: 7/19/94 removed suit.ri from lotus.ini. Add back here.
'temp% = INSTR(1,LCASE$(defdir$),"suit.ri")
'if temp% <> 0 then
'ProdDir$ = MID$(defdir$,1,(temp%-1))
ProdDir$ = defdir$
if ProdDir$ <> "" then
fullpath$ = ProdDir$ + "suit.ri"
if DoesFileExist(fullpath$, femExists) then
rv% = Lot_CleanPath(fullpath$)
GetSUITPathfromLotusIni = fullpath$
EXIT FUNCTION
end if
end if
end if
end if
GetSUITPathfromLotusIni = ""
END FUNCTION
'**************************************************************************
'** PUBLIC SUB APPSELCB (hDlg&, CtrlId%, Classes$, LInst&)
'** Purpose: Callback for the the dialog box where the user picks which
'** SmartSuite apps to install. The user can change the install
'** path for each application.
'**
'** Author: TQI
'** Arguments: standard callback args
'** Comments: MN - Changed var name from Inst& to LInst& - conflicted w/unc
'*************************************************************************
PUBLIC SUB APPSELCB (hDlg&, CtrlId%, Classes$, LInst&) '** MN changed Inst& to LINST&
CONST pn123% = 2 ' product number for 1-2-3
CONST pnAPR% = 3 ' product number for Approach
CONST sz123Combo$ = "IDC_COMBO1"
CONST szAPRCombo$ = "IDC_COMBO2"
CONST szAppSelCombo$ = "IDC_COMBO3"
STATIC drvIndexSelected%, curIndexLCB%
STATIC drvIndex%(1 to MAX_NO_DRIVECOMBOS)
STATIC pathChanged123%, pathChangedAPR%
DIM dirSym$, pathName$, notused%
DIM prodNum%, index%, prodcount%, notused1$
DIM prod$, prodful$, onserver%, pathSym$
DIM Inst%, saveDir$, sxtnbit%
Inst% = CINT(LInst&)
SELECT CASE Classes$
CASE "__DLGINIT"
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT9)
AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
pathChanged123% = FALSE ' did user change the path?
pathChangedAPR% = FALSE ' did user change the path?
prodcount% = Reg_GetNumberofProducts()
FOR index% = 1 TO prodcount%
IF Reg_GetAllowUserToPickInSuite (index%) <> FALSE THEN
prod$ = Reg_GetProductAcronym(index%)
prodful$ = prod$ & gTOP$
AddListItem szAppSelCombo$, _
Lot_GetChapterValStr(Lot_GetChapterFromKeyword(prodful$), F_NAME) & SPACE$(30) & index%
'NODE dialog
IF GetSymbolValue(SYM_NETWORK$) = gNODE$ THEN
onserver% = Lot_IsTheFeatureInstalled(prodful$)
IF onserver% = 0 THEN
Reg_SetUIInOrOut index%, 0
ELSE 'bmk: uninstalled feature not in Node Select Suite Apps dialog
IF ((sxtnbit% = 1) AND _
(GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL)) THEN
Reg_SetUIInOrOut index%, 0
END IF
END IF
END IF 'node
END IF ' user allowed to pick (product does show up in the list)
NEXT 'Go to the next product
AddListItem SYM_UPDATELIST$, szAppSelCombo$
drvIndexSelected% = DlgAppSelSetProdInfo(hDlg&, pn123%, 1)
drvIndexSelected% = DlgAppSelSetProdInfo(hDlg&, pnAPR%, 2)
AppSelComboChanged hDlg&, 1
'** Grey out directory and drive choices for initially selected
'** product, in the case of an MLC install of that product
'** -degb 4/18/96
IF GetListItem(SYM_INSTALLKINDS$, pn123%) = gLANGUAGEINSTALL$ THEN
notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_COMBO1), FALSE))
notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT1), FALSE))
notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_BRWSDIR1), FALSE))
END IF
IF GetListItem(SYM_INSTALLKINDS$, pnAPR%) = gLANGUAGEINSTALL$ THEN
notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_COMBO2), FALSE))
notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT2), FALSE))
notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_BRWSDIR2), FALSE))
END IF
'* User has finished with this dialog and Selected OK
'* Update Path if it was changed
CASE "IDC_OK"
IF pathChanged123% = TRUE THEN
IF ValidateEditBox(hDlg& , 1) = 0 THEN
SetListItem "__LASTSTATUS", 1, "Q"
AppSelComboChanged hDlg&, 1
AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 1
EXIT SUB
END IF
pathName$ = GetPathFromComboEdit(hDlg&, 1)
IF ValidatePath (pathName$) = TRUE THEN
dirSym$ = Reg_GetDirSymbolList (pn123%)
dirSym$ = GetListItem (dirSym$, 1)
saveDir$ = GetSymbolValue(dirSym$)
SetSymbolValue dirSym$, pathName$
' need to set pathname to literal string from lot_callone...
pathSym$ = |"| + dirSym$ + |",TRUE|
Lot_RefreshDestination dirSym$
notused1$ = Lot_CallOneProductFunction (pn123%, _
"PathChange", gNEXT$, FALSE, pathSym$)
IF notused1$ = gBACK THEN
SetSymbolValue dirSym$, saveDir$
drvIndexSelected% = DlgAppSelSetProdInfo (hDlg&, pn123%, 1)
SetListItem "__LASTSTATUS", 1, "Q"
AppSelComboChanged hDlg&, 1
AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 1
EXIT SUB
END IF
ELSE
SetListItem "__LASTSTATUS", 1, "Q"
AppSelComboChanged hDlg&, 1
AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 1
EXIT SUB
END IF
END IF ' pathChanged123% = TRUE
IF pathChangedAPR% = TRUE THEN
IF ValidateEditBox(hDlg& , 2) = 0 THEN
SetListItem "__LASTSTATUS", 1, "Q"
AppSelComboChanged hDlg&, 2
AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 2
EXIT SUB
END IF
pathName$ = GetPathFromComboEdit(hDlg&, 2)
IF ValidatePath (pathName$) = TRUE THEN
dirSym$ = Reg_GetDirSymbolList (pnAPR%)
dirSym$ = GetListItem (dirSym$, 1)
saveDir$ = GetSymbolValue(dirSym$)
SetSymbolValue dirSym$, pathName$
' need to set pathname to literal string from lot_callone...
pathSym$ = |"| + dirSym$ + |",TRUE|
Lot_RefreshDestination dirSym$
notused1$ = Lot_CallOneProductFunction (pnAPR%, _
"PathChange", gNEXT$, FALSE, pathSym$)
IF notused1$ = gBACK THEN
SetSymbolValue dirSym$, saveDir$
drvIndexSelected% = DlgAppSelSetProdInfo(hDlg&, pnAPR%, 2)
SetListItem "__LASTSTATUS", 1, "Q"
AppSelComboChanged hDlg&, 2
AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 2
EXIT SUB
END IF
ELSE
SetListItem "__LASTSTATUS", 1, "Q"
AppSelComboChanged hDlg&, 2
AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 2
EXIT SUB
END IF
END IF ' pathChangedAPR% = TRUE
CASE sz123Combo$
ComboSelChanged 1, Inst%
PathChanged123% = TRUE
CASE szAPRCombo$
ComboSelChanged 2, Inst%
PathChangedAPR% = TRUE
CASE szAppSelCombo$
index% = 1 + SendMessage(GetDlgItem(hDlg&, IDC_COMBO3), CB_GETCURSEL, 0, 0)
index% = VAL(RIGHT$(GetListItem(szAppSelCombo$, index%), 1))
IF index% = pn123% THEN
AppSelComboChanged hDlg&, 1 ' show 123 path
ELSE
AppSelComboChanged hDlg&, 2 ' show APR path
END IF
CASE "IDC_EDIT"
SELECT CASE Inst%
CASE 1
pathChanged123% = TRUE
CASE 2
pathChangedAPR% = TRUE
END SELECT ' Inst%
CASE "IDC_BRWSDIR"
drvIndexSelected% = ValidateBrowse(hDlg& , Inst%)
SELECT CASE Inst%
CASE 1
pathChanged123% = TRUE
CASE 2
pathChangedAPR% = TRUE
END SELECT
END SELECT ' classes
END SUB
'*************************************************************************
'** FUNCTION DlgAppSelSetProdInfo (hDlg&, prodNum%, editNum%) AS INTEGER
'** Purpose: Given a product number and the dialog handle, set
'** corresponding product info in the dialog.
'** EDIT is set to the product directory for prodNum%.
'** The drive combo box is set to the current installation
'** drive for prodNum%.
'**
'** Arguments:
'** hDlg&: handle of the dialog
'** prodNum%: product number
'** editNum%: edit box number.
'** e.g. 2 to set path to IDC_EDIT2 and IDC_COMBO2
'**
'** Returns: the index into the drive combo box indication the current drive
'** selection (that is set in this routine)
'**
'*************************************************************************
FUNCTION DlgAppSelSetProdInfo (hDlg&, prodNum%, editNum%) AS INTEGER
DIM dirSym$
' Get the current path for this product
dirSym$ = Reg_GetDirSymbolList (prodNum%)
dirSym$ = GetListItem (dirSym$, 1)
dirSym$ = GetSymbolValue (dirSym$)
' Set the drive combo box to select the drive in the current path
Lot_GetDriveFreeSpaceList "IDC_COMBO" & editNum%
SetListItem "IDC_EDIT", editNum%, dirSym$
DlgAppSelSetProdInfo = ValidateEditBox(hDlg& , editNum%)
AddListItem SYM_UPDATELIST$, "IDC_EDIT" & editNum%
END FUNCTION
'*************************************************************************
'** SUB AppSelComboChanged(hDlg&, inst%)
'** Purpose: switchs IDC_EDITn, IDC_COMBOn and IDC_DRWSDIRn
'** Arguments:
'** hDlg&: handle of the dialog
'** inst%: instance of controls (1 or 2)
'*************************************************************************
SUB AppSelComboChanged(hDlg&, inst%)
DIM notused&, sw1&, sw2&, ew1&, ew2&
SELECT CASE inst%
CASE 1
sw1& = SW_SHOW
sw2& = SW_HIDE
ew1& = TRUE
ew2& = FALSE
CASE 2
sw1& = SW_HIDE
sw2& = SW_SHOW
ew1& = FALSE
ew2& = TRUE
END SELECT
notused& = ShowWindow(GetDlgItem(hDlg&, IDC_EDIT1), sw1&)
notused& = ShowWindow(GetDlgItem(hDlg&, IDC_COMBO1), sw1&)
notused& = ShowWindow(GetDlgItem(hDlg&, IDC_BRWSDIR1), sw1&)
IF GetListItem(SYM_INSTALLKINDS$, 2) <> gLANGUAGEINSTALL$ THEN
notused& = EnableWindow(GetDlgItem(hDlg&, IDC_BRWSDIR1), ew1&)
END IF
notused& = ShowWindow(GetDlgItem(hDlg&, IDC_EDIT2), sw2&)
notused& = ShowWindow(GetDlgItem(hDlg&, IDC_COMBO2), sw2&)
notused& = ShowWindow(GetDlgItem(hDlg&, IDC_BRWSDIR2), sw2&)
IF GetListItem(SYM_INSTALLKINDS$, 3) <> gLANGUAGEINSTALL$ THEN
notused& = EnableWindow(GetDlgItem(hDlg&, IDC_BRWSDIR2), ew2&)
END IF
END SUB
'*************************************************************************
'** PUBLIC FUNCTION InitLanguageSUIT(prodno%, network$, direction$)
'** Purpose: Finds out the installed languages and determines the nature
'** of the install. If not running automated, displays a message box for
'** a reinstall or language install, for an upgrade, just continues
'**
'** Author: JMDonohue
'** Arguments: (Not used -- to conform to product function spec)
'** Returns: Install kind string
'**
'** Sets the following global symbols for later processing:
'** SYM_INSTALLKIND$
'** SYM_REG_PRODUCTNAME$
'** SYM_REG_PRODUCTVER$
'*************************************************************************
PUBLIC FUNCTION InitLanguageSUIT (prodno%, network$, direction$) AS STRING
DIM szProductName$, szProductVersion$, szInstallKind$, szLanguageSubdir$
szProductName$ = LdString(SID_SUIT_PROD_NAME)
szProductVersion$ = LdString(SID_SUIT_PROD_VER)
SetSymbolValue SYM_REG_PRODUCTNAME$ , szProductName$
SetSymbolValue SYM_REG_PRODUCTVER$ , szProductVersion$
'modified per JACKD's spec : MN
InitLanguages szProductName$, szProductVersion$, prodno%
'SetSymbolValue SYM_INSTALLKIND$, szInstallKind$ commented out don't need :MN
'InitLanguageSUIT = szInstallKind$ commented out don't need :MN
END FUNCTION
'*************************************************************************
'** CUSTOMIZEAPPSCB
'** Purpose: This is a for the Welcome Dialog Boxes
'** there are two distinct types of dialogs:
'** A STANDARD/SERVER dialog vs a NODE dialog.
'**
'** IN SYMBOLS NAME, COMPANY, NETWORK
'**
'** Author:
'** Arguments:
'**
'**
'** Returns:
'**
'*************************************************************************
SUB CUSTOMIZEAPPSCB (hDlg&, CtrlId%, Classes$, Inst&)
DIM prodIndex%, nProds%, s$, i%, listitem$, comboitem$, notused%, direction$
DIM bitmap%, tips$, chpt$, sizetype$,product$, CBName$, DlgID%, rc%, HlpID&,prodac$
STATIC ListIndex%, ComboIndex%,network$
SELECT CASE Classes$
CASE "__DLGINIT"
If Lot_GetCurrentProduct() = 1 Then ListIndex% = 1
If ComboIndex% = 0 Then ComboIndex% = 1
nProds% = Reg_GetNumberOfProducts() : i% = 1
FOR prodIndex% = 1 to nProds%
If Reg_GetUIInOrOut (prodIndex%) <> FALSE AND _
Reg_GetAllowUserToPickInSuite(prodIndex%) <> FALSE Then
s$ = CreateListString (prodIndex%, "")
SetListItem "IDC_LIST1", i%, s$
If Lot_GetCurrentProduct() = prodIndex% Then
ListIndex% = i%
End If
i% = i% + 1
End If
NEXT
'*** If Server Install Then Grey out Set DIR button
'********************************************************
network$ = GetSymbolValue(SYM_NETWORK$)
IF network$ = gSERVER$ THEN
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
END IF
'***************************************
'*** If MLC install then grey out set dir button -degb 10/28/95
IF (GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$) THEN
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
END IF
listitem$ = GetListItem("IDC_LIST1", ListIndex%)
prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
'*** grey out setdir button if product is CNTR, CAM or DOC
prodac$ = Reg_GetProductAcronym(prodIndex%)
IF ((prodac$ = "CNTR") _
OR (prodac$ = "CAM") _
OR (prodac$ = "DOC")) THEN
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
END IF
'***************************************
SetCombo hDlg&, prodIndex%, Lot_GetNthFieldFromIniString(listitem$, 3,CHR$(9))
Lot_SetCurrentProduct(prodIndex%)
' SetListItem "SETTABS1",1,"30"
' SetListItem "SETTABS1",2,"51"
' SetListItem "SETTABS1",3,"80"
' SetListItem "SETTABS1",4,"130"
SetListItem "SETTABS1",1,"33"
SetListItem "SETTABS1",2,"54"
SetListItem "SETTABS1",3,"84"
SetListItem "SETTABS1",4,"133"
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT4)
'AddListItem SYM_UPDATELIST$, "SETTABS1"
AddListItem SYM_UPDATELIST$, "IDC_LIST1"
AddListItem SYM_UPDATELIST$, "IDC_LIST1," & ListIndex%
AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
'bmk: get product launch icons and text strings from inf file
chpt$ = Lot_GetChapterFromKeyword (Reg_GetProductAcronym(prodIndex%) + gTOP$)
bitmap% = Lot_GetChapterValInt(chpt$, F_BITMAP)
IF bitmap% <> 0 THEN
SetListItem "IDC_BMP", 1, CSTR(bitmap%)
AddListItem SYM_UPDATELIST$, "IDC_BMP1"
END IF
tips$ = Lot_GetChapterValStr (chpt$, F_TIPS)
SetListItem "IDC_TEXT", 9, tips$
AddListItem SYM_NORMALFONT$, CSTR(IDC_TEXT9)
AddListItem SYM_UPDATELIST$, "IDC_TEXT9"
CASE "IDC_B"
SELECT CASE Inst&
CASE 1
listitem$ = GetListItem("IDC_LIST1", ListIndex%)
prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
If Reg_GetProdSelectedInstallType(prodIndex%) <> gCUSTOM Then
Reg_SetSelectedInstallType prodIndex%, gCUSTOM$
direction$ = Lot_CallOneProductFunction(prodIndex%, "InitCopyList", gNEXT, TRUE, "")
End If
notused% = RegisterCallback("CALLBACK","CUSTOM1CB")
direction$ = PopupModalDlg (DBM_CUSTOMIZEBASESUITEPROD, _
DBM_CUSTOMIZEBASESUITEPROD)
CASE 2
'*** SET DIR STUFF
'SET DIR INITIALIZATION
'FOR prodIndex% = 1 to nProds%
'NEXT
listitem$ = GetListItem("IDC_LIST1", ListIndex%)
prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
'If Reg_GetProdSelectedInstallType(prodIndex%) <> gCUSTOM Then
'Reg_SetSelectedInstallType prodIndex%, gCUSTOM$
'product$ = ProdIndex%
product$ = Reg_GetProductAcronym(prodIndex%)
CBName$ = Reg_GetMoreDirsCBName(prodIndex%)
DlgID% = Reg_GetMoreDirsDLGID(prodIndex%)
HlpID& = Reg_GetMoreDIrsHlpID(prodIndex%)
notused% = RegisterCallback(product$, CBName$)
direction$ = PopUpModalDLG(DlgID%, HlpID&)
'END IF
END SELECT '**IDC_B
SELECT CASE direction$
case "BACK"
notused% = SetFocus(GetDlgItem(hDlg&, IDC_B1))
case "OK"
notused% = SetFocus(GetDlgItem(hDlg&, IDC_B1))
END SELECT
SetListItem "IDC_LIST1", ListIndex%, CreateListString (prodIndex%, comboitem$)
AddListItem SYM_UPDATELIST$, "IDC_LIST1," & ListIndex%
CASE "IDC_LIST1"
SetYieldActive FALSE ' turn off yielding while handling lcb
ListIndex% = Inst&
listitem$ = GetListItem("IDC_LIST1", ListIndex%)
prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
Lot_SetCurrentProduct(prodIndex%)
SetCombo hDlg&, prodIndex%, Lot_GetNthFieldFromIniString(listitem$, 3,CHR$(9))
'*** If Install type not CUSTOM Then Grey out Set DIR button
'***************************************
IF Reg_GetProdSelectedInstallType(prodIndex%) <> gCUSTOM$ Then
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
ELSE
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), TRUE))
END IF
'*** If MLC install then grey out set dir button
'AMM IF (GetListItem(SYM_INSTALLKINDS$, prodIndex%) = gLANGUAGEINSTALL$) THEN
'AMM 1 for 123???
IF (GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$) THEN
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
END IF
'*** If prod acronym is SMARTCNTR,CAM or DOC grey
prodac$ = Reg_GetProductAcronym(prodIndex%)
IF ((prodac$ = "CNTR") _
OR (prodac$ = "CAM") _
OR (prodac$ = "DOC")) THEN
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
END IF
'***************************************
'*** If Server Install Then Grey out Set DIR button
'********************************************************
network$ = GetSymbolValue(SYM_NETWORK$)
IF network$ = gSERVER$ THEN
notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
END IF
'***************************************
chpt$ = Lot_GetChapterFromKeyword (Reg_GetProductAcronym(prodIndex%) + gTOP$)
bitmap% = Lot_GetChapterValInt(chpt$, F_BITMAP)
IF bitmap% <> 0 THEN
SetListItem "IDC_BMP", 1, CSTR(bitmap%)
AddListItem SYM_UPDATELIST$, "IDC_BMP1"
END IF
tips$ = Lot_GetChapterValStr (chpt$, F_TIPS)
SetListItem "IDC_TEXT", 9, tips$
AddListItem SYM_NORMALFONT$, CSTR(IDC_TEXT9)
AddListItem SYM_UPDATELIST$, "IDC_TEXT9"
SetYieldActive TRUE ' turn off yielding while handling lcb
CASE "IDC_COMBO1"
ComboIndex% = Inst&
comboitem$ = GetListItem("IDC_COMBO1", ComboIndex%)
listitem$ = GetListItem("IDC_LIST1", ListIndex%)
prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
SetListItem "IDC_LIST1", ListIndex%, CreateListString (prodIndex%, comboitem$)
AddListItem SYM_UPDATELIST$, "IDC_LIST1," & ListIndex%
SetCombo hDlg&, prodIndex%, comboitem$
CASE "IDC_OK"
FOR i% = 1 to GetListLength("IDC_LIST1")
listitem$ = GetListItem("IDC_LIST1", i%)
sizetype$ = Lot_GetNthFieldFromIniString(listitem$, 3,CHR$(9))
If sizetype$ = gFULLSTR$ Then
prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
Reg_SetSelectedInstallType prodIndex%, gCOMPLETE$
direction$ = Lot_CallOneProductFunction(prodIndex%, "InitCopyList", gNEXT, TRUE, "")
ElseIf sizetype$ = gMINIMUMSTR$ Then
prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
Reg_SetSelectedInstallType prodIndex%, gLAPTOP$
direction$ = Lot_CallOneProductFunction(prodIndex%, "InitCopyList", gNEXT, TRUE, "")
End If
NEXT
END SELECT
END SUB
'**************************************************************************
'* SUB SetCombo( hDlg&, BYVAL prodIndex%, BYVAL sizetype$)
'**************************************************************************
SUB SetCombo( hDlg&, BYVAL prodIndex%, BYVAL sizetype$)
DIM count%, notused%
If GetListLength("IDC_COMBO1") > 0 Then RemoveSymbol "IDC_COMBO1"
count% = 0
AddListItem SYM_UPDATELIST$, "IDC_COMBO1"
If Reg_GetProdSupportForFullInstall(prodIndex%) <> FALSE Then
count% = count% + 1
AddListItem "IDC_COMBO1", gFULLSTR$
If sizetype$ = gFULLSTR$ OR ( sizetype$ = "" AND _
Reg_GetProdSelectedInstallType(prodIndex%) = gCOMPLETE ) Then
AddListItem SYM_UPDATELIST$, "IDC_COMBO1" & "," & count%
End If
End If
If Reg_GetProdSupportForCustInstall(prodIndex%) <> FALSE Then
count% = count% + 1
AddListItem "IDC_COMBO1", gCUSTOMSTR$
If sizetype$ = gCUSTOMSTR$ OR ( sizetype$ = "" AND _
Reg_GetProdSelectedInstallType(prodIndex%) = gCUSTOM ) Then
AddListItem SYM_UPDATELIST$, "IDC_COMBO1" & "," & count%
notused% = EnableWindow(GetDlgItem(hDlg&,IDC_B1), TRUE)
Else
notused% = EnableWindow(GetDlgItem(hDlg&,IDC_B1), FALSE)
End If
Else
notused% = EnableWindow(GetDlgItem(hDlg&,IDC_B1), FALSE)
End If
If Reg_GetProdSupportForMinInstall(prodIndex%) <> FALSE AND _
GetSymbolValue(SYM_NETWORK$) <> gSERVER$ Then
count% = count% + 1
AddListItem "IDC_COMBO1", gMINIMUMSTR$
If sizetype$ = gMINIMUMSTR$ OR ( sizetype$ = "" AND _
Reg_GetProdSelectedInstallType(prodIndex%) = gLAPTOP ) Then
AddListItem SYM_UPDATELIST$, "IDC_COMBO1" & "," & count%
End If
End If
END SUB
'*************************************************************************
'** FUNCTION CreateListString( BYVAL prodIndex%, BYVAL sizetype$) AS STRING
'*************************************************************************
FUNCTION CreateListString( BYVAL prodIndex%, BYVAL sizetype$) AS STRING
DIM s$, prodsize$, selectedtype$ , dirSym$, pathName$, n%
'bmk: determine type of install option
If sizetype$ = "" Then
selectedtype$ = Reg_GetProdSelectedInstallType(prodIndex%)
If selectedtype$ = gLAPTOP$ Then
sizetype$ = gMINIMUMSTR$
ElseIf selectedtype$ = gCUSTOM Then
sizetype$ = gCUSTOMSTR$
Else
sizetype$ = gFULLSTR$
End If
End If
If sizetype$ = "LAPTOP" Then
prodsize$ = Lot_MakeSizeString(Reg_GetProdMinSize(prodIndex%)\1024)
Else
prodsize$ = Lot_MakeSizeString(Reg_GetProdFullSize(prodIndex%)\1024)
End If
s$ = Reg_GetProductname (prodIndex%) + CHR$(9)
s$ = s$ + prodsize$ + CHR$(9)
' s$ = s$ + sizetype$ + CHR$(9)
s$ = s$ + CHR$(9)
dirSym$ = Reg_GetDirSymbolList(prodIndex%)
n% = GetListLength(dirSym$)
If n% > 0 Then dirSym$ = GetListItem(dirSym$, 1)
If n% > 0 AND dirSym$ <> "" Then
pathName$ = GetSymbolValue(dirSym$)
Else
pathName$ = ""
End If
s$ = s$ + pathName$ + CHR$(9)
s$ = s$ + CSTR(prodIndex%)
CreateListString = s$
END FUNCTION
'*************************************************************************
'* SUB SUITEDIRCB (hDlg&, CtrlId%, Classes$, Inst&)
'** Purpose: Drives DB_SUITEDIR dialog
'** Author: MZ,TV
'** Arguments: Callback args
'** Returns: NONE
'** Modified: MN - Added UNC Stuff - Changed Inst& to LInst&
'*************************************************************************
SUB SUITEDIRCB (hDlg&, CtrlId%, Classes$, LInst&)
STATIC dirChanged%, passnum%, drvIndex%(1 to MAX_NO_DRIVECOMBOS)
DIM dirSym$, dirToChange$, dirName$, rc$, i%, Chapter$
DIM AllProdNum%,prodNum%,AllOptNum%,OptName$,OptNum%,notused%
DIM defdir$, proddir$, proddrv$,Inst%
DIM uncPath$, dirPath$, drvPath$ '** MZ
DIM drvSel%, DriveChangedFlag% '** MZ
DIM uncOff&, unusedPath$, combobox$, editbox$
DIM curCombo$, fullPath$
DIM longdir$, pathpart$, max%, counter%, handle$ '**degb 11/2/95
SELECT CASE Classes$
CASE "__DLGINIT"
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT4)
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT9)
AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
'bmk: 11/95 dirChanged% is TRUE if user has touched combo or edit box
'if dirChanged% is TRUE; IDC_OK verifies that path is valid
'error is surfaced only for NEXT
IF dirChanged% <> TRUE THEN
IF (GetSymbolValue(SYM_NETWORK$) <> gSERVER$ AND _
GetSymbolValue(SYM_NETWORK$) <> gDISTRIBUTION$) THEN
' bmk: 11/95 use Registry path or use current BASEDIR$ value
dirToChange$ = GetSUITPathfromRegistry()
IF dirToChange$ = "" THEN 'there is a string in lotus.ini
dirToChange$ = GetSymbolValue(SYM_BASEDIR$)
END IF 'registry path check
'BMK: OLD CODE,LEAVE IT TILL NEW CODE VERIFIED OK
'Lot_GetDriveFreeSpaceList "IDC_COMBO1"
'SetListItem "IDC_EDIT", 1, dirToChange$
'drvIndex%(1) = ValidateEditBox(hDlg& , 1)
'sets combo box correctly from dirToChange$
'AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
ELSE 'SERVER or DISTRIBUTION INSTALL FOR case when user has not
'changed anything
dirToChange$ = GetSymbolValue(SYM_BASEDIR$)
'BMK: OLD CODE,LEAVE IT TILL NEW CODE VERIFIED OK
'Lot_GetDriveFreeSpaceList "IDC_COMBO1"
'SetListItem "IDC_EDIT", 1, dirToChange$
'drvIndex%(1) = ValidateEditBox(hDlg& , 1)
'AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
END IF 'Type of Install, Standard, Server/Node, Dist
Lot_GetDriveFreeSpaceList "IDC_COMBO1"
SetListItem "IDC_EDIT", 1, dirToChange$
drvIndex%(1) = ValidateEditBox(hDlg& , 1)
AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
ELSE 'bmk: user changed something, just use SYM_BASEDIR that
'was refreshed in IDC_OK
dirToChange$ = GetSymbolValue(SYM_BASEDIR$)
Lot_GetDriveFreeSpaceList "IDC_COMBO1"
SetListItem "IDC_EDIT", 1, dirToChange$
drvIndex%(1) = ValidateEditBox(hDlg& , 1)
AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
END IF
'*** If MLC install then grey out dir buttons -degb 11/1/95
'** No longer applicable -degb 4/18/96
' IF (GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$) THEN
' notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_COMBO1), FALSE))
' notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_EDIT1), FALSE))
' notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_BRWSDIR1), FALSE))
' END IF
CASE "IDC_EDIT"
dirChanged% = TRUE
CASE "IDC_BRWSDIR"
drvSel% = ValidateBrowse(hDlg&, 1) '* degb 11/9/95 Inst% was not being initialized
dirChanged% = TRUE
CASE "IDC_COMBO1"
Inst% = CINT(LInst&)
ComboSelChanged 1, Inst%
dirChanged% = TRUE
CASE "IDC_OK"
IF dirChanged% = TRUE OR passnum% = 0 THEN
'bmk: validate the drive
drvSel% = ValidateEditBox(hDlg& , 1)
'bmk: if invalid drive, restore the last valid drive
IF drvSel% = 0 THEN
SetListItem "__LASTSTATUS", 1, "Q"
EXIT SUB
ELSE 'set to new drive
drvIndex%(1) = drvSel%
END IF
dirToChange = GetPathFromComboEdit(hDlg&,1)
IF ValidatePath(dirToChange$) = FALSE THEN
SetListItem "__LASTSTATUS", 1, "Q"
EXIT SUB
ELSE
SetSymbolValue SYM_BASEDIR$, dirToChange$
Lot_RefreshDestination(SYM_BASEDIR$)
END IF
'* removed code surfacing UNC/Long warning dialog -degb 4/18/96
END IF
ResetWinWinsysSymbols
passnum% = passnum% + 1
END SELECT
END SUB
'*************************************************************************
'* SUB UNCLONGPARENT_CB (hDlg&, CtrlId%, Classes$, Inst&)
'** Purpose: Drives DBSUIT_UNCLONGPARENT dialog
'** Author: degb
'** Arguments: Callback args
'** Returns: NONE
'** Modified:
'*************************************************************************
SUB UNCLONGPARENT_CB (hDlg&, CtrlId%, Classes$, LInst&)
END SUB
'*************************************************************************
'** SUB SUITESVRLOTUSAPPDIRCB (hDlg&, CtrlId%, Classes$, Inst&)
'**
'** Purpose: Callback to handle dialog that prompts for the Lotusapp directory
'** in the case of a SmartSuite server install.
'**
'** Author: TV
'** Arguments: Callback args
'** SymbolsIn: SYM_BASEDIR$ from main.lss and previous callback(for DB_SUITEDIR)
'** Returns: NONE
'*************************************************************************
SUB SUITESVRLOTUSAPPDIRCB (hDlg&, CtrlId%, Classes$, Inst&)
STATIC drvIndex%, dirChanged%
DIM dirToChange$, dirName$, rc$, i%, S$,defaultdir$
DIM drvSel%, drvPath$, uncPath$, dirPath$,gLOTUSAPP$
SELECT CASE Classes$
case "__DLGINIT"
dirChanged% = FALSE
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
''SUIT MAN dirToChange$ = GetSymbolValue(SYM_LOTUSAPPDIR$)
defaultdir$ = GetSymbolValue(SYM_BASEDIR$)
'***remove lotusapp from path (for ui)
IF dirToChange$ <> defaultdir$ THEN
dirToChange$ = LEFT$(dirToChange$,LEN(dirToChange$)-LEN(gLOTUSAPP$)-1)
END IF
Lot_GetDriveFreeSpaceList "IDC_COMBO1"
' drvIndex% = SelectDriveCombo ("IDC_COMBO1", dirToChange$)
SetListItem "IDC_EDIT", 1, dirToChange$
drvIndex% = ValidateEditBox(hDlg& , 1)
AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
' S$ = GetListItem("IDC_COMBO1", drvIndex%)
' SetListItem "IDC_COMBO1", 1, S$
AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
' AddListItem SYM_UPDATELIST$, "IDC_COMBO1"
case "IDC_EDIT"
dirChanged% = TRUE
case "IDC_COMBO1"
drvIndex% = Inst&
dirChanged% = TRUE
case "IDC_OK"
IF dirChanged% = TRUE THEN
IF ValidateEditBox(hDlg& , 1) = 0 THEN
SetListItem "__LASTSTATUS", 1, "Q"
EXIT SUB
END IF
dirToChange$ = GetPathFromComboEdit(hDlg&,1)
'** For server lotusapp dir, add on lotusapp
IF GetSymbolValue(SYM_NETWORK$) = gSERVER$ THEN
dirToChange$ = MakePath(dirToChange$,gLOTUSAPP$)
END IF
IF ValidatePath(dirToChange$) = FALSE THEN
SetListItem "__LASTSTATUS", 1, "Q"
EXIT SUB
ELSE
''SUIT SetSymbolValue SYM_LOTUSAPPDIR$, dirToChange$
''SUIT Lot_RefreshDestination(SYM_LOTUSAPPDIR$)
END IF
END IF
END SELECT
END SUB
'*************************************************************************
'** SUB WriteSUITInLotusIni(prodno%)
'**
'** Purpose: This function logs SUIT.RI in lotus.ini
'** Author: MZ; modified by BMK
'** Arguments:
'** Returns: SUCCESS
'*************************************************************************
'SUB WriteSUITInLotusIni(prodno%)
'DIM Destdir$, ProgDir$
' DestDir$ = GetWindowsDir() + "lotus.ini"
' ProgDir$ = Lot_WhereIsFeature(prodno%, "INSTTOP","SUIT.RI")
' CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE", Progdir$, cmoOverwrite
'END SUB
'*************************************************************************
'** FUNCTION PrevVersionsSUIT(prodno%, network$, direction$) AS STRING
'**
'** Purpose: This function posts Existing Version warning for Suite products
'** Author: BMK
'** Arguments:
'** Returns: SUCCESS
'*************************************************************************
PUBLIC FUNCTION PrevVersionsSUIT(prodno%, network$, direction$) AS STRING
DIM nProducts%, prodIndex%, i%, temp%
PrevVersionsSUIT = direction$
'' In the backwards case, keep backing up
If direction$ = gBACK Then
EXIT FUNCTION
End If
nProducts% = Reg_GetNumberOfProducts()
'** For STANDARD INSTALL Put up a dlg box, if previous version of
' any SUITE product found
' bmk 10/16/95: Added NODE
'==========================================================
If network$ = gSTANDARD$ OR network$ = gNODE$ Then
For prodIndex% = 1 to nProducts%
If Reg_GetPreviousVersion(prodIndex%) <> "" Then
temp% = RegisterCallback("SUIT", "EXISTINGPRODCB")
direction$ = PopupModalDlg (DB_EXISTINGPROD, DB_EXISTINGPROD)
If direction$ = gBACK Then
PrevVersionsSUIT = direction$
EXIT FUNCTION
Else
GOTO PREVPRODFOUND
End If
End if
Next
End if
PREVPRODFOUND:
END FUNCTION
'*************************************************************************
'** SUB ProdSizeSUIT(prodno%)
'**
'** Purpopose: Calculates the total size of Suite products selected in SSAPPs
'** dialog. Registers that size value Reg_SetProdSize for Suite for use in
'** Install Options dialog. Fixes SPR
'** Author: BMK 7/11/94
'** Arguments: prodno% is Suite #1
'** Returns: SUCCESS
'*************************************************************************
'SUB ProdSizeSUIT(prodno%)
' DIM prodcount%, index%, prodfullsize&, prodminsize&
' DIM suitfullsize&, suitminsize&
'
' suitfullsize& = 0
' suitminsize& = 0
'prodcount% = Reg_GetNumberofProducts()
'FOR index% = 1 TO prodcount%
'IF Reg_GetUIInOrOut (index%) <> FALSE THEN
' prodfullsize& = Reg_GetProdFullSize(index%)
' prodminsize& = Reg_GetProdMinSize(index%)
' suitfullsize& = suitfullsize& + prodfullsize&
' suitminsize& = suitminsize& + prodminsize&
' END IF
'NEXT
'Reg_SetProdSizes prodno%, suitfullsize&, suitminsize&
'END SUB
'****************************************************************************
'* SUB EXISTINGPRODCB(hDlg&, CtrlId%, Classes%, Inst&)
'*
'*
'*
'****************************************************************************
SUB EXISTINGPRODCB(hDlg&, CtrlId%, Classes$, Inst&)
SELECT CASE Classes$
case "__DLGINIT"
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
END SELECT
END SUB
'****************************************************************************
'* SUB DlgRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, Inst&)
'* Purpose: callback to handle Remove Files dialog.
'* Author: BMK 7/18/95
'* Arguments:
'*
'*
'****************************************************************************
SUB DlgRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, Inst&)
DIM nProducts%, index%, chpt$, chptnum%, sym$, notused%,prodName$, NOREMOVE%
DIM szObs$
SELECT CASE Classes$
case "__DLGINIT"
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
case "IDC_OK"
nProducts% = Reg_GetNumberofProducts()
FOR index% = 1 TO nProducts%
notused% = Reg_GetUIInOrOut (index%)
IF Reg_GetUIInOrOut (index%) <> FALSE THEN
IF Reg_GetObsFiles(index%) = 1 THEN
prodName$ = Reg_GetProductAcronym(index%)
sym$ = prodname$ & "OBSFILES" 'build keyword with product acronym
For chptnum% = 1 TO MAX_CHPTS
szObs$ = sym$ + LTRIM$(STR$(chptnum%))
chpt$ = Lot_GetChapterFromKeyWord(szObs$)
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
END IF
NEXT
End If
END IF
NEXT
case "IDC_BACK"
' reset the INF sections to OFF for all in case user changes his/her mind
FOR index% = 1 TO nProducts%
prodName$ = Reg_GetProductAcronym(index%)
sym$ = prodname$ & "OBSFILES"
FOR chptnum% = 1 TO MAX_CHPTS
szObs$ = sym$ + LTRIM$(STR$(chptnum%))
chpt$ = Lot_GetChapterFromKeyWord(szObs$)
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
END IF
NEXT
NEXT
NOREMOVE% = 1
case "IDC_EXIT"
' reset the INF sections to OFF for all in case user changes her mind
FOR index% = 1 TO nProducts%
prodName$ = Reg_GetProductAcronym(index%)
sym$ = prodname$ & "OBSFILES"
FOR chptnum% = 1 TO MAX_CHPTS
szObs$ = sym$ + LTRIM$(STR$(chptnum%))
chpt$ = Lot_GetChapterFromKeyWord(szObs$)
IF chpt$ <> "" THEN
notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
END IF
NEXT
NEXT
END SELECT
END SUB
'*------------------------------------------------------------------------
'* Function: CleanWinHelpIni
'* Description: Removes entries from winhelp.ini for files
'* listed in filelist.
'*
'*
'* Author: Bob Voges
'*
'* Inputs: none
'*
'* Outputs: none
'*
'* Returns: none
'*
'* Caveats: no error handling
'*
'*------------------------------------------------------------------------
Public Sub CleanWinHelpIni
Dim i as Integer 'loop index
Dim file as String 'ini file
Dim section as String 'section within ini file
'initialize variables
InitList
file = "winhelp.ini"
section = "files"
' for each entry in list
' delete it from winhelp.ini
For i=1 To NUM_FILES
WritePrivateProfileString _
section,_
filelist(i),_
0,_
file
Next
End Sub
'*------------------------------------------------------------------------
'* Function: InitList
'*
'* Description: Initializes the filelist which is used to
'* remove Wrigley Beta entries from winhelp.ini.
'*
'* Author: Bob Voges
'*
'* Inputs: none
'*
'* Outputs: none.
'*
'* Returns: none
'*
'* Caveats: no error handling
'*
'*------------------------------------------------------------------------
Sub InitList
filelist(1) = "LTHLPN30.DLL" 'Shared-help DLL
filelist(2) = "FL1C40EN.HLP" 'Freelance main task help
filelist(3) = "FL1C40EN.CNT"
filelist(4) = "WP1N70EN.HLP" 'Word Pro main task help
filelist(5) = "WP1N70EN.CNT"
filelist(6) = "WP3N70EN.HLP" 'Word Pro drawing task help
filelist(7) = "WP3N70EN.CNT"
filelist(8) = "WP4N70EN.HLP" 'Word Pro equations task help
filelist(9) = "WP4N70EN.CNT"
filelist(10) = "LA1N40EN.HLP" 'Approach main task help
filelist(11) = "LA1N40EN.CNT"
filelist(12) = "LC1N20EN.HLP" 'Chart task help
filelist(13) = "LC1N20EN.CNT"
filelist(14) = "LSEN30EN.HLP" 'IDE task help
filelist(15) = "LSEN30EN.CNT"
filelist(16) = "TM1N10EN.HLP" 'Team Mail task help
filelist(17) = "TM1N10EN.CNT"
filelist(18) = "MB1C10EN.HLP" 'Mobile Screen Show task help
filelist(19) = "MB1C10EN.CNT"
filelist(20) = "SC1N50EN.HLP" 'SmartCenter task help
filelist(21) = "SC1N50EN.CNT"
filelist(22) = "CS1N40EN.HLP" 'Customer support help
filelist(23) = "AS1N11EN.HLP" 'OLE2 help
filelist(24) = "LSLN30EN.HLP" 'LotusScript Reference help
filelist(25) = "LSLN30EN.CNT"
filelist(26) = "FL2C10EN.HLP" 'Freelance LotusScript Reference Help
filelist(27) = "FL2C10EN.CNT"
filelist(28) = "LASN40EN.HLP" 'Approach LotusScript Reference Help
filelist(29) = "LASN40EN.CNT"
filelist(30) = "WP0N70EN.HLP" 'Word Pro LotusScript Reference Help
filelist(31) = "WP0N70EN.CNT"
filelist(32) = "LC2N20EN.HLP" 'Chart LotusScript Reference Help
filelist(33) = "LC2N20EN.CNT"
filelist(34) = "FL3C10EN.HLP" 'Obsolete filename: Freelance Help
filelist(35) = "CS1N10EN.HLP" 'Obsolete filename: Customer Support Help
filelist(36) = "AS1N10EN.HLP" 'Obsolete filename: Approach Help
filelist(37) = "LA1C40EN.HLP" 'Obsolete filename: Approach Help
filelist(38) = "LTSMAIL3.HLP" 'Obsolete filename: TeamMail Help
filelist(39) = "LTSCHRT2.HLP" 'Obsolete filename: Lotus Chart Help
filelist(40) = "DRVACCSS.HLP" 'Obsolete filename:
End Sub
'*************************************************************************
'** FUNCTION GetSUITPathfromRegistry() AS STRING
'**
'** Purpose: Gets the product dir path from the registry, and searches for
'** acronym.exe in the product dir path.
'**
'** Author: jshaw
'** Arguments: None
'** Returns: if acronym.exe does not exist in dir specified in the registry,
'** "" is returned, otherwise the full path to the product is
'** returned.
'**
'*************************************************************************
FUNCTION GetSUITPathfromRegistry () AS STRING
DIM nReturn&, dwInstallType&
DIM szBuffer$, szFullPath$, cbBuffer&
DIM nSize$, nIndex%, rv%
DIM LocPath$, descript$, instvalue$, szInsttype$
DIM szKey2$,dwSize&, nsize1&, nsize2&, RegStatus&
DIM szKey$, szKeyvalue$, szKeyvalue1$, szKeyvalue2$, keyvalue3$, keyvalue4$
DIM KeyReturn&
'szBuffer$ = String(256,0)
'cbBuffer& = len(szBuffer$)
szKey$ = LdString (SID_SUIT_SZKEY)
szKeyValue$ = LdString (SID_SUIT_KEYVALUE)
nReturn& = Lot_GetRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, szKeyValue$, REG_SZ , _
szBuffer$, cbBuffer&)
if szBuffer$ <> "" then
nIndex% = INSTR(szBuffer$, " ")
if nIndex > 2 then
szBuffer$ = LEFT$(szBuffer$, nIndex% - 2)
szFullPath$ = szBuffer$ + LdString(SID_SUIT_SUITRI)
if DoesFileExist (szFullPath$, femExists) then
rv% = Lot_CleanPath (szBuffer$)
GetSUITPathfromRegistry = LTRIM$(szBuffer$)
EXIT FUNCTION
end if
end if
End if
GetSUITPathfromRegistry = ""
END FUNCTION