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 >
Text File  |  1996-12-05  |  135KB  |  3,568 lines

  1.  
  2.  ''*********************************************************************
  3.  ''
  4.  ''
  5.  ''   Module Name:   SUIT.lss
  6.  ''
  7.  ''   Module Code:   COMINST
  8.  ''
  9.  ''   Author:              
  10.  ''
  11.  ''   Creation Date:       Jan 26, 1994
  12.  ''
  13.  ''   Copyright Lotus Development Corporation, (c) 1994
  14.  ''
  15.  ''
  16.  ''  
  17.  ''   Description: 
  18.  ''  
  19.  ''
  20.  ''   Additional authors:
  21.  ''
  22.  ''   Change History:
  23.  ''   $Log:   //bluebird/logfiles/GEMINI/cisdk/suit/suit.lss  $
  24. '' 
  25. ''    Rev 1.16   05 Dec 1996 09:07:36   mhishinu
  26. '' Fixed DBCS string truncation problem. (SPR #29486)
  27. '' 
  28. ''    Rev 1.15   01 Dec 1996 01:08:58   mhishinu
  29. '' Fixed MLC install problem. (SPR #28715)
  30. '' 
  31. ''    Rev 1.14   11 Oct 1996 17:19:32   jlu
  32. '' Fix obsolete file not being removed.
  33. '' 
  34. ''    Rev 1.13   01 Oct 1996 02:43:10   mhishinu
  35. '' Modified for billboards.
  36. '' 
  37. ''    Rev 1.12   25 Sep 1996 13:20:38   jlu
  38. '' Turned everything on for default server, except OBSFILES1
  39. '' 
  40. ''    Rev 1.11   10 Sep 1996 20:18:36   mhishinu
  41. '' Added a Lot_GetFirst call to InitCopyConfig.
  42. '' Added code for Run From Rom to PostSuccessReg.
  43. '' 
  44. ''    Rev 1.10   30 Aug 1996 18:14:38   mhishinu
  45. '' Added new billboards.
  46. '' 
  47. ''    Rev 1.9   22 Aug 1996 16:11:16   mhishinu
  48. '' Modified .INF file names in PostCopyConfig123 function. (SPR #22551)
  49. '' 
  50. ''    Rev 1.8   17 Jul 1996 19:00:00   mhishinu
  51. '' Modified APPSELCB and AppSelComboChanged for language install.
  52. '' 
  53. ''    Rev 1.7   06 Jul 1996 17:44:38   mhishinu
  54. '' No billboards for Node install.
  55. '' 
  56. ''    Rev 1.6   29 Jun 1996 20:04:12   mhishinu
  57. '' Changed "Sepecify 1-2-3 Folder" dialog so that not only 1-2-3 path
  58. '' but Approach path can be specified.
  59. '' Modified APPSELCB sub and DlgAppSelSetProdInfo function.
  60. '' Added AppSelComboChanged sub.
  61. '' Deleted DlgAppSelDispOneLCB function and DlgAppSelMakeProdLineString
  62. '' function because they are not called at all.
  63. '' 
  64. ''    Rev 1.5   31 May 1996 19:55:58   jlu
  65. '' Modified PostCopyConfig to remove enable AddReg... 
  66. '' 
  67. ''    Rev 1.4   23 May 1996 13:58:00   jlu
  68. '' Back off commented Reg_SetShareFlags    
  69. '' 
  70. ''    Rev 1.3   22 May 1996 18:27:20   jlu
  71. '' Disabled suite icons and registries.
  72. '' 
  73. ''    Rev 1.2   21 May 1996 15:20:46   jlu
  74. '' Changed default program group.
  75. '' 
  76. ''    Rev 1.1   17 May 1996 19:47:44   jlu
  77. '' Removed Combobox for customize
  78. '' 
  79. ''    Rev 1.0   08 May 1996 22:31:28   amello
  80. '' Initial Revision
  81. '' 
  82. ''    Rev 1.8   24 Apr 1996 20:26:40   mnatsis
  83. '' removed logic that determined DOC was a 16 bit app and restricted pathing
  84. '' 
  85. ''    Rev 1.7   18 Apr 1996 17:55:38   dburner
  86. '' Fixed two end-of-line errors
  87. '' 
  88. ''    Rev 1.6   18 Apr 1996 16:44:38   dburner
  89. '' Changed MLC handling in APPSELCB to reflect MLC-ity of individual
  90. '' products, rather than the suite.
  91. '' 
  92. '' Removed surfacing of dialog for UNC warning dialog.
  93. '' 
  94. ''    Rev 1.5   18 Mar 1996 14:53:50   vshing
  95. '' Update22 for Bld13; 3-18-96, late, should have been 3-15-96
  96. '' 
  97. ''    Rev 1.4   29 Feb 1996 15:55:02   glutz
  98. '' Callbacks with combo/edit pairs now use ComboSelChanged and
  99. '' GetPathFromComboEdit for path handling.  Also addressed SPR JHOH32SKMW
  100. '' The callback was catching the invalid path but not exiting the sub.
  101. '' 
  102. ''    Rev 1.3   28 Feb 1996 15:38:32   mnatsis
  103. '' added code to grey out browse button if lcb is deselected
  104. '' 
  105. ''    Rev 1.2   27 Feb 1996 17:07:46   mnatsis
  106. '' changed logic for greying out setdirs button - SPR#:BODN2YWLEK
  107. '' 
  108. ''    Rev 1.1   16 Feb 1996 15:50:44   vtshing
  109. '' Changes/Fix by MikeNatsis
  110. ''
  111. ''   Rev 1.89   14 Feb 1996 16:07:18   mnatsis
  112. ''Added MLC - In InitSUIT under node case and UNINSTALL code in postcopyconfig
  113. ''
  114. ''   Rev 1.88   10 Nov 1995 15:52:32   dburner
  115. ''UNC path for server parent dir is now an error.
  116. ''
  117. ''   Rev 1.87   09 Nov 1995 11:57:52   dburner
  118. ''Fixed problem with Suite Dir browse button SYMTAB error: 
  119. ''Inst% was not being set to 1.
  120. ''
  121. ''   Rev 1.86   06 Nov 1995 14:07:24   dburner
  122. ''Yes, no, yes, no, yes, no.
  123. ''
  124. ''   Rev 1.85   06 Nov 1995 13:22:36   dburner
  125. ''Added UNCLONGPARENT_CB to eliminate symtab error.
  126. ''
  127. ''   Rev 1.84   06 Nov 1995 12:42:24   dburner
  128. ''Removed 16-bit apps from MLC install
  129. ''
  130. ''   Rev 1.83   04 Nov 1995 16:35:24   dburner
  131. ''Added 16-bit products to MLC install UI
  132. ''
  133. ''   Rev 1.82   03 Nov 1995 17:03:12   dburner
  134. ''Fixed problems in Select SSAPPS with exiting the dialog on error,
  135. ''instead of staying until error is resolved
  136. ''
  137. ''   Rev 1.81   03 Nov 1995 16:23:50   bkelly
  138. ''
  139. ''Fixed SPR RMOO2XDPK9; Suite picks up old dir even if deleted
  140. ''
  141. ''   Rev 1.80   03 Nov 1995 15:54:30   dburner
  142. ''Fixed long/UNC warning dialog validation
  143. ''
  144. ''   Rev 1.79   02 Nov 1995 19:12:32   dburner
  145. ''Added server warning dialog.  Changed location of UNCLONGPARENT
  146. ''callback to SUITEDIR.
  147. ''
  148. ''   Rev 1.78   02 Nov 1995 16:10:58   bkelly
  149. ''
  150. ''Fixed SPR MSTT9251EW; picks up suit.ri for wlecome dlg
  151. ''
  152. ''   Rev 1.77   02 Nov 1995 10:19:24   dburner
  153. ''Removed a bazillion extraneous "print" statements
  154. ''
  155. ''   Rev 1.76   01 Nov 1995 17:48:44   dburner
  156. ''MLC greying
  157. ''
  158. ''   Rev 1.75   01 Nov 1995 14:23:14   schen
  159. ''
  160. ''add automation removeobsfiles function
  161. ''
  162. ''   Rev 1.74   01 Nov 1995 10:29:26   bkelly
  163. ''Fixed SPR BJON2XJQLM;  cinstall.ini set to OVERWRITE=NEVER 
  164. ''
  165. ''   Rev 1.73   31 Oct 1995 11:29:24   bkelly
  166. ''Fixed SPR RMOO2XFLLC
  167. ''
  168. ''   Rev 1.72   28 Oct 1995 17:59:12   dburner
  169. ''MLC UI
  170. ''
  171. ''   Rev 1.71   28 Oct 1995 16:28:16   dburner
  172. ''Fixed test for surfacing UNC/long dialog
  173. ''
  174. ''   Rev 1.70   28 Oct 1995 15:04:34   dburner
  175. ''Added code for long/UNC warning dialog
  176. ''
  177. ''   Rev 1.69   27 Oct 1995 17:05:30   vtshing
  178. ''Build 24.5 manually updated
  179. ''
  180. ''   Rev 1.69   27 Oct 1995 16:49:30   vtshing
  181. ''Build 24.5 manually updated
  182. ''
  183. ''   Rev 1.68   27 Oct 1995 13:48:14   dburner
  184. ''UNC fixes for SUITEDIR and APPSEL -- per Greg Lutz
  185. ''
  186. ''   Rev 1.67   27 Oct 1995 11:10:30   bkelly
  187. ''PreCopyConfigSuit: changed Node case for inf files to look for INSTFILES + 
  188. ''
  189. ''   Rev 1.66   26 Oct 1995 14:56:30   bkelly
  190. ''Added code to PreCopyConfigSuit for copying uninstall *.inf files 
  191. ''
  192. ''   Rev 1.65   26 Oct 1995 11:19:42   dburner
  193. ''Fixed problem with Suite dialogs in case that previous installation
  194. ''
  195. ''
  196. ''   Rev 1.64   25 Oct 1995 17:24:26   dburner
  197. ''Fixed DHUN2X8PDQ
  198. ''Unmapped drive when UNC used for default directory
  199. ''
  200. ''   Rev 1.63   24 Oct 1995 14:17:02   schen
  201. ''
  202. ''move addregistrylaugage to postcopyconfigsuit
  203.  ''
  204.  ''   Rev 1.62   23 Oct 1995 17:27:32   schen
  205.  ''change install.rsp to instsuit.rsp
  206.  ''
  207.  ''   Rev 1.61   23 Oct 1995 14:29:42   schen
  208.  ''
  209.  ''add getsuitpathfromregistry functions
  210.  ''
  211.  ''   Rev 1.59   17 Oct 1995 16:38:08   mnatsis
  212.  ''added code to turn off instop section if a lang install of the prod is occuri
  213.  ''
  214.  ''   Rev 1.58   17 Oct 1995 16:27:38   schen
  215.  ''fix for DWORD type
  216.  ''
  217.  ''   Rev 1.57   16 Oct 1995 18:03:34   mnatsis
  218.  ''Added grey out code for SET DIR'S button for SMARTCNTR
  219.  ''
  220.  ''   Rev 1.56   16 Oct 1995 16:24:12   bkelly
  221.  ''
  222.  ''   Rev 1.55   16 Oct 1995 12:23:50   bkelly
  223.  ''
  224.  ''Fixed spr RMOO2UZHBT; distribution dir to lotus\lotsuite, and spr RMOO2WVSF
  225.  ''
  226.  ''   Rev 1.54   13 Oct 1995 16:38:00   schen
  227.  ''
  228.  ''
  229.  ''
  230.  ''  
  231.  ''      Rev 1.53   13 Oct 1995 10:50:54   builder
  232.  ''  Build 22.4
  233.  ''  
  234.  ''     Rev 1.52   13 Oct 1995 10:40:22   vtshing
  235.  ''  Build 22.4
  236.  ''   
  237.  ''      Rev 1.51   11 Oct 1995 13:58:06   mnatsis
  238.  ''   removed alot of old code, debug code and misc uneeded comments
  239.  ''   
  240.  ''      Rev 1.50   11 Oct 1995 12:43:42   mnatsis
  241.  ''   modifed InitLanguage - implemented MLC for SUITE
  242.  ''   
  243.  ''      Rev 1.49   11 Oct 1995 12:08:30   bkelly
  244.  ''   
  245.  ''      Rev 1.48   11 Oct 1995 11:26:48   bkelly
  246.  ''  
  247.  ''     Rev 1.47   11 Oct 1995 09:30:48   bkelly
  248.  ''  Call RemoveFiles only in Standard Install
  249.  ''  
  250.  ''   Rev 1.46   11 Oct 1995 09:07:30   bkelly
  251.  ''  
  252.  ''   Rev 1.45   10 Oct 1995 16:46:28   bkelly
  253.  '' Fix SPR HUT2W8RPJ - Cleans old WINHELP.INI ; Added InitList & CleanWinHelpI
  254.  '' 
  255.  ''    Rev 1.0   08 May 1995 09:59:38   jbrodeur
  256.  '' Initial Revision
  257.  '' 
  258.  ''    Rev 1.0   29 Mar 1995 14:50:58   jshaw
  259.  '' Initial Revision
  260.  '' 
  261.  ''    Rev 1.4   02 Feb 1995 11:59:32   jshaw
  262.  '' 
  263.  '' pulled out pipeline changes
  264.  '' 
  265.  ''    Rev 1.3   01 Feb 1995 14:57:20   jshaw
  266.  '' removed set_normal_font on registration billboard for idc_text4
  267.  '' 
  268.  ''    Rev 1.2   25 Jan 1995 17:12:12   bkelly
  269.  '' Commented out Licenser work-around in PreCopyConfig per CIT bugfix
  270.  '' 
  271.  ''    Rev 1.1   08 Nov 1994 10:21:46   jshaw
  272.  '' No change.
  273.  '' 
  274.  ''    Rev 1.0   24 Oct 1994 17:42:54   jshaw
  275.  '' Initial Revision
  276.  '' 
  277.  ''    Rev 1.0   16 Aug 1994 11:18:20   jshaw
  278.  '' Initial Revision
  279.  ''
  280.  ''    BMK: July 20, 1994
  281.  ''    Added EXISTINGPRODCB. Enabled Node in PostCopyConfig
  282.  ''
  283.  ''    bmk: July 13 1994
  284.  ''    INITCOPYLIST; enabled SUIT section in inf files
  285.  ''    
  286.  ''    BMK: July 12 1994
  287.  ''    added IDC_TEXT1 to APPSELCB to unbold icon text
  288.  ''    changed APPSELCB to refresh disabled text for deselected apps
  289.  ''
  290.  ''    BMK/TV: JUNE 1994   Added NODE case to APPSELCB 
  291.  ''
  292.  ''    BMK:           01 June 1994
  293.  '' add lotus.ini entry and PrevVersionSUIT()
  294.  ''    BMK:           19 May 1994
  295.  '' add Billboards 
  296.  '' 
  297.  ''    BMK: Rev 1.5   02 May 1994 19:18:16   mzgripce
  298.  '' 
  299.  '' add AddIconsXXX
  300.  ''
  301.  ''    Rev 1.34   31 May 1994 13:41:32   mmeth
  302.  '' added PrevVersionSUIT function
  303.  '' 
  304.  ''    Rev 1.33   18 May 1994 14:54:44   tingmann
  305.  '' add SetYieldActive calls during lcb handling
  306.  '' 
  307.  ''    Rev 1.32   17 May 1994 14:27:04   cmoy
  308.  '' 
  309.  '' removed updates of idc_text2 and 3 controls in DlgAppSelSetProdInfo
  310.  '' 
  311.  ''    Rev 1.31   12 May 1994 14:35:22   ddupre
  312.  '' Added setting focus on the Customize button.  JGreene
  313.  '' 
  314.  ''    Rev 1.30   11 May 1994 17:14:38   ddupre
  315.  '' 
  316.  '' Updated the SETTABS to be 30, 51, 80, 130 for text alignment.  JGreene.
  317.  '' 
  318.  ''    Rev 1.29   06 May 1994 15:05:46   mzgripce
  319.  '' 
  320.  '' added addicons() function
  321.  '' 
  322.  ''    Rev 1.28   03 May 1994 10:49:08   thangv
  323.  '' Fixed 1. Invalid dir entry 2. REg_SetUIInorOut correctly.
  324.  '' Modifications in APPSELCB.
  325.  '' 
  326.  ''    Rev 1.27   02 May 1994 13:59:02   mmeth
  327.  '' changedir foucs problem fixed.
  328.  '' 
  329.  ''    Rev 1.25   21 Apr 1994 17:58:04   thangv
  330.  '' Fixed the Smartsuite bug: In a server install, you don not get
  331.  '' to choose a minimum install of a product.Only full and custom
  332.  '' installs.
  333.  '' 
  334.  ''    Rev 1.24   13 Apr 1994 14:20:14   cmoy
  335.  '' 
  336.  '' Made text bold in callbacks appselcb and customizeappscb
  337.  '' 
  338.  ''    Rev 1.23   17 Mar 1994 16:56:58   mmeth
  339.  '' Added a new CUSTOMIZESUITE dialog
  340.  '' 
  341.  ''    Rev 1.22   07 Mar 1994 23:42:08   mmeth
  342.  '' 
  343.  '' Removed an extrenuous print.
  344.  '' 
  345.  ''    Rev 1.21   07 Mar 1994 23:32:36   mmeth
  346.  '' Set The Currebt Product in the DLGINIT for CUSTOMIZEPROD
  347.  '' 
  348.  ''    Rev 1.20   07 Mar 1994 19:51:20   mmeth
  349.  '' Fixed the Lotusapp dir dlg. fixed resetwinwinsyssymbols.
  350.  '' 
  351.  ''    Rev 1.19   07 Mar 1994 18:02:34   mmeth
  352.  '' (TV) Added ResetWinWinsyssymbols to SuitedirCb
  353.  '' (TV) Made Chnages to srvlotusappdircb(fixed it)
  354.  '' 
  355.  ''    Rev 1.18   07 Mar 1994 16:08:42   mzgripce
  356.  '' added call to refresh destination in appselcb subroutine
  357.  '' 
  358.  ''    Rev 1.17   04 Mar 1994 19:15:52   mzgripce
  359.  '' check for empty path and refresh destination (appselcb)
  360.  '' 
  361.  ''    Rev 1.16   04 Mar 1994 14:01:18   mmeth
  362.  '' added Full, Custom, Laptop Key Words
  363.  '' 
  364.  ''    Rev 1.15   02 Mar 1994 17:38:42   thangv
  365.  '' 
  366.  '' Turned the share flag on in ProductReg fn.
  367.  '' 
  368.  ''    Rev 1.14   02 Mar 1994 17:24:34   thangv
  369.  '' 
  370.  '' Added SmartSuite Lotusappdir dlg for server
  371.  '' installation.
  372.  '' 
  373.  ''    Rev 1.13   02 Mar 1994 14:25:18   tingmann
  374.  '' work on the app selected dialog callback
  375.  '' 
  376.  ''    Rev 1.12   02 Mar 1994 11:54:20   mmeth
  377.  '' 
  378.  '' Worked on Customize Aplications
  379.  '' 
  380.  ''    Rev 1.11   01 Mar 1994 16:24:48   thangv
  381.  '' Fixed the Suitedir Callback so that the selected driveis
  382.  '' in focus when you go forward and then come back to the
  383.  '' dlg.
  384.  '' 
  385.  ''    Rev 1.10   01 Mar 1994 16:14:02   mmeth
  386.  '' SUITDIR noew the same as BASEDIR
  387.  '' 
  388.  ''    Rev 1.9   28 Feb 1994 18:31:44   thangv
  389.  '' Added SUITEDIR Callback which deals with basedir for SmartSuite
  390.  '' 
  391.  ''    Rev 1.8   24 Feb 1994 16:53:24   tingmann
  392.  '' use some resources, and fix some ss app sel callback problems
  393.  '' 
  394.  ''    Rev 1.7   24 Feb 1994 13:37:12   tingmann
  395.  '' fix a couple of suit app select dialog problems
  396.  '' 
  397.  ''    Rev 1.6   17 Feb 1994 17:28:34   mmeth
  398.  '' 
  399.  '' Continuing work on Custom Apps Dialog.
  400.  '' 
  401.  ''    Rev 1.5   17 Feb 1994 16:31:38   tingmann
  402.  '' use reg_getallowuser...
  403.  '' 
  404.  ''    Rev 1.4   17 Feb 1994 10:36:00   mmeth
  405.  '' Added CUSTOMIZEAPPSCB for smart suite custom dialog.
  406.  '' plenty of work still to do
  407.  '' 
  408.  ''    Rev 1.3   16 Feb 1994 16:26:22   tingmann
  409.  '' don't actually pop appsel dialog yet
  410.  '' 
  411.  ''    Rev 1.2   16 Feb 1994 16:16:04   tingmann
  412.  '' put in dialog for application sel (called in wrong place right now)
  413.  '' 
  414.  ''    Rev 1.1   15 Feb 1994 14:41:56   mmeth
  415.  '' included org in lyt & scr
  416.  '' 
  417.  ''    Rev 1.0   14 Feb 1994 10:40:10   mmeth
  418.  '' Initial Revision
  419.  ''   $Log$
  420.  '' 
  421.  ''    Rev 1.30   23 Jun 1995 13:55:56   mzgripce
  422.  '' remove autoinst.rsp from the uninstaller registration example
  423.  '' 
  424.  ''    Rev 1.29   23 Jun 1995 13:24:56   mzgripce
  425.  '' added an example for the Program_group class registration
  426.  '' 
  427.  ''    Rev 1.28   22 Jun 1995 18:38:14   mzgripce
  428.  '' register the components that are going with the suit product:aswan and its 
  429.  '' dependency: LotusScript,Bento and Shared help
  430.  '' 
  431.  ''    Rev 1.27   21 Jun 1995 18:01:26   mzgripce
  432.  '' add examples for the other object clases registration for uninstall
  433.  '' 
  434.  ''    Rev 1.26   21 Jun 1995 12:48:08   jdonohue
  435.  '' SYM_INSTALLKIND global symbol, not product specific
  436.  '' 
  437.  ''    Rev 1.25   21 Jun 1995 09:09:42   jdonohue
  438.  '' Moved AddRegistryLanguage to AddRegistryKeysSUIT
  439.  '' 
  440.  ''    Rev 1.24   19 Jun 1995 17:41:56   mzgripce
  441.  '' change the suit version to 2.1 and enable the uninstaller registration 
  442.  '' 
  443.  ''    Rev 1.23   19 Jun 1995 16:53:24   mzgripce
  444.  '' add examples calls to Lot_RegisterObject()
  445.  '' 
  446.  ''    Rev 1.22   16 Jun 1995 17:08:02   pdonahue
  447.  '' added registry entries for suit.
  448.  '' 
  449.  ''    Rev 1.21   09 Jun 1995 17:00:58   mzgripce
  450.  '' added call example in PostCopyConfig to register the uninstaller
  451.  '' 
  452.  ''    Rev 1.20   07 Jun 1995 16:32:08   amontalv
  453.  '' Changed the Win95 start folder so that it initializes
  454.  '' earlier in the program.  This should make automation
  455.  '' easier to implement for it.  There are still a couple of
  456.  '' bugs that I need to work out, but I feel that I should
  457.  '' check what I have now.  I also changed the name of some
  458.  '' of the functions to conform more to current names.
  459.  '' 
  460.  ''    Rev 1.19   01 Jun 1995 14:54:10   amontalv
  461.  '' Had the check incorrect for creating links.  It tried to create links
  462.  '' when not in Win95 instead of when in Win95.
  463.  '' 
  464.  ''    Rev 1.18   01 Jun 1995 11:11:52   amontalv
  465.  '' Added API function CreateLink to create shortcuts.  Also added functions
  466.  '' to save and get the link path to support the CreateLink.  I also changed
  467.  '' the startup program folder code to use the default dialog proc and changed
  468.  '' the default dialog proc to process directory trees.
  469.  '' 
  470.  ''    Rev 1.17   30 May 1995 16:01:00   jdonohue
  471.  '' Set symbols for product and version for language install
  472.  '' 
  473.  ''    Rev 1.16   21 May 1995 17:30:24   mzgripce
  474.  '' add an example for share32 support 
  475.  '' 
  476.  ''    Rev 1.15   19 May 1995 15:31:28   mzgripce
  477.  '' use the parent dir in the product default destination
  478.  '' 
  479.  ''    Rev 1.14   19 May 1995 14:42:44   jdonohue
  480.  '' Remove redundant symbol for language subdirectory
  481.  '' 
  482.  ''    Rev 1.13   19 May 1995 13:23:46   jdonohue
  483.  '' Added call to Lot_SetLanguageSectionsOn
  484.  '' 
  485.  ''    Rev 1.12   18 May 1995 15:36:52   jdonohue
  486.  '' Added language install code
  487.  '' 
  488.  ''    Rev 1.11   18 May 1995 10:18:52   jdonohue
  489.  '' Added language install function InitLanguage
  490.  '' 
  491.  ''    Rev 1.9   02 May 1995 12:54:06   cmoy
  492.  '' Merged c2 into cf build
  493.  '' 
  494.  ''    Rev 1.9   10 Apr 1995 18:11:28   amontalv
  495.  '' Changed comments to reflect change of function reference.
  496.  '' 
  497.  ''    Rev 1.8   31 May 1994 13:54:42   mmeth
  498.  '' 
  499.  '' Added PrevVersionSUIT
  500.  '' 
  501.  ''    Rev 1.7   13 May 1994 14:09:20   thangv
  502.  '' 
  503.  '' Added the else part to the default code in InitSUIT case node.
  504.  '' 
  505.  ''    Rev 1.6   06 May 1994 09:24:52   mmeth
  506.  '' wrong return for function
  507.  '' 
  508.  ''    Rev 1.5   02 May 1994 19:18:16   mzgripce
  509.  '' 
  510.  '' add AddIconsSUIT
  511.  '' 
  512.  ''    Rev 1.4   28 Mar 1994 17:25:50   thangv
  513.  '' 
  514.  '' Resourced strings that were not. SID_SUIT_SERVER_DIRNAME, SID_SUIT_DIST_DIRNA
  515.  '' 
  516.  ''    Rev 1.3   22 Mar 1994 09:24:46   mmeth
  517.  '' Modified AddTo Billboard List to use IDD_SUITBILLBD1,...
  518.  '' 
  519.  ''    Rev 1.2   17 Feb 1994 17:44:44   thangv
  520.  '' Fixed the trailing \ and SUIT_DIR
  521.  '' 
  522.  ''    Rev 1.1   15 Feb 1994 14:36:20   mmeth
  523.  '' moved the EXIT FUNCTION CALL in
  524.  '' 
  525.  ''    Rev 1.0   11 Feb 1994 10:53:40   jbrodeur
  526.  '' Initial Revision
  527.  ''----------------------------------------------------------------------
  528.  ''   Date     Vers. Pgmr  SPR#  Change
  529.  ''----------------------------------------------------------------------
  530.  '' !
  531.  ''  02-07-94   0000             Initial Product Shipment
  532.  ''
  533.  ''----------------------------------------------------------------------
  534.  ''
  535.  ''*********************************************************************/
  536.  '**   This file contains detailed comments. PLEASE READ THEM! They provide
  537.  '**   information that will make writing Install much easier. In some
  538.  '**   cases, you will not find this information in any other sources.
  539.  ''*********************************************************************/
  540.  '**
  541.  
  542.  USE "CALLBACK"
  543.  USE "TOOLKIT"
  544.  USE "LANGUAGE"
  545.  OPTION DECLARE
  546.  
  547.  '** These Are the Required Functions that Products must provide
  548.  '***************************************************************
  549.  DECLARE PUBLIC FUNCTION ProductRegSUIT (prodno%, network$, direction$) AS STRING
  550.  DECLARE PUBLIC FUNCTION DefaultUserRegSUIT (prodno%, network$, direction$) AS STRING
  551.  DECLARE PUBLIC FUNCTION InitSUIT (prodno%, network$, direction$, basedir$) AS STRING
  552.  DECLARE PUBLIC FUNCTION PrevVersionsSUIT (prodno%, network$, direction$) AS STRING
  553.  DECLARE PUBLIC FUNCTION PathChangeSUIT (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  554.  DECLARE PUBLIC FUNCTION InitCopyListSUIT (prodno%, network$, direction$) AS STRING
  555.  DECLARE PUBLIC FUNCTION PreCopyConfigSUIT (prodno%, network$, direction$, lic%) AS STRING
  556.  DECLARE PUBLIC FUNCTION AddTheBillBoardsSUIT (prodno%, network$, direction$, nbytes&) AS STRING
  557.  DECLARE PUBLIC FUNCTION PostCopyConfigSUIT (prodno%, network$, direction$, programgroup$) AS STRING
  558.  DECLARE PUBLIC FUNCTION AddIconsSUIT (prodno%, network$, direction$, programgroup$) AS STRING
  559.  DECLARE PUBLIC FUNCTION UISUIT (prodno%, network$, direction$) AS STRING
  560.  DECLARE PUBLIC FUNCTION PostSuccessRegSUIT (prodno%, network$, direction$) AS STRING
  561.  DECLARE PUBLIC SUB AddRegistryKeysSUIT (prodno%, network$) 
  562.  DECLARE PUBLIC FUNCTION InitLanguageSUIT (prodno%, network$, direction$) AS STRING
  563.  
  564.  
  565.  '** Product specific functions
  566.  '*****************************
  567.  DECLARE FUNCTION GetSUITPathfromLotusIni() AS STRING
  568.  DECLARE FUNCTION GetSUITPathfromRegistry () AS STRING
  569.  DECLARE FUNCTION CreateListString( BYVAL prodIndex%, BYVAL sizetype$) AS STRING
  570.  DECLARE SUB SetCombo(hDlg&, BYVAL prodIndex%, BYVAL sizetype$)  
  571.  DECLARE FUNCTION DlgAppSelSetProdInfo (hDlg&, prodNum%, editNum%) AS INTEGER
  572.  DECLARE SUB      WriteSUITInLotusIni(prodno%)
  573.  DECLARE SUB DlgRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, Inst&)
  574.  DECLARE Public Sub CleanWinHelpIni
  575.  DECLARE Sub InitList
  576.  DECLARE Public Function WritePrivateProfileString Lib "kernel32"  _
  577.     Alias "WritePrivateProfileStringA" _
  578.     ( ByVal lpSectionName As String, _
  579.     ByVal lpKeyName As String, _
  580.     ByVal lpStringToAdd As Any, _
  581.     ByVal lpINIFileName As String ) _
  582.     As Integer
  583.  DECLARE FUNCTION CopyFileA LIB "kernel32" ALIAS "CopyFileA" (Byval szSrc$, Byval szDest$, Byval cmo&) AS LONG
  584.  DECLARE FUNCTION SetFileAttributesA LIB "kernel32" ALIAS "SetFileAttributesA" (Byval szFile$, Byval dwFileAttributes&) AS LONG
  585.  DECLARE SUB AppSelComboChanged(hDlg&, inst%)
  586.  'DECLARE PUBLIC FUNCTION PrevVersionsSUIT(prodno%, network$, direction$) AS STRING
  587.  'DECLARE SUB     ProdSizeSUIT(prodno%) 
  588.  'DECLARE SUB     EXISTINGPRODCB(hDlg&, CtrlId%, Classes$, Inst&)
  589.  
  590.  '** RunFromRom
  591.  DECLARE FUNCTION ChangeLSTStr LIB "ssuite.dll" ALIAS "_ChangeLSTStr@16" (ByVal FilePath$, ByVal szSect$, ByVal oldStr$, ByVal newStr$) AS INTEGER
  592.  
  593. '** ----------------------------- Constants --------------------------------
  594.  
  595.  CONST MAX_NO_DRIVECOMBOS = 4
  596.  CONST NUM_FILES    = 40    'Number of filenames
  597.  CONST LCBITEM_PRODUCT =  LCBITEM_CHAPTER  
  598.  CONST MAX_CHPTS =  6
  599.  CONST CB_GETCURSEL = &H0147
  600.  CONST FILE_ATTRIBUTE_NORMAL& = &h00000080
  601.  
  602. '*------------------------------------------------------------------------
  603. '*                           Globals
  604. '*------------------------------------------------------------------------
  605. 'list of filenames to remove from winhelp.ini
  606.  DIM filelist (1 TO NUM_FILES) as String    
  607.  DIM gCUSTOMSTR$, gFULLSTR$, gMINIMUMSTR$
  608.  
  609.  '*************************************************************************
  610.  '**************************** Required Functions *************************
  611.  '*************************************************************************
  612.  
  613.  '*************************************************************************
  614.  '** SUB Initialize
  615.  '**
  616.  '** Purpose: The only purpose of this routine is to register your product.
  617.  '**          This routine assigns your acronym to your product.
  618.  '**          Without this function, your product will not install.
  619.  '**          All you need to do in this subroutine is:
  620.  '**                   modify SUIT -> your acronym.
  621.  '**
  622.  '**          ASSUMPTIONS: Many things in the toolkit key off of your
  623.  '**                       acronym. These are the constraints:
  624.  '**                       1. Your top level chapter in the INF must
  625.  '**                          have a KEYWORD of your acronym +"TOP"
  626.  '**                          e.g. acronymTOP
  627.  '** Author:  Marcel Meth  
  628.  '** Arguments: None
  629.  '** Returns:   NONE
  630.  '*************************************************************************
  631.  SUB Initialize
  632.     Reg_RegisterProductNames "SUIT", LdString(SID_SUIT)  
  633.  END SUB
  634.  
  635.  '*************************************************************************
  636.  '** FUNCTION ProductRegSUIT (prodno%, network$, direction$) AS INTEGER
  637.  '**
  638.  '** Purpose: This function allows your product to register itself
  639.  '**          in the Install Product Registry.  The toolkit stores
  640.  '**          the information provided and will provide you with
  641.  '**          various features accordingly.  For example, if you support
  642.  '**          shared files, the toolkit will do most of the work
  643.  '**          for the LOTUSAPP directory.
  644.  '**
  645.  '**          For the most part you should use only Reg_Set... Functions.
  646.  '**          
  647.  '**
  648.  '**          If you turn on ATM, LICENSING, or SHARED tools, then
  649.  '**          you must be sure to add the appropriate lines and files
  650.  '**          in your acronym.SCR and acronym.LYT, respectively. 
  651.  '**          See Cookbook.
  652.  '**
  653.  '**          If you support server install, (because you need the files
  654.  '**          for Licenser), you will have to make sure that you have 
  655.  '**          the correct **entire** contents of install.lyt and install.scr 
  656.  '**          for the install files in your acronym.SCR and acronym.LYT
  657.  '**          
  658.  '**
  659.  '** Arguments:  All paremeters are **read only**. 
  660.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  661.  '**                   toolkit in the order in which you were registered.
  662.  '**                   When your product is part of SmartSuite, SmartSuite
  663.  '**                   will always be product #1. (prodno% >=1)
  664.  '**          network$: UNINITIALIZED
  665.  '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  666.  '**                      then step backwards, i.e start at your last dialog
  667.  '**                      first.
  668.  '**     
  669.  '** Errors:    No return code for errors, you must Raise them
  670.  '** Author:    MMeth
  671.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  672.  '**                             allow the user to step backwards.)
  673.  '*************************************************************************
  674.  
  675.  PUBLIC FUNCTION ProductRegSUIT (prodno%, network$, direction$) AS STRING
  676.     ProductRegSUIT = gNEXT
  677.  
  678.     SetSymbolValue SYM_SINGLESMARTSUITE, gSMARTSUITE$
  679.  
  680.     '** FOR a complete set of things to register
  681.     '** see API doc under Reg_Set...
  682.  
  683.     Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  684.     Reg_SetProdSizes prodno%, 0, 0
  685.  
  686.     '** If you need Lotusapp or datalens support turn this on.
  687.     Reg_SetShareFlags prodno%, 1, 0, 0, 0 
  688.  
  689.  
  690.     Reg_SetAllowUserToPickInSuite prodno%, 0
  691.     '** If you need Components directory turn this on.  NEW CODE USING:MN
  692.     Reg_SetShare32Flag prodno%, 1
  693.  
  694.     '** Coming to an install program near you soon
  695.     'Reg_SetCDOption prodno%,Inst&,CDOptStr$ OLD CODE IF USE CHANGE Inst&:MN
  696.     'Reg_SetCDOption prodno%,Inst%,CDOptStr$ NEW
  697.     'Reg_SetCDOptionSelected ProdNo%,Inst&,Selection% OLD CODE IF USE CHANGE Inst&:MN
  698.     'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% NEW
  699.  
  700.     '** Any options that you want your sys-admin and node user to see
  701.     '** must be entered here.  They must correspond with keywrods in the
  702.     '** inf file. This functionality will be avilable March 4, but you
  703.     '** can set these fields now!
  704.     'Reg_SetNodeOption ProdNo%,Inst&,NodeOptStr$   OLD CODE IF USE CHANGE Inst&:MN
  705.     'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$   NEW
  706.     'Reg_SetNodeOptionSelected ProdNo%,Inst&,Selection%  OLD CODE IF USE CHANGE Inst&:MN
  707.     'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% NEW
  708.  
  709.     '** Toolkit default is for no server supprt, turn on if desired.
  710.     Reg_SetSrvSupport prodno%, 1
  711.  
  712.     '** Toolkit default is for no server supprt, turn on if desired.
  713.     '** license support only available for server install.
  714.     Reg_SetLicenseSupport prodno%, 1
  715.  
  716.  
  717.     '** Toolkit default is no ATM support
  718.     'Reg_SetATMSupport prodno%, 0
  719.  
  720.     '** This is the default value the user will see.
  721.     Reg_SetProgManagerGroup prodno%, LdString(SID_123_GROUPTITLE)
  722.  
  723.       '** The functions below register the information needed to support 
  724.      '** the additional directories functionality 
  725.  
  726.       Reg_GetMoreDirsCBName prodno%   '** Contol Box ID 
  727.       Reg_GetMoreDirsDlgID  prodno%     '** Dialog ID
  728.       Reg_GetMoreDirsHlpID  prodno%     '** Help ID
  729.  
  730.  END FUNCTION
  731.  
  732.  '*************************************************************************
  733.  '** FUNCTION DefaultUserRegSUIT (prodno%, network$, direction$) AS STRING
  734.  '**
  735.  '** Purpose: **Only** the first registered product gets called.
  736.  '**          For SmartSuite, this will be SmartSuite.
  737.  '**          This function allows you to set the default user registration
  738.  '**          information that the user will be shown. The toolkit
  739.  '**          will provide default values from MS-Windows. If you disagree
  740.  '**          with them you should modify them in this function using:
  741.  '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  742.  '**          
  743.  '**          It is up to you how you store registration information.
  744.  '**          It will not be stored until later in PostCopyConfigSUIT.
  745.  '**          The CIT provides functions that allow you to access .ri 
  746.  '**          files: Lot_ReadDefaultsfromRi(ripath$).
  747.  '**
  748.  '**          If you need to write back to the floppy, do it here.
  749.  '**          Most Lotus products will no longer write back to the floppy.
  750.  '**          Remeber, you can't write back to a CD or network!
  751.  '**
  752.  '** In Symbols : SYM_NAME$, SYM_COMPANY$
  753.  '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  754.  '**            
  755.  '** Arguments:  All paremeters are **read only**. 
  756.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  757.  '**                   toolkit in the order in which you were registered.
  758.  '**                   When your product is part of SmartSuite, SmartSuite
  759.  '**                   will always be product #1. (prodno% >=1)
  760.  '**          network$: UNINITIALIZED
  761.  '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  762.  '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  763.  '**                      then step backwards
  764.  '**     
  765.  '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  766.  '**                      then step backwards, i.e start at your last dialog
  767.  '**                      first.
  768.  '**     
  769.  '** Errors:    No return code for errors, you must Raise them
  770.  '** Author:    MMeth
  771.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  772.  '**                             allow the user to step backwards.)
  773.  '*************************************************************************
  774.  
  775.  PUBLIC FUNCTION DefaultUserRegSUIT (prodno%, network$, direction$) AS STRING
  776.     DIM ripath$, defdir$, temp%, rc%
  777.  
  778.     DefaultUserRegSUIT = gNEXT
  779.  
  780.     If network$ = gNODE$ Then
  781.  
  782.        ripath$ = Lot_GetInstallDir() + "suit.ri"
  783.  
  784.     ElseIf network$ = gSTANDARD$ Then
  785.        '** GetSUIT.... is in this file and illustrates how to
  786.        '** retrieve you prod. from lotus.ini
  787.        defdir$ = GetSUITPathfromRegistry() 'does not return path with suit.ri
  788.        IF defdir$ = "" THEN
  789.          goto rinotfound
  790.         ELSE
  791.           defdir$ = defdir$ + LdString(SID_SUIT_SUITRI)
  792.        END IF
  793.  
  794.        temp% = INSTR(1,LCASE$(defdir$),"suit.ri")
  795.        if temp% = 0 goto rinotfound
  796.  
  797.        ripath$ = MID$(defdir$,1,(temp%-1))
  798.        ripath$ = ripath$ + "suit.ri"
  799.  
  800.     End If
  801.  
  802.     '' RETURNS TRUE IF SUCCESSFULLY FOUND RI FILE AND READ INFORMATION
  803.     '' This functions populates: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  804.     rc% = Lot_ReadDefaultsfromRi(ripath$) 
  805.  
  806.  rinotfound:
  807.  
  808.  END FUNCTION
  809.  
  810.  
  811.  '*************************************************************************
  812.  '** FUNCTION InitSUIT (prodno%, network$, direction$, basedir$) AS STRING
  813.  '**
  814.  '** Purpose: This function will be called after the Welcome dialog has been
  815.  '**          filled in by the user. This is the first time you will be 
  816.  '**          called when the server parameter is valid.  
  817.  '**          You need to use this function to intialize certain things. 
  818.  '**          (See the MUST DO below).
  819.  '**          
  820.  '**          This is a good place to put up a LotusScript messagebox warning the user
  821.  '**          of a previous version of your product. If there is a previous
  822.  '**          version you might want to steer them towards overwriting it,
  823.  '**          deleting the old version, or allowing both versions to exist.
  824.  '**          
  825.  '**
  826.  '** Must Do: You **MUST** set inital values for all of the destination
  827.  '** =======  directories that you refer to in your INF file.  If you do not,
  828.  '**          then InitCopylist will fail!  e.g. SetSymbolValue "SUITDIR", basedir$
  829.  '**          Of course you may be more intelligent.  You should preface your
  830.  '**          directory with basedir$.  The toolkit is finding a good drive
  831.  '**          letter and basedirectory.  Also, remeber all paths end in a
  832.  '**          \ and are lower case.
  833.  '**
  834.  '**          You should **NOT** define LOTUSAPPDIR, NETLOTUSAPPDIR, WINDIR, &
  835.  '**          WINSYSDIR. The toolkit does this for you.
  836.  '**
  837.  '**          Once you have defined destdir symbols, you need to register
  838.  '**          them with the toolkit. (See the code below)
  839.  '**
  840.  '** In Symbols : 
  841.  '** Out Symbols: 
  842.  '**            
  843.  '** Arguments:  All paremeters are **read only**. 
  844.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  845.  '**                   toolkit in the order in which you were registered.
  846.  '**                   When your product is part of SmartSuite, SmartSuite
  847.  '**                   will always be product #1. (prodno% >=1)
  848.  '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  849.  '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  850.  '**                      then step backwards
  851.  '**     
  852.  '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  853.  '**                      then step backwards, i.e start at your last dialog
  854.  '**                      first.
  855.  '**
  856.  '**          basedir$:   The toolkit has found a good base. for your directory.
  857.  '**                      This is it.  You should use it.  This will make Smart
  858.  '**                      Suite work, and will pick a good drive letter for you.
  859.  '**
  860.  '**
  861.  '**          parentdir$: The toolkit has found a good base. for your directory.
  862.  '**                      This is it.  You should use it.  This will make Smart
  863.  '**                      Suite work, and will pick a good drive letter for you.
  864.  '**     
  865.  '** Errors:    No return code for errors, you must Raise them
  866.  '** Author:    MMeth
  867.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  868.  '**                             allow the user to step backwards.)
  869.  '**
  870.  '*************************************************************************
  871.  
  872.  PUBLIC FUNCTION InitSUIT (prodno%, network$, direction$, basedir$) AS STRING
  873.  DIM sym$, symname$, defdir$, position%, proddir$, iniPath$, rv%
  874.  DIM initsuitdir$, prodcount%, index%
  875.                  
  876.                  
  877.  DIM initpath$
  878.                       
  879.     InitSUIT = direction$
  880.     '' In the backwards case, keep backing up
  881.     If direction$ = gBACK Then
  882.        EXIT FUNCTION
  883.     End If
  884.  
  885.     gCUSTOMSTR$  = LdString(SID_SUIT_CUSTOM)
  886.     gFULLSTR$    = LdString(SID_SUIT_FULL)
  887.     gMINIMUMSTR$ = LdString(SID_SUIT_MINIMUM)
  888.  
  889.     '' Setup Default directory settings and the associated
  890.     '' text that the user will see
  891.  
  892.     sym$ = Reg_GetDirSymbolList(prodno%)
  893.     symname$ = sym$ + gNAME
  894.  
  895.     ''These two line register it with the toolkit.
  896.     SetListItem sym$, 1, "SUITDIR"
  897.     SetListItem symname$, 1, "SUITDIRNAME"
  898.  
  899.     initpath$ = GetSymbolValue(SYM_BASEDIR)
  900.  
  901.     '** NOTE The path in the string table is lower case and ends with a slash 
  902.       'SetSymbolValue "SUITDIR", basedir$ + LdString(SID_SUIT_DIR)
  903.  
  904.     SetSymbolValue "SUITDIR", basedir$
  905.      
  906.     '** This will be the name of the directory that shows up in captions in 
  907.     '** toolkit dialogs (Static text)
  908.     'SetSymbolValue "SUITDIRNAME", LdString(SID_SUIT_DIRNAME)
  909.  
  910.         
  911.     SELECT CASE network$
  912.  
  913.     CASE gSERVER$
  914.        SetSymbolValue "SUITNAME", LdString(SID_SUIT_SERVER_DIRNAME) 
  915.  
  916.     CASE gDISTRIBUTION$
  917.        'bmk: set explicit value using basedir$ for distribution directory
  918.        'jhs: we need to lok at this
  919.        'bmk 10/16/95: Distribution dir needs to be \lotus + \lotsuite
  920.  
  921.         SetSymbolValue "SUITDIR", basedir$ + LdString(SID_SUIT_DISTDIR)
  922.  
  923.         SetSymbolValue "SUITNAME", LdString(SID_SUIT_DISTDIRNAME)
  924.  
  925.     CASE gSTANDARD$, gNODE$
  926.        
  927.        '' check if there is an existing product
  928.        defdir$ = GetSymbolValue(SYM_BASEDIR$)
  929.        initpath$ = GetSUITPathFromRegistry()       
  930.  
  931.        IF defdir$ <> "" THEN
  932.  
  933.           proddir$ = defdir$
  934.        ELSE 
  935.              proddir$ = basedir$
  936.        END IF
  937.  
  938.        SetSymbolValue "SUITDIR", proddir$
  939.     
  940.        '10/19/95 by shu chen
  941.        'SUIT     CASE gNODE$
  942.        'SUIT        iniPath$ = GetWindowsDir() + "suit.ini"
  943.        'SUIT        IF DoesFileExist(iniPath$, femExists) THEN
  944.        'SUIT          proddir$ = GetIniKeyString(iniPath$,"DIRECTORIES","personal")
  945.        'SUIT           IF proddir$ <> "" THEN   ' SUIT added
  946.        'SUIT              rv% = Lot_CleanPath(proddir$)
  947.        'SUIT           ELSE ' SUIT added
  948.        'SUIT             proddir$ = basedir$
  949.        'SUIT                    
  950.        'SUIT           END IF
  951.        'SUIT        ELSE
  952.        'SUIT           proddir$ = basedir$
  953.        'SUIT        END IF
  954.        'SUIT
  955.        'SUIT        SetSymbolValue "SUITDIR", proddir$
  956.        'SUIT        initsuitdir$ = GetSymbolValue ("SUITDIR")
  957.  
  958.      ''MN - If node and 2ndary lang install then append lang dir.
  959.            MarkFixupSourceDirSymbol("INSTDIR")
  960.         'Give it some sort of default
  961.          SetSymbolValue "INSTDIR", proddir$
  962.  
  963.  
  964.    END SELECT
  965.  
  966.  
  967.   'bmk: Suite does not need a license directory, but licenser doesn't work without this function call
  968.    'Reg_SetCountDirectory prodno%, LEFT(basedir$,3) + LdString(SID_SUIT_LICDIR)
  969.  
  970.    If network$ = gSERVER$ Then
  971.        prodcount% = Reg_GetNumberofProducts()
  972.        FOR index% = 2 TO prodcount%
  973.            Reg_SetLicenseSelected index%, 0
  974.       NEXT
  975.    End If
  976.  
  977.  
  978.     ''       ****** Language Install Code ******
  979.     '' Find out if we're a language install and set symbols
  980.     '' You need to have set string resources for SID_SUIT_PROD_NAME 
  981.     '' and SID_SUIT_PROD_VER, and it will set symbol SYM_INSTALLKIND$
  982.     '' InitLanguageSUIT
  983.   
  984.     '' For each component that will have language subdirectories for the
  985.     '' non-primary language, set the symbols appropriately
  986.     If GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$ Then
  987.        SetLanguageSubdir "SUITLANGDIR", "SUITDIR"
  988.     Else
  989.        SetSymbolValue "SUITLANGDIR", GetSymbolValue("SUITDIR")
  990.     End if
  991.     
  992.  END FUNCTION
  993.  
  994.  '*************************************************************************
  995.  '** FUNCTION PrevVersionsSUIT (prodno%, network$, direction$) AS STRING
  996.  '**
  997.  '** Purpose: This function is called only for SmartSUite.  It is called
  998.  '**          immediately after all the other product functions for
  999.  '**          InitSUIT are called.  It allows SmartSuite to assess whether
  1000.  '**          there are older versions of products around.
  1001.  '**          
  1002.  '** In Symbols : 
  1003.  '** Out Symbols: 
  1004.  '**            
  1005.  '** Arguments:  All paremeters are **read only**. 
  1006.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1007.  '**                   toolkit in the order in which you were registered.
  1008.  '**                   When your product is part of SmartSuite, SmartSuite
  1009.  '**                   will always be product #1. (prodno% >=1)
  1010.  '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1011.  '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1012.  '**                      then step backwards
  1013.  '**     
  1014.  '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1015.  '**                      then step backwards, i.e start at your last dialog
  1016.  '**                      first.
  1017.  '**
  1018.  '** Errors:    No return code for errors, you must Raise them
  1019.  '** Author:    MMeth
  1020.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1021.  '*b*                             allow the user to step backwards.)
  1022.  '**
  1023.  '*************************************************************************
  1024.  
  1025.  'PUBLIC FUNCTION PrevVersionsSUIT (prodno%, network$, direction$) AS STRING
  1026.  'DIM nProducts%, prodIndex%, i%
  1027.  '
  1028.  '      nProducts% = Reg_GetNumberOfProducts()
  1029.  '      FOR prodIndex% = 1 to nProducts%
  1030.  '          If Reg_GetPreviousVersion(prodIndex%) <> "" Then
  1031.  '             i% = DoMsgBox("Older Versions Found","", MB_OK)
  1032.  '             GOTO PREVPRODFOUND
  1033.  '          End If
  1034.  '      NEXT
  1035.  '
  1036.  'PREVPRODFOUND:
  1037.  '
  1038.  'END FUNCTION
  1039.  
  1040.  
  1041.  '*************************************************************************
  1042.  '** FUNCTION PathChangeSUIT (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  1043.  '**
  1044.  '** Purpose: This function is called whenever the user proposes changes
  1045.  '**          to a path for your product.  By the time this function calls
  1046.  '**          you, the paths have already been checked syntactically, and
  1047.  '**          the directory has been checked to see that it is writeable.
  1048.  '**          Your obligation is to verify that the proposed new path is ok
  1049.  '**          with you.  If not, put up a Lotus Script :"MESSAGEBOX" 
  1050.  '**          telling the user and return gBACK.
  1051.  '**          
  1052.  '** In Symbols : 
  1053.  '** Out Symbols: 
  1054.  '**            
  1055.  '** Arguments:  All paremeters are **read only**. 
  1056.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1057.  '**                   toolkit in the order in which you were  registered.
  1058.  '**                   When your product is part of SmartSuite, SmartSuite
  1059.  '**                   will always be product #1. (prodno% >=1)
  1060.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1061.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1062.  '**                      then step backwards
  1063.  '**      destdirsym$: The destdir symbol that has changed. e.g. "SUITDIR"
  1064.  '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  1065.  '**                   your top level product directory should change,
  1066.  '**                   probably "SUITDIR". When it is false, it means that
  1067.  '**                   all related directories should change. It is **YOUR
  1068.  '**                   RESPONSIBILITY**  to implement this functionality.
  1069.  '**     
  1070.  '** Errors:    No return code for errors, you must Raise them
  1071.  '** Author:    MMeth
  1072.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1073.  '**                             allow the user to step backwards.)
  1074.  '**
  1075.  '*************************************************************************
  1076.  
  1077.  PUBLIC FUNCTION PathChangeSUIT (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  1078.  DIM path$
  1079.  
  1080.     PathChangeSUIT = gNEXT
  1081.  
  1082.     path$ = GetSymbolValue (destdirsym$)
  1083.     '' The following is a psudocode example
  1084.     ''''''rc$ = DetectVersionPriorToDarwin(path$)
  1085.     ''''''If rc$ = "BEAGLE" then
  1086.     ''''''   ShowPathError SID_BEAGLE_FOUND, SID_ERR_EXISTBEAGLE, path$
  1087.     ''''''   PathChangeSUIT = gBACK
  1088.     ''''''end if   
  1089.  
  1090.  END FUNCTION
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  '*************************************************************************
  1096.  '** FUNCTION InitCopyListSUIT (prodno%, network$, direction$) AS STRING
  1097.  '**
  1098.  '** Purpose:  Product must Initialize the copylist
  1099.  '**          
  1100.  '** Must Do: You must initialize the copy list.  However,
  1101.  '** =======  if you leave the code as is (don't touch it at all),
  1102.  '**          it will probably work for you. Copy list must be initialized.
  1103.  '**          CAUTION: Make sure that your toplevel section in the
  1104.  '**                   acronym.SCR has a keyword of "acronymTOP"
  1105.  '**
  1106.  '** In Symbols : 
  1107.  '** Out Symbols: 
  1108.  '**            
  1109.  '** Arguments:  All paremeters are **read only**. 
  1110.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1111.  '**                   toolkit in the order in which you were registered.
  1112.  '**                   When your product is part of SmartSuite, SmartSuite
  1113.  '**                   will always be product #1. (prodno% >=1)
  1114.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1115.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1116.  '**                      then step backwards
  1117.  '**     
  1118.  '** Errors:    No return code for errors, you must Raise them
  1119.  '** Author:    MMeth
  1120.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1121.  '**                             allow the user to step backwards.)
  1122.  '**
  1123.  '*************************************************************************
  1124.  
  1125.  PUBLIC FUNCTION InitCopyListSUIT (prodno%, network$, direction$) AS STRING
  1126.  DIM i%, sym$, chpt$, nextprod$, notused%, FeatureToFind$
  1127.  
  1128.  ON Error STFQUIT GOTO COPYLISTERROR
  1129.     
  1130.     InitCopyListSUIT = direction$
  1131.     '' In the backwards case, keep backing up
  1132.     If direction$ = gBACK Then
  1133.        EXIT FUNCTION
  1134.     End If
  1135.  
  1136.     'bmk: 7/07/94 Check each prod for licenser support and if it was selected
  1137.     'in SSAPPS. If True for one, exit loop and licenser dialog is posted. 
  1138.     ' Problem; will licenser still create dirs 
  1139.  
  1140.  
  1141.     'bmk: 7/13 for Node install, we need a SUITTOP section from which to copy
  1142.    ' suit.ri and sn.dat to the node.
  1143.  
  1144.     sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  1145.     chpt$ = Lot_GetChapterFromKeyWord(sym$)
  1146.     If chpt$ = "" Then
  1147.        ERROR STFQUIT
  1148.     End IF
  1149.  
  1150.     ' type of install selected
  1151.     SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  1152.  
  1153.     CASE gCOMPLETE$
  1154.        i% = F_COMPLETE
  1155.     CASE gLAPTOP$
  1156.        i% = F_LAPTOP
  1157.     CASE gCUSTOM$
  1158.        i% = F_CUSTOM
  1159.     END SELECT
  1160.  
  1161.  '' **MMETH rem out until suite has its own files in the INF
  1162.     Lot_InitializeCopyList chpt$, i%
  1163.  
  1164.     '** Make sure to turn off all sections not available on the server.
  1165.     If network$ = gNODE Then
  1166.         nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)  
  1167.        chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)
  1168.        WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  1169.           FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  1170.           If Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE Then
  1171.              notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  1172.           End If
  1173.  
  1174.           chpt$ = Lot_GetNext() 
  1175.        WEND
  1176.     End If
  1177.  
  1178.   ''       ****** Language Install Code ******
  1179.   '' We need to explicitly turn on all language sections for the current
  1180.    '' language, those whose keyword suffix matches language "LANG??" 
  1181.    Lot_SetLanguageSectionsOn(prodno%)
  1182.   
  1183.     EXIT FUNCTION
  1184.  
  1185.  COPYLISTERROR:
  1186.     ErrorMsg 0, "INITCOPYLIST: You need to have suit section with SUITTOP in INF file"
  1187.     ERROR STFQUIT
  1188.  
  1189.  END FUNCTION
  1190.  
  1191.  
  1192.  '*************************************************************************
  1193.  '** FUNCTION UISUIT (prodno%, network$, direction$) AS STRING
  1194.  '**
  1195.  '** Purpose: This is your chance to put up any User Interface
  1196.  '**          that you want.  Remember, try to keep it short.
  1197.  '**          In SmartSuite, if every product puts up two extra
  1198.  '**          dialogs, then the SmartSuite will consist of 16 dialogs!
  1199.  '**          
  1200.  '**          Pay attention to the value of direction, if you are putting
  1201.  '**          up more than one dialog.
  1202.  '**
  1203.  '**          The toolkit will do an accurate space computation later,
  1204.  '**          so you can tamper with the copy list. But you shouldn't
  1205.  '**          write out anything to the disk until PostCopyCofig!
  1206.  '**   
  1207.  '** In Symbols : 
  1208.  '** Out Symbols: 
  1209.  '**            
  1210.  '** Arguments:  All paremeters are **read only**. 
  1211.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1212.  '**                   toolkit in the order in which you were registered.
  1213.  '**                   When your product is oart of SmartSuite, SmartSuite
  1214.  '**                   will always be product #1. (prodno% >=1)
  1215.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1216.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1217.  '**                      then step backwards
  1218.  '**     
  1219.  '** Errors:    No return code for errors, you must Raise them
  1220.  '** Author:    MMeth
  1221.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1222.  '**                             allow the user to step backwards.)
  1223.  '**
  1224.  '*************************************************************************
  1225.   PUBLIC FUNCTION UISUIT (prodno%, network$, direction$) AS STRING
  1226.  dim  nProducts%, prodIndex%, notused% 
  1227.  
  1228.     UISUIT = direction$
  1229.     '' In the backwards case, keep backing up
  1230.     If direction$ = gBACK Then
  1231.        EXIT FUNCTION
  1232.     End If
  1233.  
  1234.    IF network$ = gSTANDARD$ THEN
  1235.    'If any Suite product has set its Obsolete Files flag
  1236.    'surface Remove Files dialog and let callback process user input
  1237.      nProducts% = Reg_GetNumberOfProducts()
  1238.      FOR prodIndex% = 1 to nProducts%
  1239.        IF Reg_GetUIInOrOut (prodindex%) <> FALSE THEN
  1240.        If Reg_GetObsFiles(prodIndex%) = 1 Then
  1241.         notused% = RegisterCallback("SUIT","DlgRemoveProdFilesCB")
  1242.         direction$ = PopupModalDlg (DB_REMOVEPRODFILES, _
  1243.                   DB_REMOVEPRODFILES)
  1244.         IF direction$  = gBACK Then
  1245.           direction$ = gNEXT              'handle NO button on dlg
  1246.          END IF
  1247.          GOTO OBSFILESFOUND
  1248.        End If
  1249.    END If 
  1250.   NEXT
  1251.  END IF
  1252.     
  1253.  OBSFILESFOUND: 
  1254.  
  1255.  UISUIT = direction$
  1256.  
  1257.  END FUNCTION
  1258.  
  1259.  '*************************************************************************
  1260.  '** FUNCTION PreCopyConfigSUIT (prodno%, network$, direction$, lic%) AS STRING
  1261.  '**
  1262.  '** Purpose: This is the very last function called before the space is
  1263.  '**          accurately computed (to the last byte) and files are copied
  1264.  '**          by the toolkit.  If you have any last minute changes to
  1265.  '**          do, this is the time to do them.  example:
  1266.  '**          Test for monitor resolution, and turn on the chapter
  1267.  '**          in the copy list (a memory residident version of the INF file)
  1268.  '**          with the appropriate resolution.
  1269.  '**          
  1270.  '** In Symbols : 
  1271.  '** Out Symbols: 
  1272.  '**            
  1273.  '** Arguments:  All paremeters are **read only**. 
  1274.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1275.  '**                   toolkit in the order in which you were registered.
  1276.  '**                   When your product is part of SmartSuite, SmartSuite
  1277.  '**                   will always be product #1. (prodno% >=1)
  1278.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1279.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1280.  '**                      then step backwards
  1281.  '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  1282.  '**     
  1283.  '** Errors:    No return code for errors, you must Raise them
  1284.  '** Author:    MMeth
  1285.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1286.  '**                             allow the user to step backwards.)
  1287.  '**
  1288.  '*************************************************************************
  1289.  
  1290.  PUBLIC FUNCTION PreCopyConfigSUIT (prodno%, network$, direction$, lic%) AS STRING
  1291.  DIM prodcount%,index%, suitprodno%, notused%, chpt$, licsup%, licsel%, licdir$
  1292.  DIM inout%, tempdir$, nProducts%, sym$, nIndex%
  1293.  DIM prodacro$, nSuiteIndex%, szFeature$ 
  1294.  DIM chptnum%, prodName$, NOREMOVE%, szObs$ 
  1295.  
  1296.  
  1297.  
  1298.     PreCopyConfigSUIT = gNEXT
  1299.  
  1300.     '' In the backwards case, keep backing up
  1301.     If direction$ = gBACK Then
  1302.        EXIT FUNCTION
  1303.     End If
  1304.  
  1305.     ''** Tell the toolkit how many billboards you will have during file copy.
  1306.     ''** This way the toolkit will be able to calculate how long each billboard
  1307.     ''** should stay up
  1308.     If network$ = gDISTRIBUTION$ Then
  1309.        Reg_SetBillboardNumber prodno%, 12
  1310.     ElseIf network$ <> gNODE Then
  1311.        IF Reg_GetProdSelectedInstallType(prodno%) = gLAPTOP$ THEN
  1312.           Reg_SetBillboardNumber prodno%, 5
  1313.        ELSE
  1314.           Reg_SetBillboardNumber prodno%, 12
  1315.        END IF
  1316.     Else
  1317.        Reg_SetBillboardNumber prodno%, 0
  1318.     End If
  1319.  
  1320.     '******************************************************************
  1321.     '*** schen 11/1/95 add for AUTOMATION RemoveObsoleteFiles
  1322.  
  1323.     IF (GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$) THEN
  1324.        IF (Lot_GetKeyValFromResponseFile("SUIT","RemoveObsoleteFiles")="1") THEN
  1325.                 
  1326.           nProducts% = Reg_GetNumberofProducts()
  1327.  
  1328.           FOR index% = 1 TO nProducts%
  1329.              notused% = Reg_GetUIInOrOut (index%)
  1330.              IF Reg_GetUIInOrOut (index%) <> FALSE THEN
  1331.                  IF Reg_GetObsFiles(index%) = 1 THEN
  1332.                    prodName$ = Reg_GetProductAcronym(index%)
  1333.                    sym$ = prodname$ & "OBSFILES"  'build keyword with product acronym
  1334.          
  1335.                     For chptnum% = 1 TO MAX_CHPTS
  1336.                       szObs$ = sym$ + LTRIM$(STR$(chptnum%))
  1337.                       chpt$ = Lot_GetChapterFromKeyWord(szObs$)
  1338.                       IF chpt$ <> "" THEN
  1339.                          notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  1340.                       END IF
  1341.                    NEXT
  1342.                 End If
  1343.              END IF
  1344.           NEXT
  1345.        Else 
  1346.           FOR index% = 1 TO nProducts%
  1347.               prodName$ = Reg_GetProductAcronym(index%)
  1348.             sym$ = prodname$ & "OBSFILES"
  1349.  
  1350.             FOR chptnum% = 1 TO MAX_CHPTS
  1351.                szObs$ = sym$ + LTRIM$(STR$(chptnum%))
  1352.                 chpt$ = Lot_GetChapterFromKeyWord(szObs$)
  1353.                IF chpt$ <> "" THEN
  1354.                  notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  1355.                END IF
  1356.              NEXT
  1357.           NEXT
  1358.        END if 
  1359.     End If  
  1360.  
  1361.      
  1362.  
  1363.  'bmk: 7/26 disable licenser directories for each prod in InitCopyList
  1364.  ' CIT only does this
  1365.  ' for prod 1 (always the Suite in Suite build). Also, force copy of *.0#0
  1366.  ' signature file to product directory when Licenser is turned off. CIT does
  1367.  ' not pass the correct value for Licenser ON/OFF to the product scripts
  1368.  ' even though I set Reg_SetLicenseSelected index%, 0 here
  1369.  
  1370.  '  If network$ = gSERVER$ THEN
  1371.  '    suitprodno% = Reg_GetProductNo ("SUIT")
  1372.  '    IF Reg_IsLicenseSelected (suitprodno%) <> FALSE THEN
  1373.  '      prodcount% = Reg_GetNumberofProducts()
  1374.  '      FOR index% = 1 TO prodcount%
  1375.  '        IF Reg_GetUIInOrOut (index%) = 1 THEN
  1376.  '          Reg_SetLicenseSelected index%, 1
  1377.  '        END IF 
  1378.  '      NEXT
  1379.  '    END IF 
  1380.  '  END IF
  1381.  
  1382.  
  1383.  'MN: Traverse product list and turn off section if a language install for
  1384.  'MN: product is occuring.
  1385.  'BMK:10/23/95 
  1386.  
  1387.  
  1388. IF network$ = gSTANDARD$ THEN
  1389.  
  1390.   nSuiteIndex%  = 1
  1391.  
  1392.   'check if Suite is a language install
  1393.   ' if not a language install, turn on xxx.inf sections
  1394.   IF GetListItem(SYM_INSTALLKINDS$, nSuiteIndex%) <> gLANGUAGEINSTALL$ THEN
  1395.  
  1396.     nProducts% = 0  're-initialize
  1397.  
  1398.     nProducts% = GetListLength(SYM_INSTALLKINDS$)
  1399.  
  1400.  
  1401.     '10/24 bmk: don't include Suit parent section, we want to leave it off
  1402.     FOR nIndex% = 2 to nProducts%
  1403.        
  1404.        'was product selected?
  1405.       IF Reg_GetUIInOrOut (nIndex%) <> FALSE THEN
  1406.  
  1407.         sym$ = Reg_GetProductAcronym(nIndex%)
  1408.          chpt$ = Lot_GetChapterFromKeyword("INSTTOP"+sym$)
  1409.           'found section in inf, turn it on
  1410.         IF chpt$ <> "" THEN
  1411.            notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  1412.         END IF
  1413.  
  1414.        ' Product was not selected is handled by default OFF in suit.inf
  1415.  
  1416.       END IF 'was product selected ?
  1417.  
  1418.     NEXT
  1419.  
  1420.   'ELSE   'product is language install handled by default OFF in suit.inf
  1421.  
  1422.   END IF  ' is this a language install?  
  1423.  
  1424. END IF  ' standard install
  1425.  
  1426.  
  1427.  'NODE Install
  1428.  
  1429.  IF network = gNODE$ THEN
  1430.  
  1431.    nProducts% = 0  're-initialize
  1432.    nSuiteIndex%  = 1
  1433.    nProducts% = GetListLength(SYM_INSTALLKINDS$)
  1434.  
  1435.    '10/24 bmk: don't include Suit parent section, we want to leave it off
  1436.    FOR nIndex% = 2 to nProducts%
  1437.         
  1438.        'product was selected
  1439.      IF Reg_GetUIInOrOut (nIndex%) <> FALSE THEN
  1440.  
  1441.           'check if Suite is a language install
  1442.           ' if not a language install, turn on xxxnode.inf sections
  1443.              IF GetListItem(SYM_INSTALLKINDS$, nSuiteIndex%) <> gLANGUAGEINSTALL$ THEN
  1444.             sym$ = Reg_GetProductAcronym(nIndex%)
  1445.            szFeature$ = sym$ + "TOP"
  1446.         
  1447.            'only prods on server should be available for Reg_getUIInOrOut()
  1448.            'but I'm doublechecking
  1449.            IF Lot_IsTheFeatureInstalled (szFeature$) THEN
  1450.               chpt$ = Lot_GetChapterFromKeyword("INSTFILES"+sym$)
  1451.  
  1452.              IF chpt$ <> "" THEN
  1453.                notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  1454.              END IF
  1455.  
  1456.            END IF
  1457.  
  1458.          'ELSE 
  1459.          
  1460.          'product is language install handled by default OFF in suitnode.inf
  1461.        
  1462.          END IF 'secondary language install
  1463.       
  1464.  
  1465.      ' Product was not selected is handled by default OFF in suitnode.inf
  1466.      END IF    ' was product selected?  
  1467.  
  1468.     
  1469.    NEXT
  1470.  
  1471.  
  1472. END IF
  1473.  
  1474.  
  1475. 'SERVER Install
  1476. IF network = gSERVER$ THEN
  1477.  
  1478.    nSuiteIndex%  = 1
  1479.  
  1480.    'check if Suite is a language install
  1481.    ' if not a language install, turn on xxx.inf sections
  1482.    IF GetListItem(SYM_INSTALLKINDS$, nSuiteIndex%) <> gLANGUAGEINSTALL$ THEN
  1483.  
  1484.      nProducts% = 0  're-initialize
  1485.  
  1486.      nProducts% = GetListLength(SYM_INSTALLKINDS$)
  1487.  
  1488.      '10/24 bmk: don't include Suit parent section, we want to leave it off
  1489.      FOR nIndex% = 2 to nProducts%
  1490.  
  1491.         'was product selected ?
  1492.        IF Reg_GetUIInOrOut (nIndex%) <> FALSE THEN
  1493.      
  1494.          sym$ = Reg_GetProductAcronym(nIndex%)
  1495.           chpt$ = Lot_GetChapterFromKeyword("INSTFILES"+sym$)
  1496.  
  1497.          IF chpt$ <> "" THEN
  1498.            notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  1499.          END IF
  1500.  
  1501.        ' Product was not selected is handled by default OFF in suit.inf
  1502.  
  1503.        END IF 'was product selected ?
  1504.  
  1505.      NEXT
  1506.  
  1507.    'ELSE   'product is language install handled by default OFF in suit.inf
  1508.  
  1509.    END IF    ' is this a language install?  
  1510.  
  1511. END IF 'server install
  1512.  
  1513.         
  1514.      '*************** turn all sections on for server/ default
  1515.  
  1516.      DIM test$,result&,obsstr$,i%,nextprod$
  1517.     IF GetSymbolValue(SYM_SIZEOFINSTALL$) = gCOMPLETE$ AND _
  1518.             network$ = gSERVER$  THEN
  1519.  
  1520.         ''** turn on all sections
  1521.             chpt$ = Lot_GetFirst("", F_NOTHING)
  1522.     WHILE chpt$ <> "" 
  1523.          sym$ = "OBSFILES"
  1524.          obsstr$ = Lot_GetChapterValStr(chpt$, F_KEYWORD) 
  1525.          result& = InStr(1,obsstr$,sym$)        
  1526.  
  1527.          '** If result is 0 then OBSFILE string was not found so it's 
  1528.          '** ok to turn this section on.
  1529.               If  result& = 0 THEN
  1530.          
  1531.             test$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  1532.             'print "test=" test$
  1533.             'print result&
  1534.             notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
  1535.          END If
  1536.             chpt$ = Lot_GetNext()
  1537.                 'print "chapt=" chpt$
  1538.             
  1539.     WEND
  1540.  
  1541.      End If  '********** turn sections on
  1542.  
  1543.  
  1544.  
  1545. DONEHERE:
  1546.  
  1547.  
  1548.  CleanWinHelpIni
  1549.  
  1550.  
  1551.  END FUNCTION
  1552.  
  1553.  
  1554.  '*************************************************************************
  1555.  '** FUNCTION  AddTheBillBoardsSUIT (prodno%, network$, direction$, nbytes&)
  1556.  '**
  1557.  '** Purpose: This is where to add the billboards using the function:
  1558.  '**          AddToBillboardList. Use nbytes& as the last parameter to
  1559.  '**          the MS-SETUP function AddToBillboardList
  1560.  '**
  1561.  '** In Symbols : 
  1562.  '** Out Symbols: 
  1563.  '**            
  1564.  '** Arguments:  All paremeters are **read only**. 
  1565.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1566.  '**                   toolkit in the order in which you were registered.
  1567.  '**                   When your product is part of SmartSuite, SmartSuite
  1568.  '**                   will always be product #1. (prodno% >=1)
  1569.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1570.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1571.  '**                      then step backwards
  1572.  '**           nbytes: Determines the duration of billboard timing.
  1573.  '**             NOTE: Make sure to use billboard Ids that are unique to
  1574.  '**                   your product. e.g. IDD_SUITBILLBD1_BMP & 
  1575.  '**                   DB_SUITBILLBD1_BMP
  1576.  '**     
  1577.  '** Errors:    No return code for errors, you must Raise them
  1578.  '** Author:    MMeth
  1579.  '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1580.  '**                             allow the user to step backwards.)
  1581.  '**
  1582.  '*************************************************************************
  1583.  
  1584.  PUBLIC FUNCTION AddTheBillBoardsSUIT (prodno%, network$, direction$, nbytes&) AS STRING
  1585.     AddTheBillBoardsSUIT = direction$
  1586.     '' In the backwards case, keep backing up
  1587.     If direction$ = gBACK Then
  1588.        EXIT FUNCTION
  1589.     End If
  1590.  
  1591.     'psudo code follows as an example
  1592.     ''''If network$ <> gNODE$ Then
  1593.     ''''   SetListItem "IDC_BMP", 1, STR$(IDD_BILLBD1_BMP) OLD:MN
  1594.     ''''   SetListItem "IDC_BMP", 1, STR$(IDD_SUITBILLBD1_BMP) NEW:MN
  1595.     ''''   AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_BILLBD1, "FNameOrgDlgProc", nbytes& OLD:MN
  1596.     ''''   AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD1, "_FNameOrgDlgProc@16", nbytes& NEW:MN
  1597.     ''''End If
  1598.  
  1599.     DIM nbytes1&, nbytes2&, nbillbd%
  1600.     nbillbd% = Reg_GetBillboardNumber(1)
  1601.  
  1602.    '** For node only display one billboard.
  1603.    If nbillbd% = 12 Then
  1604.       IF network$ = gDISTRIBUTION THEN
  1605.          nbytes1& = INT(nbytes& * 0.95)
  1606.       ELSE
  1607.          nbytes1& = INT(nbytes& * 0.87)
  1608.       END IF
  1609.       nbytes2& = nbytes& * nbillbd% - nbytes1& * (nbillbd% - 1)
  1610.  
  1611.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1612.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1613.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1614.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD1_BMP)
  1615.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD1, "FNameOrgDlgProc", nbytes1&
  1616.  
  1617.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1618.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1619.       SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
  1620.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1621.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD2_BMP)
  1622.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD2, "FNameOrgDlgProc", nbytes1&
  1623.  
  1624.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1625.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1626.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1627.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD7_BMP)
  1628.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD7, "FNameOrgDlgProc", nbytes1&
  1629.  
  1630.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1631.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1632.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD4_BMP)
  1633.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD4, "FNameOrgDlgProc", nbytes1&
  1634.  
  1635.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1636.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1637.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1638.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD6_BMP)
  1639.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD6, "FNameOrgDlgProc", nbytes1&
  1640.  
  1641.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1642.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1643.       SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
  1644.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1645.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD13_BMP)
  1646.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD13, "FNameOrgDlgProc", nbytes1&
  1647.  
  1648.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1649.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1650.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1651.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD8_BMP)
  1652.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD8, "FNameOrgDlgProc", nbytes1&
  1653.  
  1654.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1655.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1656.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD5_BMP)
  1657.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD5, "FNameOrgDlgProc", nbytes1&
  1658.  
  1659.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1660.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1661.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1662.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD9_BMP)
  1663.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD9, "FNameOrgDlgProc", nbytes1&
  1664.  
  1665.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1666.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1667.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1668.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD3_BMP)
  1669.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD3, "FNameOrgDlgProc", nbytes1&
  1670.  
  1671.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1672.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1673.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1674.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD14_BMP)
  1675.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD14, "FNameOrgDlgProc", nbytes1&
  1676.  
  1677.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1678.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1679.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD16_BMP)
  1680.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD16, "FNameOrgDlgProc", nbytes2&
  1681.  
  1682.    elseif nbillbd% = 5 then
  1683.       nbytes1& = INT(nbytes& * 0.93)
  1684.       nbytes2& = nbytes& * nbillbd% - nbytes1& * (nbillbd% - 1)
  1685.  
  1686.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1687.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1688.       SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
  1689.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1690.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD2_BMP)
  1691.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD2, "FNameOrgDlgProc", nbytes1&
  1692.  
  1693.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1694.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1695.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1696.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD7_BMP)
  1697.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD7, "FNameOrgDlgProc", nbytes1&
  1698.  
  1699.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1700.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1701.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD4_BMP)
  1702.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD4, "FNameOrgDlgProc", nbytes1&
  1703.  
  1704.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1705.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1706.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1707.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD6_BMP)
  1708.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD6, "FNameOrgDlgProc", nbytes1&
  1709.  
  1710.       SetListItem "NORMALFONT", 1, STR$(IDC_TEXT1)
  1711.       SetListItem "NORMALFONT", 2, STR$(IDC_TEXT2)
  1712.       SetListItem "NORMALFONT", 3, STR$(IDC_TEXT3)
  1713.       SetListItem "IDC_BMP", 1, STR$(IDD_SUITTITLE_BMP)
  1714.       SetListItem "IDC_BMP", 2, STR$(IDD_SUITBILLBD13_BMP)
  1715.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_SUITBILLBD13, "FNameOrgDlgProc", nbytes2&
  1716.  
  1717.    End If
  1718.  
  1719.  END FUNCTION
  1720.  
  1721.  
  1722.  '*************************************************************************
  1723.  '** FUNCTION PostCopyConfigSUIT (prodno%, network$, direction$, programgroup$) AS STRING
  1724.  '**
  1725.  '** Purpose: This is called just after file copy has completed.
  1726.  '**          This is your opportunity to do all the configuaration
  1727.  '**          you need.  This includes:
  1728.  '**          
  1729.  '**          1. Writing to all your ini files
  1730.  '**             Don't worry about ini files related to shared components
  1731.  '**          2. Writing to OLE registration database
  1732.  '**             Don't worry about OLE registration related to shared 
  1733.  '**             components
  1734.  '**          3. Writing to any other config files you may support
  1735.  '**          4. Writing out user registration information,
  1736.  '**             no matter how your product picks up this info
  1737.  '**          5. Add program manager icons of those features
  1738.  '**             that were installed.
  1739.  '**          6. Create any working directories
  1740.  '**          5. Create any working directories
  1741.  '**             A working directory is one that does not contain any
  1742.  '**             files, thus the toolkit did not create it for you.
  1743.  '**
  1744.  '**          NOTE: THERE are many subtleties in here if you are
  1745.  '**                dealing with node and CD installs.  In particular,
  1746.  '**                you must be ***very*** careful to understand where the
  1747.  '**                things are that you are pointing to.  They could
  1748.  '**                be on the node, server, or CD!  This, in combination
  1749.  '**                with the INF file for Server/Node, is probably the 
  1750.  '**                trickiest part of writing a quality install.  When 
  1751.  '**                configuring, you must be careful to consider what 
  1752.  '**                happens if there is a pre-existing product on the 
  1753.  '**                machine, in the same location or
  1754.  '**                another one!  This is very very tricky.  What happens
  1755.  '**                if you had a full installation previously in location C:\FOO
  1756.  '**                and now the user is installing a minimum installation in loaction
  1757.  '**                D:\FOO. 
  1758.  '**
  1759.  '**                Each and every thing you do for configuartion needs very
  1760.  '**                careful thought.
  1761.  '**
  1762.  '**                WE support a function Lot_WhereIsFeature("FeatureID")
  1763.  '**                This currrently tells you the location of a feature
  1764.  '**                if the feature appears both in the SERVER.INF and the
  1765.  '**                NODE.INF referred to by the same Keyword ID.
  1766.  '**                We do not support CDs with this command yet, but we will 
  1767.  '**                at some time.
  1768.  '**
  1769.  '**                Also look out for writing to a file when the directory
  1770.  '**                doesn't exist.  If the user deselected one of your
  1771.  '**                options, your install may still be running, but since
  1772.  '**                there were no files to copy into the directory
  1773.  '**                it wasn't created by the toolkit!
  1774.  '**
  1775.  '**                Finally, remember that configuration files generally
  1776.  '**                hold the state that the user has customized earlier.
  1777.  '**                Sometimes you don't want to overwrite these!
  1778.  '**                You will primarily use three MS-SETUP functions
  1779.  '**                in here: 
  1780.  '**                1. CreateIniKeyValue  (writing to ini files)
  1781.  '**                2. SetRegKeyValue     (writing to OLE reg DB)
  1782.  '**                3. CreateProgmanItem  (writing to progman) 
  1783.  '**
  1784.  '**                CreateProgmanGroup &  ShowProgmanGroup are
  1785.  '**                done for you by the time you reach this
  1786.  '**                function.
  1787.  '**
  1788.  '**                You will not have to do any configuration of LOTUS SHARED
  1789.  '**                tools.  The toolkit will do this for you.
  1790.  '** In Symbols : 
  1791.  '** Out Symbols: 
  1792.  '**            
  1793.  '** Arguments:  All paremeters are **read only**. 
  1794.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1795.  '**                   toolkit in the order in which you were registered.
  1796.  '**                   When your product is part of SmartSuite, SmartSuite
  1797.  '**                   will always be product #1. (prodno% >=1)
  1798.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1799.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1800.  '**                      then step backwards
  1801.  '**    programgroup$: The name of the program group where the user chose to
  1802.  '**                   install the program manager icons     
  1803.  '**
  1804.  '** Errors:    No return code for errors, you must Raise them
  1805.  '** Author:    MMeth
  1806.  '** Returns:   return: gNEXT 
  1807.  '**
  1808.  '*************************************************************************
  1809.  
  1810.  PUBLIC FUNCTION PostCopyConfigSUIT (prodno%, network$, direction$, programgroup$) AS STRING
  1811.  DIM ripath$, chpt$, Destdir$, ProgDir$, SmartSuiteDir$
  1812.  DIM suitdir$,notused%,distdir$,InfFileName$,symdir$
  1813.  
  1814.   
  1815.     PostCopyConfigSUIT = direction$
  1816.     '' In the backwards case, keep backing up
  1817.     If direction$ = gBACK Then
  1818.        EXIT FUNCTION
  1819.     End If
  1820.  
  1821.     'find SUIT.RI for ini file path
  1822.     IF network$ = gSTANDARD$ THEN
  1823.       DestDir$ = GetWindowsDir() + "lotus.ini"
  1824.       ProgDir$ = Lot_WhereIsFeature(prodno%, "INSTTOP","SUIT.RI")
  1825.       'SmartSuiteDir$ = Progdir$ + "suit.ri"
  1826.     ELSE
  1827.       DestDir$ = GetWindowsDir() + "lotus.ini"
  1828.       ProgDir$ = Lot_WhereIsFeature(prodno%, "SUITTOP","SUIT.RI")
  1829.       'SmartSuiteDir$ = Progdir$ + "suit.ri"
  1830.     END IF
  1831.  
  1832.  
  1833.     If network$ <> gNODE$ Then 
  1834.        SetSymbolValue SYM_CDDRIVE$, GetSymbolValue(SYM_INSTALL_SOURCE)
  1835.     End If
  1836.  
  1837.    'jhs: remove instsuit.rsp and readnet.txt in standard install
  1838.    If network$ = gSTANDARD$ Then 
  1839.  
  1840.       distdir$ = Lot_GetInstallDir()
  1841.       RemoveFile distdir$ + "instsuit.rsp", cmoForce
  1842.       ' changed for IPD - BOD 14/9/95
  1843.       'RemoveFile distdir$ + "readnet.txt", cmoForce
  1844.       RemoveFile distdir$ + LdString(SID_SUIT_NAG), cmoForce
  1845.  
  1846.  
  1847.       'jhs: also remove lotusapp.net from lotusapp, only needed on a server  
  1848. 'SUIT MAN      distdir$ = GetSymbolValue(SYM_LOTUSAPPDIR$)
  1849.       RemoveFile distdir$ + "lotusapp.net", cmoForce
  1850.  
  1851.    END IF
  1852.  
  1853.    If network$ <> gSERVER$ Then 
  1854.  
  1855.     '** Write product specific registry keys
  1856.      AddRegistryKeysSUIT prodno%, network$ 
  1857.  
  1858.    End if 
  1859.  
  1860.  
  1861.  
  1862.     ''** WRITE TO RI FILE
  1863.     ''*******************
  1864.     'bmk:7/19 split case for NODE to find suit.ri in SUITDIR
  1865.     IF network$ = gNODE$ THEN
  1866.       suitdir$ = GetSymbolValue("SUITDIR")
  1867.         ripath$ = GetSymbolValue("SUITDIR") + "suit.ri"
  1868.     ELSE
  1869.       ripath$ = Lot_GetInstallDir() + "suit.ri"
  1870.     END IF
  1871.  
  1872.     IF Lot_WriteToRiFile (ripath$) = FALSE THEN
  1873.       ErrorMsg SID_SUIT,LdString(SID_SUIT_ERR_RI) + ripath$
  1874.     End If
  1875.  
  1876.     '** End PostCopyConfig for Server and Distribution Installs
  1877.     If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
  1878.        GOTO SKIPCONFIG
  1879.     End If 
  1880.  
  1881.  
  1882.     'Stub all of this code. We don't write to Lotus.ini bmk:10/95
  1883.     '** Log the product into \windows\lotus.ini
  1884.     'IF network$ = gSTANDARD$ THEN
  1885.      'chpt$ = Lot_GetChapterFromKeyWord("INSTTOP")
  1886.       'If Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 Then
  1887.       'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE",  SmartSuiteDir$,   cmoOverwrite
  1888.       'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE",  ProgDir$,   cmoOverwrite
  1889.       ' CreateIniKeyValue DestDir$, "SmartSuite Version", "Version",  LdString(SID_SUIT_PROD_VER),   cmoOverwrite
  1890.         
  1891.                 ' WriteSUITInLotusIni prodno%
  1892.       'End If
  1893.     'ELSE      'never gets here if it isn't a node install
  1894.       'chpt$ = Lot_GetChapterFromKeyWord("SUITTOP")
  1895.       'If Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 Then
  1896.         'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE",  SmartSuiteDir$,   cmoOverwrite
  1897.         'CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE",  ProgDir$,   cmoOverwrite
  1898.         'CreateIniKeyValue DestDir$, "SmartSuite Version", "Version",  LdString(SID_SUIT_PROD_VER),   cmoOverwrite
  1899.         
  1900.         ' WriteSUITInLotusIni prodno%
  1901.       'End If
  1902.     'END IF
  1903.  
  1904.     '** Write the OLE registration
  1905.  
  1906.     '** Create work directory for standard and node
  1907.     ''''' workdir$ = GetSymbolValue("123WORKDIR")
  1908.     ''''' CreateDir workdir$, cmoNone
  1909.     ''''' IF DoesDirExist(workdir$)=0 THEN
  1910.     '''''    ShowPathError SID_ERR_CREATEDIR, 0, workdir$
  1911.     ''''' END IF
  1912.  
  1913.    '** Write the uninstaller - but only for the primary language
  1914.    '** This should uninstall the entire suite
  1915.    IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN _
  1916.         GOTO SKIPCONFIG
  1917.         
  1918.     IF network$    = gSTANDARD THEN
  1919.         InfFileName$ = "minisuit.inf"
  1920.         symdir$ = "INSTDIR"
  1921.     ELSEIF network$ = gNODE THEN
  1922.         InfFileName$ = "msuitnod.inf"
  1923.         symdir$ = "SUITDIR"
  1924.     ELSE
  1925.         GOTO SKIPCONFIG
  1926.     END IF
  1927.     Lot_RegisterUninstaller GetSymbolValue(SYM_REG_PRODUCTNAME$),_
  1928.     LdString(SID_SUIT_PROD_VER),_  
  1929.     LdString(SID_SUIT_COMMERCIALNAME), _
  1930.     GetSymbolValue(symdir$) + InfFileName,_
  1931.     TRUE,FALSE,_
  1932.     GetSymbolValue(SYM_INSTALL_LANGUAGE$),"","",""
  1933.  
  1934.  SKIPCONFIG:
  1935.  
  1936.  END FUNCTION
  1937.  
  1938.  '*************************************************************************
  1939.  '** PUBLIC SUB AddRegistryKeysSUIT (prodno%, network$) 
  1940.  '**
  1941.  '** Purpose: This is called just after file copy has completed.
  1942.  '**          1. Add product specific Registry Keys.
  1943.  '**
  1944.  '**           Each and every thing you do for configuartion needs very
  1945.  '**           careful thought.
  1946.  '**
  1947.  '** In Symbols : 
  1948.  '** Out Symbols: 
  1949.  '**            
  1950.  '** Arguments:  All paremeters are **read only**. 
  1951.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  1952.  '**                   toolkit in the order in which you were registered.
  1953.  '**                   When your product is part of SmartSuite, SmartSuite
  1954.  '**                   will always be product #1. (prodno% >=1)
  1955.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1956.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1957.  '**                      then step backwards
  1958.  '**    programgroup$: The name of the program group where the user chose to
  1959.  '**                   install the program manager icons     
  1960.  '**
  1961.  '** Errors:    No return code for errors, you must Raise them
  1962.  '** Author:    PMD
  1963.  '**
  1964.  '*************************************************************************
  1965.  PUBLIC SUB AddRegistryKeysSUIT (prodno%, network$) 
  1966.  DIM LocPath$, Filename$, descript$, gbuf$, instvalue&
  1967.  DIM szkey$, szkey2$, nsize&, nsize1&,nsize2&,Insttype$,nsize3&
  1968.  DIM RegStatus&, keyvalue$, keyvalue1$,keyvalue2$, keyvalue3$, keyvalue4$ 
  1969.  
  1970.  
  1971.  szkey$ = LdString(SID_SUIT_SZKEY)
  1972.  descript$ = LdString(SID_SUIT_DECRIPT)
  1973.  keyvalue$  = LdString(SID_SUIT_KEYVALUE) 
  1974.  keyvalue1$ = LdString(SID_SUIT_KEYVALUE1)
  1975.  keyvalue2$ = LdString(SID_SUIT_KEYVALUE2)
  1976.  Insttype$  = LdString(SID_SUIT_INSTTYPE)
  1977.  Filename = LdString(SID_SUIT_FILENAME)
  1978.  nsize1 = lenBP(Filename)
  1979.  nsize2 = lenBP(descript$)
  1980.  
  1981.      
  1982.       ' *** Add registry Key for SUITE
  1983.      Locpath$ = GetSymbolValue ("SUITDIR")
  1984.      nsize& = lenBP(LocPath$) + 1
  1985.      regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey$)
  1986.      regStatus& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, REG_SZ, LocPath$, nsize&)
  1987.      ' *** Add registry Key for SUITE
  1988.  
  1989.     If network$ = gNODE$ Then
  1990.        instvalue& = 1
  1991.     ElseIf network$ = gSTANDARD$ Then
  1992.        instvalue& = 0
  1993.      End if
  1994.     nsize3 = lenBP(instvalue&)
  1995.  
  1996.     
  1997.     If Lot_IsTheFeatureInstalled("SUITTOP") <> FALSE Then
  1998.         
  1999.        locpath$ = Lot_WhereIsFeature(prodno%, "SUITFILES", "readme.txt")
  2000.        
  2001.     locpath$ = GetSymbolValue(SYM_BASEDIR$)
  2002.  
  2003.         nsize = lenBP(LocPath$)
  2004.  
  2005.          regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey)
  2006.          regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, REG_SZ, LocPath$, nsize)
  2007.      regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue2$, REG_SZ, Filename, nsize1)
  2008.          regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue1$, REG_SZ, descript$, nsize2)
  2009.          regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, Insttype$, REG_DWORD, instvalue&, nsize3)
  2010.     end if
  2011.  
  2012.       
  2013.     ' regStatus = DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$)
  2014.  
  2015.       'if RegStatus = 1 then
  2016.          ' this is used to check the current value of an existing key.
  2017.            ' gbuf$ recieves the key values data. 
  2018.          'regStatus& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, 0, gbuf$, nsize) 
  2019.       'end if
  2020.  
  2021.       '** Write the registry value to add the new language
  2022.     If network$ <> gSERVER$ then
  2023.        AddRegistryLanguage GetSymbolValue(SYM_REG_PRODUCTNAME$), _
  2024.                            GetSymbolValue(SYM_REG_PRODUCTVER$)
  2025.  
  2026.     End if 
  2027.  
  2028.     
  2029.  
  2030.  END SUB
  2031.  
  2032.  
  2033.  
  2034.  '*************************************************************************
  2035.  '** FUNCTION AddIconsSUIT (prodno%, network$, direction$, programgroup$) AS STRING
  2036.  '**
  2037.  '** Purpose: This is called just after file copy has completed.
  2038.  '**          1. Add program manager icons of those features
  2039.  '**             that were installed.
  2040.  '**          NOTE: THERE are many subtleties in here if you are
  2041.  '**                dealing with node and CD installs.  In particular,
  2042.  '**                you must be ***very*** careful to understand where the
  2043.  '**                things are that you are pointing to.  They could
  2044.  '**                be on the node, server, or CD!  This, in combination
  2045.  '**                with the INF file for Server/Node, is probably the 
  2046.  '**                trickiest part of writing a quality install.  When 
  2047.  '**                configuring, you must be careful to consider what 
  2048.  '**                happens if there is a pre-existing product on the 
  2049.  '**                machine, in the same location or
  2050.  '**                another one!  This is very very tricky.  What happens
  2051.  '**                if you had a full installation previously in location C:\FOO
  2052.  '**                and now the user is installing a minimum installation in loaction
  2053.  '**                D:\FOO. 
  2054.  '**
  2055.  '**                Each and every thing you do for configuartion needs very
  2056.  '**                careful thought.
  2057.  '**
  2058.  '**                WE support a function Lot_WhereIsFeature("FeatureID")
  2059.  '**                This currrently tells you the location of a feature
  2060.  '**                if the feature appears both in the SERVER.INF and the
  2061.  '**                NODE.INF referred to by the same Keyword ID.
  2062.  '**                We do not support CDs with this command yet, but we will 
  2063.  '**                at some time.
  2064.  '**
  2065.  '**                Also look out for writing to a file when the directory
  2066.  '**                doesn't exist.  If the user deselected one of your
  2067.  '**                options, your install may still be running, but since
  2068.  '**                there were no files to copy into the directory
  2069.  '**                it wasn't created by the toolkit!
  2070.  '**
  2071.  '**                Finally, remember that configuration files generally
  2072.  '**                hold the state that the user has customized earlier.
  2073.  '**                Sometimes you don't want to overwrite these!
  2074.  '**                You will primarily use three MS-SETUP functions
  2075.  '**                in here: 
  2076.  '**                1. CreateProgmanItem  (writing to progman) 
  2077.  '**
  2078.  '**                CreateProgmanGroup &  ShowProgmanGroup are
  2079.  '**                done for you by the time you reach this
  2080.  '**                function.
  2081.  '**
  2082.  '**                You will not have to do any configuration of LOTUS SHARED
  2083.  '**                tools.  The toolkit will do this for you.
  2084.  '** In Symbols : 
  2085.  '** Out Symbols: 
  2086.  '**            
  2087.  '** Arguments:  All paremeters are **read only**. 
  2088.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  2089.  '**                   toolkit in the order in which you were registered.
  2090.  '**                   When your product is part of SmartSuite, SmartSuite
  2091.  '**                   will always be product #1. (prodno% >=1)
  2092.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2093.  '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2094.  '**                      then step backwards
  2095.  '**    programgroup$: The name of the program group where the user chose to
  2096.  '**                   install the program manager icons     
  2097.  '**
  2098.  '** Errors:    No return code for errors, you must Raise them
  2099.  '** Author:    MZ
  2100.  '** Returns:   return: gNEXT 
  2101.  '**
  2102.  '*************************************************************************
  2103.  
  2104.  PUBLIC FUNCTION AddIconsSUIT (prodno%, network$, direction$, programgroup$) AS STRING
  2105.  DIM chpt$,ripath$, notused%,exepath$
  2106.  DIM ProgDir1$, program$, nagdir$, updates$, KeyString$,KeyValueString$, KeyHive$
  2107.  
  2108.     AddIconsSUIT = direction$
  2109.     '' In the backwards case, keep backing up
  2110.     If direction$ = gBACK Then
  2111.        EXIT FUNCTION
  2112.     End If
  2113.  
  2114.     '** Write entries in  Program Manager; assumes notepad.exe is available
  2115.     'Not using Lot_IsTheFeatureInstalled because SUITE files are always installed.
  2116.  
  2117.     'write readme.txt for all installs
  2118.     '** Write entries in  Program Manager
  2119.     'IF (network$ = gSTANDARD$ OR network$ = gSERVER$)  THEN
  2120.     
  2121. '    If (network$ = gSTANDARD$ OR network$ = gSERVER$) THEN
  2122. '       
  2123. '       chpt$ = Lot_GetChapterFromKeyWord("SUITFILES")
  2124. '       IF IsNewShell() THEN
  2125. '             IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN      
  2126. '        
  2127. '              ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_README))
  2128. '              Updates$  = ProgDir1$ + LdString(SID_SUIT_README)
  2129. '
  2130. '              notused%=Lot_AddLinkToFolder(prodno%, Updates$, LdString(SID_SUIT_FOLDER)+ LdString(SID_SUIT_READMEICON)+".lnk", LdString(SID_SUIT_READMEICON), "",ProgDir1$)
  2131. '          end if
  2132. '        
  2133. '        ELSE
  2134. '          
  2135. '          IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN
  2136. '             ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_README))
  2137. '             Updates$  = "notepad.exe " + ProgDir1$ + LdString(SID_SUIT_README)
  2138. '             CreateProgmanItem  programgroup$, LdString(SID_SUIT_READMEICON), Updates$, "", cmoOverwrite
  2139. '          END IF
  2140. '       END IF
  2141. '    END IF
  2142.  
  2143.  
  2144.     'write NAG for Server install only 
  2145.     IF network$ = gSERVER$ THEN
  2146.        
  2147.        chpt$ = Lot_GetChapterFromKeyWord("SUITFILES")
  2148.        IF IsNewShell() THEN
  2149.         
  2150.              IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN  
  2151.              ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_NAG))
  2152.              Updates$  = ProgDir1$ + LdString(SID_SUIT_NAG)
  2153.              'notused%=Lot_AddLinkToFolder(prodno%, nagdir$, "suit.lnk", LDString(SID_SUIT_NAGSTRING), "",nagdir$)
  2154.              notused%=Lot_AddLinkToFolder(prodno%, Updates$, LdString(SID_SUIT_FOLDER)+ LdString(SID_SUIT_READNETICON)+".lnk", LdString(SID_SUIT_READNETICON), "",ProgDir1$)
  2155.               
  2156.               End if 
  2157.         ELSE
  2158.           IF Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 THEN
  2159.              ProgDir1$ = Lot_WhereIsFeature(prodno%, "SUITFILES", LdString(SID_SUIT_NAG))
  2160.              nagdir$   = "notepad.exe " + ProgDir1$ + LdString(SID_SUIT_NAG)
  2161.              CreateProgmanItem  programgroup$, LdString(SID_SUIT_READNETICON), nagdir$, "", cmoOverwrite
  2162.           END IF
  2163.        END IF
  2164.     END IF
  2165.     
  2166.     '** ALL NEW CODE:MN
  2167.    'AddIconsSUIT = gNEXT
  2168.      'programgroup$, "SUIT Program",_
  2169.           '                     Lot_WhereIsFeature(prodno%, "SUITA", "suit.ri")+"suit.ri",_
  2170.         '                      "", cmoOverwrite
  2171.              'To register a program Group object for uninstall the path is: ProgramGroup$
  2172.          '    notused%=Lot_RegisterObject("SUITA", UNIN_CLASS_PROGRAM_GROUP$,_
  2173.            '                              programgroup$)
  2174.              'To register an icon object for uninstall the path is: ProgramGroup$\+
  2175.              '                                                      IconName
  2176.           '   notused%=Lot_RegisterObject("SUITA", UNIN_CLASS_ICON$,_
  2177.            '                              programgroup$+"\SUIT Program")
  2178.            'END IF
  2179.            'To register a file object for uninstall that is not in the inf but is created at install time to
  2180.            'be used by a feature
  2181.            'notused%=Lot_RegisterObject("SUITFILES", UNIN_CLASS_FILE$, FilePath$)
  2182.  
  2183.            'To register a file_group object for uninstall that is not in the inf but is created at install time to
  2184.            'be used by a feature of a product (that needs to be cleanup by uninstall).  
  2185.            'The FilePath$ is the full path to a directory including a wildcard (*) as a file name
  2186.            'notused%=Lot_RegisterObject("SUITFILES", UNIN_CLASS_FILE_GROUP$, FilePath$)
  2187.  
  2188.            'To register a directory object for uninstall that is not in the inf (as a destination directory) but is created 
  2189.            'at install time to be used by a feature of a product (that needs to be cleanup by uninstall).  
  2190.            'The DirectoryPath$ is the full path to the directory
  2191.            'notused%=Lot_RegisterObject("SUITFILES", UNIN_CLASS_DIRECTORY$, DirectoryPath$)
  2192.         
  2193.     'End If
  2194.  
  2195.     If Lot_IsTheFeatureInstalled("SUITTOP") <> FALSE Then
  2196.            'To register a registry key for uninstall to cleanup when a feature is uninstalled.  
  2197.            'The KeyString$ is the full Key specification:
  2198.            'KeyString$ = "HKEY_LOCAL_MACHINE\SOFTWARE\lOTUS\SmartSuite\96.0"
  2199.            ' notused%=Lot_RegisterObject("SUITTOP", UNIN_CLASS_REGISTRY_KEY$, KeyString$)
  2200.  
  2201.            'To register a registry key Value for uninstall to cleanup when a feature is uninstalled.  
  2202.            'The KeyValueString$ is the full Key+SubKey+ValueName specification:
  2203.            'KeyValueString$ = "HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\SmartSuite\96.0\Description"
  2204.            'notused%=Lot_RegisterObject("SUITTOP", UNIN_CLASS_REGISTRY_VALUE$, KeyValueString$)
  2205.  
  2206.            'To register a registry key hive for uninstall to cleanup when a feature is uninstalled (the complet
  2207.            ' hive will be deleted).  
  2208.            'The KeyHive$ is the full Key Hive specification:
  2209.            'KeyHive$ = "HKEY_LOCAL_MACHINE\SOFTWARE\LOTUS\SmartSuite"
  2210.            'notused%=Lot_RegisterObject("SUITTOP", UNIN_CLASS_REGISTRY_HIVE$, KeyHive$)
  2211.  
  2212.     End If
  2213.  
  2214.   
  2215.  SKIPCONFIG:
  2216.  
  2217.  END FUNCTION
  2218.  
  2219.  
  2220.  
  2221.  '*************************************************************************
  2222.  '** FUNCTION PostSuccessRegSUIT (prodno%, network$, direction$) AS STRING
  2223.  '**
  2224.  '** Purpose: If you need to launch something after install runs
  2225.  '** In Symbols : 
  2226.  '** Out Symbols: 
  2227.  '**            
  2228.  '** Arguments:  All paremeters are **read only**. 
  2229.  '**          prodno%: This is your prodno%.  It is assigned to you by the
  2230.  '**                   toolkit in the order in which you were registered.
  2231.  '**                   When your product is part of SmartSuite, SmartSuite
  2232.  '**                   will always be product #1. (prodno% >=1)
  2233.  '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2234.  '**       direction$: gNEXT 
  2235.  '**
  2236.  '** Errors:    No return code for errors, you must Raise them
  2237.  '** Author:    MMeth
  2238.  '** Returns:   return: gNEXT 
  2239.  '**
  2240.  '*************************************************************************
  2241.  
  2242.  PUBLIC FUNCTION PostSuccessRegSUIT (prodno%, network$, direction$) AS STRING
  2243.  DIM LstPath$, szKey$, szNewKey$, szSect$, noused%
  2244.  
  2245.     PostSuccessRegSUIT = direction$
  2246.     '' In the backwards case, keep backing up
  2247.     If direction$ = gBACK Then
  2248.        EXIT FUNCTION
  2249.     End If
  2250.  
  2251.     '** RunFromRom
  2252.     LstPath$ = GetSymbolValue("INSTDIR")+"install.lst"
  2253.     szKey$ = "cinstand.ini"
  2254.     szNewKey$ = "cinstall.ini"
  2255.     szSect$ = "Files"
  2256.  
  2257.     If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
  2258.         noused% = ChangeLSTStr(LstPath$, szSect$, szKey$, szNewKey$)
  2259.     End if
  2260.  
  2261.  END FUNCTION
  2262.  
  2263.  
  2264.  '********************************
  2265.  '********************************
  2266.  '** Product Specific Functions **
  2267.  '********************************
  2268.  '********************************
  2269.  
  2270.  '*************************************************************************
  2271.  '** FUNCTION GetSUITPathfromLotusIni() AS STRING
  2272.  '**
  2273.  '** Purpose: Gets the product dir path from Lotus.ini file, and searches for
  2274.  '**          acronym.exe in the product dir path. 
  2275.  '**            
  2276.  '** Author:    JYOTI KEDIA
  2277.  '** Arguments: None
  2278.  '** Returns:   if acronym.exe does not exist in dir specified in lotus.ini, it
  2279.  '**            returns "", otherwise returns the full path to the product.
  2280.  '*************************************************************************
  2281.  
  2282.  
  2283.  FUNCTION GetSUITPathfromLotusIni() AS STRING
  2284.  DIM DestDir$, lotusinipath$, defdir$, temp%, ProdDir$, fullpath$, rv%
  2285.  
  2286.     DestDir$ = GetWindowsDir()
  2287.     lotusinipath$ = DestDir$ +"lotus.ini"
  2288.  
  2289.     If DoesFileExist(lotusinipath$,femExists) Then
  2290.        defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "SUITE")
  2291.       If defdir$ <> "" Then
  2292.           'bmk: 6/01/94 changed suit.exe to suit.ri, no .exe to ever find
  2293.           'bmk: 7/19/94 removed suit.ri from lotus.ini. Add back here.
  2294.           'temp% = INSTR(1,LCASE$(defdir$),"suit.ri")
  2295.           'if temp% <> 0 then
  2296.              'ProdDir$ = MID$(defdir$,1,(temp%-1))
  2297.              ProdDir$ = defdir$
  2298.            if ProdDir$ <> "" then
  2299.               fullpath$ = ProdDir$ + "suit.ri"
  2300.                  if DoesFileExist(fullpath$, femExists) then
  2301.                    rv% = Lot_CleanPath(fullpath$)
  2302.                    GetSUITPathfromLotusIni = fullpath$
  2303.                    EXIT FUNCTION
  2304.                 end if 
  2305.              end if 
  2306.        end if 
  2307.     end if
  2308.  
  2309.     GetSUITPathfromLotusIni = ""
  2310.  
  2311.  END FUNCTION
  2312.  
  2313.  
  2314.  
  2315.  
  2316.  '**************************************************************************
  2317.  '** PUBLIC SUB APPSELCB (hDlg&, CtrlId%, Classes$, LInst&)
  2318.  '** Purpose:   Callback for the the dialog box where the user picks which
  2319.  '**            SmartSuite apps to install. The user can change the install
  2320.  '**            path for each application.
  2321.  '**     
  2322.  '** Author:  TQI
  2323.  '** Arguments: standard callback args
  2324.  '** Comments: MN - Changed var name from Inst& to LInst& - conflicted w/unc
  2325.  '*************************************************************************
  2326.  PUBLIC SUB APPSELCB (hDlg&, CtrlId%, Classes$, LInst&) '** MN changed Inst& to LINST&
  2327.  CONST pn123% = 2 ' product number for 1-2-3
  2328.  CONST pnAPR% = 3 ' product number for Approach
  2329.  CONST sz123Combo$ = "IDC_COMBO1"
  2330.  CONST szAPRCombo$ = "IDC_COMBO2"
  2331.  CONST szAppSelCombo$ = "IDC_COMBO3"
  2332.  STATIC drvIndexSelected%, curIndexLCB%
  2333.  STATIC drvIndex%(1 to MAX_NO_DRIVECOMBOS)
  2334.  STATIC pathChanged123%, pathChangedAPR%
  2335.  DIM dirSym$, pathName$, notused%
  2336.  DIM prodNum%, index%, prodcount%,  notused1$
  2337.  DIM prod$, prodful$, onserver%, pathSym$
  2338.  DIM Inst%, saveDir$, sxtnbit%
  2339.  
  2340.   Inst% = CINT(LInst&)
  2341.  
  2342.   SELECT CASE Classes$
  2343.  
  2344.   CASE "__DLGINIT"
  2345.     AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT9)
  2346.     AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  2347.  
  2348.     pathChanged123% = FALSE           ' did user change the path?
  2349.     pathChangedAPR% = FALSE           ' did user change the path?
  2350.     prodcount% = Reg_GetNumberofProducts()
  2351.  
  2352.     FOR index% = 1 TO prodcount%
  2353.         IF Reg_GetAllowUserToPickInSuite (index%) <> FALSE THEN
  2354.             prod$ = Reg_GetProductAcronym(index%)
  2355.             prodful$ = prod$ & gTOP$
  2356.             AddListItem szAppSelCombo$, _
  2357.                 Lot_GetChapterValStr(Lot_GetChapterFromKeyword(prodful$), F_NAME) & SPACE$(30) & index%
  2358.  
  2359.             'NODE dialog
  2360.             IF GetSymbolValue(SYM_NETWORK$) = gNODE$ THEN
  2361.                 onserver% = Lot_IsTheFeatureInstalled(prodful$)
  2362.                 IF onserver% = 0 THEN
  2363.                     Reg_SetUIInOrOut index%, 0
  2364.                 ELSE 'bmk: uninstalled feature not in Node Select Suite Apps dialog
  2365.                     IF ((sxtnbit% = 1) AND _
  2366.                         (GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL)) THEN
  2367.                             Reg_SetUIInOrOut index%, 0
  2368.                     END IF
  2369.                 END IF
  2370.             END IF 'node
  2371.         END IF  ' user allowed to pick (product does show up in the list)
  2372.     NEXT  'Go to the next product
  2373.  
  2374.     AddListItem SYM_UPDATELIST$, szAppSelCombo$
  2375.  
  2376.     drvIndexSelected% = DlgAppSelSetProdInfo(hDlg&, pn123%, 1)
  2377.     drvIndexSelected% = DlgAppSelSetProdInfo(hDlg&, pnAPR%, 2)
  2378.     AppSelComboChanged hDlg&, 1
  2379.  
  2380.     '** Grey out directory and drive choices for initially selected
  2381.     '** product, in the case of an MLC install of that product
  2382.     '** -degb 4/18/96
  2383.  
  2384.     IF GetListItem(SYM_INSTALLKINDS$, pn123%) = gLANGUAGEINSTALL$ THEN
  2385.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_COMBO1), FALSE))
  2386.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT1), FALSE))
  2387.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_BRWSDIR1), FALSE))
  2388.     END IF
  2389.     IF GetListItem(SYM_INSTALLKINDS$, pnAPR%) = gLANGUAGEINSTALL$ THEN
  2390.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_COMBO2), FALSE))
  2391.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT2), FALSE))
  2392.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_BRWSDIR2), FALSE))
  2393.     END IF
  2394.  
  2395.    '* User has finished with this dialog and Selected OK
  2396.    '* Update Path if it was changed
  2397.    CASE "IDC_OK"
  2398.     IF pathChanged123% = TRUE THEN
  2399.         IF ValidateEditBox(hDlg& , 1) = 0 THEN
  2400.             SetListItem "__LASTSTATUS", 1, "Q"
  2401.             AppSelComboChanged hDlg&, 1
  2402.             AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 1
  2403.             EXIT SUB
  2404.         END IF
  2405.         pathName$ = GetPathFromComboEdit(hDlg&, 1)
  2406.         IF ValidatePath (pathName$) = TRUE THEN
  2407.             dirSym$ = Reg_GetDirSymbolList (pn123%)
  2408.             dirSym$ = GetListItem (dirSym$, 1)
  2409.             saveDir$ = GetSymbolValue(dirSym$)
  2410.             SetSymbolValue dirSym$, pathName$
  2411.             ' need to set pathname to literal string from lot_callone...
  2412.             pathSym$ = |"| + dirSym$ + |",TRUE|
  2413.             Lot_RefreshDestination dirSym$
  2414.             notused1$ = Lot_CallOneProductFunction (pn123%, _
  2415.                 "PathChange", gNEXT$, FALSE, pathSym$)
  2416.             IF notused1$ = gBACK THEN
  2417.                 SetSymbolValue dirSym$, saveDir$ 
  2418.                 drvIndexSelected% = DlgAppSelSetProdInfo (hDlg&, pn123%, 1)
  2419.                 SetListItem "__LASTSTATUS", 1, "Q"
  2420.                 AppSelComboChanged hDlg&, 1
  2421.                 AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 1
  2422.                 EXIT SUB
  2423.             END IF
  2424.         ELSE 
  2425.             SetListItem "__LASTSTATUS", 1, "Q"
  2426.             AppSelComboChanged hDlg&, 1
  2427.             AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 1
  2428.             EXIT SUB
  2429.         END IF
  2430.     END IF ' pathChanged123% = TRUE
  2431.  
  2432.     IF pathChangedAPR% = TRUE THEN
  2433.         IF ValidateEditBox(hDlg& , 2) = 0 THEN
  2434.             SetListItem "__LASTSTATUS", 1, "Q"
  2435.             AppSelComboChanged hDlg&, 2
  2436.             AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 2
  2437.             EXIT SUB
  2438.         END IF
  2439.         pathName$ = GetPathFromComboEdit(hDlg&, 2)
  2440.         IF ValidatePath (pathName$) = TRUE THEN
  2441.             dirSym$ = Reg_GetDirSymbolList (pnAPR%)
  2442.             dirSym$ = GetListItem (dirSym$, 1)
  2443.             saveDir$ = GetSymbolValue(dirSym$)
  2444.             SetSymbolValue dirSym$, pathName$
  2445.             ' need to set pathname to literal string from lot_callone...
  2446.             pathSym$ = |"| + dirSym$ + |",TRUE|
  2447.             Lot_RefreshDestination dirSym$
  2448.             notused1$ = Lot_CallOneProductFunction (pnAPR%, _
  2449.                 "PathChange", gNEXT$, FALSE, pathSym$)
  2450.             IF notused1$ = gBACK THEN
  2451.                 SetSymbolValue dirSym$, saveDir$ 
  2452.                 drvIndexSelected% = DlgAppSelSetProdInfo(hDlg&, pnAPR%, 2)
  2453.                 SetListItem "__LASTSTATUS", 1, "Q"
  2454.                 AppSelComboChanged hDlg&, 2
  2455.                 AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 2
  2456.                 EXIT SUB
  2457.             END IF
  2458.         ELSE
  2459.             SetListItem "__LASTSTATUS", 1, "Q"
  2460.             AppSelComboChanged hDlg&, 2
  2461.             AddListItem SYM_UPDATELIST$, szAppSelCombo$ & "," & 2
  2462.             EXIT SUB
  2463.         END IF
  2464.     END IF ' pathChangedAPR% = TRUE
  2465.  
  2466.    CASE sz123Combo$
  2467.     ComboSelChanged 1, Inst%
  2468.     PathChanged123% = TRUE
  2469.  
  2470.    CASE szAPRCombo$
  2471.     ComboSelChanged 2, Inst%
  2472.     PathChangedAPR% = TRUE
  2473.  
  2474.    CASE szAppSelCombo$
  2475.     index% = 1 + SendMessage(GetDlgItem(hDlg&, IDC_COMBO3), CB_GETCURSEL, 0, 0)
  2476.     index% = VAL(RIGHT$(GetListItem(szAppSelCombo$, index%), 1))
  2477.     IF index% = pn123% THEN
  2478.         AppSelComboChanged hDlg&, 1 ' show 123 path
  2479.     ELSE
  2480.         AppSelComboChanged hDlg&, 2 ' show APR path
  2481.     END IF
  2482.  
  2483.    CASE "IDC_EDIT"
  2484.     SELECT CASE Inst%
  2485.     CASE 1
  2486.         pathChanged123% = TRUE
  2487.     CASE 2
  2488.         pathChangedAPR% = TRUE
  2489.     END SELECT ' Inst%
  2490.  
  2491.    CASE "IDC_BRWSDIR"
  2492.     drvIndexSelected% = ValidateBrowse(hDlg& , Inst%) 
  2493.     SELECT CASE Inst%
  2494.     CASE 1
  2495.         pathChanged123% = TRUE
  2496.     CASE 2
  2497.         pathChangedAPR% = TRUE
  2498.     END SELECT
  2499.  END SELECT  ' classes
  2500.  
  2501.  END SUB
  2502.  
  2503.  '*************************************************************************
  2504.  '** FUNCTION DlgAppSelSetProdInfo (hDlg&, prodNum%, editNum%) AS INTEGER
  2505.  '** Purpose:   Given a product number and the dialog handle, set 
  2506.  '**            corresponding product info in the dialog.
  2507.  '**            EDIT is set to the product directory for prodNum%.
  2508.  '**            The drive combo box is set to the current installation
  2509.  '**            drive for prodNum%.
  2510.  '**
  2511.  '** Arguments:
  2512.  '**         hDlg&: handle of the dialog
  2513.  '**      prodNum%: product number
  2514.  '**      editNum%: edit box number.
  2515.  '**                e.g. 2 to set path to IDC_EDIT2 and IDC_COMBO2
  2516.  '**
  2517.  '** Returns:  the index into the drive combo box indication the current drive
  2518.  '**                     selection (that is set in this routine)
  2519.  '**     
  2520.  '*************************************************************************
  2521.  FUNCTION DlgAppSelSetProdInfo (hDlg&, prodNum%, editNum%) AS INTEGER
  2522.  DIM dirSym$
  2523.  
  2524.     ' Get the current path for this product
  2525.     dirSym$ = Reg_GetDirSymbolList (prodNum%)
  2526.     dirSym$ = GetListItem (dirSym$, 1)
  2527.     dirSym$ = GetSymbolValue (dirSym$)
  2528.     ' Set the drive combo box to select the drive in the current path
  2529.     Lot_GetDriveFreeSpaceList "IDC_COMBO" & editNum%
  2530.     SetListItem "IDC_EDIT", editNum%, dirSym$
  2531.     DlgAppSelSetProdInfo = ValidateEditBox(hDlg& , editNum%)
  2532.     AddListItem SYM_UPDATELIST$, "IDC_EDIT" & editNum%
  2533.  END FUNCTION
  2534.  
  2535.  '*************************************************************************
  2536.  '** SUB AppSelComboChanged(hDlg&, inst%)
  2537.  '** Purpose:     switchs IDC_EDITn, IDC_COMBOn and IDC_DRWSDIRn
  2538.  '** Arguments:
  2539.  '**       hDlg&: handle of the dialog
  2540.  '**       inst%: instance of controls (1 or 2)
  2541.  '*************************************************************************
  2542. SUB AppSelComboChanged(hDlg&, inst%)
  2543.     DIM notused&, sw1&, sw2&, ew1&, ew2&
  2544.  
  2545.     SELECT CASE inst%
  2546.     CASE 1
  2547.         sw1& = SW_SHOW
  2548.         sw2& = SW_HIDE
  2549.         ew1& = TRUE
  2550.         ew2& = FALSE
  2551.     CASE 2
  2552.         sw1& = SW_HIDE
  2553.         sw2& = SW_SHOW
  2554.         ew1& = FALSE
  2555.         ew2& = TRUE
  2556.     END SELECT
  2557.     notused& = ShowWindow(GetDlgItem(hDlg&, IDC_EDIT1), sw1&)
  2558.     notused& = ShowWindow(GetDlgItem(hDlg&, IDC_COMBO1), sw1&)
  2559.     notused& = ShowWindow(GetDlgItem(hDlg&, IDC_BRWSDIR1), sw1&)
  2560.     IF GetListItem(SYM_INSTALLKINDS$, 2) <> gLANGUAGEINSTALL$ THEN
  2561.         notused& = EnableWindow(GetDlgItem(hDlg&, IDC_BRWSDIR1), ew1&)
  2562.     END IF
  2563.     notused& = ShowWindow(GetDlgItem(hDlg&, IDC_EDIT2), sw2&)
  2564.     notused& = ShowWindow(GetDlgItem(hDlg&, IDC_COMBO2), sw2&)
  2565.     notused& = ShowWindow(GetDlgItem(hDlg&, IDC_BRWSDIR2), sw2&)
  2566.     IF GetListItem(SYM_INSTALLKINDS$, 3) <> gLANGUAGEINSTALL$ THEN
  2567.         notused& = EnableWindow(GetDlgItem(hDlg&, IDC_BRWSDIR2), ew2&)
  2568.     END IF
  2569. END SUB
  2570.  
  2571. '*************************************************************************
  2572. '** PUBLIC FUNCTION InitLanguageSUIT(prodno%, network$, direction$) 
  2573. '** Purpose: Finds out the installed languages and determines the nature
  2574. '**  of the install.  If not running automated, displays a message box for
  2575. '**  a reinstall or language install, for an upgrade, just continues
  2576. '**  
  2577. '** Author: JMDonohue
  2578. '** Arguments: (Not used -- to conform to product function spec)
  2579. '** Returns:  Install kind string
  2580. '**   
  2581. '**  Sets the following global symbols for later processing: 
  2582. '**   SYM_INSTALLKIND$
  2583. '**   SYM_REG_PRODUCTNAME$
  2584. '**   SYM_REG_PRODUCTVER$
  2585. '*************************************************************************
  2586. PUBLIC FUNCTION InitLanguageSUIT (prodno%, network$, direction$) AS STRING
  2587.    DIM szProductName$, szProductVersion$, szInstallKind$, szLanguageSubdir$ 
  2588.    szProductName$ =  LdString(SID_SUIT_PROD_NAME)
  2589.    szProductVersion$ =  LdString(SID_SUIT_PROD_VER)
  2590.    SetSymbolValue SYM_REG_PRODUCTNAME$ , szProductName$
  2591.    SetSymbolValue SYM_REG_PRODUCTVER$ , szProductVersion$ 
  2592.    'modified per JACKD's spec : MN
  2593.    InitLanguages szProductName$, szProductVersion$, prodno%
  2594.    'SetSymbolValue SYM_INSTALLKIND$, szInstallKind$ commented out don't need :MN
  2595.    'InitLanguageSUIT  = szInstallKind$ commented out don't need    :MN
  2596.  
  2597.    
  2598. END FUNCTION
  2599.  
  2600.  '*************************************************************************
  2601.  '** CUSTOMIZEAPPSCB
  2602.  '** Purpose:    This is a for the Welcome Dialog Boxes
  2603.  '**             there are two distinct types of dialogs:
  2604.  '**             A STANDARD/SERVER dialog vs a NODE dialog.
  2605.  '**
  2606.  '** IN SYMBOLS  NAME, COMPANY, NETWORK  
  2607.  '**     
  2608.  '** Author:
  2609.  '** Arguments:
  2610.  '**     
  2611.  '**     
  2612.  '** Returns:
  2613.  '**     
  2614.  '*************************************************************************
  2615.  SUB CUSTOMIZEAPPSCB (hDlg&, CtrlId%, Classes$, Inst&)
  2616.     DIM prodIndex%, nProds%, s$, i%, listitem$, comboitem$, notused%, direction$
  2617.     DIM bitmap%, tips$, chpt$, sizetype$,product$, CBName$, DlgID%, rc%, HlpID&,prodac$
  2618.     STATIC ListIndex%, ComboIndex%,network$
  2619.  
  2620.      SELECT CASE Classes$       
  2621.                               
  2622.       CASE "__DLGINIT"
  2623.  
  2624.        If Lot_GetCurrentProduct() = 1 Then ListIndex% = 1
  2625.        If ComboIndex% = 0 Then ComboIndex% = 1
  2626.  
  2627.        nProds% = Reg_GetNumberOfProducts() :  i% = 1
  2628.  
  2629.        FOR prodIndex% = 1 to nProds%
  2630.             If Reg_GetUIInOrOut (prodIndex%) <> FALSE  AND _
  2631.            Reg_GetAllowUserToPickInSuite(prodIndex%) <> FALSE Then
  2632.  
  2633.              s$ = CreateListString (prodIndex%, "")
  2634.              SetListItem "IDC_LIST1", i%, s$
  2635.  
  2636.              If Lot_GetCurrentProduct() = prodIndex% Then
  2637.                ListIndex% = i%
  2638.              End If
  2639.  
  2640.              i% = i% + 1
  2641.  
  2642.            End If
  2643.  
  2644.        NEXT
  2645.            '*** If Server Install Then Grey out Set DIR button
  2646.        '********************************************************
  2647.          network$ = GetSymbolValue(SYM_NETWORK$)
  2648.           IF network$ = gSERVER$ THEN
  2649.             notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
  2650.         END IF
  2651.         '***************************************
  2652.  
  2653.         '*** If MLC install then grey out set dir button  -degb 10/28/95
  2654.         IF (GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$) THEN
  2655.             notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
  2656.         END IF
  2657.  
  2658.        listitem$ = GetListItem("IDC_LIST1", ListIndex%)
  2659.        prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
  2660.     
  2661.        '*** grey out setdir button if product is CNTR, CAM or DOC        
  2662.                prodac$ = Reg_GetProductAcronym(prodIndex%)
  2663.             IF ((prodac$ = "CNTR") _
  2664.                         OR (prodac$ =  "CAM")  _
  2665.             OR (prodac$ =  "DOC")) THEN
  2666.              notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
  2667.             END IF
  2668.  
  2669.        '***************************************
  2670.  
  2671.     SetCombo hDlg&, prodIndex%, Lot_GetNthFieldFromIniString(listitem$, 3,CHR$(9))
  2672.            Lot_SetCurrentProduct(prodIndex%) 
  2673.  
  2674.  '      SetListItem "SETTABS1",1,"30"
  2675.  '      SetListItem "SETTABS1",2,"51"
  2676.  '      SetListItem "SETTABS1",3,"80"
  2677.  '      SetListItem "SETTABS1",4,"130"
  2678.  
  2679.        SetListItem "SETTABS1",1,"33"
  2680.        SetListItem "SETTABS1",2,"54"
  2681.        SetListItem "SETTABS1",3,"84"
  2682.        SetListItem "SETTABS1",4,"133"
  2683.        AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT1)
  2684.        AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT4)
  2685.        'AddListItem  SYM_UPDATELIST$, "SETTABS1"
  2686.        AddListItem  SYM_UPDATELIST$, "IDC_LIST1"
  2687.        AddListItem  SYM_UPDATELIST$, "IDC_LIST1," & ListIndex%
  2688.        AddListItem  SYM_UPDATELIST$, SYM_NORMALFONT$
  2689.  
  2690.        'bmk: get product launch icons and text strings from inf file
  2691.        chpt$ = Lot_GetChapterFromKeyword (Reg_GetProductAcronym(prodIndex%) + gTOP$)
  2692.        bitmap% = Lot_GetChapterValInt(chpt$, F_BITMAP)
  2693.        IF bitmap% <> 0 THEN
  2694.            SetListItem "IDC_BMP", 1, CSTR(bitmap%)
  2695.            AddListItem SYM_UPDATELIST$, "IDC_BMP1"
  2696.        END IF
  2697.  
  2698.           tips$ = Lot_GetChapterValStr (chpt$, F_TIPS)
  2699.        SetListItem "IDC_TEXT", 9, tips$
  2700.        AddListItem  SYM_NORMALFONT$, CSTR(IDC_TEXT9)
  2701.        AddListItem SYM_UPDATELIST$, "IDC_TEXT9"
  2702.        
  2703.      
  2704.       CASE "IDC_B"
  2705.         SELECT CASE Inst&
  2706.  
  2707.        CASE 1
  2708.        listitem$ = GetListItem("IDC_LIST1", ListIndex%)
  2709.        prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
  2710.        If Reg_GetProdSelectedInstallType(prodIndex%) <> gCUSTOM Then
  2711.            Reg_SetSelectedInstallType prodIndex%, gCUSTOM$
  2712.            direction$ = Lot_CallOneProductFunction(prodIndex%, "InitCopyList", gNEXT, TRUE, "")
  2713.        End If
  2714.  
  2715.        notused% = RegisterCallback("CALLBACK","CUSTOM1CB")
  2716.        direction$ = PopupModalDlg (DBM_CUSTOMIZEBASESUITEPROD, _
  2717.                    DBM_CUSTOMIZEBASESUITEPROD)
  2718.  
  2719.       CASE 2
  2720.  
  2721.        '*** SET DIR STUFF
  2722.         'SET DIR INITIALIZATION
  2723.     'FOR prodIndex% = 1 to nProds%
  2724.         'NEXT
  2725.  
  2726.        
  2727.  
  2728.                listitem$ = GetListItem("IDC_LIST1", ListIndex%)
  2729.                prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
  2730.  
  2731.          'If Reg_GetProdSelectedInstallType(prodIndex%) <> gCUSTOM Then
  2732.            'Reg_SetSelectedInstallType prodIndex%, gCUSTOM$
  2733.         'product$ = ProdIndex%
  2734.          product$ = Reg_GetProductAcronym(prodIndex%)
  2735.         CBName$  = Reg_GetMoreDirsCBName(prodIndex%)
  2736.         DlgID%   = Reg_GetMoreDirsDLGID(prodIndex%)
  2737.           HlpID&   = Reg_GetMoreDIrsHlpID(prodIndex%)
  2738.  
  2739.         notused% = RegisterCallback(product$, CBName$)
  2740.         direction$ = PopUpModalDLG(DlgID%, HlpID&)
  2741.  
  2742.          'END IF
  2743.  
  2744.       END SELECT  '**IDC_B
  2745.      
  2746.      SELECT CASE direction$
  2747.  
  2748.            case "BACK"
  2749.             notused% = SetFocus(GetDlgItem(hDlg&, IDC_B1))
  2750.  
  2751.          case "OK"
  2752.             notused% = SetFocus(GetDlgItem(hDlg&, IDC_B1))
  2753.  
  2754.      END SELECT
  2755.  
  2756.      SetListItem "IDC_LIST1", ListIndex%, CreateListString (prodIndex%, comboitem$)
  2757.      AddListItem  SYM_UPDATELIST$, "IDC_LIST1," & ListIndex%
  2758.  
  2759.  
  2760.     CASE "IDC_LIST1"
  2761.  
  2762.        
  2763.        SetYieldActive FALSE     ' turn off yielding while handling lcb
  2764.           
  2765.        ListIndex% = Inst&
  2766.        listitem$ = GetListItem("IDC_LIST1", ListIndex%)
  2767.        
  2768.      
  2769.       
  2770.        prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
  2771.        Lot_SetCurrentProduct(prodIndex%) 
  2772.        SetCombo hDlg&, prodIndex%, Lot_GetNthFieldFromIniString(listitem$, 3,CHR$(9))
  2773.  
  2774.        '*** If Install type not CUSTOM Then Grey out Set DIR button
  2775.        '***************************************
  2776.     IF Reg_GetProdSelectedInstallType(prodIndex%) <> gCUSTOM$ Then
  2777.       notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
  2778.      ELSE
  2779.       notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), TRUE))      
  2780.      END IF
  2781.  
  2782.     '*** If MLC install then grey out set dir button  
  2783. 'AMM    IF (GetListItem(SYM_INSTALLKINDS$, prodIndex%) = gLANGUAGEINSTALL$) THEN
  2784. 'AMM  1 for 123???
  2785.     IF (GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$) THEN
  2786.         notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
  2787.     END IF
  2788.  
  2789.      '*** If prod acronym is SMARTCNTR,CAM or DOC grey
  2790.                prodac$ = Reg_GetProductAcronym(prodIndex%)
  2791.             IF ((prodac$ = "CNTR") _
  2792.                          OR (prodac$ =  "CAM") _
  2793.              OR (prodac$ =  "DOC")) THEN
  2794.              notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
  2795.             END IF
  2796.        '***************************************
  2797.  
  2798.     '*** If Server Install Then Grey out Set DIR button
  2799.        '********************************************************
  2800.          network$ = GetSymbolValue(SYM_NETWORK$)
  2801.           IF network$ = gSERVER$ THEN
  2802.             notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_B2), FALSE))
  2803.         END IF
  2804.         '***************************************
  2805.  
  2806.        chpt$ = Lot_GetChapterFromKeyword (Reg_GetProductAcronym(prodIndex%) + gTOP$)
  2807.        bitmap% = Lot_GetChapterValInt(chpt$, F_BITMAP)
  2808.        IF bitmap% <> 0 THEN
  2809.            SetListItem "IDC_BMP", 1, CSTR(bitmap%)
  2810.            AddListItem SYM_UPDATELIST$, "IDC_BMP1"
  2811.        END IF
  2812.       
  2813.        
  2814.        tips$ = Lot_GetChapterValStr (chpt$, F_TIPS)
  2815.        SetListItem "IDC_TEXT", 9, tips$
  2816.        AddListItem  SYM_NORMALFONT$, CSTR(IDC_TEXT9)
  2817.        AddListItem SYM_UPDATELIST$, "IDC_TEXT9"
  2818.  
  2819.          SetYieldActive TRUE     ' turn off yielding while handling lcb
  2820.  
  2821.            
  2822.     
  2823.     CASE "IDC_COMBO1"
  2824.        ComboIndex% = Inst&
  2825.        comboitem$ = GetListItem("IDC_COMBO1", ComboIndex%)
  2826.        listitem$ = GetListItem("IDC_LIST1", ListIndex%)
  2827.        prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
  2828.        SetListItem "IDC_LIST1", ListIndex%, CreateListString (prodIndex%, comboitem$)
  2829.        AddListItem  SYM_UPDATELIST$, "IDC_LIST1," & ListIndex%
  2830.        SetCombo hDlg&, prodIndex%, comboitem$
  2831.       
  2832.     CASE "IDC_OK"
  2833.        FOR i% = 1 to GetListLength("IDC_LIST1")
  2834.       listitem$ = GetListItem("IDC_LIST1", i%)
  2835.       sizetype$ = Lot_GetNthFieldFromIniString(listitem$, 3,CHR$(9))
  2836.       If sizetype$ = gFULLSTR$ Then 
  2837.          prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
  2838.          Reg_SetSelectedInstallType prodIndex%, gCOMPLETE$
  2839.          direction$ = Lot_CallOneProductFunction(prodIndex%, "InitCopyList", gNEXT, TRUE, "")
  2840.       ElseIf sizetype$ = gMINIMUMSTR$ Then
  2841.          prodIndex% = CINT(Lot_GetNthFieldFromIniString(listitem$, 5,CHR$(9)))
  2842.          Reg_SetSelectedInstallType prodIndex%, gLAPTOP$
  2843.          direction$ = Lot_CallOneProductFunction(prodIndex%, "InitCopyList", gNEXT, TRUE, "")
  2844.       End If
  2845.        NEXT
  2846.  
  2847.   
  2848.     END SELECT
  2849.  
  2850.  END SUB
  2851.  
  2852.  '**************************************************************************
  2853.  '* SUB SetCombo( hDlg&, BYVAL prodIndex%, BYVAL sizetype$)  
  2854.  '**************************************************************************
  2855.  SUB SetCombo( hDlg&, BYVAL prodIndex%, BYVAL sizetype$)  
  2856.  
  2857.  DIM count%, notused%
  2858.  
  2859.     If GetListLength("IDC_COMBO1") > 0 Then  RemoveSymbol "IDC_COMBO1"
  2860.     count% = 0
  2861.  
  2862.     AddListItem SYM_UPDATELIST$, "IDC_COMBO1" 
  2863.  
  2864.     If Reg_GetProdSupportForFullInstall(prodIndex%) <> FALSE  Then
  2865.        count% = count% + 1
  2866.        AddListItem "IDC_COMBO1", gFULLSTR$
  2867.        If sizetype$ = gFULLSTR$ OR   ( sizetype$ = ""            AND _
  2868.       Reg_GetProdSelectedInstallType(prodIndex%) = gCOMPLETE )   Then 
  2869.  
  2870.       AddListItem SYM_UPDATELIST$, "IDC_COMBO1" & "," & count%
  2871.        End If
  2872.     End If
  2873.  
  2874.     If Reg_GetProdSupportForCustInstall(prodIndex%) <> FALSE  Then
  2875.        count% = count% + 1
  2876.        AddListItem "IDC_COMBO1", gCUSTOMSTR$
  2877.        If sizetype$ = gCUSTOMSTR$ OR   ( sizetype$ = ""            AND _
  2878.       Reg_GetProdSelectedInstallType(prodIndex%) = gCUSTOM )   Then 
  2879.  
  2880.       AddListItem SYM_UPDATELIST$, "IDC_COMBO1" & "," & count%
  2881.       notused% = EnableWindow(GetDlgItem(hDlg&,IDC_B1), TRUE)
  2882.        Else
  2883.       notused% = EnableWindow(GetDlgItem(hDlg&,IDC_B1), FALSE)
  2884.        End If
  2885.     Else
  2886.        notused% = EnableWindow(GetDlgItem(hDlg&,IDC_B1), FALSE)
  2887.     End If
  2888.        
  2889.     If Reg_GetProdSupportForMinInstall(prodIndex%) <> FALSE AND _
  2890.        GetSymbolValue(SYM_NETWORK$) <> gSERVER$  Then
  2891.        count% = count% + 1
  2892.        AddListItem "IDC_COMBO1", gMINIMUMSTR$
  2893.        If sizetype$ = gMINIMUMSTR$ OR   ( sizetype$ = ""            AND _
  2894.       Reg_GetProdSelectedInstallType(prodIndex%) = gLAPTOP )   Then 
  2895.       AddListItem SYM_UPDATELIST$, "IDC_COMBO1" & "," & count%
  2896.        End If
  2897.  
  2898.     End If
  2899.  
  2900.  END SUB
  2901.  
  2902.  '*************************************************************************
  2903.  '** FUNCTION CreateListString( BYVAL prodIndex%, BYVAL sizetype$)  AS STRING
  2904.  '*************************************************************************
  2905.  
  2906.  FUNCTION CreateListString( BYVAL prodIndex%, BYVAL sizetype$)  AS STRING
  2907.  
  2908.  DIM s$, prodsize$, selectedtype$ , dirSym$, pathName$, n%
  2909.  
  2910.     'bmk: determine type of install option
  2911.     If sizetype$ = "" Then
  2912.        selectedtype$ = Reg_GetProdSelectedInstallType(prodIndex%)
  2913.        If selectedtype$ = gLAPTOP$ Then
  2914.        sizetype$ = gMINIMUMSTR$
  2915.        ElseIf selectedtype$ = gCUSTOM Then
  2916.        sizetype$ = gCUSTOMSTR$
  2917.        Else
  2918.        sizetype$ = gFULLSTR$
  2919.        End If            
  2920.     End If
  2921.  
  2922.     If sizetype$ = "LAPTOP" Then
  2923.        prodsize$ = Lot_MakeSizeString(Reg_GetProdMinSize(prodIndex%)\1024)
  2924.     Else
  2925.        prodsize$ = Lot_MakeSizeString(Reg_GetProdFullSize(prodIndex%)\1024)
  2926.     End If
  2927.  
  2928.  
  2929.     s$ = Reg_GetProductname (prodIndex%) + CHR$(9) 
  2930.     s$ = s$ + prodsize$ + CHR$(9) 
  2931. '    s$ = s$ + sizetype$ + CHR$(9) 
  2932.     s$ = s$ + CHR$(9) 
  2933.  
  2934.     dirSym$   = Reg_GetDirSymbolList(prodIndex%)
  2935.     n% = GetListLength(dirSym$)
  2936.     If n% > 0 Then dirSym$   = GetListItem(dirSym$, 1)
  2937.     If n% > 0 AND dirSym$ <> "" Then
  2938.        pathName$ = GetSymbolValue(dirSym$)
  2939.     Else
  2940.        pathName$ = ""
  2941.     End If
  2942.  
  2943.     s$ = s$ + pathName$ + CHR$(9)
  2944.     s$ = s$ + CSTR(prodIndex%)
  2945.  
  2946.     CreateListString = s$
  2947.  
  2948.  END FUNCTION
  2949.  
  2950. '*************************************************************************
  2951. '* SUB SUITEDIRCB (hDlg&, CtrlId%, Classes$, Inst&)
  2952. '** Purpose: Drives DB_SUITEDIR dialog
  2953. '** Author:    MZ,TV
  2954. '** Arguments: Callback args
  2955. '** Returns:   NONE
  2956. '** Modified: MN - Added UNC Stuff - Changed Inst& to LInst&
  2957. '*************************************************************************
  2958.  SUB SUITEDIRCB (hDlg&, CtrlId%, Classes$, LInst&)
  2959.  
  2960.  STATIC   dirChanged%, passnum%, drvIndex%(1 to MAX_NO_DRIVECOMBOS)
  2961.    DIM    dirSym$, dirToChange$, dirName$, rc$, i%, Chapter$
  2962.    DIM    AllProdNum%,prodNum%,AllOptNum%,OptName$,OptNum%,notused%
  2963.    DIM    defdir$, proddir$, proddrv$,Inst%
  2964.    DIM    uncPath$, dirPath$, drvPath$ '** MZ
  2965.    DIM    drvSel%, DriveChangedFlag%  '** MZ
  2966.    DIM    uncOff&, unusedPath$, combobox$, editbox$
  2967.    DIM    curCombo$, fullPath$
  2968.    DIM      longdir$, pathpart$, max%, counter%, handle$ '**degb 11/2/95
  2969.  
  2970.      
  2971.  
  2972.    SELECT CASE Classes$
  2973.          
  2974.      CASE "__DLGINIT"
  2975.          
  2976.        AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT1)
  2977.        AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT4)
  2978.        AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT9)
  2979.        AddListItem  SYM_UPDATELIST$, SYM_NORMALFONT$
  2980.        
  2981.             
  2982.        'bmk: 11/95 dirChanged% is TRUE if user has touched combo or edit box
  2983.        'if dirChanged% is TRUE; IDC_OK verifies that path is valid 
  2984.        'error is surfaced only for NEXT
  2985.        IF dirChanged% <> TRUE THEN
  2986.  
  2987.          IF (GetSymbolValue(SYM_NETWORK$) <> gSERVER$ AND _
  2988.              GetSymbolValue(SYM_NETWORK$) <> gDISTRIBUTION$) THEN
  2989.          
  2990.            ' bmk: 11/95 use Registry path or use current BASEDIR$ value
  2991.            dirToChange$ = GetSUITPathfromRegistry()
  2992.                     
  2993.            IF dirToChange$ = "" THEN  'there is a string in lotus.ini
  2994.          
  2995.              dirToChange$ = GetSymbolValue(SYM_BASEDIR$)
  2996.                    
  2997.            END IF 'registry path check
  2998.        
  2999.  
  3000.            'BMK: OLD CODE,LEAVE IT TILL NEW CODE VERIFIED OK
  3001.            'Lot_GetDriveFreeSpaceList "IDC_COMBO1"    
  3002.            'SetListItem "IDC_EDIT", 1, dirToChange$
  3003.            'drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  3004.            'sets combo box correctly from dirToChange$
  3005.            'AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3006.  
  3007.          ELSE  'SERVER or DISTRIBUTION INSTALL FOR case when user  has not
  3008.              'changed anything
  3009.  
  3010.            dirToChange$ = GetSymbolValue(SYM_BASEDIR$)
  3011.         
  3012.            'BMK: OLD CODE,LEAVE IT TILL NEW CODE VERIFIED OK
  3013.            'Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  3014.            'SetListItem "IDC_EDIT", 1, dirToChange$
  3015.            'drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  3016.            'AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3017.        
  3018.  
  3019.          END IF 'Type of Install, Standard, Server/Node, Dist
  3020.  
  3021.          Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  3022.          SetListItem "IDC_EDIT", 1, dirToChange$
  3023.          drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  3024.          AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3025.        
  3026.        ELSE    'bmk: user changed something, just use SYM_BASEDIR that
  3027.             'was refreshed in IDC_OK
  3028.  
  3029.             dirToChange$ = GetSymbolValue(SYM_BASEDIR$)
  3030.             Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  3031.             SetListItem "IDC_EDIT", 1, dirToChange$
  3032.             drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  3033.             AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3034.  
  3035.        END IF
  3036.  
  3037.        '*** If MLC install then grey out dir buttons  -degb 11/1/95
  3038.        '** No longer applicable  -degb 4/18/96
  3039. '       IF (GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$) THEN
  3040. '            notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_COMBO1), FALSE))
  3041. '            notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_EDIT1), FALSE))
  3042. '            notused% = CINT(EnableWindow (GetDlgItem (hDlg&, IDC_BRWSDIR1), FALSE))
  3043. '       END IF
  3044.  
  3045.  
  3046.          
  3047.      CASE "IDC_EDIT"
  3048.  
  3049.        dirChanged% = TRUE
  3050.         
  3051.          
  3052.      CASE "IDC_BRWSDIR"
  3053.  
  3054.        drvSel% = ValidateBrowse(hDlg&, 1)    '* degb 11/9/95 Inst% was not being initialized
  3055.        dirChanged% = TRUE
  3056.         
  3057.  
  3058.      CASE "IDC_COMBO1"
  3059.        
  3060.                 Inst% = CINT(LInst&)
  3061.                 ComboSelChanged 1, Inst%
  3062.                 dirChanged%   = TRUE
  3063.  
  3064.      CASE "IDC_OK"
  3065.  
  3066.        IF dirChanged% = TRUE OR passnum% = 0 THEN
  3067.  
  3068.          'bmk: validate the drive
  3069.          drvSel% = ValidateEditBox(hDlg& , 1)
  3070.       
  3071.          'bmk: if invalid drive, restore the last valid drive       
  3072.          IF drvSel% = 0 THEN
  3073.            SetListItem "__LASTSTATUS", 1, "Q"
  3074.            EXIT SUB
  3075.          ELSE      'set to new drive
  3076.            drvIndex%(1) = drvSel%
  3077.          END IF
  3078.                     dirToChange = GetPathFromComboEdit(hDlg&,1) 
  3079.          IF ValidatePath(dirToChange$) = FALSE THEN
  3080.            SetListItem "__LASTSTATUS", 1, "Q"
  3081.                      EXIT SUB
  3082.          ELSE
  3083.            SetSymbolValue SYM_BASEDIR$, dirToChange$
  3084.            Lot_RefreshDestination(SYM_BASEDIR$)
  3085.          END IF
  3086.          
  3087.          '* removed code surfacing UNC/Long warning dialog  -degb 4/18/96
  3088.        
  3089.        END IF
  3090.      
  3091.       ResetWinWinsysSymbols
  3092.       passnum% = passnum% + 1
  3093.               
  3094.    END SELECT
  3095.          
  3096.  END SUB
  3097.  
  3098. '*************************************************************************
  3099. '* SUB UNCLONGPARENT_CB (hDlg&, CtrlId%, Classes$, Inst&)
  3100. '** Purpose: Drives DBSUIT_UNCLONGPARENT dialog
  3101. '** Author:    degb
  3102. '** Arguments: Callback args
  3103. '** Returns:   NONE
  3104. '** Modified: 
  3105. '*************************************************************************
  3106.  SUB UNCLONGPARENT_CB (hDlg&, CtrlId%, Classes$, LInst&)
  3107.  
  3108.  END SUB
  3109.  
  3110.  
  3111.  '*************************************************************************
  3112.  '** SUB SUITESVRLOTUSAPPDIRCB (hDlg&, CtrlId%, Classes$, Inst&)
  3113.  '**
  3114.  '** Purpose: Callback to handle dialog that prompts for the Lotusapp directory
  3115.  '**          in the case of a SmartSuite server install.
  3116.  '**            
  3117.  '** Author:    TV
  3118.  '** Arguments: Callback args
  3119.  '** SymbolsIn: SYM_BASEDIR$ from main.lss and previous callback(for DB_SUITEDIR)
  3120.  '** Returns:   NONE
  3121.  '*************************************************************************
  3122.  
  3123.  SUB SUITESVRLOTUSAPPDIRCB (hDlg&, CtrlId%, Classes$, Inst&)
  3124.  
  3125.     STATIC drvIndex%, dirChanged%
  3126.     DIM    dirToChange$, dirName$, rc$, i%, S$,defaultdir$
  3127.     DIM    drvSel%, drvPath$, uncPath$, dirPath$,gLOTUSAPP$
  3128.  
  3129.     SELECT CASE Classes$
  3130.  
  3131.     case "__DLGINIT"
  3132.  
  3133.        dirChanged%  = FALSE
  3134.        AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3135.        AddListItem  SYM_UPDATELIST$, SYM_NORMALFONT$
  3136. ''SUIT MAN       dirToChange$ = GetSymbolValue(SYM_LOTUSAPPDIR$)
  3137.        defaultdir$ = GetSymbolValue(SYM_BASEDIR$)
  3138.  
  3139.       
  3140.       '***remove lotusapp from path (for ui)   
  3141.  
  3142.        IF dirToChange$ <> defaultdir$ THEN 
  3143.      dirToChange$ = LEFT$(dirToChange$,LEN(dirToChange$)-LEN(gLOTUSAPP$)-1)
  3144.        END IF
  3145.        Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  3146. '       drvIndex% = SelectDriveCombo ("IDC_COMBO1", dirToChange$)
  3147.  
  3148.        SetListItem "IDC_EDIT", 1, dirToChange$
  3149.        drvIndex% = ValidateEditBox(hDlg& , 1)
  3150.        AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3151.  
  3152. '       S$ = GetListItem("IDC_COMBO1", drvIndex%)
  3153. '       SetListItem "IDC_COMBO1", 1, S$
  3154.  
  3155.        AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3156. '       AddListItem SYM_UPDATELIST$, "IDC_COMBO1"
  3157.  
  3158.     case "IDC_EDIT"
  3159.        dirChanged% = TRUE
  3160.  
  3161.     case "IDC_COMBO1"
  3162.        drvIndex%   = Inst&
  3163.        dirChanged% = TRUE
  3164.  
  3165.     case "IDC_OK"
  3166.       IF dirChanged% = TRUE THEN
  3167.         IF ValidateEditBox(hDlg& , 1) = 0 THEN
  3168.           SetListItem "__LASTSTATUS", 1, "Q"
  3169.           EXIT SUB
  3170.         END IF
  3171.         dirToChange$ = GetPathFromComboEdit(hDlg&,1)
  3172.         '** For server lotusapp dir, add on lotusapp
  3173.            IF GetSymbolValue(SYM_NETWORK$) = gSERVER$       THEN
  3174.              dirToChange$ = MakePath(dirToChange$,gLOTUSAPP$)
  3175.            END IF
  3176.         IF ValidatePath(dirToChange$) = FALSE THEN
  3177.              SetListItem "__LASTSTATUS", 1, "Q"
  3178.                 EXIT SUB
  3179.            ELSE
  3180. ''SUIT             SetSymbolValue SYM_LOTUSAPPDIR$, dirToChange$
  3181. ''SUIT             Lot_RefreshDestination(SYM_LOTUSAPPDIR$)
  3182.            END IF
  3183.       END IF
  3184.  
  3185.     END SELECT
  3186.  
  3187.  END SUB
  3188.  
  3189.  '*************************************************************************
  3190.  '** SUB WriteSUITInLotusIni(prodno%)
  3191.  '**
  3192.  '** Purpose:    This function logs SUIT.RI in lotus.ini
  3193.  '** Author:     MZ; modified by BMK
  3194.  '** Arguments:  
  3195.  '** Returns:    SUCCESS
  3196.  '*************************************************************************
  3197.  
  3198.  'SUB WriteSUITInLotusIni(prodno%)
  3199.  'DIM Destdir$, ProgDir$
  3200.  
  3201.  '   DestDir$ = GetWindowsDir() + "lotus.ini"
  3202.  '   ProgDir$ = Lot_WhereIsFeature(prodno%, "INSTTOP","SUIT.RI")
  3203.  
  3204.  '   CreateIniKeyValue DestDir$, "Lotus Applications", "SUITE",  Progdir$,   cmoOverwrite
  3205.  
  3206.  'END SUB
  3207.  
  3208.  '*************************************************************************
  3209.  '** FUNCTION PrevVersionsSUIT(prodno%, network$, direction$) AS STRING
  3210.  '**
  3211.  '** Purpose:    This function posts Existing Version warning for Suite products
  3212.  '** Author:     BMK
  3213.  '** Arguments:  
  3214.  '** Returns:    SUCCESS
  3215.  '*************************************************************************
  3216.  
  3217.  PUBLIC FUNCTION PrevVersionsSUIT(prodno%, network$, direction$) AS STRING
  3218.  DIM nProducts%, prodIndex%, i%, temp% 
  3219.  
  3220.    PrevVersionsSUIT = direction$
  3221.    '' In the backwards case, keep backing up
  3222.    If direction$ = gBACK Then
  3223.       EXIT FUNCTION
  3224.    End If
  3225.  
  3226.    nProducts% = Reg_GetNumberOfProducts()
  3227.  
  3228.    '** For STANDARD INSTALL Put up a dlg box, if previous version of
  3229.    ' any SUITE product found
  3230.    ' bmk 10/16/95: Added NODE  
  3231.    '==========================================================
  3232.    If network$ = gSTANDARD$ OR network$ = gNODE$ Then
  3233.     For prodIndex% = 1 to nProducts%
  3234.       If Reg_GetPreviousVersion(prodIndex%) <> "" Then 
  3235.         temp% = RegisterCallback("SUIT", "EXISTINGPRODCB")
  3236.         direction$ = PopupModalDlg (DB_EXISTINGPROD, DB_EXISTINGPROD)
  3237.           If direction$ = gBACK Then
  3238.             PrevVersionsSUIT = direction$
  3239.             EXIT FUNCTION
  3240.           Else
  3241.             GOTO PREVPRODFOUND
  3242.           End If
  3243.       End if
  3244.     Next
  3245.    End if 
  3246.  
  3247.  PREVPRODFOUND:
  3248.  
  3249.  END FUNCTION
  3250.   
  3251.  
  3252.  '*************************************************************************
  3253.  '** SUB ProdSizeSUIT(prodno%)
  3254.  '**
  3255.  '** Purpopose: Calculates the total size of Suite products selected in SSAPPs
  3256.  '** dialog. Registers that size value Reg_SetProdSize for Suite for use in 
  3257.  '** Install Options dialog. Fixes SPR 
  3258.  '** Author:  BMK 7/11/94
  3259.  '** Arguments:  prodno% is Suite #1
  3260.  '** Returns:    SUCCESS
  3261.  '*************************************************************************
  3262.  'SUB ProdSizeSUIT(prodno%)
  3263.   ' DIM prodcount%, index%, prodfullsize&, prodminsize&
  3264.   ' DIM suitfullsize&, suitminsize&  
  3265.   '
  3266.   ' suitfullsize& = 0
  3267.   ' suitminsize&  = 0
  3268.  
  3269.    'prodcount% = Reg_GetNumberofProducts()
  3270.  
  3271.      'FOR index% = 1 TO prodcount%
  3272.  
  3273.      'IF Reg_GetUIInOrOut (index%) <> FALSE THEN
  3274.      '      prodfullsize& = Reg_GetProdFullSize(index%)
  3275.      '      prodminsize& = Reg_GetProdMinSize(index%)
  3276.    '      suitfullsize& = suitfullsize& + prodfullsize&
  3277.    '      suitminsize& = suitminsize& + prodminsize&
  3278.    '   END IF
  3279.  
  3280.    'NEXT
  3281.  
  3282.  
  3283.    'Reg_SetProdSizes prodno%, suitfullsize&, suitminsize&
  3284.  
  3285.  'END SUB
  3286.  
  3287.  
  3288.  '****************************************************************************
  3289.  '* SUB EXISTINGPRODCB(hDlg&, CtrlId%, Classes%, Inst&)
  3290.  '*
  3291.  '*
  3292.  '*
  3293.  '****************************************************************************
  3294.  SUB EXISTINGPRODCB(hDlg&, CtrlId%, Classes$, Inst&)
  3295.  
  3296.   SELECT CASE Classes$
  3297.  
  3298.     case "__DLGINIT"
  3299.       AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3300.       AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3301.       AddListItem  SYM_UPDATELIST$, SYM_NORMALFONT$
  3302.  
  3303.    END SELECT
  3304.  
  3305.  END SUB
  3306.  
  3307.  
  3308. '****************************************************************************
  3309. '* SUB DlgRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, Inst&)
  3310. '* Purpose: callback to handle Remove Files dialog.
  3311. '* Author:  BMK 7/18/95
  3312. '* Arguments:  
  3313. '*
  3314. '*
  3315. '****************************************************************************
  3316.  SUB DlgRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, Inst&) 
  3317.  
  3318.  DIM nProducts%, index%, chpt$, chptnum%, sym$, notused%,prodName$, NOREMOVE%
  3319.  DIM szObs$ 
  3320.  
  3321.   SELECT CASE Classes$
  3322.  
  3323.     case "__DLGINIT"
  3324.    
  3325.       AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3326.       AddListItem  SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3327.       AddListItem  SYM_UPDATELIST$, SYM_NORMALFONT$
  3328.  
  3329.   
  3330.     
  3331.     case "IDC_OK"
  3332.  
  3333.       nProducts% = Reg_GetNumberofProducts()
  3334.  
  3335.      FOR index% = 1 TO nProducts%
  3336.         notused% = Reg_GetUIInOrOut (index%)
  3337.         IF Reg_GetUIInOrOut (index%) <> FALSE THEN
  3338.             IF Reg_GetObsFiles(index%) = 1 THEN
  3339.              prodName$ = Reg_GetProductAcronym(index%)
  3340.              sym$ = prodname$ & "OBSFILES"  'build keyword with product acronym
  3341.          
  3342.               For chptnum% = 1 TO MAX_CHPTS
  3343.                 szObs$ = sym$ + LTRIM$(STR$(chptnum%))
  3344.                 chpt$ = Lot_GetChapterFromKeyWord(szObs$)
  3345.                 IF chpt$ <> "" THEN
  3346.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  3347.                 END IF
  3348.              NEXT
  3349.            End If
  3350.         END IF
  3351.     NEXT
  3352.     
  3353.    
  3354.    case "IDC_BACK"
  3355.      
  3356.      ' reset the INF sections to OFF for all in case user changes his/her mind
  3357.     FOR index% = 1 TO nProducts%
  3358.         prodName$ = Reg_GetProductAcronym(index%)
  3359.         sym$ = prodname$ & "OBSFILES"
  3360.  
  3361.         FOR chptnum% = 1 TO MAX_CHPTS
  3362.             szObs$ = sym$ + LTRIM$(STR$(chptnum%))
  3363.              chpt$ = Lot_GetChapterFromKeyWord(szObs$)
  3364.             IF chpt$ <> "" THEN
  3365.                 notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3366.             END IF
  3367.         NEXT
  3368.     NEXT
  3369.         
  3370.     NOREMOVE% = 1
  3371.     
  3372.    
  3373.    case "IDC_EXIT"
  3374.  
  3375.  
  3376.  ' reset the INF sections to OFF for all in case user changes her mind    
  3377.     FOR index% = 1 TO nProducts%
  3378.         prodName$ = Reg_GetProductAcronym(index%)
  3379.         sym$ = prodname$ & "OBSFILES"
  3380.  
  3381.         FOR chptnum% = 1 TO MAX_CHPTS
  3382.             szObs$ = sym$ + LTRIM$(STR$(chptnum%))
  3383.              chpt$ = Lot_GetChapterFromKeyWord(szObs$)
  3384.             IF chpt$ <> "" THEN
  3385.                 notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3386.             END IF
  3387.         NEXT
  3388.     NEXT
  3389.  
  3390.   END SELECT
  3391.  
  3392.  END SUB
  3393.  
  3394. '*------------------------------------------------------------------------
  3395. '*   Function:     CleanWinHelpIni
  3396. '*   Description:  Removes entries from winhelp.ini for files
  3397. '*                 listed in filelist.
  3398. '*                                         
  3399. '*
  3400. '*   Author:       Bob Voges
  3401. '*                                         
  3402. '*   Inputs:       none
  3403. '*
  3404. '*   Outputs:      none
  3405. '*
  3406. '*   Returns:      none
  3407. '*
  3408. '*   Caveats:         no error handling
  3409. '*
  3410. '*------------------------------------------------------------------------
  3411. Public Sub CleanWinHelpIni
  3412.  
  3413. Dim i as Integer    'loop index
  3414. Dim file as String    'ini file
  3415. Dim section as String    'section within ini file
  3416.  
  3417. 'initialize variables
  3418. InitList
  3419. file = "winhelp.ini"
  3420. section = "files"
  3421.      
  3422. '     for each entry in list
  3423. '     delete it from winhelp.ini
  3424.  
  3425.          For i=1 To NUM_FILES
  3426.          WritePrivateProfileString _
  3427.               section,_
  3428.               filelist(i),_
  3429.               0,_
  3430.               file 
  3431.       Next
  3432. End Sub
  3433.  
  3434.  
  3435. '*------------------------------------------------------------------------
  3436. '*   Function:     InitList
  3437. '*
  3438. '*   Description:  Initializes the filelist which is used to
  3439. '*                 remove Wrigley Beta entries from winhelp.ini.  
  3440. '*
  3441. '*   Author:       Bob Voges
  3442. '*                                         
  3443. '*   Inputs:       none
  3444. '*
  3445. '*   Outputs:      none. 
  3446. '*
  3447. '*   Returns:      none
  3448. '*
  3449. '*   Caveats:         no error handling
  3450. '*
  3451. '*------------------------------------------------------------------------
  3452. Sub InitList
  3453. filelist(1)    =  "LTHLPN30.DLL"   'Shared-help DLL
  3454.  
  3455. filelist(2)    =  "FL1C40EN.HLP"   'Freelance main task help
  3456. filelist(3)    =  "FL1C40EN.CNT"
  3457.  
  3458. filelist(4)    =  "WP1N70EN.HLP"   'Word Pro main task help
  3459. filelist(5)    =  "WP1N70EN.CNT"
  3460.  
  3461. filelist(6)    =  "WP3N70EN.HLP"   'Word Pro drawing task help
  3462. filelist(7)    =  "WP3N70EN.CNT"
  3463.  
  3464. filelist(8)    =  "WP4N70EN.HLP"    'Word Pro equations task help
  3465. filelist(9)    =  "WP4N70EN.CNT"
  3466.  
  3467. filelist(10)   =  "LA1N40EN.HLP"    'Approach main task help
  3468. filelist(11)   =  "LA1N40EN.CNT"
  3469.  
  3470. filelist(12)   =  "LC1N20EN.HLP"    'Chart task help
  3471. filelist(13)   =  "LC1N20EN.CNT"
  3472.  
  3473. filelist(14)   =  "LSEN30EN.HLP"    'IDE task help
  3474. filelist(15)   =  "LSEN30EN.CNT"
  3475.  
  3476. filelist(16)   =  "TM1N10EN.HLP"    'Team Mail task help
  3477. filelist(17)   =  "TM1N10EN.CNT"
  3478.      
  3479. filelist(18)   =  "MB1C10EN.HLP"    'Mobile Screen Show task help
  3480. filelist(19)   =  "MB1C10EN.CNT"
  3481.      
  3482. filelist(20)   =  "SC1N50EN.HLP"    'SmartCenter task help
  3483. filelist(21)   =  "SC1N50EN.CNT"
  3484.  
  3485. filelist(22)   =  "CS1N40EN.HLP"    'Customer support help
  3486.  
  3487. filelist(23)   =  "AS1N11EN.HLP"    'OLE2 help
  3488.  
  3489. filelist(24)   =  "LSLN30EN.HLP"    'LotusScript Reference help
  3490. filelist(25)   =  "LSLN30EN.CNT"
  3491.      
  3492. filelist(26)   =  "FL2C10EN.HLP"    'Freelance LotusScript Reference Help
  3493. filelist(27)   =  "FL2C10EN.CNT"
  3494.      
  3495. filelist(28)   =  "LASN40EN.HLP"    'Approach LotusScript Reference Help
  3496. filelist(29)   =  "LASN40EN.CNT"
  3497.      
  3498. filelist(30)   =  "WP0N70EN.HLP"    'Word Pro LotusScript Reference Help
  3499. filelist(31)   =  "WP0N70EN.CNT"
  3500.      
  3501. filelist(32)   =  "LC2N20EN.HLP"    'Chart LotusScript Reference Help
  3502. filelist(33)   =  "LC2N20EN.CNT"
  3503.  
  3504. filelist(34)   =  "FL3C10EN.HLP" 'Obsolete filename: Freelance Help
  3505. filelist(35)    =    "CS1N10EN.HLP"    'Obsolete filename: Customer Support Help
  3506. filelist(36)    =    "AS1N10EN.HLP"    'Obsolete filename: Approach Help
  3507. filelist(37)    =  "LA1C40EN.HLP"    'Obsolete filename: Approach Help
  3508. filelist(38)    =    "LTSMAIL3.HLP"    'Obsolete filename: TeamMail Help
  3509. filelist(39)    =  "LTSCHRT2.HLP"    'Obsolete filename: Lotus Chart Help
  3510. filelist(40)    =    "DRVACCSS.HLP"    'Obsolete filename:
  3511. End Sub
  3512.  
  3513.  
  3514. '*************************************************************************
  3515. '** FUNCTION GetSUITPathfromRegistry() AS STRING
  3516. '**
  3517. '** Purpose: Gets the product dir path from the registry, and searches for
  3518. '**          acronym.exe in the product dir path. 
  3519. '**            
  3520. '** Author:    jshaw
  3521. '** Arguments: None
  3522. '** Returns:   if acronym.exe does not exist in dir specified in the registry,
  3523. '**                "" is returned, otherwise the full path to the product is 
  3524. '**                returned.
  3525. '**
  3526. '*************************************************************************
  3527.  
  3528. FUNCTION GetSUITPathfromRegistry () AS STRING
  3529. DIM nReturn&, dwInstallType&
  3530. DIM szBuffer$, szFullPath$, cbBuffer&
  3531. DIM nSize$, nIndex%, rv%
  3532. DIM LocPath$, descript$, instvalue$, szInsttype$
  3533. DIM szKey2$,dwSize&, nsize1&, nsize2&, RegStatus&
  3534. DIM szKey$, szKeyvalue$, szKeyvalue1$, szKeyvalue2$, keyvalue3$, keyvalue4$ 
  3535. DIM KeyReturn&
  3536.  
  3537. 'szBuffer$ = String(256,0)
  3538. 'cbBuffer& = len(szBuffer$)
  3539.  
  3540.     szKey$ = LdString (SID_SUIT_SZKEY)
  3541.     szKeyValue$ = LdString (SID_SUIT_KEYVALUE)
  3542.  
  3543.     nReturn& =  Lot_GetRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, szKeyValue$, REG_SZ , _
  3544.                  szBuffer$, cbBuffer&)
  3545.  
  3546.     if szBuffer$ <> "" then
  3547.        nIndex% = INSTR(szBuffer$, " ")
  3548.          
  3549.        if nIndex > 2 then
  3550.           szBuffer$ = LEFT$(szBuffer$, nIndex% - 2)
  3551.           szFullPath$ = szBuffer$ + LdString(SID_SUIT_SUITRI)
  3552.          
  3553.           if DoesFileExist (szFullPath$, femExists) then
  3554.              rv% = Lot_CleanPath (szBuffer$)
  3555.              GetSUITPathfromRegistry = LTRIM$(szBuffer$)
  3556.  
  3557.              EXIT FUNCTION
  3558.           end if
  3559.         end if
  3560.  
  3561.     End if
  3562.  
  3563.     GetSUITPathfromRegistry = ""
  3564.  
  3565. END FUNCTION
  3566.  
  3567.