home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 January / pcwk_01_1999_B.iso / Lotus123 / FRENCH / INSTALL.DSK / INST.LSS < prev    next >
Text File  |  1996-07-03  |  54KB  |  1,296 lines

  1. ''/*********************************************************************
  2. ''
  3. ''   Module Name:   INST.lss
  4. ''
  5. ''   Module Code:   COMINST
  6. ''
  7. ''   Author:              
  8. ''
  9. ''   Creation Date:       Jan 26, 1994
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1994
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''  
  17. ''
  18. ''   Additional authors:
  19. ''
  20. ''   Change History:
  21. ''   $Log:   //CIT/VOL1/CFLOG/logfiles/cominst/toolkit/inst___@.lss  $
  22. '' 
  23. ''    Rev 1.65   03 Jul 1996 12:21:02   jdonohue
  24. '' Only record the language of install for server install in PostSuccessRegINST
  25. '' 
  26. ''    Rev 1.64   14 Jun 1996 16:42:32   jdonohue
  27. '' Ref SPR:     RBAN364Q7G
  28. '' Added pipeline RunOnce registry entry if reboot needed and requested
  29. '' 
  30. ''    Rev 1.63   17 May 1996 10:09:58   jdonohue
  31. '' Added SYM_LOTUSUSERDIR to symbol list for install for cinstall.ini
  32. '' 
  33. ''    Rev 1.62   30 Apr 1996 09:58:48   jdonohue
  34. '' Ref SPR:    AGAO357QH7
  35. '' Changed logic in SetUserHomeDirectory so that LOTUSUSERDIR set to
  36. '' COMPONENTSDIR for standard and server, to local user directory for node, and
  37. '' to nothing for distribution
  38. '' 
  39. ''    Rev 1.61   29 Apr 1996 16:23:30   jdonohue
  40. '' Only refresh SYM_LOTUSUSERDIR Destination if symbol not empty string 
  41. '' 
  42. ''    Rev 1.60   22 Apr 1996 14:17:08   jdonohue
  43. '' Ref SPR:  RMOO345M3L
  44. '' Fixed error in setting value of LOTUSUSERDIR
  45. '' 
  46. ''    Rev 1.59   04 Apr 1996 16:27:48   jdonohue
  47. '' Moved IncrementSharedDLLCount and Lot_DoSharedDLLs from inst.lss to main.lss
  48. '' since inst PostConfig processing not done for node since install not copied
  49. '' 
  50. ''    Rev 1.58   02 Apr 1996 11:48:06   jdonohue
  51. '' Call MarkLanguageSubdir for INSTDIR only in node install
  52. '' 
  53. ''    Rev 1.57   01 Apr 1996 08:54:44   jdonohue
  54. '' Register "INSTDIR" with MarkLanguageSubdir since the destination of secondary
  55. '' language files to the server is subdirectory of main product directory
  56. '' 
  57. ''    Rev 1.56   27 Mar 1996 13:15:22   jdonohue
  58. '' Changed LOTUSFONTSDIR handling to mimic WIN/WINSYS fonts go to win directory
  59. '' on server
  60. '' 
  61. ''    Rev 1.55   18 Mar 1996 13:14:18   jdonohue
  62. '' Ref SPR:LSCR32TQHP
  63. '' Use IsNewShell instead of WhatPlatform for determination of LOTUSFONTS directory
  64. '' 
  65. ''    Rev 1.54   12 Mar 1996 15:37:36   jdonohue
  66. '' Moved call to FixupSourceDirSymbol for SYM_LOTUSFONTSDIR$ to InitINST
  67. '' 
  68. ''    Rev 1.53   04 Mar 1996 15:47:06   jdonohue
  69. '' Only call Lot_RegisterFonts for standard and node install
  70. '' 
  71. ''    Rev 1.52   04 Mar 1996 14:23:14   jdonohue
  72. '' Only call Lot_DoSharedDLLs for standard and node
  73. '' 
  74. ''    Rev 1.51   04 Mar 1996 08:31:46   jdonohue
  75. '' Remove 16 bit shared component support -- pass 1 : eliminate LOTUSAPP
  76. '' 
  77. ''    Rev 1.50   28 Feb 1996 15:01:02   jdonohue
  78. '' Added subs IncrementSharedDLLCount and Lot_DoSharedDLLs to increment shared DLL
  79. '' reference count in PostCopyConfigINST
  80. '' 
  81. ''    Rev 1.49   02 Feb 1996 14:42:10   jdonohue
  82. '' Fixed bug with symbol list name not getting set for node in InitInst
  83. '' 
  84. ''    Rev 1.48   29 Jan 1996 16:43:14   jdonohue
  85. '' Fixed error in adding SYM_LOTUSFONTSDIR to list
  86. '' 
  87. ''    Rev 1.47   25 Jan 1996 16:18:40   jdonohue
  88. '' Add SYM_LOTUSFONTSDIR$ to the Directory symbol table list for INST to make
  89. '' sure it gets into the cinstall.ini file
  90. '' 
  91. ''    Rev 1.46   24 Jan 1996 16:08:48   jdonohue
  92. '' Ref SPR:    JHOH327JVA
  93. '' Fixed logic error in setting LOTUSUSERDIR
  94. '' 
  95. ''    Rev 1.45   18 Jan 1996 13:38:16   jdonohue
  96. '' Register all the Windows system fonts installed with call to Lot_RegisterFonts
  97. '' 
  98. ''    Rev 1.44   17 Jan 1996 11:43:54   jdonohue
  99. '' Fixed bug setting SYM_LOTUSUSERDIR$ - append \ where not needed
  100. '' 
  101. ''    Rev 1.43   10 Jan 1996 16:51:18   jdonohue
  102. '' Changed SetUserHomeDirectory to locate the user component files in a
  103. '' subdirectory of the node root, or the original install location for that user
  104. '' if there is one in the registry
  105. '' 
  106. ''    Rev 1.42   09 Jan 1996 14:25:34   jdonohue
  107. '' Reset the source for node install for LOTUSFONTSDIR sections in PreCopyConfig
  108. '' 
  109. ''    Rev 1.41   02 Jan 1996 16:19:58   jdonohue
  110. '' Reset destination of all files that have destination directory symbol
  111. '' LOTUSFONTSDIR
  112. '' 
  113. ''    Rev 1.40   02 Jan 1996 15:58:04   jdonohue
  114. '' Determine the location of the Windows fonts directory and set symbol
  115. '' SYM_LOTUSFONTSDIR$ in InitInst.
  116. '' 
  117. ''    Rev 1.39   28 Dec 1995 10:54:36   jdonohue
  118. '' Added sub SetUserHomeDirectory for multi-user configuration
  119. '' 
  120. ''    Rev 1.38   22 Dec 1995 14:27:08   jdonohue
  121. '' Use the language acronym instead of the language for the install node icons
  122. '' 
  123. ''    Rev 1.37   22 Dec 1995 10:13:18   jdonohue
  124. '' Removed all references to SYM_PARENTDIR$ -- is now SYM_BASEDIR$ for all
  125. '' 
  126. ''    Rev 1.36   26 Oct 1995 15:25:16   tveerapp
  127. '' FIxed IF END IF for SYM_LOTUSUSERDIR processing in PrecopyConfigINST.
  128. '' 
  129. ''    Rev 1.35   Oct 24 1995 16:55:46   cmoy
  130. '' removed eof char
  131. '' 
  132. ''    Rev 1.34   24 Oct 1995 15:42:38   jdonohue
  133. '' Fixed syntax error
  134. '' 
  135. ''    Rev 1.33   24 Oct 1995 15:25:04   jdonohue
  136. '' Make sure SYM_LOTUSUSERDIR$ not blank before refresh
  137. '' 
  138. ''    Rev 1.32   24 Oct 1995 11:49:42   jdonohue
  139. '' Added dummy call to InitLanguages
  140. '' 
  141. ''    Rev 1.31   19 Oct 1995 14:57:16   jdonohue
  142. '' Refresh "LOTUSUSERDIR" destination in PreCopyConfig
  143. '' 
  144. ''    Rev 1.30   11 Oct 1995 15:57:22   glutz
  145. '' AddIconINST sets working directory.
  146. '' 
  147. ''    Rev 1.29   26 Sep 1995 09:01:30   jdonohue
  148. '' Fixed preventing overwrite of cinstall.ini, .inf for language install
  149. '' 
  150. ''    Rev 1.28   25 Sep 1995 12:51:28   jdonohue
  151. '' Added placeholder function InitLanguageINST
  152. '' 
  153. ''    Rev 1.27   Sep 25 1995 09:52:24   cmoy
  154. '' Prevent overwrite of cinstall.ini, xxx.lss by supressing INSTTOP section inst
  155. '' ead of INSTFILES section
  156. '' 
  157. ''    Rev 1.26   07 Sep 1995 14:55:18   tveerapp
  158. '' Moved the setting of INSTDIR during a language server install from
  159. '' main.lss to fix spr# WED2SVNRDZ
  160. '' 
  161. ''    Rev 1.25   01 Sep 1995 09:35:18   jdonohue
  162. '' Turn off INSTLANG?? section for language install
  163. '' 
  164. ''    Rev 1.24   18 Aug 1995 16:43:12   glutz
  165. '' INITInst sets InitDir to SYM_PARENTDIR$.
  166. '' 
  167. ''    Rev 1.23   14 Aug 1995 13:41:46   jdonohue
  168. '' Added code to add language qualifier to node icon in AddIconsINST
  169. '' 
  170. ''    Rev 1.22   14 Aug 1995 09:09:26   jdonohue
  171. '' Added code to handle language install to server
  172. '' 
  173. ''    Rev 1.21   02 Aug 1995 14:56:28   amontalv
  174. '' Added name of product to node install shortcut.
  175. '' 
  176. ''    Rev 1.20   17 Jul 1995 15:53:58   amontalv
  177. '' Added code to put install in program folder for server install.
  178. '' 
  179. ''    Rev 1.19   03 May 1995 18:14:14   mzgripce
  180. '' replace #else with 'else
  181. '' 
  182. ''    Rev 1.18   02 May 1995 12:52:42   cmoy
  183. '' Merged c2 into cf build
  184. '' 
  185. ''    Rev 1.18   10 Apr 1995 18:09:14   amontalv
  186. '' Changed comments to reflect change of function reference.
  187. '' 
  188. ''    Rev 1.17   02 Feb 1995 14:27:06   cmoy
  189. '' 
  190. '' Thangaraj added fixes for Pipeline Problem
  191. '' 
  192. ''    Rev 1.16   13 Jan 1995 17:17:58   tveerapp
  193. '' 
  194. '' Removed redundant code
  195. '' 
  196. ''    Rev 1.15   12 Jan 1995 15:30:42   tveerapp
  197. '' 
  198. '' 1. changed cmoVital to cmoOverwrite for making the LAUNCHEXE entry in cinstall.ini
  199. '' 2. Removed MakePath.It cannot handle file names with paths in it. e.g. reg\foo.exe
  200. '' 
  201. ''    Rev 1.14   11 Jan 1995 15:32:08   tveerapp
  202. '' 
  203. '' Fixed spr# TVEN28TJK:
  204. '' The cinstall.ini in the temporary directory is used to determine if the product
  205. '' being installed supports pipeline(based on the existence of the LAUNCHEXE entry)
  206. '' If it does, a global flag is set to indicate this and an enrty is made in the
  207. '' cinstall.ini that is installed on the machine.
  208. '' If the flag is set and the execuatble exists, it is launched.
  209. '' 
  210. ''    Rev 1.13   29 Dec 1994 12:23:14   tveerapp
  211. '' 
  212. '' Fixed AND _.
  213. '' 
  214. ''    Rev 1.12   29 Dec 1994 12:15:28   tveerapp
  215. '' 
  216. '' Added a check for pipeline processing to be launched only for a non-automated 
  217. '' install.
  218. '' 
  219. ''    Rev 1.11   28 Dec 1994 16:13:50   tveerapp
  220. '' 
  221. '' Added pipeline processing (electronic registration). Functions PostCopyConfig
  222. '' and PostSuccessReg have these changes. Removed the callback for the elrctronic
  223. '' registration dialog.
  224. '' 
  225. ''    Rev 1.10   12 May 1994 11:20:52   mmeth
  226. '' Adding Icons for Lic and Install and using DoMsgBox instead of MessageBox
  227. '' 
  228. ''    Rev 1.9   02 May 1994 18:34:02   mzgripce
  229. '' 
  230. '' add AddIconsINST()
  231. '' 
  232. ''    Rev 1.8   04 Apr 1994 18:10:44   mmeth
  233. '' Now can ignore share.lss & shared.ini
  234. '' 
  235. ''    Rev 1.7   22 Mar 1994 12:34:16   mmeth
  236. '' added licdir & instdir to toolkit registration
  237. '' 
  238. ''    Rev 1.6   28 Feb 1994 14:27:42   mmeth
  239. '' Incorrectly reseting INSTDIR in PrecopyCOnfigINST
  240. '' 
  241. ''    Rev 1.5   18 Feb 1994 13:29:42   mmeth
  242. '' 
  243. '' Now check for Listlength of Reg_GetDirSymbolList
  244. '' 
  245. ''    Rev 1.4   17 Feb 1994 10:23:06   mmeth
  246. '' Added Reg_SetAllowUserToChoseInSMartSUite
  247. '' 
  248. ''    Rev 1.3   16 Feb 1994 11:00:22   mmeth
  249. '' Added error message if INSTTOP sec is
  250. '' 
  251. ''    Rev 1.2   15 Feb 1994 15:33:58   mmeth
  252. '' took out a print
  253. '' 
  254. ''    Rev 1.1   15 Feb 1994 14:48:30   mmeth
  255. '' fixed BASEDIR & Reg_GetDirSymbolLIst(1)
  256. '' 
  257. ''    Rev 1.0   11 Feb 1994 10:56:44   jbrodeur
  258. '' Initial Revision
  259. ''----------------------------------------------------------------------
  260. ''   Date     Vers. Pgmr  SPR#  Change
  261. ''----------------------------------------------------------------------
  262. ''  2-08-94   0004  MMETH       moved checking first prod for change to Initcopylist
  263. ''  2-04-94   0003  MMETH       changed PreCopyConfig to work for SmartSuite
  264. ''  2-03-94   0002  MMETH       corrected 1 prod vs smartsuite
  265. ''  2-02-94   0001  MMETH       cinstall.ini install for standard and server
  266. ''  1-25-94   0000              Initial Check-In
  267. '' !
  268. ''
  269. ''----------------------------------------------------------------------
  270. ''
  271. ''*********************************************************************/
  272.  
  273. USE "TOOLKIT"
  274. USE "LANGUAGE"
  275. OPTION DECLARE
  276.  
  277.  
  278. '** These Are the Required Functions that Products must provide
  279. '***************************************************************
  280. DECLARE PUBLIC FUNCTION ProductRegINST (prodno%, network$, direction$) AS STRING
  281. DECLARE PUBLIC FUNCTION DefaultUserRegINST (prodno%, network$, direction$) AS STRING
  282. DECLARE PUBLIC FUNCTION InitINST (prodno%, network$, direction$, basedir$) AS STRING
  283. DECLARE PUBLIC FUNCTION PathChangeINST (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  284. DECLARE PUBLIC FUNCTION InitCopyListINST (prodno%, network$, direction$) AS STRING
  285. DECLARE PUBLIC FUNCTION PreCopyConfigINST (prodno%, network$, direction$, lic%) AS STRING
  286. DECLARE PUBLIC FUNCTION AddTheBillBoardsINST (prodno%, network$, direction$, nbytes&) AS STRING
  287. DECLARE PUBLIC FUNCTION PostCopyConfigINST (prodno%, network$, direction$, programgroup$) AS STRING
  288. DECLARE PUBLIC FUNCTION AddIconsINST (prodno%, network$, direction$, programgroup$) AS STRING
  289. DECLARE PUBLIC FUNCTION UIINST (prodno%, network$, direction$) AS STRING
  290. DECLARE PUBLIC FUNCTION PostSuccessRegINST (prodno%, network$, direction$) AS STRING
  291. DECLARE PUBLIC FUNCTION InitLanguageINST (prodno%, network$, direction$) AS STRING
  292.  
  293. '** Product specific functions
  294. '*****************************
  295. DECLARE FUNCTION GetINSTPathfromLotusIni() AS STRING
  296. DECLARE SUB SetUserHomeDirectory() 
  297.  
  298. ' ** Global flag for launching pipeline exe
  299. PUBLIC gProdsupport%
  300.  
  301. '*************************************************************************
  302. '**************************** Required Functions *************************
  303. '*************************************************************************
  304.  
  305. '*************************************************************************
  306. '** SUB Initialize
  307. '**
  308. '** Purpose: Initialize the INST product scripts. There is only one purpose
  309. '**          of this routine, it is to register **your product**. Without
  310. '**          this function, your product will not install.  All you
  311. '**          you need to do in this subroutine is:
  312. '**                   modify INST -> your acronmy.
  313. '**          NOTE: so as not to clutter up the INSTCUI.RC file,
  314. '**                we always use SID_INST.  You of course can be more
  315. '**                creative!
  316. '**
  317. '**          ASSUMPTIONS: Many things in the toolkit key off of your
  318. '**                       Acronym. These are the constraints:
  319. '**                     1. your top level chapther in the INF must
  320. '**                        have a KEYWORD of your Acronym +"TOP"
  321. '**                           e.g. INSTTOP
  322. '** Author:  Marcel Meth  
  323. '** Arguments: None
  324. '** Returns:   NONE
  325. '*************************************************************************
  326. SUB Initialize
  327.    Reg_RegisterProductNames "INST", LdString(SID_BLANKTEXT) 
  328. END SUB
  329.  
  330. '*************************************************************************
  331. '** FUNCTION ProductRegINST (prodno%, network$, direction$) AS INTEGER
  332. '**
  333. '** Purpose: This function allows your product to register itself
  334. '**          in the Install Product Registry.  The toolkit squirrles
  335. '**          the information provided and will provide you with
  336. '**          various features accordingly.  For example, if you support
  337. '**          shared files, the toolkit will do most of the work
  338. '**          for the COMPENT directory.
  339. '**
  340. '**          For the most part you should use only Reg_Set... Functions.
  341. '**          
  342. '**
  343. '**          If you turn on ATM, LICENSING, or and SHARED tools, then
  344. '**          you must be sure to add the appropriate lines and files
  345. '**          in you INST.SCR and INST.LYT, respectively. See Cook book.
  346. '**
  347. '**          If you support server, you will have to make sure that
  348. '**          you have the correct entire for the install files in your
  349. '**          INST.SCR and INST.LYT
  350. '**
  351. '** Arguments:  All paremeters are **read only**. 
  352. '**          prodno%: This is your prodno%.  It is assigned to you by the
  353. '**                   toolkit in the order in which you were  registered.
  354. '**                   When your product is oart of Smart Suite, Smart Suite
  355. '**                   will always be product #1. (prodno% >=1)
  356. '**          network$: UNINITIALIZED
  357. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  358. '**                      then step backwards, i.e start at your last dialog
  359. '**                      first.
  360. '**     
  361. '** Errors:    No return code for errors, you must Raise them
  362. '** Author:    MMeth
  363. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  364. '**                             allow the user to step backwards.)
  365. '*************************************************************************
  366.  
  367. PUBLIC FUNCTION ProductRegINST (prodno%, network$, direction$) AS STRING
  368.    ProductRegINST = gNEXT
  369.  
  370.    Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  371.    'Reg_SetSelectedInstallType ProdNo%,TypeSelected$  
  372.    Reg_SetProdSizes prodno%, 524288, 524288 ' .5 meg.
  373.    Reg_SetUIInOrOut prodno%, 1  
  374.    Reg_SetShareFlags prodno%, 0, 0, 0, 0 
  375.  
  376.    Reg_SetAllowUserToPickInSuite prodno%, 0
  377.  
  378.    'NO NEED TO SET SINCE THER IS NO CD SUPPORT.
  379.    'Reg_SetCDOption prodno%,Inst%,CDOptStr$ 
  380.    'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% 
  381.  
  382.    'DEAL WITH LATER
  383.    'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$  
  384.    'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% 
  385.    Reg_SetSrvSupport prodno%, 1
  386.    Reg_SetLicenseSupport prodno%, 0
  387.    Reg_SetATMSupport prodno%, 0
  388.  
  389.    'Reg_SetProgManagerGroup prodno%, LdString(SID_INST)
  390.  
  391.  
  392. END FUNCTION
  393.  
  394. '*************************************************************************
  395. '** FUNCTION DefaultUserRegINST (prodno%, network$, direction$) AS STRING
  396. '**
  397. '** Purpose: **Only** the first registered product gets called.
  398. '**          For SMartSUite, this will be Smart Suite.
  399. '**          This functions allows you to set the default user reg.
  400. '**          information that the user will be shown. The toolkit
  401. '**          will provide default values from MS-Windows. If you disagree
  402. '**          with them you should modify them in this function using:
  403. '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  404. '**          
  405. '**          It is upto you how you store registration information.
  406. '**          it will not be stored until later in PostCopyConfigINST.
  407. '**          The CIT provides functions that allow you to access .ri 
  408. '**          files: Lot_ReadDefaultsfromRi(ripath$).
  409. '**
  410. '**          If you need to write back to the floppy, do it here.
  411. '**          Most Lotus products will no longer write back to the floppy.
  412. '**          Remeber, you can't write back to a CD or network!
  413. '**
  414. '** In Symbols : SYM_NAME$, SYM_COMPANY$
  415. '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  416. '**            
  417. '** Arguments:  All paremeters are **read only**. 
  418. '**          prodno%: This is your prodno%.  It is assigned to you by the
  419. '**                   toolkit in the order in which you were  registered.
  420. '**                   When your product is oart of Smart Suite, Smart Suite
  421. '**                   will always be product #1. (prodno% >=1)
  422. '**          network$: UNINITIALIZED
  423. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  424. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  425. '**                      then step backwards
  426. '**     
  427. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  428. '**                      then step backwards, i.e start at your last dialog
  429. '**                      first.
  430. '**     
  431. '** Errors:    No return code for errors, you must Raise them
  432. '** Author:    MMeth
  433. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  434. '**                             allow the user to step backwards.)
  435. '*************************************************************************
  436.  
  437. PUBLIC FUNCTION DefaultUserRegINST (prodno%, network$, direction$) AS STRING
  438.  
  439.    DefaultUserRegINST = gNEXT
  440.  
  441. END FUNCTION
  442.  
  443.  
  444. '*************************************************************************
  445. '** FUNCTION InitINST (prodno%, network$, direction$, basedir$) AS STRING
  446. '**
  447. '** Purpose: This is the first time you will be called when
  448. '**          the server parmater us valid.  You need to use this
  449. '**          function to intialize certain things. (See the MUST DO
  450. '**          below).
  451. '**          
  452. '**          This is a good place to put up a dialog warning the user
  453. '**          of a prrevious version of your product. If there is a previous
  454. '**          version you might want to steer them twords or away from it.
  455. '**          
  456. '**
  457. '** Must Do: You **MUST** set inital values for all of the destination
  458. '** =======  directories that you refer to in your INF file.  If you do not,
  459. '**          then InitCopylist will fail!  e.g. SetSymbolValue "INSTDIR", basedir$
  460. '**          Of course you may be more intelligent.  You should preface your
  461. '**          directory with basedir$.  The toolkit is finding a good drive
  462. '**          letter and basedirectory.  Also, remeber all paths end in a
  463. '**          \ and are lower case.
  464. '**
  465. '**          You should **NOT** define LOTUSFONTSDIR, LOTUSUSERDIR, WINDIR, &
  466. '**          WINSYSDIR. The toolkit does this for you.
  467. '**
  468. '**          Once you have defined destdir symbols, you need to register
  469. '**          them with the toolkit. (See the code below)
  470. '**
  471. '** In Symbols : 
  472. '** Out Symbols: 
  473. '**            
  474. '** Arguments:  All paremeters are **read only**. 
  475. '**          prodno%: This is your prodno%.  It is assigned to you by the
  476. '**                   toolkit in the order in which you were  registered.
  477. '**                   When your product is oart of Smart Suite, Smart Suite
  478. '**                   will always be product #1. (prodno% >=1)
  479. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  480. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  481. '**                      then step backwards
  482. '**     
  483. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  484. '**                      then step backwards, i.e start at your last dialog
  485. '**                      first.
  486. '**
  487. '**          basedir$:   The toolkit has found a good base. for your directory.
  488. '**                      This is it.  You should use it.  This will make Smart
  489. '**                      Suite work, and will pick a good drive letter for you.
  490. '**     
  491. '** Errors:    No return code for errors, you must Raise them
  492. '** Author:    MMeth
  493. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  494. '**                             allow the user to step backwards.)
  495. '**
  496. '*************************************************************************
  497.  
  498. PUBLIC FUNCTION InitINST (prodno%, network$, direction$, basedir$) AS STRING
  499. DIM dirSym$, sym$, symname$, i%
  500.  
  501.    InitINST = direction$
  502.    '' In the backwards case, keep backing up
  503.    If direction$ = gBACK Then
  504.       EXIT FUNCTION
  505.    End If
  506.  
  507.     i% = 1
  508.     sym$ = Reg_GetDirSymbolList(prodno%)
  509.     symname$ = sym$ + gNAME
  510.         
  511.    If network$ <> gSERVER AND network$ <> gSTANDARD AND network$ <> gDISTRIBUTION$ Then
  512.          Reg_SetUIInOrOut prodno%, FALSE
  513.    Else
  514.       '** Figure out where the first product is., put install there!
  515.       IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSINGLE$ THEN
  516.          SetSymbolValue "INSTDIR", GetSymbolValue(SYM_BASEDIR$)
  517.       Else
  518.          SetSymbolValue "INSTDIR", basedir$
  519.       End If
  520.  
  521.       SetSymbolValue "INSTDIRNAME", " "
  522.  
  523.       SetListItem sym$, 1, "INSTDIR"
  524.       SetListItem symname$, 1, "INSTDIR" + gNAME$
  525.         i% = i% + 1
  526.  
  527.    End If
  528. '**
  529. '**    Determine the location of the Windows fonts directory and set symbol
  530. '**    SYM_LOTUSFONTSDIR$
  531.    If network$ = gNODE OR network$ = gSTANDARD THEN 
  532.         IF IsNewShell() THEN
  533.             SetSymbolValue SYM_LOTUSFONTSDIR$, GetSymbolValue(SYM_WINDIR$) _
  534.                 + LdString(SID_FONTS95_DIR) + "\"
  535.         ELSE
  536.             SetSymbolValue SYM_LOTUSFONTSDIR$, GetSymbolValue(SYM_WINSYSDIR$)
  537.         END IF
  538.     END IF
  539.  
  540.     ' Initialize SYM_LOTUSUSERDIR$ symbol
  541.     SetUserHomeDirectory
  542.  
  543.     ' The destination of secondary language files to the server is subdirectory
  544.     ' of main product directory
  545.    If network$ = gNODE THEN _
  546.         MarkLanguageSubdir("INSTDIR")
  547.         
  548.     ' Make sure special CIT symbols get into Cinstall.ini
  549.     dirSym$ = SYM_LOTUSFONTSDIR$ 
  550.     SetListItem sym$, i%, dirSym$
  551.     SetListItem symname$, i%, dirSym$ + gNAME$
  552.     i% = i% + 1
  553.     dirSym$ = SYM_LOTUSUSERDIR$ 
  554.     SetListItem sym$, i%, dirSym$
  555.     SetListItem symname$, i%, dirSym$ + gNAME$
  556.     i% = i% + 1
  557.     
  558. END FUNCTION
  559.  
  560.  
  561. '*************************************************************************
  562. '** FUNCTION PathChangeINST (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  563. '**
  564. '** Purpose: This function is called whenever the user proposes changes
  565. '**          to a path for your product.  by the time this function calls
  566. '**          you, the paths have already been checked syntactically, and
  567. '**          the directory has been checked to see that it is in fact writeable.
  568. '**          Your obligation is to verify that the proposed new path is okay with
  569. '**          you.  If, not, put up a dialog telling the user and return
  570. '**          gBACK.
  571. '**          
  572. '** In Symbols : 
  573. '** Out Symbols: 
  574. '**            
  575. '** Arguments:  All paremeters are **read only**. 
  576. '**          prodno%: This is your prodno%.  It is assigned to you by the
  577. '**                   toolkit in the order in which you were  registered.
  578. '**                   When your product is oart of Smart Suite, Smart Suite
  579. '**                   will always be product #1. (prodno% >=1)
  580. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  581. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  582. '**                      then step backwards
  583. '**      destdirsym$: The destdir symbol that has changed. e.g. "INSTDIR"
  584. '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  585. '**                   your top level product directory should change,
  586. '**                   probably "INSTDIR"
  587. '**     
  588. '** Errors:    No return code for errors, you must Raise them
  589. '** Author:    MMeth
  590. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  591. '**                             allow the user to step backwards.)
  592. '**
  593. '*************************************************************************
  594.  
  595. PUBLIC FUNCTION PathChangeINST (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  596. DIM path$
  597.  
  598.    PathChangeINST = gNEXT
  599.  
  600.    path$ = GetSymbolValue (destdirsym$)
  601.    '' The following is a psudocode example
  602.    ''''''rc$ = DetectVersionPriorToDarwin(path$)
  603.    ''''''If rc$ = "BEAGLE" then
  604.    ''''''   ShowPathError SID_BEAGLE_FOUND, SID_ERR_EXISTBEAGLE, path$
  605.    ''''''   PathChangeINST = gBACK
  606.    ''''''end if   
  607.  
  608. END FUNCTION
  609.  
  610.  
  611. '*************************************************************************
  612. '** FUNCTION InitCopyListINST (prodno%, network$, direction$) AS STRING
  613. '**
  614. '** Purpose:  Product must Initialize the copylist
  615. '**          
  616. '** Must Do: You must initialize the copy list.  However,
  617. '** =======  if you leve the code totally untouched as is,
  618. '**          it will probably work for you.
  619. '**
  620. '** In Symbols : 
  621. '** Out Symbols: 
  622. '**            
  623. '** Arguments:  All paremeters are **read only**. 
  624. '**          prodno%: This is your prodno%.  It is assigned to you by the
  625. '**                   toolkit in the order in which you were  registered.
  626. '**                   When your product is oart of Smart Suite, Smart Suite
  627. '**                   will always be product #1. (prodno% >=1)
  628. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  629. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  630. '**                      then step backwards
  631. '**     
  632. '** Errors:    No return code for errors, you must Raise them
  633. '** Author:    MMeth
  634. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  635. '**                             allow the user to step backwards.)
  636. '**
  637. '*************************************************************************
  638.  
  639. PUBLIC FUNCTION InitCopyListINST (prodno%, network$, direction$) AS STRING
  640. DIM i%, sym$, chpt$
  641.  
  642.    InitCopyListINST = direction$
  643.    '' In the backwards case, keep backing up
  644.    If direction$ = gBACK Then
  645.       EXIT FUNCTION
  646.    End If
  647.  
  648.    sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  649.    chpt$ = Lot_GetChapterFromKeyWord(sym$)
  650.  
  651.    if chpt$ = "" then   
  652.       ErrorMsg 0, "Developers: You need to have install section with INSTTOP in INF file"
  653.       ERROR STFQUIT
  654.    end if
  655.  
  656.    SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  657.  
  658.    CASE gCOMPLETE$
  659.       i% = F_COMPLETE
  660.    CASE gLAPTOP$
  661.       i% = F_LAPTOP
  662.    CASE gCUSTOM$
  663.       i% = F_CUSTOM
  664.    END SELECT
  665.  
  666.    Lot_InitializeCopyList chpt$, i%
  667.  
  668.    '** FOR STANDARD we only want to install the cinstall.ini file
  669.    If network$ <> gSERVER$ Then
  670.       If FIsKeywordinCopyList ("INSTFILES") <> FALSE Then
  671.          chpt$ =  Lot_GetChapterFromKeyword("INSTFILES")
  672.          Lot_ToggleChapterFilesInCopyList chpt$              
  673.       End If
  674.    End If
  675.         
  676.     'For a language install, we don't overwrite the cinstall.ini and .INF files
  677.     'by turning off the INSTTOP section
  678.    IF network$ <> gSERVER$ THEN
  679.    IF GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$ THEN
  680.         chpt$ =  Lot_GetChapterFromKeyword("INSTTOP")
  681.         Lot_SetChapterFilesInCopyListInOrOut chpt$, 0 
  682.     END IF
  683.    END iF
  684.     
  685. END FUNCTION
  686.  
  687. '*************************************************************************
  688. '** FUNCTION UIINST (prodno%, network$, direction$) AS STRING
  689. '**
  690. '** Purpose: This is your chance to put up any User Interface
  691. '**          that you want.  remeber, try to keep it short.
  692. '**          In Smart Suite, if every product puts up to extra
  693. '**          dialogs, then the Smart SUite will consist of 16 dialogs!
  694. '**          
  695. '**          Pay attention to the value of direction, if you are putting
  696. '**          up more than one dialog.
  697. '**
  698. '**          The toolkit will do an acurate space computation later,
  699. '**          so you can tamper with the copy list. But you shouldn't
  700. '**          write out anything to the disk until PostCopyCofig!
  701. '**   
  702. '** In Symbols : 
  703. '** Out Symbols: 
  704. '**            
  705. '** Arguments:  All paremeters are **read only**. 
  706. '**          prodno%: This is your prodno%.  It is assigned to you by the
  707. '**                   toolkit in the order in which you were  registered.
  708. '**                   When your product is oart of Smart Suite, Smart Suite
  709. '**                   will always be product #1. (prodno% >=1)
  710. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  711. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  712. '**                      then step backwards
  713. '**     
  714. '** Errors:    No return code for errors, you must Raise them
  715. '** Author:    MMeth
  716. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  717. '**                             allow the user to step backwards.)
  718. '**
  719. '*************************************************************************
  720.  
  721. PUBLIC FUNCTION UIINST (prodno%, network$, direction$) AS STRING
  722.    UIINST = direction$
  723.    '' In the backwards case, keep backing up
  724.    If direction$ = gBACK Then
  725.       EXIT FUNCTION
  726.    End If
  727.  
  728. END FUNCTION
  729.  
  730.  
  731. '*************************************************************************
  732. '** FUNCTION PreCopyConfigINST (prodno%, network$, direction$, lic%) AS STRING
  733. '**
  734. '** Purpose: This is the very last function called before the space is
  735. '**          acurately computed (to the last byte) and files are copied
  736. '**          by the toolkit.  If you have any last minute changes to
  737. '**          do, this is the time to do them.  example:
  738. '**          Test for monitor resolution, and turn on the chapter
  739. '**          in the copy list with the appropriate resoltuion.
  740. '**          
  741. '** In Symbols : 
  742. '** Out Symbols: 
  743. '**            
  744. '** Arguments:  All paremeters are **read only**. 
  745. '**          prodno%: This is your prodno%.  It is assigned to you by the
  746. '**                   toolkit in the order in which you were  registered.
  747. '**                   When your product is oart of Smart Suite, Smart Suite
  748. '**                   will always be product #1. (prodno% >=1)
  749. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  750. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  751. '**                      then step backwards
  752. '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  753. '**     
  754. '** Errors:    No return code for errors, you must Raise them
  755. '** Author:    MMeth
  756. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  757. '**                             allow the user to step backwards.)
  758. '**
  759. '*************************************************************************
  760.  
  761. PUBLIC FUNCTION PreCopyConfigINST (prodno%, network$, direction$, lic%) AS STRING
  762. DIM dirSym$
  763.  
  764.    PreCopyConfigINST = gNEXT
  765.  
  766.    '* Just in case product 1 changed.
  767.    If GetSymbolValue (SYM_SINGLESMARTSUITE) =  gSINGLE$ Then
  768.       dirSym$ = Reg_GetDirSymbolList(1)
  769.       If GetListLength(dirSym$) >= 1 Then
  770.          dirSym$ = GetListItem(dirSym$, 1)
  771.       End If
  772.       SetSymbolValue "INSTDIR", GetSymbolValue(dirSym$)
  773.    Else
  774.       SetSymbolValue "INSTDIR", GetSymbolValue (SYM_BASEDIR$)
  775.    End If
  776.  
  777.    '** TV: We have to reset this symbol for language/server install 
  778.    IF GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$  AND _
  779.       GetSymbolValue(SYM_NETWORK$) =gSERVER$ THEN 
  780.       SetLanguageSubdir  "INSTDIR", "INSTDIR"  
  781.    END IF
  782.  
  783.    Lot_RefreshDestination ("INSTDIR") 
  784.  
  785.     'Set LOTUSUSERDIR for user files on node
  786.     'may have been changed if BASEDIR changes through UI
  787.     SetUserHomeDirectory
  788.    IF GetSymbolValue(SYM_LOTUSUSERDIR$) <> "" THEN _
  789.         Lot_RefreshDestination (SYM_LOTUSUSERDIR$) 
  790.  
  791. END FUNCTION
  792.  
  793.  
  794. '*************************************************************************
  795. '** FUNCTION  AddTheBillBoardsINST (prodno%, network$, direction$, nbytes&)
  796. '**
  797. '** Purpose: This is where to add the billboards using the function:
  798. '**          AddToBillboardList. Use nbytes& as the last parameter to
  799. '**          the MS-SETUP function AddToBillboardList
  800. '**
  801. '** In Symbols : 
  802. '** Out Symbols: 
  803. '**            
  804. '** Arguments:  All paremeters are **read only**. 
  805. '**          prodno%: This is your prodno%.  It is assigned to you by the
  806. '**                   toolkit in the order in which you were  registered.
  807. '**                   When your product is oart of Smart Suite, Smart Suite
  808. '**                   will always be product #1. (prodno% >=1)
  809. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  810. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  811. '**                      then step backwards
  812. '**           nbytes: Determines the duration of billboard timing.
  813. '**     
  814. '** Errors:    No return code for errors, you must Raise them
  815. '** Author:    MMeth
  816. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  817. '**                             allow the user to step backwards.)
  818. '**
  819. '*************************************************************************
  820.  
  821. PUBLIC FUNCTION AddTheBillBoardsINST (prodno%, network$, direction$, nbytes&) AS STRING
  822.    AddTheBillBoardsINST = direction$
  823.    '' In the backwards case, keep backing up
  824.    If direction$ = gBACK Then
  825.       EXIT FUNCTION
  826.    End If
  827.  
  828.    'psudo code follows as an example
  829.    ''''If network$ <> gNODE$ Then
  830.    ''''   SetListItem "IDC_BMP", 1, STR$(IDD_BILLBD1_BMP)
  831.    ''''   AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_BILLBD1, "_FNameOrgDlgProc@16", nbytes& 
  832. '      else
  833.    ''''   AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_BILLBD1, "FNameOrgDlgProc", nbytes& 
  834.    ''''End If
  835.  
  836. END FUNCTION
  837.  
  838. '*************************************************************************
  839. '** FUNCTION PostCopyConfigINST (prodno%, network$, direction$, programgroup$) AS STRING
  840. '**
  841. '** Purpose: This is called just after file copy has completed.
  842. '**          This is your opportunity to do all the configuaration
  843. '**          you need.  This includes:
  844. '**          
  845. '**          1. Writing to all your ini files
  846. '**          2. Writeing to OLE Reg database
  847. '**          3. Writing to any other confi files you may support
  848. '**          4. Writing out user registration information
  849. '**          5. Add program manager icons of those features
  850. '**             thatwere installed.
  851. '**          6. Create any working directories.
  852. '**             A working directory is one that does not contain any
  853. '**             files, thus the toolkit did not create it for you.
  854. '**
  855. '**          NOTE: THERE are many subtlties in here if you are
  856. '**                dealing with node and CD installs.  In particular,
  857. '**                you must be ***very*** careful to understand where the
  858. '**                things are that you are pointing to.  They could
  859. '**                be on the node, server, or CD!  This, in combination
  860. '**                with the INF file for Server/Node is probably the trickiest
  861. '**                part of writing a quality install.  When configuring,
  862. '**                you must be careful to consider what happens if there is
  863. '**                a preexisting product on the machine, in the same location or
  864. '**                another one!  This is very very tricky.  What happens
  865. '**                if you had a full installation previously in location C:\FOO
  866. '**                and now the user is installing a minimum installation in loaction
  867. '**                D:\FOO. 
  868. '**
  869. '**                Each and every thing you do for configuartion needs very
  870. '**                careful thought.
  871. '**
  872. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  873. '**                This currrently tells you the location of a feature
  874. '**                If the feature appears both in the SERVER.INF and the
  875. '**                NODE.INF referred to by the same Keyword ID.
  876. '**                We do not support CDs with this command yet, but we will at some
  877. '**                time.
  878. '**
  879. '**                Also look out for writing to a file when the directory
  880. '**                doesn't exist.  If the user deselected one of your
  881. '**                you options, your install may still be running,
  882. '**                but since there were no files to copy into the directory
  883. '**                 it wasn't created by the toolkit!
  884. '**
  885. '**                Finally, remember that configuration files generally
  886. '**                hold the state that the user has customized earlier.
  887. '**                Sometimes you don't want to overwrite these!
  888. '**                You will primarily use three MS-SETUP functions
  889. '**                in here: 
  890. '**                  1. CreateIniKeyValue  (writing to ini files)
  891. '**                  2. SetRegKeyValue     (writing to OLE reg DB)
  892. '**                  3. CreateProgmanItem  (writing to progman) 
  893. '**
  894. '**                CreateProgmanGroup &  ShowProgmanGroup are
  895. '**                done for you by the time you reach this
  896. '**                function.
  897. '**
  898. '**                You will not have to do any configuration of LOTUS SHARED
  899. '**                tools.  The toolkit will do this for you.
  900. '** In Symbols : 
  901. '** Out Symbols: 
  902. '**            
  903. '** Arguments:  All paremeters are **read only**. 
  904. '**          prodno%: This is your prodno%.  It is assigned to you by the
  905. '**                   toolkit in the order in which you were  registered.
  906. '**                   When your product is oart of Smart Suite, Smart Suite
  907. '**                   will always be product #1. (prodno% >=1)
  908. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  909. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  910. '**                      then step backwards
  911. '**    programgroup$: The name of the program group the user chose to
  912. '**                   install the program manager icons     
  913. '**
  914. '** Errors:    No return code for errors, you must Raise them
  915. '** Author:    MMeth
  916. '** Returns:   return: gNEXT 
  917. '**
  918. '*************************************************************************
  919.  
  920. PUBLIC FUNCTION PostCopyConfigINST (prodno%, network$, direction$, programgroup$) AS STRING
  921.    PostCopyConfigINST = direction$
  922.    '' In the backwards case, keep backing up
  923.    If direction$ = gBACK Then
  924.       EXIT FUNCTION
  925.    End If
  926.    
  927. SKIPCONFIG:
  928.  
  929. END FUNCTION
  930.  
  931. '** PUBLIC FUNCTION AddIconsINST (prodno%, network$, direction$, programgroup$) AS STRING
  932. '** Purpose: This is called just after file copy has completed.
  933. '**          1. Add program manager icons of those features
  934. '**             thatwere installed.
  935. '**
  936. '**          NOTE: THERE are many subtlties in here if you are
  937. '**                dealing with node and CD installs.  In particular,
  938. '**                you must be ***very*** careful to understand where the
  939. '**                things are that you are pointing to.  They could
  940. '**                be on the node, server, or CD!  This, in combination
  941. '**                with the INF file for Server/Node is probably the trickiest
  942. '**                part of writing a quality install.  When configuring,
  943. '**                you must be careful to consider what happens if there is
  944. '**                a preexisting product on the machine, in the same location or
  945. '**                another one!  This is very very tricky.  What happens
  946. '**                if you had a full installation previously in location C:\FOO
  947. '**                and now the user is installing a minimum installation in loaction
  948. '**                D:\FOO. 
  949. '**
  950. '**                Each and every thing you do for configuartion needs very
  951. '**                careful thought.
  952. '**
  953. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  954. '**                This currrently tells you the location of a feature
  955. '**                If the feature appears both in the SERVER.INF and the
  956. '**                NODE.INF referred to by the same Keyword ID.
  957. '**                We do not support CDs with this command yet, but we will at some
  958. '**                time.
  959. '**
  960. '**                Also look out for writing to a file when the directory
  961. '**                doesn't exist.  If the user deselected one of your
  962. '**                you options, your install may still be running,
  963. '**                but since there were no files to copy into the directory
  964. '**                 it wasn't created by the toolkit!
  965. '**
  966. '**                Finally, remember that configuration files generally
  967. '**                hold the state that the user has customized earlier.
  968. '**                Sometimes you don't want to overwrite these!
  969. '**                You will primarily use three MS-SETUP functions
  970. '**                in here: 
  971. '**                  1. CreateProgmanItem  (writing to progman) 
  972. '**
  973. '**                CreateProgmanGroup &  ShowProgmanGroup are
  974. '**                done for you by the time you reach this
  975. '**                function.
  976. '**
  977. '**                You will not have to do any configuration of LOTUS SHARED
  978. '**                tools.  The toolkit will do this for you.
  979. '**            
  980. '** Arguments:  All paremeters are **read only**. 
  981. '**          prodno%: This is your prodno%.  It is assigned to you by the
  982. '**                   toolkit in the order in which you were  registered.
  983. '**                   When your product is oart of Smart Suite, Smart Suite
  984. '**                   will always be product #1. (prodno% >=1)
  985. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  986. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  987. '**                      then step backwards
  988. '**    programgroup$: The name of the program group the user chose to
  989. '**                   install the program manager icons     
  990. '**
  991. '** Errors:    No return code for errors, you must Raise them
  992. '** Author:    MZ
  993. '** Returns:   return: gNEXT 
  994. '**
  995. '*************************************************************************
  996.  
  997. PUBLIC FUNCTION AddIconsINST (prodno%, network$, direction$, programgroup$) AS STRING
  998. DIM instdir$, notused%, Caption$
  999. DIM LanguageQualifier$, LanguageAcronym$
  1000.    AddIconsINST = direction$
  1001.    '' In the backwards case, keep backing up
  1002.    If direction$ = gBACK Then
  1003.       EXIT FUNCTION
  1004.    End If
  1005.  
  1006.    If network$ = gSERVER Then
  1007.       instdir$ = Lot_WhereIsFeature(prodno%, "INSTFILES", "install.exe")
  1008.         Caption$ = LdString(SID_INST_VIEWSTRING)+ Reg_GetProductName(1)
  1009.         'Add language qualifier for secondary languages
  1010.         IF GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$ THEN 
  1011.             LanguageAcronym$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$) 
  1012.             LanguageQualifier$ = LanguageAcronym$  
  1013.             Caption$ = Caption$ + " " + LanguageQualifier$  
  1014.         END IF
  1015.       ASSERT instdir$ <> "", ""
  1016.        If IsNewShell() THEN
  1017.             notused%=Lot_AddLinkToFolder(prodno%, instdir$ + "install.exe", _
  1018.                                     Caption$+".lnk", _
  1019.                                     Caption$, "", instdir$)
  1020.             Lot_RegisterObject "INSTFILES",UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(prodno%) + Caption$+".lnk"
  1021.         Else    
  1022.           CreateProgmanItem  programgroup$, Caption$, _
  1023.                   instdir$ + "install.exe", ",,,," + instdir$, cmoOverwrite
  1024.            Lot_RegisterObject "INSTFILES", UNIN_CLASS_ICON$, programgroup$ + "\" + Caption$
  1025.         End If
  1026.    End If
  1027.  
  1028.     ' Register all the Windows system fonts installed
  1029.    IF network$ = gNODE OR network$ = gSTANDARD THEN _
  1030.         Lot_RegisterFonts
  1031.  
  1032. END FUNCTION
  1033.  
  1034.  
  1035.  
  1036. '*************************************************************************
  1037. '** FUNCTION PostSuccessRegINST (prodno%, network$, direction$) AS STRING
  1038. '**
  1039. '** Purpose: If you need to launch something after install runs
  1040. '** In Symbols : 
  1041. '** Out Symbols: 
  1042. '**            
  1043. '** Arguments:  All paremeters are **read only**. 
  1044. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1045. '**                   toolkit in the order in which you were  registered.
  1046. '**                   When your product is oart of Smart Suite, Smart Suite
  1047. '**                   will always be product #1. (prodno% >=1)
  1048. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1049. '**       direction$: gNEXT 
  1050. '**
  1051. '** Errors:    No return code for errors, you must Raise them
  1052. '** Author:    MMeth
  1053. '** Returns:   return: gNEXT 
  1054. '**
  1055. '*************************************************************************
  1056.  
  1057. PUBLIC FUNCTION PostSuccessRegINST (prodno%, network$, direction$) AS STRING
  1058.  
  1059. DIM rc$, ExecError%, notused%, executable$, gInstallIniFile$, prodbaseDir$
  1060. DIM distribution$, automation$
  1061. DIM cwd$, TmpInstallIni$
  1062.  
  1063.    PostSuccessRegINST = direction$
  1064.    '' In the backwards case, keep backing up
  1065.    'If direction$ = gBACK Then
  1066.    '   EXIT FUNCTION
  1067.    'End If
  1068.  
  1069.     'Build the path to the installed cinstall.ini
  1070.     prodbaseDir$ = Lot_GetInstallDir()
  1071.    gInstallIniFile$ = MakePath(prodbaseDir$,gINSTALLINI$)
  1072.  
  1073.    '** the following is to identify if the product currently being installed supports
  1074.    '** the electronic registration. It sets up a global flag to indicate this
  1075.    '** and makes the LAUNCHEXE entry to the installed cinstall.ini
  1076.  
  1077.    cwd$ = GetSymbolValue(SYM_STF_CWDDIR$)
  1078.    TmpInstallIni$ = MakePath(cwd$,gINSTALLINI$)
  1079.    executable$ = GetIniKeyString(TmpInstallIni$, "TOOLKIT","LAUNCHEXE")    
  1080.  
  1081.    IF executable$ <> "" THEN
  1082.       gProdsupport% = 1
  1083.       '** make the exe entry
  1084.       CreateIniKeyValue gInstallIniFile$, "TOOLKIT", "LAUNCHEXE", executable$, cmoOverwrite    
  1085.    ELSE
  1086.       '** The current product that is being installed does not support pipeline
  1087.       gProdsupport% = 0        
  1088.    END IF
  1089.  
  1090.    '** The following is to identify subsequent installs from a distribution install
  1091.    '** to avoid launching the electronic registration. It makes an entry for
  1092.    '** a distribution install
  1093.  
  1094.    network$ = GetSymbolValue(SYM_NETWORK$)
  1095.    automation$ = GetSymbolValue(SYM_AUTOMATIONINST$)
  1096.    distribution$ = GetIniKeyString(gInstallIniFile$, "TOOLKIT", "DISTRIBUTION")
  1097.    IF network$ <> gNODE$ AND distribution$ = "" AND automation$ <> gTRUE$ THEN
  1098.           executable$ = GetIniKeyString(gInstallIniFile$, "TOOLKIT","LAUNCHEXE")    
  1099.         IF executable$ <> "" THEN
  1100.      '*** The check below is because MakePath only works with
  1101.      '** a file name of 12 characters .e.g. foo.exe  and not reg\foo.exe
  1102.             IF RIGHT$(prodbaseDir$, 1) <> "\" THEN _
  1103.                 prodbaseDir$ = prodbaseDir$ + "\"
  1104.             executable$ = prodbaseDir$ + executable$
  1105.             IF DoesFileExist(executable$,femExists) <> 0 AND gProdsupport% = 1 THEN
  1106.                 '' Don't launch pipeline if restart flag on 
  1107.                 IF FExitExecRestart <> FALSE OR RebootLater% THEN
  1108.                     ExecError% = WinExec(executable$,SW_SHOWNORMAL)
  1109.                     IF ExecError% < 32 THEN _
  1110.                         ErrorMsg SID_ERR_EXECPIPELINE, executable$
  1111.                 ELSE
  1112.                     '' Put pipeline in the start once category on reboot
  1113.                     DIM RegKey$
  1114.                     DIM LReturn& : LReturn& = ERROR_SUCCESS 
  1115.                     DIM CommandLine$ : CommandLine$ = executable$
  1116.                     DIM value$ : value$  = "Lotus Pipeline"
  1117.                     RegKey$= "Software\Microsoft\Windows\CurrentVersion\RunOnce"
  1118.                     IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, RegKey$) = FALSE THEN _
  1119.                         LReturn& = Lot_RegCreateKeyEx(HKEY_CURRENT_USER, RegKey$)
  1120.                     IF LReturn& <> ERROR_SUCCESS THEN
  1121.                         RegErrorMsg SID_ERR_REG_CREATE, gHLM$+"\"+RegKey$,"",""
  1122.                     ELSE      
  1123.                         LReturn& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, RegKey$,_
  1124.                             value$, REG_SZ, CommandLine$, LENBP(CommandLine$)+1)
  1125.                     END IF
  1126.                     IF LReturn& <> ERROR_SUCCESS THEN _
  1127.                         RegErrorMsg SID_ERR_REG_CREATE, gHLM$+"\"+RegKey$,"",""
  1128.                 END IF
  1129.             END IF
  1130.         END IF
  1131.     END IF
  1132.  
  1133.     '** Record the language of install -- but only for server
  1134.    IF network$ = gSERVER$ THEN _
  1135.          CreateIniKeyValue gInstallIniFile$, "TOOLKIT", "LANGUAGE",_
  1136.              GetSymbolValue(SYM_INSTALL_LANGUAGE$), cmoOverwrite
  1137.      
  1138.    IF network$ = gDISTRIBUTION$ THEN
  1139.      CreateIniKeyValue gInstallIniFile$, "TOOLKIT", "DISTRIBUTION", "YES", cmoVital    
  1140.    END IF
  1141.         
  1142. END FUNCTION
  1143.  
  1144.  
  1145. '********************************
  1146. '********************************
  1147. '** Product Specific Functions **
  1148. '********************************
  1149. '********************************
  1150.  
  1151. '*************************************************************************
  1152. '** FUNCTION GetINSTPathfromLotusIni() AS STRING
  1153. '**
  1154. '** Purpose: Gets the product dir path from Lotus.ini file, and searches for
  1155. '**          inst.exe in the dir. 
  1156. '**            
  1157. '** Author:    JYOTI KEDIA
  1158. '** Arguments: None
  1159. '** Returns:   if inst.exe does not exist in dir specified in lotus.ini, it
  1160. '**            returns "", otherwise returns the full path to the product.
  1161. '*************************************************************************
  1162.  
  1163. FUNCTION GetINSTPathfromLotusIni() AS STRING
  1164. DIM DestDir$, lotusinipath$, defdir$, temp%, ProdDir$, fullpath$, rv%
  1165.  
  1166.    DestDir$ = GetWindowsDir()
  1167.    lotusinipath$ = DestDir$ +"lotus.ini"
  1168.  
  1169.    if DoesFileExist(lotusinipath$,femExists) then
  1170.       defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "inst")
  1171.       if defdir$ <> "" then
  1172.          temp% = INSTR(1,LCASE$(defdir$),"inst.exe")
  1173.          if temp% <> 0 then
  1174.             ProdDir$ = MID$(defdir$,1,(temp%-1))
  1175.             if ProdDir$ <> "" then
  1176.                fullpath$ = ProdDir$ + "inst.exe"
  1177.                if DoesFileExist(fullpath$, femExists) then
  1178.                   rv% = Lot_CleanPath(fullpath$)
  1179.                   GetINSTPathfromLotusIni = fullpath$
  1180.                   EXIT FUNCTION
  1181.                end if 
  1182.             end if 
  1183.          end if 
  1184.       end if 
  1185.    end if
  1186.  
  1187.    GetINSTPathfromLotusIni = ""
  1188.  
  1189. END FUNCTION
  1190.  
  1191. '*************************************************************************
  1192. '** PUBLIC FUNCTION InitLanguageINST (prodno%, network$, direction$)
  1193. '** Purpose: Placeholder, since all products must provide a function of this
  1194. '** name, does nothing.
  1195. '*************************************************************************
  1196. PUBLIC FUNCTION InitLanguageINST (prodno%, network$, direction$) AS STRING
  1197.    InitLanguages "", "", prodno%    
  1198.     InitLanguageINST  = ""
  1199. END FUNCTION
  1200.  
  1201. CONST UserPathRegValue$ = "User Path"
  1202.  
  1203. SUB SetUserHomeDirectory() 
  1204. '*************************************************************************
  1205. '** Purpose: Sets the value of the special destination directory symbol
  1206. '**    SYM_LOTUSUSERDIR$ for user specific files on node
  1207. '** For standard or server, set value to SYM_COMPONENTSDIR$           
  1208. '**            
  1209. '** Author:    JMDonohue
  1210. '*************************************************************************
  1211. DIM Key$, rc&, user$, drive$, s$, Size&, Path$, i%, network$ 
  1212.  
  1213.    network$ = GetSymbolValue(SYM_NETWORK$)
  1214.     Key$ =  gREGLOTUSCOMP
  1215.    SELECT CASE network$
  1216.     CASE gSTANDARD$
  1217.         SetSymbolValue SYM_LOTUSUSERDIR$, GetSymbolValue(SYM_COMPONENTSDIR$)
  1218.     CASE gSERVER$
  1219.         SetSymbolValue SYM_LOTUSUSERDIR$, GetSymbolValue(SYM_COMPONENTSDIR$)
  1220.     CASE gNODE$
  1221.         ' Use the local path for the user if it exists
  1222.         Path$ = ""
  1223.         IF     Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, Key$) THEN
  1224.             s$=CreateBuffer(256)
  1225.             Size& = 256
  1226.             IF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, Key$, UserPathRegValue$, 0, _
  1227.                     s$, Size&) = ERROR_SUCCESS THEN Path$=NullTrim(s$) 
  1228.         END IF
  1229.         IF Path$ = "" THEN
  1230.             s$ = GetSymbolValue(SYM_BASEDIR$)
  1231.             Path$ = MakePath(s$,gCOMPONENTS$) + "\"
  1232.         END IF
  1233.         SetSymbolValue SYM_LOTUSUSERDIR$, Path$
  1234.     CASE gDISTRIBUTION$
  1235.         SetSymbolValue SYM_LOTUSUSERDIR$, ""
  1236.    END SELECT
  1237.  
  1238. END SUB
  1239.  
  1240. %rem
  1241.  
  1242. ****NOTE:
  1243. ****This is not used in CIT 2.1
  1244. ****Kept around for sentimental reasons
  1245.  
  1246. CONST UserDirRegKey$ = _
  1247. "SOFTWARE\Microsoft\Windows\CurrentVersion\ProfileList"
  1248. CONST UserDirRegValue$ = "ProfileImagePath"
  1249.  
  1250. SUB SetUserHomeDirectory() 
  1251. '*************************************************************************
  1252. '** Purpose: Retrieves the value of the system supplied user home directory
  1253. '**    and sets the value of the special destination directory symbol
  1254. '**    SYM_LOTUSUSERDIR$
  1255. '**            
  1256. '** Author:    JMDonohue
  1257. '*************************************************************************
  1258. DIM Key$, rc&, user$, drive$, s$, Size&, Path$, i%
  1259.  
  1260. IF WhatPlatform() = PLATFORM_WIN95 THEN
  1261.     Key$ =  UserDirRegKey$
  1262.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, Key$) THEN
  1263.         user$=CreateBuffer(128)
  1264.         Size&=128
  1265.         i%=GetUserName(user$, Size&)
  1266.         user$=NullTrim(user$)
  1267.         Key$ = UserDirRegKey$ + "\" + user$
  1268.         IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, Key$) = FALSE THEN 
  1269.             ErrorMsg 0, "Registry key "+Key$+" Does not Exist"
  1270.             ERROR STFQUIT
  1271.         END IF
  1272.         s$=CreateBuffer(256)
  1273.         Size& = 256
  1274.         rc& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, Key$, UserDirRegValue$, 0, _
  1275.                 s$, Size&) 
  1276.         Path$=NullTrim(s$) + "\Lotus\"
  1277.     ELSE
  1278.         'For a single user, put it in desktop for want of a better place
  1279.         Path = GetWindowsDir() + "Desktop\Lotus\"
  1280.     END IF
  1281.  
  1282. ELSEIF WhatPlatform() = PLATFORM_WINNT THEN
  1283.     drive$ = GetEnvVariableValue ("HOMEDRIVE")
  1284.     s$ = GetEnvVariableValue ("HOMEPATH")
  1285.     Path$ = drive$ + s$ + "\Lotus\"
  1286. ELSE
  1287.     ErrorMsg 0, "Unsupported platform"
  1288.     ERROR STFQUIT
  1289. END IF
  1290.  
  1291. SetSymbolValue SYM_LOTUSUSERDIR$, Path$
  1292.  
  1293. END SUB
  1294.  
  1295. %endrem
  1296.