home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 January / pcwk_01_1999_B.iso / Lotus123 / SPANISH / INSTALL1.DSK / APR.LSS < prev    next >
Text File  |  1997-02-08  |  288KB  |  7,412 lines

  1. ''/*********************************************************************
  2. %REM
  3. ''
  4. ''   Module Name:   APR.lss
  5. ''
  6. ''   Module Code:   COMINST
  7. ''
  8. ''   Author:              
  9. ''
  10. ''   Creation Date:       Jan 26, 1994
  11. ''
  12. ''   Copyright Lotus Development Corporation, (c) 1994
  13. ''
  14. ''
  15. ''  
  16. ''   Description: 
  17. ''  
  18. ''
  19. ''   Additional authors:
  20. ''
  21. ''   Change History:
  22. ''   $Log:   //bluebird/logfiles/GEMINI/cisdk/apr/apr.lss  $
  23. '' 
  24. ''    Rev 1.17   08 Feb 1997 09:31:30   ihachem3
  25. '' Approach Version 5.0 build AP970207.001.
  26. '' 
  27. ''    Rev 5.99   Jan 14 1997 14:02:40   Terry_Ridgway
  28. '' Added code to register Approach.ini with uninstaller if it wasn't there
  29. '' when we installed. Also some minor changes to the demo directory handling for
  30. '' automated install.
  31. '' 
  32. ''    Rev 5.98   Jan 08 1997 16:20:50   Terry_Ridgway
  33. '' Added a sub to write required dialer options to the Approach.ini file
  34. '' if they're not present on the machine being installed to.
  35. '' 
  36. ''    Rev 5.97   Jan 07 1997 15:02:04   Terry_Ridgway
  37. '' Changes regarding registerin uninstaller and removal of Approach 3.0x 
  38. '' versions during suite and standalone installs.
  39. '' 
  40. ''    Rev 5.96   Dec 23 1996 09:27:06   Terry_Ridgway
  41. '' More changes to make things work just a little bit better.
  42. '' 
  43. ''    Rev 5.95   Dec 09 1996 13:21:22   Terry_Ridgway
  44. '' Fixes for some minor problems with registration and detecting if Approach 96
  45. '' was installed previously
  46. '' 
  47. ''    Rev 5.94   Nov 21 1996 15:20:00   Terry_Ridgway
  48. '' Passed full path of Approach.tlb to RegisterTypeLib and Lot_RegisterTypeLib.
  49. '' 
  50. ''    Rev 5.93   Nov 13 1996 19:32:58   Terry_Ridgway
  51. '' Added return value to the function RegisterTypeLib.  Dwayne.
  52. '' 
  53. ''    Rev 5.92   Nov 11 1996 15:21:42   Terry_Ridgway
  54. '' Added missing paren and commented out boof variable.  Dwayne
  55. '' 
  56. ''    Rev 5.91   Nov 08 1996 12:07:58   Terry_Ridgway
  57. '' Added code to complete the typelibrary registration. Apparently CIT is not
  58. '' doing everything it should within it's own functions.
  59. '' 
  60. ''    Rev 5.90   Nov 08 1996 11:42:32   Terry_Ridgway
  61. '' Updates for removal of 16 bit Approach when installing from Suite.
  62. '' 
  63. ''    Rev 5.89   Nov 05 1996 10:59:22   Terry_Ridgway
  64. '' Minor fix to prevent 16 bit previous version dialog surfacing during Suite
  65. '' install
  66. '' 
  67. ''    Rev 5.88   Nov 04 1996 14:13:58   Terry_Ridgway
  68. '' UPdates to uninstall the GID files created when users open HLP files
  69. '' 
  70. ''    Rev 5.87   Oct 17 1996 16:10:58   Terry_Ridgway
  71. '' Added Lot_RegisterObject calls to uninstall some GID files.
  72. '' 
  73. ''    Rev 5.86   Oct 17 1996 14:28:24   Terry_Ridgway
  74. '' Added code to handle timebomb installs. Also made a modification to PreCopy
  75. '' Config to make sure that all sections turned on for install of node are 
  76. '' actually installed on server. Just had to copy code from InitCopyList.
  77. '' 
  78. ''    Rev 5.85   Oct 16 1996 16:18:30   Terry_Ridgway
  79. '' Updated function for turning on ODBC files to fix problem with node install
  80. '' being able to install drivers without the main ODBC files. Also added code
  81. '' to fix directory refresh for Demo directory
  82. '' 
  83. ''    Rev 5.84   Oct 09 1996 15:43:32   Terry_Ridgway
  84. '' Added function to turn on shared ODBC file section when ODBC is selected in
  85. '' the customize dialog.
  86. '' 
  87. ''    Rev 5.83   Oct 08 1996 09:12:40   Terry_Ridgway
  88. '' Modified code for copying script help placeholder files
  89. '' 
  90. ''    Rev 5.82   Sep 30 1996 09:16:50   Terry_Ridgway
  91. '' Minor updates to clean up the code
  92. '' 
  93. ''    Rev 5.81   Sep 26 1996 13:24:12   Terry_Ridgway
  94. '' Added code to turn on all the files during a server default install so it 
  95. '' turns into a server FULL install
  96. '' 
  97. ''    Rev 5.80   Sep 26 1996 13:13:22   Terry_Ridgway
  98. '' Added more debug messages trying to track down automated install problem
  99. '' 
  100. ''    Rev 5.79   Sep 24 1996 14:18:44   Terry_Ridgway
  101. '' Added specific Demo directory processing, so Demos can be installed to a Node
  102. '' rather than being left on a Read Only CD or Network drive.
  103. '' 
  104. ''    Rev 5.78   Sep 23 1996 16:32:40   Terry_Ridgway
  105. '' Cleaned up source - positioning and indenting.
  106. '' Added back section to remove Approach 96 registry entries on upgrade install
  107. '' 
  108. ''    Rev 5.77   Sep 17 1996 16:21:38   Terry_Ridgway
  109. '' Add variable declarations for APRDIRPATH, NOTUSED, LSLNHLP and LSENHLP.Dwayne
  110. '' 
  111. ''    Rev 5.76   Sep 17 1996 11:33:40   Terry_Ridgway
  112. '' Added functions to support installing dummy Lotus Script help files
  113. '' 
  114. ''    Rev 5.75   Sep 16 1996 08:33:40   Terry_Ridgway
  115. '' Minor updates - possibly by Dwayne Lee
  116. '' 
  117. ''    Rev 1.20   12 Sep 1996 09:35:40   ihachem3
  118. ''  Approach Version 5.0 build AP960911.000 from \\SMARTS\SYS2.
  119. '' 
  120. ''    Rev 1.19   09 Sep 1996 20:54:12   mhishinu
  121. '' Modified PreCopyConfig and PostCopyConfig.
  122. ''
  123. ''    Rev 5.74   Sep 10 1996 12:17:28   Terry_Ridgway
  124. '' Changes to fix minor problems
  125. '' 
  126. ''    Rev 5.73   Aug 26 1996 08:39:58   Terry_Ridgway
  127. '' Minor fixes
  128. '' 
  129. ''    Rev 5.72   Aug 19 1996 12:27:02   Terry_Ridgway
  130. '' Minor Changes
  131. '' 
  132. ''    Rev 5.71   Aug 19 1996 11:47:02   Terry_Ridgway
  133. '' Added code for SmartMasters directory being in the MoreDirs dialog again.
  134. '' Also added code for the Sample files provided by Patty Waddington.
  135. '' 
  136. ''    Rev 5.70   Aug 16 1996 17:14:20   Terry_Ridgway
  137. '' Fixed Writing to Autoexec
  138. '' 
  139. ''    Rev 5.69   Aug 15 1996 11:55:44   Terry_Ridgway
  140. '' Added code for registering ODBC drivers if it's a Node install of Approach on
  141. '' a node of shared windows.
  142. '' 
  143. ''    Rev 5.68   Aug 12 1996 12:11:34   Terry_Ridgway
  144. '' Modified all calls to GetWindowsSysDir to call GetSymbolValue. This way
  145. '' I will always get the correct directory name when shared windows is involved
  146. '' and the files are copied to the users local Windows directory instead.
  147. '' 
  148. ''    Rev 5.67   Aug 09 1996 13:51:08   Terry_Ridgway
  149. '' Commented out the sections related to Dialog Editor OCX registration and
  150. '' Automatic uninstall of Approach 97 if reinstalling to the same directory
  151. '' structure.
  152. '' 
  153. ''    Rev 5.66   Aug 06 1996 15:21:56   Terry_Ridgway
  154. '' Added Approach Type Library Registration to the install.
  155. '' 
  156. ''    Rev 5.65   Aug 05 1996 11:49:12   Terry_Ridgway
  157. '' Modified global variable initialization and added variable for testing if
  158. '' we need to write to the autoexec.bat file
  159. '' 
  160. ''    Rev 5.64   Jul 25 1996 10:04:22   Terry_Ridgway
  161. '' Changed all the Lotus specific ODBC drivers to have the _SHRCNT suffix
  162. '' 
  163. ''    Rev 5.63   Jul 23 1996 09:05:42   Terry_Ridgway
  164. '' Changes needed to install QMF file to user selected directory when changing
  165. '' the Approach directory name
  166. '' 
  167. ''    Rev 5.62   Jul 18 1996 11:33:08   Terry_Ridgway
  168. '' Minor Changes
  169. '' 
  170. ''    Rev 5.61   Jul 16 1996 15:01:54   Terry_Ridgway
  171. '' Modified ODBC registry settings for Data Source names, so we don't overwrite
  172. '' the sources created by Approach 96 and Notes Reporter 2.0 and therefore
  173. '' prevent these products from accessing their server data if they're left on
  174. '' the machine
  175. '' 
  176. ''    Rev 5.60   Jul 15 1996 11:17:22   Terry_Ridgway
  177. '' Changes to add language directory to the smaster, samples & demo directories
  178. '' when values written to registery. Also removed forcing previous work dir
  179. '' value when doing language install.
  180. '' 
  181. ''    Rev 5.59   Jul 12 1996 14:23:36   Terry_Ridgway
  182. '' Reinstated ShareCount processing for ODBC drivers on the recommendation of 
  183. '' Bernadette Kelly for the CIT 2131 release.
  184. '' 
  185. ''    Rev 5.58   Jul 08 1996 11:56:22   Terry_Ridgway
  186. '' Updated to CIT 2130_4
  187. '' 
  188. ''    Rev 5.57   Jul 08 1996 11:40:28   Terry_Ridgway
  189. '' Added new code to check for Approach running. Problems with FindWindowA call
  190. '' not seeing the right caption on the window, so didn't recognize Approach
  191. '' was running and therefore didn't show a dialog, so effectively hanging the 
  192. '' install
  193. '' 
  194. ''    Rev 5.56   Jul 02 1996 14:54:30   Terry_Ridgway
  195. '' Added OCX registry for new Lotus Script Dialog Editor Controls, Changed SC
  196. '' versions for StatusBar, SmartIcons and Infobox
  197. '' 
  198. ''    Rev 5.55   Jun 27 1996 11:13:10   Terry_Ridgway
  199. '' Added code to support 123 minisuite and added check for Notes path in
  200. '' registry for versions later than 4.1. In this case the version key is not
  201. '' being used to the path is found under Lotus\Notes, rather than Lotus\Notes\4
  202. '' 
  203. ''    Rev 5.54   Jun 26 1996 16:12:48   Terry_Ridgway
  204. '' bug fixes for ODBC registration of SQL6 and removal of call to function
  205. '' writing to the LOTUS.INI file.
  206. '' 
  207. ''    Rev 5.53   Jun 26 1996 12:35:02   Terry_Ridgway
  208. '' Minor changes
  209. '' 
  210. ''    Rev 5.52   Jun 12 1996 12:17:00   Terry_Ridgway
  211. '' Updated to resource a couple of Message Box strings
  212. '' 
  213. ''    Rev 5.51   Jun 12 1996 11:33:00   Terry_Ridgway
  214. '' Changes to prevent second display of Remove v3 dialog
  215. '' 
  216. ''    Rev 5.50   Jun 06 1996 10:17:48   Terry_Ridgway
  217. '' Changes to attempt to get Windows System files copied during a node install
  218. '' 
  219. ''    Rev 5.49   Jun 04 1996 11:45:18   Terry_Ridgway
  220. '' Chages to Run from ROM code proposed by Shu Chin
  221. '' 
  222. ''    Rev 5.48   Jun 03 1996 15:20:04   Terry_Ridgway
  223. '' Minor Updates
  224. '' 
  225. ''    Rev 5.47   Jun 03 1996 09:45:10   Terry_Ridgway
  226. '' Corrected ccSTR version registration and added support for automatic
  227. '' uninstall of 97 as well as 96 if the user installs to the location of an 
  228. '' existing version.
  229. '' 
  230. ''    Rev 5.46   May 24 1996 13:36:34   Terry_Ridgway
  231. '' Updated with general bug fixes and also added the Run from ROM required code 
  232. '' to the PostSuccessReg function.
  233. '' 
  234. ''    Rev 5.45   May 23 1996 10:46:40   Terry_Ridgway
  235. '' Fixes to code for installing Approach to a new location with an existing
  236. '' copy already on the machine. Tour and icons weren't being refreshed. Also
  237. '' added code to check for the previous QMF DASPWAPI directory and default to it
  238. '' Changed the operation of the MoreDirsCB so that the QMF location is greyed
  239. '' during a language install.
  240. '' 
  241. ''    Rev 5.44   May 22 1996 10:30:40   Terry_Ridgway
  242. '' Changes to fix problems with registering adn writing SmartIcons and Tour
  243. '' paths after changes to new MLC code.
  244. '' 
  245. ''    Rev 5.43   May 21 1996 12:33:06   Terry_Ridgway
  246. '' Changes to the MoreDirs callback to update the procedure for CIT 2123_4B
  247. '' 
  248. ''    Rev 5.42   May 21 1996 10:34:06   Terry_Ridgway
  249. '' Updates to remove old path registry entries in favour of the new ones.
  250. '' 
  251. ''    Rev 5.41   May 20 1996 17:26:40   Terry_Ridgway
  252. '' Updated for new Intersolv ODBC drivers v2.12
  253. '' 
  254. ''    Rev 5.40   May 17 1996 13:50:16   Terry_Ridgway
  255. '' Updated to show different messages based on whether Approach or Notes
  256. '' Reporter are running while trying to install Approach 97.
  257. '' 
  258. ''    Rev 5.39   May 16 1996 14:33:12   Terry_Ridgway
  259. '' More Minor changes to the Paths key in the registry
  260. '' 
  261. ''    Rev 5.38   May 16 1996 11:33:04   Terry_Ridgway
  262. '' Added Paths key to registry entries to conform to Suite Guidlines. Keeping
  263. '' old stuff around for now, so that Approach will still work.
  264. '' 
  265. ''    Rev 5.37   May 14 1996 16:39:44   Terry_Ridgway
  266. '' Updates to use new ODBC drivers from Intersolv. This required Registry
  267. '' changes to add the INFORMIX and SYBASE drivers as well as changes due
  268. '' to the use of the same DLLs for both w95 and NT. All these were added to the
  269. '' Node Options
  270. '' 
  271. ''    Rev 5.36   May 13 1996 16:42:10   Terry_Ridgway
  272. '' Added code to give the user an option to change the location for the QMF INI
  273. '' file. This will appear in the Default Preferences dialog and will now show
  274. '' 
  275. ''    Rev 5.35   May 13 1996 15:11:52   Terry_Ridgway
  276. '' Updated for cahnges with CIT 2122.4 -> Added functionality to uninstall a 
  277. '' prior version rather than using the REMOVE section of the LYT file.
  278. '' 
  279. ''    Rev 5.34   May 13 1996 14:12:34   Terry_Ridgway
  280. '' Changes to add Node Options for ODBC drivers.
  281. '' 
  282. ''    Rev 5.33   May 03 1996 13:45:36   Terry_Ridgway
  283. '' Added check in the code for searching & replacing within the APPROACH.REG
  284. '' file. If the search & replace strings are equal, nothing is done.
  285. '' This prevents Fa's infinite loop when trying to replace d:\src5.0 with
  286. '' the same thing.
  287. '' 
  288. ''    Rev 5.32   May 02 1996 12:38:46   Terry_Ridgway
  289. '' Added UserName & CompanyName values to registry to conform to new Registry
  290. '' Guidelines
  291. '' 
  292. ''    Rev 5.31   May 02 1996 11:26:18   Terry_Ridgway
  293. '' Extra Debug Messages Added. Changes for install of QMF - it supports registry
  294. '' now instead of having to write to the environment.
  295. '' 
  296. ''    Rev 5.30   Apr 22 1996 15:38:48   Terry_Ridgway
  297. '' Changes to fix install to correct Tour Dir during Node install
  298. '' 
  299. ''    Rev 5.29   Apr 22 1996 13:22:40   Terry_Ridgway
  300. '' No change.
  301. '' 
  302. ''    Rev 5.28   Apr 22 1996 13:03:42   Terry_Ridgway
  303. '' Updated to correct some install and uninstall problems. Spell should be
  304. '' uninstalled now during a node uninstall, as well as the ODBC reg entries
  305. '' during any uninstall. Working directory for node should be on the node
  306. '' and not the server, as well as the Tour directory reference now pointing
  307. '' to the tour on the server.
  308. '' 
  309. ''    Rev 5.27   Apr 17 1996 17:33:36   Terry_Ridgway
  310. '' 
  311. ''    Rev 5.26   Apr 16 1996 11:00:40   Terry_Ridgway
  312. '' Fixes for obsolete file removal and additional debug messages ready for 
  313. '' the next round of bug fixing.
  314. '' 
  315. ''    Rev 5.25   Apr 12 1996 16:31:58   Terry_Ridgway
  316. '' Fixed Processing for Backup SmartMasters
  317. '' Fixed Processing for Existing Version - GetAPRPathFromREgistry was returning
  318. '' a null string instead of a valid path because I rem'd out the call to LEFT
  319. '' which removed an unwanted character
  320. '' Fixed processing of removing obsolete Approach 96 files if Approach 97
  321. '' is installed into the same directory
  322. '' 
  323. ''    Rev 5.24   Apr 11 1996 10:17:40   Terry_Ridgway
  324. '' Added Backup SmartMasters Processing by stealing function from LWP.LSS
  325. '' 
  326. ''    Rev 5.23   Apr 10 1996 08:57:50   Terry_Ridgway
  327. '' Updates to add Backup Directory support. Still needs more work, but getting 
  328. '' there.
  329. '' 
  330. ''    Rev 5.22   Apr 09 1996 13:37:46   Terry_Ridgway
  331. '' Corrected all MLC problems so far and setup registration for the QMF Manager
  332. '' files that are now being installed
  333. '' 
  334. ''    Rev 5.21   Apr 03 1996 14:57:06   Terry_Ridgway
  335. '' Updated Regfile because it was trying to use winobj32.reg instead of
  336. '' appraoch.reg and not registering the approach OLE objects. Corrected a 
  337. '' problem with MLC and Lot_RefreshDestination. I was running one of these for
  338. '' a symbol which wasn't set during the MLC install.
  339. '' 
  340. ''    Rev 5.20   Apr 01 1996 11:31:32   Terry_Ridgway
  341. '' Updated per Mike Natsis. Changes to make Server/Node function correctly.
  342. '' 
  343. ''    Rev 5.19   Mar 29 1996 14:53:22   Terry_Ridgway
  344. '' Added registry entry to maximize Approach on initial launch after install.
  345. '' Corrected an variable name ommision for Backup SmartMasters.
  346. '' 
  347. ''    Rev 5.18   Mar 29 1996 12:31:18   Terry_Ridgway
  348. '' General code clean up. Removed a lot of commented out sections and corrected 
  349. '' the Backup SmartMasters dialog call.
  350. '' 
  351. ''    Rev 5.17   Mar 28 1996 17:34:42   Terry_Ridgway
  352. '' Changes to correct the written locations of the Tour and Icons directories
  353. '' during a language install.
  354. '' 
  355. ''    Rev 5.16   Mar 25 1996 11:41:42   Terry_Ridgway
  356. '' Changes to deliver the Readme.WRI file to the work directory as per Theirry
  357. '' Meyeur's request.
  358. '' 
  359. ''    Rev 5.15   Mar 19 1996 08:32:34   Terry_Ridgway
  360. '' Fixes for registering ccStr shared component
  361. '' 
  362. ''    Rev 5.14   Mar 18 1996 13:51:30   Terry_Ridgway
  363. '' Additional Cleanup and checking for blank values being passed to
  364. '' Lot_CleanPath. These were causing Microsoft Setup error messages, so now
  365. '' we don't pass blank strings to this function.
  366. '' 
  367. ''    Rev 5.13   Mar 14 1996 15:41:42   Terry_Ridgway
  368. '' Changed to conform to upgrade spec. When installing v5 to the v4 directory
  369. '' we now delete the old v4 registry entries.
  370. '' 
  371. ''    Rev 5.12   Mar 12 1996 10:13:10   Terry_Ridgway
  372. '' Updates to merge CIT 2113_4
  373. '' 
  374. ''    Rev 5.11   Mar 11 1996 15:59:16   Terry_Ridgway
  375. '' General cleanup of functions
  376. '' 
  377. ''    Rev 5.10   Mar 04 1996 17:43:32   Terry_Ridgway
  378. '' Fixed problems with MoreDirs dialog not appearing and paths not defaulting
  379. '' to previous install - samples, work, smasters. Also added initial ability
  380. '' to backup old smartmasters. More work on this later.
  381. '' 
  382. ''    Rev 5.8   Mar 01 1996 15:09:46   Terry_Ridgway
  383. '' Fixes for registration and install problems
  384. '' 
  385. ''    Rev 5.7   Feb 26 1996 16:31:58   Terry_Ridgway
  386. '' Changes to merge CIT 2111_4 for Suite 97 Build 11
  387. '' 
  388. ''    Rev 5.6   Feb 26 1996 13:20:04   Terry_Ridgway
  389. '' Changes for MLC server node install to use new CIT functions
  390. '' 
  391. ''    Rev 5.5   Feb 20 1996 10:22:26   Terry_Ridgway
  392. '' General bug fixes and updates
  393. '' 
  394. ''    Rev 5.4   Feb 07 1996 12:11:12   Terry_Ridgway
  395. '' Added checks in the MoreDirsCB to grey out the SmartMaster directory
  396. '' selections if no SmartMasters have been selected in the custom dialog
  397. '' 
  398. ''    Rev 5.3   Feb 06 1996 09:58:04   Terry_Ridgway
  399. '' Changes to merge CIT2108_4 from S97BLD_8
  400. '' 
  401. ''    Rev 5.2   Feb 02 1996 12:27:10   Terry_Ridgway
  402. '' Fixed removal of AppEvents from registry and addition of registry entry
  403. '' for default show data in design ON.
  404. '' 
  405. ''    Rev 5.1   Feb 02 1996 10:14:06   Terry_Ridgway
  406. '' Added temporary reg setting to avoid UIMS crash when
  407. '' when trying to close a non-existent infobox
  408. '' 
  409. ''    Rev 5.0   Jan 26 1996 15:06:12   Terry_Ridgway
  410. '' Updated with Merge for CIT 2107_4
  411. '' 
  412. ''    Rev 4.30   Oct 30 1995 23:30:12   Joe_Ghazal
  413. '' Fixed notes path and integrated citgc3
  414. '' 
  415. ''    Rev 4.29   Oct 27 1995 18:34:24   Joe_Ghazal
  416. '' Switch compnent path and notes path
  417. '' 
  418. ''    Rev 4.28   Oct 27 1995 12:08:54   Joe_Ghazal
  419. '' fixes
  420. '' 
  421. ''    Rev 4.27   Oct 24 1995 15:25:46   Joe_Ghazal
  422. '' 
  423. ''    Rev 4.26   Oct 19 1995 17:33:26   Joe_Ghazal
  424. '' 
  425. ''    Rev 4.25   Oct 13 1995 10:28:18   Joe_Ghazal
  426. '' 
  427. ''    Rev 4.24   Oct 06 1995 11:38:00   Joe_Ghazal
  428. '' Upgrade to CIT Build 2033_3
  429. '' 
  430. ''    Rev 4.23   Oct 05 1995 22:36:54   Joe_Ghazal
  431. '' 
  432. ''    Rev 4.21   Sep 26 1995 10:52:10   Steve_Smythe
  433. '' CIT 2.0 build 2030_3
  434. '' - Fixed obsfiles stuff
  435. '' - Check for proper wrigley dirs
  436. '' - Added running and 3.xx dialog callbacks
  437. '' 
  438. '' 
  439. '' 
  440. ''    Rev 4.20   Sep 25 1995 10:32:56   Steve_Smythe
  441. '' 
  442. ''    Rev 4.19   Sep 24 1995 18:27:52   Steve_Smythe
  443. '' 
  444. ''    Rev 4.17   Sep 23 1995 14:19:34   Steve_Smythe
  445. '' 
  446. ''    Rev 4.16   Sep 19 1995 20:53:30   Steve_Smythe
  447. '' Setup Automated Install, fixed various Registry bugs.
  448. '' 
  449. ''    Rev 4.15   Sep 18 1995 14:13:50   Steve_Smythe
  450. '' CIT 2.0 build 2030_3
  451. '' - Added New Chart Registry keys (per Roger?)
  452. '' - Changed iHelpInstalled, iSpellCheckInstalled to REG_DWORD.
  453. '' 
  454. ''    Rev 4.14   Sep 14 1995 08:48:30   Steve_Smythe
  455. '' CIT 2.0 build 2030_3
  456. '' - Merge in changes between 2029_3 and 2030_3.
  457. '' 
  458. ''    Rev 4.13   Sep 13 1995 15:32:44   Steve_Smythe
  459. '' CIT 2.0 build 2029_3
  460. '' - Updates from Insik (billboards)
  461. '' 
  462. ''    Rev 4.11   Sep 11 1995 11:46:26   Steve_Smythe
  463. '' CIT 2.0 build 2029_3
  464. '' - Merge from 2028_3.
  465. '' 
  466. ''    Rev 1.52   01 Sep 1995 13:11:38   amontalv
  467. '' Correction to how icons are named.  Had used call to Lot_GetProgFolder, which was
  468. '' only needed when registering the link object.
  469. '' 
  470. ''    Rev 4.10   Sep 11 1995 11:09:32   Steve_Smythe
  471. '' CIT 2028_3
  472. '' - added gNODE fix from Mike Natsis in Suite.
  473. '' 
  474. ''    Rev 4.9   Sep 05 1995 13:48:20   Steve_Smythe
  475. '' CIT 2.0 build 2028_3
  476. '' 
  477. ''    Rev 4.8   Sep 01 1995 15:49:28   Steve_Smythe
  478. '' CIT 2.0 build 2027_4
  479. '' - added addicons code
  480. '' - fixed server/node component dir problems.
  481. '' - got Chart working under node
  482. '' 
  483. ''    Rev 4.7   Aug 31 1995 20:04:58   Steve_Smythe
  484. '' CIT 2.0 build 2027_4
  485. '' - remove manual registry AppPath entry.
  486. '' 
  487. ''    Rev 4.6   Aug 31 1995 18:14:52   Steve_Smythe
  488. '' CIT 2.0 build 2027_4
  489. '' - merge in missing code from 2026_3 (Insik's stuff)
  490. '' 
  491. ''    Rev 4.5   Aug 30 1995 18:32:10   Steve_Smythe
  492. '' CIT 2.0 build 2027_4
  493. '' - Added Lot_AddAppPath()
  494. '' 
  495. ''    Rev 4.4   Aug 30 1995 18:10:14   Steve_Smythe
  496. '' CIT 2.0 build 2027_4
  497. '' - Remove debug print statements
  498. '' 
  499. ''    Rev 4.3   Aug 29 1995 20:00:16   Steve_Smythe
  500. '' CIT 2.0 build 2027_4 (diskset SC950829.005)
  501. '' 
  502. ''    Rev 1.45   23 Aug 1995 12:26:54   tveerapp
  503. '' Added code to register work, masters and backup directories with the toolkit.
  504. '' 
  505. ''    Rev 1.44   22 Aug 1995 18:24:54   tveerapp
  506. '' Added the callback etc for work, smasters and backup.
  507. '' 
  508. ''    Rev 1.43   22 Aug 1995 15:17:10   jdonohue
  509. '' Do not register the uninstaller for language install
  510. '' 
  511. ''    Rev 1.42   22 Aug 1995 14:03:20   jdonohue
  512. '' Changed GetAPRPathfromLotusIni to check for registry entries
  513. '' Function GetAPRPathfromLotusIni returns path w/o filename now
  514. '' 
  515. ''    Rev 1.41   21 Aug 1995 15:50:54   amontalv
  516. '' Added global for registry entry.
  517. '' 
  518. ''    Rev 1.40   21 Aug 1995 10:23:48   jdonohue
  519. '' Added calls in Init for marking secondary language content directories
  520. '' Moved language directory symbol setting code to InitCopyList
  521. '' 
  522. ''    Rev 1.39   17 Aug 1995 09:34:14   amontalv
  523. '' Had put wrong number of arguments.
  524. '' 
  525. ''    Rev 1.38   16 Aug 1995 20:35:30   amontalv
  526. '' Added some error handling for registry.
  527. '' 
  528. ''    Rev 1.37   15 Aug 1995 11:53:12   jdonohue
  529. '' Removed SYM_INSTALLKIND$ -- in GLOBALS.LSS
  530. '' 
  531. ''    Rev 1.36   09 Aug 1995 09:18:16   jdonohue
  532. '' Don't add language qualifier to icon for first time install
  533. '' 
  534. ''    Rev 1.35   04 Aug 1995 15:53:38   jdonohue
  535. '' Added code to create icons with language switch and sublanguage name appended
  536. '' 
  537. ''    Rev 1.34   02 Aug 1995 16:54:54   jdonohue
  538. '' Changed calling syntax for InitLanguageAPR
  539. '' 
  540. ''    Rev 1.33   31 Jul 1995 16:28:10   pdonahue
  541. '' changed verison number from 2.1 to 0.0. 
  542. '' Changed registry entry for installtype from type REG_SZ to REG_DWORD.
  543. '' 
  544. ''    Rev 1.32   20 Jul 1995 14:20:58   jdonohue
  545. '' Fixed uninstall command line string for language
  546. '' 
  547. ''    Rev 1.31   12 Jul 1995 17:07:18   jdonohue
  548. '' Added comments about language install subdirectories
  549. '' 
  550. ''    Rev 1.30   23 Jun 1995 13:55:56   mzgripce
  551. '' remove autoinst.rsp from the uninstaller registration example
  552. '' 
  553. ''    Rev 1.29   23 Jun 1995 13:24:56   mzgripce
  554. '' added an example for the Program_group class registration
  555. '' 
  556. ''    Rev 1.28   22 Jun 1995 18:38:14   mzgripce
  557. '' register the components that are going with the apr product:aswan and its 
  558. '' dependency: LotusScript,Bento and Shared help
  559. '' 
  560. ''    Rev 1.27   21 Jun 1995 18:01:26   mzgripce
  561. '' add examples for the other object clases registration for uninstall
  562. '' 
  563. ''    Rev 1.26   21 Jun 1995 12:48:08   jdonohue
  564. '' SYM_INSTALLKIND global symbol, not product specific
  565. '' 
  566. ''    Rev 1.25   21 Jun 1995 09:09:42   jdonohue
  567. '' Moved AddRegistryLanguage to AddRegistryKeysAPR
  568. '' 
  569. ''    Rev 1.24   19 Jun 1995 17:41:56   mzgripce
  570. '' change the apr version to 2.1 and enable the uninstaller registration 
  571. '' 
  572. ''    Rev 1.23   19 Jun 1995 16:53:24   mzgripce
  573. '' add examples calls to Lot_RegisterObject()
  574. '' 
  575. ''    Rev 1.22   16 Jun 1995 17:08:02   pdonahue
  576. '' added registry entries for apr.
  577. '' 
  578. ''    Rev 1.21   09 Jun 1995 17:00:58   mzgripce
  579. '' added call example in PostCopyConfig to register the uninstaller
  580. '' 
  581. ''    Rev 1.20   07 Jun 1995 16:32:08   amontalv
  582. '' Changed the Win95 start folder so that it initializes
  583. '' earlier in the program.  This should make automation
  584. '' easier to implement for it.  There are still a couple of
  585. '' bugs that I need to work out, but I feel that I should
  586. '' check what I have now.  I also changed the name of some
  587. '' of the functions to conform more to current names.
  588. '' 
  589. ''    Rev 1.19   01 Jun 1995 14:54:10   amontalv
  590. '' Had the check incorrect for creating links.  It tried to create links
  591. '' when not in Win95 instead of when in Win95.
  592. '' 
  593. ''    Rev 1.18   01 Jun 1995 11:11:52   amontalv
  594. '' Added API function CreateLink to create shortcuts.  Also added functions
  595. '' to save and get the link path to support the CreateLink.  I also changed
  596. '' the startup program folder code to use the default dialog proc and changed
  597. '' the default dialog proc to process directory trees.
  598. '' 
  599. ''    Rev 1.17   30 May 1995 16:01:00   jdonohue
  600. '' Set symbols for product and version for language install
  601. '' 
  602. ''    Rev 1.16   21 May 1995 17:30:24   mzgripce
  603. '' add an example for share32 support 
  604. '' 
  605. ''    Rev 1.15   19 May 1995 15:31:28   mzgripce
  606. '' use the parent dir in the product default destination
  607. '' 
  608. ''    Rev 1.14   19 May 1995 14:42:44   jdonohue
  609. '' Remove redundant symbol for language subdirectory
  610. '' 
  611. ''    Rev 1.13   19 May 1995 13:23:46   jdonohue
  612. '' Added call to Lot_SetLanguageSectionsOn
  613. '' 
  614. ''    Rev 1.12   18 May 1995 15:36:52   jdonohue
  615. '' Added language install code
  616. '' 
  617. ''    Rev 1.11   18 May 1995 10:18:52   jdonohue
  618. '' Added language install function InitLanguage
  619. '' 
  620. ''    Rev 1.9   02 May 1995 12:54:06   cmoy
  621. '' Merged c2 into cf build
  622. '' 
  623. ''    Rev 1.9   10 Apr 1995 18:11:28   amontalv
  624. '' Changed comments to reflect change of function reference.
  625. '' 
  626. ''    Rev 1.8   31 May 1994 13:54:42   mmeth
  627. '' 
  628. '' Added PrevVersionAPR
  629. '' 
  630. ''    Rev 1.7   13 May 1994 14:09:20   thangv
  631. '' 
  632. '' Added the else part to the default code in case node.
  633. '' 
  634. ''    Rev 1.6   06 May 1994 09:24:52   mmeth
  635. '' wrong return for function
  636. '' 
  637. ''    Rev 1.5   02 May 1994 19:18:16   mzgripce
  638. '' 
  639. '' add AddIconsAPR
  640. '' 
  641. ''    Rev 1.4   28 Mar 1994 17:25:50   thangv
  642. '' 
  643. '' Resourced strings that were not. SID_APR_SERVER_DIRNAME, SID_APR_DIST_DIRNA
  644. '' 
  645. ''    Rev 1.3   22 Mar 1994 09:24:46   mmeth
  646. '' Modified AddTo Billboard List to use IDD_APRBILLBD1,...
  647. '' 
  648. ''    Rev 1.2   17 Feb 1994 17:44:44   thangv
  649. '' Fixed the trailing \ and APR_DIR
  650. '' 
  651. ''    Rev 1.1   15 Feb 1994 14:36:20   mmeth
  652. '' moved the EXIT FUNCTION CALL in
  653. '' 
  654. ''    Rev 1.0   11 Feb 1994 10:53:40   jbrodeur
  655. '' Initial Revision
  656. ''----------------------------------------------------------------------
  657. ''   Date     Vers. Pgmr  SPR#  Change
  658. ''----------------------------------------------------------------------
  659. '' !
  660. ''  02-07-94   0000             Initial Product Shipment
  661. ''
  662. ''----------------------------------------------------------------------
  663. ''
  664. ''*********************************************************************/
  665. '**   This file contains detailed comments. PLEASE READ THEM! They provide
  666. '**   information that will make writing Install much easier. In some
  667. '**   cases, you will not find this information in any other sources. 
  668. ''/*********************************************************************/
  669. '**
  670.  
  671. %ENDREM
  672.  
  673. USE "TOOLKIT"
  674. USE "LANGUAGE"
  675. OPTION DECLARE
  676.  
  677. DIM APRRemoveProdFiles%
  678. DIM APRBackupSmartMasters%
  679. DIM gNeedRestart%
  680. DIM gProductnum%
  681. DIM g96Path$
  682. DIM gRemovePriorVersion%
  683. DIM gDebugDIRs%
  684. DIM gDebugMsg%
  685. DIM minisuite123%
  686. DIM gWriteToAutoExec%
  687. DIM gTimeBomb%
  688.  
  689. ''/** These Are the Required Functions that Products must provide
  690. ''***************************************************************/
  691. DECLARE PUBLIC FUNCTION ProductRegAPR (prodno%, network$, direction$) AS STRING
  692. DECLARE PUBLIC FUNCTION DefaultUserRegAPR (prodno%, network$, direction$) AS STRING
  693. DECLARE PUBLIC FUNCTION InitAPR (prodno%, network$, direction$, basedir$) AS STRING
  694. DECLARE PUBLIC FUNCTION PrevVersionsAPR (prodno%, network$, direction$) AS STRING
  695. DECLARE PUBLIC FUNCTION PathChangeAPR (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  696. DECLARE PUBLIC FUNCTION InitCopyListAPR (prodno%, network$, direction$) AS STRING
  697. DECLARE PUBLIC FUNCTION PreCopyConfigAPR (prodno%, network$, direction$, lic%) AS STRING
  698. DECLARE PUBLIC FUNCTION AddTheBillBoardsAPR (prodno%, network$, direction$, nbytes&) AS STRING
  699. DECLARE PUBLIC FUNCTION PostCopyConfigAPR (prodno%, network$, direction$, programgroup$) AS STRING
  700. DECLARE PUBLIC FUNCTION AddIconsAPR (prodno%, network$, direction$, programgroup$) AS STRING
  701. DECLARE PUBLIC FUNCTION UIAPR (prodno%, network$, direction$) AS STRING
  702. DECLARE PUBLIC FUNCTION PostSuccessRegAPR (prodno%, network$, direction$) AS STRING
  703. DECLARE PUBLIC SUB AddRegistryKeysAPR (prodno%, network$) 
  704. DECLARE PUBLIC FUNCTION InitLanguageAPR (prodno%, network$, direction$) AS STRING
  705. DECLARE FUNCTION DetectPreviousVersion (Productfound$) AS STRING
  706. DECLARE SUB APRRemoveObsoleteFiles (hDlg&, CtrlId%, Classes$, LInst&)
  707.  
  708.  
  709. ''/** Product specific functions
  710. ''*****************************
  711. ''*** TV: From Notes install script. Used for notes detection. */
  712. PUBLIC CONST W16_NOTES                = "_strings.dll"
  713. PUBLIC CONST W32_NOTES                = "nstrings.dll"
  714. PUBLIC CONST GENERIC_EXECUTE        = &H20000000
  715. PUBLIC CONST GENERIC_READ             = &H80000000
  716. PUBLIC CONST GENERIC_WRITE         = &H40000000
  717. PUBLIC CONST LOCALE_SENGCOUNTRY = &H1002      
  718. PUBLIC CONST LOCALE_SYSTEM_DEFAULT  = 2048
  719.  
  720. DECLARE FUNCTION FindWindowA LIB "user32" (ByVal lpClassName As Any, ByVal lpCaption As Any) AS LONG
  721. DECLARE FUNCTION OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
  722. DECLARE FUNCTION CloseServiceHandle Lib "advapi32.dll" Alias "CloseServiceHandle" (ByVal hSCObject As Long) As Long
  723. DECLARE FUNCTION GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (Byval Locale As Long, Byval LCType As Long, Byval lpLCData As String, Byval cchData As Long) As Long
  724. DECLARE FUNCTION LoadTypeLibrary Lib "OLEAUT32" Alias "LoadTypeLib" (Byval t As  Unicode String,  j As Long ) As Long
  725. DECLARE FUNCTION RegisterTypeLibrary Lib "OLEAUT32" Alias "RegisterTypeLib" (Byval a As Long, Byval b As Unicode String, Byval c As Unicode String) As Long
  726. DECLARE PUBLIC FUNCTION filedate LIB "filedate.dll" ALIAS "_filetime@8" (ByVal FileName1$, ByVal FileName2$ ) AS INTEGER
  727. DECLARE FUNCTION GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
  728. DECLARE FUNCTION WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
  729.  
  730.  
  731.  
  732. DECLARE FUNCTION GetAPRPathfromLotusIni() AS STRING
  733. DECLARE FUNCTION GetAPRPathfromRegistry() AS STRING
  734. DECLARE FUNCTION StrGSub(S$, SKey$, SSub$) AS INTEGER
  735. DECLARE FUNCTION FileSub(ReadFn$, WriteFn$, SKey$, SSub$) AS INTEGER
  736. DECLARE FUNCTION FixCompnentPath(CompnentPath$) AS STRING
  737. DECLARE FUNCTION APR_AddRegistryEntries(prodno%, network$) AS INTEGER
  738. DECLARE FUNCTION APR_AddODBCiniEntries (prodno%) AS INTEGER
  739. DECLARE FUNCTION APR_AddAPPROACHiniEntries (prodno%) AS INTEGER
  740. DECLARE FUNCTION APR_AddLOTUSiniEntries (prodno%, network$) AS INTEGER
  741. DECLARE FUNCTION APR_AddLTSTOOLSiniEntries (prodno%, network$) AS INTEGER
  742. DECLARE FUNCTION APR_AddOLEEntries (prodno%, network$) AS INTEGER
  743. DECLARE FUNCTION APR_TurnOnNTSpecialFiles (prodno%, network$) AS INTEGER
  744. DECLARE FUNCTION APR_IsInstalled() AS INTEGER
  745. DECLARE FUNCTION APR_GetInstalledVersion() AS STRING
  746. DECLARE FUNCTION RemNullInString(s as string) AS STRING
  747. DECLARE FUNCTION GetNotesFromPath() AS STRING
  748. DECLARE FUNCTION GetNotesPathfromRegistry() AS STRING
  749. DECLARE SUB APR_RegisterSharedComponent(Key$, FileName$, Version$)
  750.  
  751. DECLARE FUNCTION Lot_WriteOLERegForAPR(network$, prodno%) AS INTEGER
  752. DECLARE FUNCTION GetPreviousMastersDir(defaultlang$) AS STRING
  753. DECLARE FUNCTION GetPreviousWorkDir(defaultlang$, prodno%) AS STRING
  754. DECLARE FUNCTION GetPreviousSamplesDir(defaultlang$) AS STRING
  755. DECLARE FUNCTION GetPreviousQMFDir(defaultlang$) AS STRING
  756. DECLARE FUNCTION GetPreviousLang() AS STRING
  757. DECLARE FUNCTION APRIsAdmin() AS INTEGER
  758. DECLARE FUNCTION APRSMInst() AS Integer
  759. DECLARE FUNCTION APRGetSystemCountry() As String
  760. DECLARE FUNCTION APRRegisterTypeLib( typelibname as string, helpdir as string ) as long
  761. DECLARE SUB APR_AddIcon(Feature$, Group$, Caption$, File$, CommandArgs$, WorkingDir$, Icon$)
  762. DECLARE SUB APRMOREDIRSCB (hDlg&, CtrlId%, Classes$, LInst&)
  763. DECLARE SUB APR_RemoveProdFilesCB(hDlg&, CtrlId%, Classes$, LInst&) 
  764. DECLARE SUB RegAndIncrementCount(s$)
  765. DECLARE SUB APRAddNotesToPathNT
  766. DECLARE SUB APRAddNotesToPathWin95
  767. DECLARE SUB APRFixupServerDirectory(dirsym$, feature$)
  768. DECLARE SUB APRPrintDIRs(FunctionName$)
  769. DECLARE SUB DebugMsg(msg$, location$)
  770. DECLARE SUB APRAddQMFToEnvironmentNT(prodno%, network$)
  771. DECLARE SUB APRDoBackupSmartMasters()
  772. DECLARE SUB APRRemoveProdDirs()
  773. DECLARE SUB APRWriteToAUTOEXEC()
  774. DECLARE SUB APR_TurnOnDummyScriptFiles()
  775. DECLARE SUB APR_RenameDummyScriptFiles()
  776. DECLARE SUB APRChangeTheDate(fnpath as String)
  777. DECLARE SUB APRTurnOnODBCSection(network as String)
  778. DECLARE SUB APRHideGalleryFiles()
  779. DECLARE SUB WriteDialSettingstoApproachINI()
  780.  
  781.  
  782. 'Required Functions *************************
  783. '*************************************************************************
  784.  
  785. '*************************************************************************
  786. '** SUB Initialize
  787. '**
  788. '** Purpose: The only purpose of this routine is to register your product.
  789. '**          This routine assigns your acronym to your product.
  790. '**          Without this function, your product will not install.
  791. '**          All you need to do in this subroutine is:
  792. '**                   modify APR -> your acronym.
  793. '**
  794. '**          ASSUMPTIONS: Many things in the toolkit key off of your
  795. '**                       acronym. These are the constraints:
  796. '**                       1. Your top level chapter in the INF must
  797. '**                          have a KEYWORD of your acronym +"TOP"
  798. '**                          e.g. acronymTOP
  799. '** Author:  Marcel Meth  
  800. '** Arguments: None
  801. '** Returns:   NONE
  802. '*************************************************************************
  803. SUB Initialize
  804.     Reg_RegisterProductNames "APR", LdString(SID_APR) 
  805.  
  806.     '** Setup Default NON Debug Mode for this file. Set Debug at end of this
  807.     '** function if necessary. Leave these lines as they are.
  808.     gDebugDIRs% = FALSE
  809.     gDebugMsg% = FALSE
  810.  
  811.  
  812.     '** Initialize Global Variables
  813.     APRRemoveProdFiles% = FALSE            'User selects to remove Win3.1 version
  814.     APRBackupSmartMasters% = FALSE        'User selects to have old SmartMasters backed up
  815.     gNeedRestart% = FALSE                'PATH Variable set, need to restart
  816.     gWriteToAutoExec% = FALSE            'Require writing Notes path to PATH variable
  817.                                         '    under Win95 with 16bit Notes
  818.  
  819.     '** Setup Approach 96 Install Path variable to let us track
  820.     '** whether user installs to existing DIR or not.
  821.     '** Installing 97 to same DIR we will remove old product keys.
  822.     g96Path$ = ""
  823.     gRemovePriorVersion% = FALSE
  824.  
  825.     '** The following is added to allow easy processing of Approach in the
  826.     '** Approach/123 minisuite
  827.     minisuite123% = TRUE
  828.  
  829.     '** Is this a TimeBomb/Trial Version?
  830.     gTimeBomb% = FALSE
  831.  
  832.     '** Debug or Non-Debug mode for the LSS file?
  833.     'gDebugDIRs% = TRUE                    'Enables Directory printouts
  834.     'gDebugMsg% = TRUE                    'Enables Message Printouts
  835.  
  836.  
  837.  
  838. END SUB        'Initialize
  839.  
  840. '*************************************************************************
  841. '** FUNCTION ProductRegAPR (prodno%, network$, direction$) AS INTEGER
  842. '**
  843. '** Purpose: This function allows your product to register itself
  844. '**          in the Install Product Registry.  The toolkit stores
  845. '**          the information provided and will provide you with
  846. '**          various features accordingly.  For example, if you support
  847. '**          shared files, the toolkit will do most of the work
  848. '**          for the COMPNENT directory.
  849. '**
  850. '**          For the most part you should use only Reg_Set... Functions.
  851. '**          
  852. '**
  853. '**          If you turn on ATM, LICENSING, or SHARED tools, then
  854. '**          you must be sure to add the appropriate lines and files
  855. '**          in your acronym.SCR and acronym.LYT, respectively. 
  856. '**          See Cookbook.
  857. '**
  858. '**          If you support server install, (because you need the files
  859. '**          for Licenser), you will have to make sure that you have 
  860. '**          the correct **entire** contents of install.lyt and install.scr 
  861. '**          for the install files in your acronym.SCR and acronym.LYT
  862. '**          
  863. '**
  864. '** Arguments:  All paremeters are **read only**. 
  865. '**          prodno%: This is your prodno%.  It is assigned to you by the
  866. '**                   toolkit in the order in which you were registered.
  867. '**                   When your product is part of SmartSuite, SmartSuite
  868. '**                   will always be product #1. (prodno% >=1)
  869. '**          network$: UNINITIALIZED
  870. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  871. '**                      then step backwards, i.e start at your last dialog
  872. '**                      first.
  873. '**     
  874. '** Errors:    No return code for errors, you must Raise them
  875. '** Author:    MMeth
  876. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  877. '**                             allow the user to step backwards.)
  878. '*************************************************************************
  879.  
  880. PUBLIC FUNCTION ProductRegAPR (prodno%, network$, direction$) AS STRING
  881.    ProductRegAPR = gNEXT
  882.  
  883.     DebugMsg "Function Start", "ProductRegAPR"
  884.  
  885.    '** FOR a complete set of things to register
  886.    '** see API doc under Reg_Set...
  887.  
  888.    Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  889.  
  890.    '** Setting disk space usage strings
  891.     If minisuite123% = TRUE Then
  892.         If network$ = gNODE$ Then
  893.                 Reg_SetProdSizes prodno%, 0 * 1024, 0 * 1024
  894.         Else
  895.                 Reg_SetProdSizes prodno%, 11 * 1048576, 0 * 1048576
  896.         End If
  897.     Else
  898.         If network$ = gNODE$ Then
  899.             Reg_SetProdSizes prodno%, 20 * 1024, 20 * 1024
  900.         Else
  901.             Reg_SetProdSizes prodno%, 29 * 1048576, 19 * 1048576
  902.         End If
  903.     End If
  904.  
  905.  
  906.  
  907.  
  908.    '** If you need Components directory turn this on.
  909.    Reg_SetShare32Flag prodno%, 1
  910.  
  911.    '** Coming to an install program near you soon
  912.    'Reg_SetCDOption prodno%,Inst%,CDOptStr$ 
  913.    'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% 
  914.  
  915.    '** Any options that you want your sys-admin and node user to see
  916.    '** must be entered here.  They must correspond with keywords in the
  917.    '** inf file. This functionality will be available March 4, but you
  918.    '** can set these fields now!
  919.    'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$  
  920.    'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% 
  921.  
  922.    Reg_SetNodeOption prodno%,1,"APRODBC"
  923.    Reg_SetNodeOptionSelected prodno%,1,1
  924.    Reg_SetNodeOption prodno%,2,"APRORACLE_SHRCNT"
  925.    Reg_SetNodeOptionSelected prodno%,2,1
  926.    Reg_SetNodeOption prodno%,3,"APRSQLSERVER4_SHRCNT"
  927.    Reg_SetNodeOptionSelected prodno%,3,1
  928.    Reg_SetNodeOption prodno%,4,"APRSQLSERVER6_SHRCNT"
  929.    Reg_SetNodeOptionSelected prodno%,4,1
  930.    Reg_SetNodeOption prodno%,5,"APRSYBASE_SHRCNT"
  931.    Reg_SetNodeOptionSelected prodno%,5,1
  932.    Reg_SetNodeOption prodno%,6,"APRINFORMIX5_SHRCNT"
  933.    Reg_SetNodeOptionSelected prodno%,6,1
  934.    Reg_SetNodeOption prodno%,7,"APRINFORMIX7_SHRCNT"
  935.    Reg_SetNodeOptionSelected prodno%,7,1
  936.  
  937. %REM
  938.     '** These are possible additions to the Node Options.
  939.    Reg_SetNodeOption prodno%,7,"APRTOUR"
  940.    Reg_SetNodeOptionSelected prodno%,7,1
  941.    Reg_SetNodeOption prodno%,8,"APRSMARTMASTERS"
  942.    Reg_SetNodeOptionSelected prodno%,8,1
  943.    Reg_SetNodeOption prodno%,9,"APRSAMPLES"
  944.    Reg_SetNodeOptionSelected prodno%,9,1
  945. %ENDREM
  946.  
  947.  
  948.    '** Toolkit default is for no server supprt, turn on if desired.
  949.    Reg_SetSrvSupport prodno%, 1
  950.  
  951.    '** Toolkit default is for no server supprt, turn on if desired.
  952.    '** license support only available for server install.
  953.    Reg_SetLicenseSupport prodno%, 0
  954.  
  955.    '** Toolkit default is no ATM support
  956.    'Reg_SetATMSupport prodno%, 0
  957.  
  958.    '** This is the default value the user will see.
  959.    Reg_SetProgManagerGroup prodno%, LdString(SID_APR_LOTUSSMARTSUITE)
  960.  
  961.    '** Required if you have a work, smartmasters and backup directories
  962.    '** register support with the toolkit to surface the dialog
  963.    'Reg_SetMoreDirsData prodno%, "APR_MoreDirsCB", DBAPR_MOREDIRS, DBAPR_MOREDIRS        
  964.    Reg_SetMoreDirsData prodno%, "APRMOREDIRSCB", DBAPR_MOREDIRS2, _
  965.      DBAPR_MOREDIRS2
  966.  
  967.     DebugMsg "Function End", "ProductRegAPR"
  968.  
  969. END FUNCTION    'ProductRegAPR
  970.  
  971. '*************************************************************************
  972. '** FUNCTION DefaultUserRegAPR (prodno%, network$, direction$) AS STRING
  973. '**
  974. '** Purpose: **Only** the first registered product gets called.
  975. '**          For SmartSuite, this will be SmartSuite.
  976. '**          This function allows you to set the default user registration
  977. '**          information that the user will be shown. The toolkit
  978. '**          will provide default values from MS-Windows. If you disagree
  979. '**          with them you should modify them in this function using:
  980. '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  981. '**          
  982. '**          It is up to you how you store registration information.
  983. '**          It will not be stored until later in PostCopyConfigAPR.
  984. '**          The CIT provides functions that allow you to access .ri 
  985. '**          files: Lot_ReadDefaultsfromRi(ripath$).
  986. '**
  987. '**          If you need to write back to the floppy, do it here.
  988. '**          Most Lotus products will no longer write back to the floppy.
  989. '**          Remeber, you can't write back to a CD or network!
  990. '**
  991. '** In Symbols : SYM_NAME$, SYM_COMPANY$
  992. '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  993. '**            
  994. '** Arguments:  All paremeters are **read only**. 
  995. '**          prodno%: This is your prodno%.  It is assigned to you by the
  996. '**                   toolkit in the order in which you were registered.
  997. '**                   When your product is part of SmartSuite, SmartSuite
  998. '**                   will always be product #1. (prodno% >=1)
  999. '**          network$: UNINITIALIZED
  1000. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1001. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1002. '**                      then step backwards
  1003. '**     
  1004. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1005. '**                      then step backwards, i.e start at your last dialog
  1006. '**                      first.
  1007. '**     
  1008. '** Errors:    No return code for errors, you must Raise them
  1009. '** Author:    MMeth
  1010. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1011. '**                             allow the user to step backwards.)
  1012. '*************************************************************************
  1013.  
  1014. PUBLIC FUNCTION DefaultUserRegAPR (prodno%, network$, direction$) AS STRING
  1015.    DIM ripath$, defdir$, temp%, rc%
  1016.  
  1017.     DebugMsg "Function Start", "DefaultUserRegAPR"
  1018.  
  1019.    DefaultUserRegAPR = gNEXT
  1020.  
  1021.    IF network$ = gNODE$ THEN
  1022.       ripath$ = GetSymbolValue(SYM_STF_SRCDIR$) + "approach.ri"
  1023.    ELSEIF network$ = gSTANDARD$ THEN
  1024.       
  1025.       '** GetAPR.... is in this file and illustrates how to
  1026.       '** retrieve your prod. from lotus.ini
  1027.       '** The following function tries the INI file, then the registry if the
  1028.       '** first attempt is unsuccessful.
  1029.  
  1030.        defdir$ = GetAPRPathfromLotusIni()
  1031.        IF defdir$ = "" THEN
  1032.             goto rinotfound
  1033.        END IF
  1034.     
  1035.         ripath$ = defdir$ + "approach.ri"
  1036.    END IF
  1037.  
  1038.    '**  RETURNS TRUE IF SUCCESSFULLY FOUND RI FILE AND READ INFORMATION
  1039.    '**  This functions populates: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  1040.    rc% = Lot_ReadDefaultsfromRi(ripath$) 
  1041.  
  1042. rinotfound:
  1043.  
  1044.     DebugMsg "Function End", "DefaultUserRegAPR"
  1045.  
  1046. END FUNCTION    'DefaultUserRegAPR
  1047.  
  1048.  
  1049. '*************************************************************************
  1050. '** FUNCTION InitAPR (prodno%, network$, direction$, basedir$) AS STRING
  1051. '**
  1052. '** Purpose: This function will be called after the Welcome dialog has been
  1053. '**          filled in by the user. This is the first time you will be 
  1054. '**          called when the server parameter is valid.  
  1055. '**          You need to use this function to intialize certain things. 
  1056. '**          (See the MUST DO below).
  1057. '**          
  1058. '**          This is a good place to put up a LotusScript messagebox warning the user
  1059. '**          of a previous version of your product. If there is a previous
  1060. '**          version you might want to steer them towards overwriting it,
  1061. '**          deleting the old version, or allowing both versions to exist.
  1062. '**          
  1063. '**
  1064. '** Must Do: You **MUST** set inital values for all of the destination
  1065. '** =======  directories that you refer to in your INF file.  If you do not,
  1066. '**          then InitCopylist will fail!  e.g. SetSymbolValue "APRDIR", basedir$
  1067. '**          Of course you may be more intelligent.  You should preface your
  1068. '**          directory with basedir$.  The toolkit is finding a good drive
  1069. '**          letter and basedirectory.  Also, remeber all paths end in a
  1070. '**          \ and are lower case.
  1071. '**
  1072. '**          You should **NOT** define LOTUSFONTSDIR, WINDIR, 
  1073. '**          USERDIR & WINSYSDIR. The toolkit does this for you.
  1074. '**
  1075. '**          Once you have defined destdir symbols, you need to register
  1076. '**          them with the toolkit. (See the code below)
  1077. '**
  1078. '** In Symbols : 
  1079. '** Out Symbols: 
  1080. '**            
  1081. '** Arguments:  All paremeters are **read only**. 
  1082. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1083. '**                   toolkit in the order in which you were registered.
  1084. '**                   When your product is part of SmartSuite, SmartSuite
  1085. '**                   will always be product #1. (prodno% >=1)
  1086. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1087. '**     
  1088. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1089. '**                      then step backwards, i.e start at your last dialog
  1090. '**                      first.
  1091. '**
  1092. '**          basedir$:   The toolkit has found a good base. for your directory.
  1093. '**                      This is it.  You should use it.  This will make Smart
  1094. '**                      Suite work, and will pick a good drive letter for you.
  1095. '**     
  1096. '** Errors:    No return code for errors, you must Raise them
  1097. '** Author:    MMeth
  1098. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1099. '**                             allow the user to step backwards.)
  1100. '**
  1101. '*************************************************************************
  1102.  
  1103. PUBLIC FUNCTION InitAPR (prodno%, network$, direction$, basedir$) AS STRING
  1104. DIM sym$, symname$, defdir$, position%, proddir$, iniPath$, rv%, APRversion$
  1105. DIM previousprod$, ret$, nFind&, nFindClass&, nFindACaption&, nFindNCaption&, personaldir$, buf$
  1106. DIM prevmastersdir$, prevworkdir$, prevsamplesdir$, defaultlang$, prevqmfdir$
  1107. DIM Productfound$, temp%
  1108.  
  1109.  
  1110.     DebugMsg "Function Start", "InitAPR"
  1111.  
  1112.    InitAPR = direction$
  1113.    '**  In the backwards case, keep backing up
  1114.    If direction$ = gBACK Then
  1115.       EXIT FUNCTION
  1116.    End If
  1117.  
  1118.     DebugMsg "Checking User Rights", "InitAPR"
  1119.     
  1120.     '** Check to see if the user has administrator rights when
  1121.     '** installing standalone under Windows NT. Warn User about problems installing.
  1122.     If WhatPlatform() = PLATFORM_WINNT AND _
  1123.            GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  1124.             GetSymbolValue(SYM_AUTOMATIONINST$) <> gTRUE$ _           
  1125.        Then
  1126.         If network$ = gSTANDARD$ OR network$ = gNODE$ Then
  1127.             If APRIsAdmin() <> TRUE Then
  1128.                 direction$ = PopupModalDlg (DBAPR_NOADMIN, DBAPR_NOADMIN)
  1129.                 IF direction$ = gBACK THEN
  1130.                     InitAPR = direction$
  1131.                     EXIT FUNCTION
  1132.                 END IF
  1133.             End If
  1134.         End If       
  1135.     End If
  1136.  
  1137.     DebugMsg "Finished Checking User Rights", "InitAPR"
  1138.  
  1139.  
  1140.    '**  Setup Default directory settings and the associated text that the user will see
  1141.    sym$ = Reg_GetDirSymbolList(prodno%)
  1142.    symname$ = sym$ + gNAME
  1143.    
  1144.    '** These two line register it with the toolkit.
  1145.    SetListItem sym$, 1, "APRDIR"
  1146.    SetListItem symname$, 1, "APRDIRNAME"
  1147.    SetListItem sym$, 2, "APRWORKDIR"
  1148.    SetListItem symname$, 2, "APRWORKDIRNAME"
  1149.    SetListItem sym$, 3, "APRTOURDIR"
  1150.    SetListItem symname$, 3, "APRTOURDIRNAME"  
  1151.    SetListItem sym$, 4, "APRSAMPLESDIR"
  1152.    SetListItem symname$, 4, "APRSAMPLESDIRNAME"
  1153.    SetListItem sym$, 5, "APRDEMODIR"
  1154.    SetListItem symname$, 5, "APRDEMODIRNAME"
  1155.    SetListItem sym$, 6, "APRMASTERSDIR"
  1156.    SetListItem symname$, 6, "APRMASTERSDIRNAME"
  1157.  
  1158.  
  1159. '   IF network$ <> gNODE$ THEN
  1160. '       SetListItem sym$, 6, "APRMASTERSDIR"
  1161. '       SetListItem symname$, 6, "APRMASTERSDIRNAME"
  1162. '   END IF
  1163.     
  1164.  
  1165.    '** NOTE The path in the string table is lower case and ends with a slash
  1166.     SetSymbolValue "APRDIR", basedir$ + LdString(SID_APR_DIR)
  1167.     SetSymbolValue "APRLANGDIR", basedir$ + LdString(SID_APR_DIR)
  1168.     SetSymbolValue "APRWORKDIR", basedir$ + LdString(SID_APR_WORK_DIR)
  1169.     SetSymbolValue "APRMASTERSDIR", basedir$ + LdString(SID_APR_MASTERS_DIR)
  1170.     SetSymbolValue "APRMASTERSLANGDIR", basedir$ + LdString(SID_APR_MASTERS_DIR)
  1171.     SetSymbolValue "APRMASTERSIMGLANGDIR", GetSymbolValue("APRMASTERSDIR") + LdString(SID_APR_MASTERSIMG_DIR)
  1172.     SetSymbolValue "APRSAMPLESDIR", basedir$ + LdString(SID_APR_SAMPLES_DIR)
  1173.     SetSymbolValue "APRSAMPLESLANGDIR", basedir$ + LdString(SID_APR_SAMPLES_DIR)
  1174.  
  1175.      SetSymbolValue "APRBACKUPDIR", basedir$ + LdString(SID_APR_BACKUP_DIR)
  1176.     SetSymbolValue "APRQMFDIR", GetSymbolValue("APRDIR")
  1177.  
  1178.     SetSymbolValue "APRICONSDIR", GetSymbolValue("APRDIR")
  1179.     SetSymbolValue "APRICONLANGDIR", GetSymbolValue("APRDIR")
  1180.     SetSymbolValue "APRTOURDIR", GetSymbolValue("APRDIR")
  1181.     SetSymbolValue "APRDEMODIR", GetSymbolValue("APRDIR") + LdString(SID_APR_DEMOS_DIR)
  1182.     SetSymbolValue "APRDEMOLANGDIR", GetSymbolValue("APRDIR") + LdString(SID_APR_DEMOS_DIR)
  1183.  
  1184.     SetSymbolValue "APROBSDIR1", GetSymbolValue("APRDIR")
  1185.     SetSymbolValue "APROBSDIR2", GetSymbolValue("APRDIR")
  1186.  
  1187.     
  1188.     APRPrintDirs "Start InitAPR"
  1189.  
  1190.     '** This will be the name of the directory that shows up in captions in 
  1191.     '** toolkit dialogs (Static text)
  1192.     SetSymbolValue "APRDIRNAME", LdString(SID_APR_DIRNAME)
  1193.     SetSymbolValue "APRLANGDIRNAME", LdString(SID_APR_DIRNAME)
  1194.     SetSymbolValue "APRTOURDIRNAME", LdString(SID_APR_TOUR_DIRNAME)
  1195.     SetSymbolValue "APRMASTERSDIRNAME", LdString(SID_APR_MASTERS_DIRNAME)
  1196.     SetSymbolValue "APRMASTERSLANGDIRNAME", LdString(SID_APR_MASTERS_DIRNAME)
  1197.     SetSymbolValue "APRSAMPLESDIRNAME", LdString(SID_APR_SAMPLES_DIRNAME)
  1198.     SetSymbolValue "APRSAMPLESLANGDIRNAME", LdString(SID_APR_SAMPLES_DIRNAME)
  1199.     SetSymbolValue "APRDEMODIRNAME", LdString(SID_APR_DEMO_DIRNAME)
  1200.  
  1201.    
  1202.     IF GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ THEN
  1203.        DebugMsg "About to check for Approach & Notes Reporter Running", "InitAPR"
  1204.  
  1205.        '** Put up dlg box, if a version is currently running
  1206.        '** Only if we're not doing a SmartSuite install
  1207.        '====================================================
  1208.        DIM szClassName$ 
  1209.        DIM szACaptionName$, szNCaptionName$, nFindA1Caption&, szA1CaptionName$
  1210.        szClassName$ = "ApproachWClass"     
  1211.        szACaptionName$ = "Lotus Approach"
  1212.        szA1CaptionName$ = "Approach"
  1213.        szNCaptionName$ = "Notes Reporter"
  1214.  
  1215.         IF network$ = gSTANDARD$ OR network$ = gNODE$ THEN
  1216.             nFindClass& = FindWindowA(szClassName$,0&)
  1217.             nFindACaption& = FindWindowA(szClassName$, szACaptionName$)
  1218.             nFindA1Caption& = FindWindowA(szClassName$, szA1CaptionName$)
  1219.             nFindNCaption& = FindWindowA(szClassName$, szNCaptionName$)
  1220.  
  1221.             DebugMsg szClassName$ & " Class Found? " & CStr(nFindClass&) & Chr(13) &_
  1222.                  szNCaptionName$ & " Caption Found? " & CStr(nFindNCaption&) & Chr(13) &_
  1223.                  szACaptionName$ & " Caption Found? " & CStr(nFindACaption&) & Chr(13) &_
  1224.                  szA1CaptionName$ & " Caption Found? " & CStr(nFindA1Caption&), "InitAPR"
  1225.                
  1226.  
  1227.             WHILE direction$ = gNEXT$ AND nFindClass& <> FALSE 
  1228.                    if (nFindACaption& <> FALSE) OR (nFindA1Caption& <> FALSE) then
  1229.                     direction$ = PopupModalDlg(DBAPR_APRRUNNING, DBAPR_APRRUNNING)
  1230.                 elseif nFindNCaption& <> FALSE then
  1231.                     direction$ = PopupModalDlg(DBAPR_NRPRUNNING, DBAPR_NRPRUNNING)
  1232.                 else
  1233.                     direction$ = PopupModalDlg(DBAPR_PRODRUNNING, DBAPR_PRODRUNNING)
  1234.                 end if
  1235.                            
  1236.                 IF direction$ = gBACK$ THEN
  1237.                        InitAPR = direction$
  1238.                        EXIT FUNCTION
  1239.                 END IF
  1240.                 nFindClass& = FindWindowA(szClassName$,0&)
  1241.                 nFindACaption& = FindWindowA(szClassName$, szACaptionName$)
  1242.                 nFindNCaption& = FindWindowA(szClassName$, szNCaptionName$)
  1243.             WEND
  1244.  
  1245.             DebugMsg "Check for Approach & Notes Reporter Running is complete", "InitAPR"
  1246.     End If
  1247.  
  1248.    '** Put up dlg box, if a SmartCenter is currently running
  1249.    '====================================================
  1250.         DebugMsg "Suite Install Type:: " + GetSymbolValue(SYM_SINGLESMARTSUITE$), "InitAPR"
  1251.  
  1252.     IF GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ THEN
  1253.             '** This is obviously drawers, SmartCenter 96
  1254.             nFind& = FindWindowA ("Lotus_Drawers", 0&)
  1255.             WHILE direction$ = gNEXT$ AND nFind& <> FALSE
  1256.                    direction$ = PopupModalDlg (DBAPR_CNTRRUNNING, DBAPR_CNTRRUNNING)
  1257.                    IF direction$ = gBACK$ THEN
  1258.                        InitAPR = direction$
  1259.                        EXIT FUNCTION
  1260.                 END IF
  1261.                 nFind& = FindWindowA ("Lotus_Drawers", 0&)
  1262.             WEND                                                 
  1263.  
  1264.             '** This is SmartCenter 1.0, 2.0 and 2.1.
  1265.             nFind& = FindWindowA ("LotusSmartCenter", 0&)
  1266.             WHILE direction$ = gNEXT$ AND nFind& <> FALSE
  1267.                    direction$ = PopupModalDlg (DBAPR_CNTRRUNNING, DBAPR_CNTRRUNNING)
  1268.                    IF direction$ = gBACK$ THEN
  1269.                        InitAPR = direction$
  1270.                        EXIT FUNCTION
  1271.                 END IF
  1272.                 nFind& = FindWindowA ("LotusSmartCenter", 0&)
  1273.             WEND                                                 
  1274.         END IF
  1275.     END IF                                                 
  1276.  
  1277.  
  1278.  
  1279.    '** Put up a dlg box, if previous version of product found
  1280.    '==========================================================
  1281.  
  1282.     IF network$ = gSTANDARD$ OR network$ = gNODE$ THEN
  1283.         previousprod$ = APR_GetInstalledVersion()
  1284.  
  1285.         DebugMsg "Previous Version: " + previousprod$, "InitAPR"
  1286.         DebugMsg "APR Path from Registry: " + GetAPRPathfromRegistry(), "InitAPR"
  1287.         DebugMsg "Install Kind: " + GetListItem(SYM_INSTALLKINDS$, prodno%), "InitAPR"
  1288.  
  1289.         '** First Check for an existing Approach 97 install
  1290.         IF previousprod$ = "APPROACH97" AND _
  1291.             GetAPRPathfromRegistry() <> "" AND _
  1292.             GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ _
  1293.         THEN
  1294.             Reg_SetPreviousVersion prodno%, "1"
  1295.             IF GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  1296.               GetSymbolValue(SYM_AUTOMATIONINST$) <> gTRUE$ THEN
  1297.                 direction$ = PopupModalDlg (DBAPR_EXISTING, DBAPR_EXISTING)
  1298.                 IF direction$ = gBACK THEN
  1299.                     InitAPR = direction$
  1300.                     EXIT FUNCTION
  1301.                 END IF
  1302.             END IF
  1303.  
  1304.         '** If we cannot find 97, look for 96 and popup messages
  1305.         ElseIf previousprod$ = "APPROACH96" AND _
  1306.             GetAPRPathfromRegistry() <> "" AND _
  1307.             GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ _
  1308.         THEN
  1309.             g96Path$ = GetAPRPathfromRegistry()
  1310.             Reg_SetPreviousVersion prodno%, "1"
  1311.             'Reg_SetObsFiles prodno%, 1
  1312.             SetSymbolValue "APROBSDIR2", g96Path$
  1313.             IF GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  1314.               GetSymbolValue(SYM_AUTOMATIONINST$) <> gTRUE$ THEN
  1315.                 direction$ = PopupModalDlg (DBAPR_96EXISTING, DBAPR_96EXISTING)
  1316.                 IF direction$ = gBACK THEN
  1317.                     InitAPR = direction$
  1318.                     EXIT FUNCTION
  1319.                 END IF
  1320.             END IF
  1321.  
  1322.         
  1323.         '** Otherwise, here we ask the user if they want to remove Approach 3.0
  1324.         ElseIF previousprod$ = "APPROACH" AND network$ = gSTANDARD$ THEN
  1325.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ Then
  1326.                 Reg_SetObsFiles prodno%, 1
  1327.                 SetSymbolValue "APROBSDIR1", GetAPRPathFromLotusINI()
  1328.                 IF     direction$ <> gBACK AND GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ THEN
  1329.                     IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1330.                         IF TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRRemovePreviousProdFiles")) <> "0" THEN
  1331.                             APRRemoveProdFiles% = TRUE
  1332.                         END IF
  1333.                     ELSE
  1334.                         RegisterCallback "APR", "APR_RemoveProdFilesCB" 
  1335.                         direction$ = PopupModalDlg(DBAPR_REMOVEPRODFILES, DBAPR_REMOVEPRODFILES)
  1336.                         IF direction$ = gBACK THEN
  1337.                             direction$ = gNEXT  'handle NO button
  1338.                         END IF
  1339.                     END IF
  1340.                 END IF
  1341.             ELSE
  1342.                 Reg_SetObsFiles prodno%, 0
  1343.             END If
  1344.        END IF
  1345.     END IF
  1346.  
  1347.  
  1348.    '**  Special Cases for setting  these symbols
  1349.    '**  Strings should be resourced, but we didn'** t want to clutter
  1350.    '**  the APR string table.
  1351.    
  1352.    SELECT CASE network$
  1353.  
  1354.    CASE gSERVER$
  1355.       SetSymbolValue "APRNAME", LdString(SID_APR_SERVER_DIRNAME) 
  1356.  
  1357.    CASE gDISTRIBUTION$
  1358.       SetSymbolValue "APRNAME", LdString(SID_APR_DIST_DIRNAME)
  1359.  
  1360.    CASE gSTANDARD$
  1361.       '** Check if APPROACH97 node is installed
  1362.       buf$ = ""
  1363.       IF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Lotus Approach", "Personal Directory", REG_SZ, buf$, 256) = 0 THEN
  1364.             proddir$ = LTRIM$(buf$)
  1365.             rv = 0
  1366.                if proddir$ <> "" then
  1367.                  rv% = Lot_CleanPath(proddir$)
  1368.             end if
  1369.             
  1370.             IF rv% = 0 THEN
  1371.                 proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_APR_DIR)
  1372.             END IF
  1373.             Goto DONE
  1374.       ELSEIF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Personal", "", REG_SZ, buf$, 256) = 0 THEN
  1375.             proddir$ = LTRIM$(buf$)
  1376.             rv = 0
  1377.                if proddir$ <> "" then
  1378.                  rv% = Lot_CleanPath(proddir$)
  1379.             end if
  1380.             
  1381.             IF rv% = 0 THEN
  1382.                 proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_APR_DIR)
  1383.             END IF
  1384.             Goto DONE
  1385.       END IF 
  1386.  
  1387.       '**  check if there is an existing product
  1388.       defdir$ = GetAPRPathfromRegistry() 'APR_GetInstalledVersion()
  1389.       IF defdir$ <> "" THEN
  1390.                proddir$ = defdir$
  1391.  
  1392.             '** get default language
  1393.             buf = ""
  1394.             buf$ = GetPreviousLang()
  1395.             defaultlang$ = LTRIM$(buf$)
  1396.  
  1397.  
  1398.             IF defaultlang$ <> "" THEN            
  1399.                 defaultlang$ = LEFT$(defaultlang$,2)
  1400.  
  1401.                 '** Work Files Directory
  1402.                 buf$ = ""
  1403.                 rv = 0
  1404.                 buf$ = GetPreviousWorkDir(defaultlang$, prodno%)
  1405.                 prevworkdir$ = LTRIM$(buf$)
  1406.  
  1407.                 DebugMsg "Previous Work Directory: " + buf$, "InitAPR"                
  1408.                 
  1409.                 if prevworkdir$ <> "" then
  1410.                     rv% = Lot_CleanPath(prevworkdir$)
  1411.                 end if
  1412.  
  1413.                 IF rv% <> 0 THEN
  1414.                     SetSymbolValue "APRWORKDIR", prevworkdir$
  1415.                 END IF
  1416.  
  1417.  
  1418.                 '** SmartMaster Directory
  1419.                 buf$ = ""
  1420.                 rv = 0
  1421.                 buf$ = GetPreviousMastersDir(defaultlang$)
  1422.                 prevmastersdir$ = LTRIM$(buf$)
  1423.  
  1424.                 DebugMsg "Previous SMasters Directory: " + buf$, "InitAPR"                
  1425.  
  1426.                 if prevmastersdir$ <> "" then
  1427.                     rv% = Lot_CleanPath(prevmastersdir$)
  1428.                 end if
  1429.                 IF rv% <> 0 THEN
  1430.                     SetSymbolValue "APRMASTERSDIR", prevmastersdir$
  1431.                     SetSymbolValue "APRMASTERSIMGLANGDIR", GetSymbolValue("APRMASTERSDIR") _
  1432.                                                      + LdString(SID_APR_MASTERSIMG_DIR)
  1433.                 END IF
  1434.  
  1435.  
  1436.                 '** Sample Files Directory
  1437.                 buf$ = ""
  1438.                 rv = 0
  1439.                 buf$ = GetPreviousSamplesDir(defaultlang$)
  1440.                 prevsamplesdir$ = LTRIM$(buf$)
  1441.  
  1442.                 DebugMsg "Previous Samples Directory: " + buf$, "InitAPR"                
  1443.                 
  1444.                 if prevsamplesdir$ <> "" then
  1445.                     rv% = Lot_CleanPath(prevsamplesdir$)
  1446.                 end if
  1447.  
  1448.                 IF rv% <> 0 THEN
  1449.                     SetSymbolValue "APRSAMPLESDIR", prevsamplesdir$
  1450.                 END IF
  1451.  
  1452.  
  1453.                 '** QMF DASPWAPI Directory
  1454.                 buf$ = ""
  1455.                 rv = 0
  1456.                 buf$ = GetPreviousQMFDir(defaultlang$)
  1457.                 prevqmfdir$ = LTRIM$(buf$)
  1458.  
  1459.                 DebugMsg "Previous QMF Directory: " + buf$, "InitAPR"                
  1460.                 
  1461.                 if prevqmfdir$ <> "" then
  1462.                     rv% = Lot_CleanPath(prevqmfdir$)
  1463.                 end if
  1464.  
  1465.                 IF rv% <> 0 THEN
  1466.                     SetSymbolValue "APRQMFDIR", prevqmfdir$
  1467.                 END IF
  1468.  
  1469.             END IF
  1470.       ELSE
  1471.           proddir$ = basedir$ + LdString(SID_APR_DIR)
  1472.       END IF
  1473.  
  1474. DONE:
  1475.     '** Refresh all directory symbols that rely on APRDIR
  1476.     SetSymbolValue "APRDIR", proddir$
  1477.     SetSymbolValue "APRICONSDIR", GetSymbolValue("APRDIR")
  1478.     SetSymbolValue "APRICONLANGDIR", GetSymbolValue("APRDIR")
  1479.  
  1480.     IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1481.         '** if this is an automated install, get the directory from the response file
  1482.         SetSymbolValue "APRDEMODIR", TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRDEMODIR")) 
  1483.         SetSymbolValue "APRDEMOLANGDIR", TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRDEMODIR")) 
  1484.     ELSE
  1485.         SetSymbolValue "APRDEMODIR", GetSymbolValue("APRDIR") + LdString(SID_APR_DEMOS_DIR)
  1486.         SetSymbolValue "APRDEMOLANGDIR", GetSymbolValue("APRDIR") + LdString(SID_APR_DEMOS_DIR)
  1487.     End If
  1488.  
  1489.     SetSymbolValue "APRSAMPLESLANGDIR", GetSymbolValue("APRSAMPLESDIR")
  1490.  
  1491.     '** If there was no previous QMF Directory, update the directory to the 
  1492.     '** current user's selection for the Approach direcotry.
  1493.     If prevqmfdir$ <> "" Then
  1494.         SetSymbolValue "APRQMFDIR", GetSymbolValue("APRDIR")
  1495.     Else
  1496.         DebugMsg "Previous QMF Dir Not Found", "InitAPR"
  1497.     End If
  1498.  
  1499.     SetSymbolValue "APRTOURDIR", GetSymbolValue("APRDIR")
  1500.       
  1501.  
  1502.    CASE gNODE$
  1503.     proddir$ = basedir$ + LdString(SID_APR_DIR)
  1504.     buf$ = ""
  1505.     IF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Lotus Approach", "Personal Directory", REG_SZ, buf$, 256) = 0 THEN
  1506.         proddir$ = LTRIM$(buf$)
  1507.         rv% = 0
  1508.         if proddir$ <> "" then
  1509.             rv% = Lot_CleanPath(proddir$)
  1510.         end if
  1511.  
  1512.         IF rv% = 0 THEN
  1513.             proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_APR_DIR)
  1514.         END IF
  1515.       ELSEIF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Personal", "", REG_SZ, buf$, 256) = 0 THEN
  1516.             proddir$ = LTRIM$(buf$)
  1517.             rv = 0
  1518.                if proddir$ <> "" then
  1519.                  rv% = Lot_CleanPath(proddir$)
  1520.             end if
  1521.             
  1522.             IF rv% = 0 THEN
  1523.                 proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_APR_DIR)
  1524.             END IF
  1525.     END IF
  1526.  
  1527.     SetSymbolValue "APRWORKDIR", basedir$ + LdString(SID_APR_WORK_DIR)
  1528.     SetSymbolValue "APRMASTERSDIR", Lot_GetDestDirValueFromInstallIni("APRMASTERSLANGDIR")
  1529.     SetSymbolValue "APRSAMPLESDIR", Lot_GetDestDirValueFromInstallIni("APRSAMPLESLANGDIR")
  1530.     SetSymbolValue "APRTOURDIR", Lot_GetDestDirValueFromInstallIni("APRTOURDIR")
  1531.     SetSymbolValue "APRDIR", proddir$
  1532.     SetSymbolValue "APRICONSDIR", GetSymbolValue("APRDIR")
  1533.     SetSymbolValue "APRICONLANGDIR", GetSymbolValue("APRICONSDIR")
  1534.     SetSymbolValue "APRQMFDIR", Lot_GetDestDirValueFromInstallIni("APRQMFDIR")
  1535.  
  1536.     IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1537.         '** if this is an automated install, get the directory from the response file
  1538.         SetSymbolValue "APRDEMODIR", TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRDEMODIR")) 
  1539.         SetSymbolValue "APRDEMOLANGDIR", TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRDEMODIR")) 
  1540.     ELSE
  1541.         SetSymbolValue "APRDEMODIR", GetSymbolValue("APRDIR") + LdString(SID_APR_DEMOS_DIR)
  1542.         SetSymbolValue "APRDEMOLANGDIR", GetSymbolValue("APRDEMODIR")
  1543.     End If
  1544.  
  1545.  
  1546.    END SELECT
  1547.  
  1548.     '       ****** Language Install Code for Node User Install ******
  1549.     '**  Mark directory symbols that need source file adjustment 
  1550.     '**  Bare filename in .inf file, symbol will be set to the installed location
  1551.     '**  on the server obtained by reading the server cinstall.ini file
  1552.  
  1553.     MarkFixupSourceDirSymbol("APRMASTERSLANGDIR")
  1554.     MarkFixupSourceDirSymbol("APRSAMPLESLANGDIR")
  1555.  
  1556.     MarkLanguageSubdir("APRLANGDIR")
  1557.     MarkLanguageSubdir("APRICONLANGDIR")
  1558.     MarkLanguageSubdir("APRMASTERSLANGDIR")
  1559.     MarkLanguageSubdir("APRMASTERSIMGLANGDIR")
  1560.     MarkLanguageSubdir("APRSAMPLESLANGDIR")
  1561.     MarkLanguageSubdir("APRDEMOLANGDIR")
  1562.  
  1563.  
  1564.     DebugMsg "Function End", "InitAPR"
  1565.     APRPrintDirs "End InitAPR"
  1566.  
  1567. END FUNCTION   'InitAPR
  1568.  
  1569. '*************************************************************************
  1570. '** FUNCTION PrevVersionsAPR (prodno%, network$, direction$) AS STRING
  1571. '**
  1572. '** Purpose: This function is called only for SmartSUite.  It is called
  1573. '**          immediately after all the other product functions for
  1574. '**          InitAPR are called.  It allows SmartSuite to assess whether
  1575. '**          there are older versions of products around.
  1576. '**          
  1577. '** In Symbols : 
  1578. '** Out Symbols: 
  1579. '**            
  1580. '** Arguments:  All paremeters are **read only**. 
  1581. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1582. '**                   toolkit in the order in which you were registered.
  1583. '**                   When your product is part of SmartSuite, SmartSuite
  1584. '**                   will always be product #1. (prodno% >=1)
  1585. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1586. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1587. '**                      then step backwards
  1588. '**     
  1589. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1590. '**                      then step backwards, i.e start at your last dialog
  1591. '**                      first.
  1592. '**
  1593. '** Errors:    No return code for errors, you must Raise them
  1594. '** Author:    MMeth
  1595. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1596. '**                             allow the user to step backwards.)
  1597. '**
  1598. '*************************************************************************
  1599.  
  1600. PUBLIC FUNCTION PrevVersionsAPR (prodno%, network$, direction$) AS STRING
  1601.     DIM nProducts%, prodIndex%, i%
  1602.  
  1603.     DebugMsg "Function Start", "PrevVersionsAPR"
  1604.  
  1605.     nProducts% = Reg_GetNumberOfProducts()
  1606.     FOR prodIndex% = 1 to nProducts%
  1607.         If Reg_GetPreviousVersion(prodIndex%) <> "" Then
  1608.             i% = DoMsgBox(LdString(SID_APR_OLDERVERSIONS),"", MB_OK)
  1609.             GOTO PREVPRODFOUND
  1610.         End If
  1611.     NEXT
  1612.  
  1613. PREVPRODFOUND:
  1614.  
  1615.     DebugMsg "Function End", "PrevVersionsAPR"
  1616.  
  1617. END FUNCTION    'PrevVersionsAPR
  1618.  
  1619.  
  1620. '*************************************************************************
  1621. '** FUNCTION PathChangeAPR (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  1622. '**
  1623. '** Purpose: This function is called whenever the user proposes changes
  1624. '**          to a path for your product.  By the time this function calls
  1625. '**          you, the paths have already been checked syntactically, and
  1626. '**          the directory has been checked to see that it is writeable.
  1627. '**          Your obligation is to verify that the proposed new path is ok
  1628. '**          with you.  If not, put up a Lotus Script :"MESSAGEBOX" 
  1629. '**          telling the user and return gBACK.
  1630. '**          
  1631. '** In Symbols : 
  1632. '** Out Symbols: 
  1633. '**            
  1634. '** Arguments:  All paremeters are **read only**. 
  1635. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1636. '**                   toolkit in the order in which you were  registered.
  1637. '**                   When your product is part of SmartSuite, SmartSuite
  1638. '**                   will always be product #1. (prodno% >=1)
  1639. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1640. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1641. '**                      then step backwards
  1642. '**      destdirsym$: The destdir symbol that has changed. e.g. "APRDIR"
  1643. '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  1644. '**                   your top level product directory should change,
  1645. '**                   probably "APRDIR". When it is false, it means that
  1646. '**                   all related directories should change. It is **YOUR
  1647. '**                   RESPONSIBILITY**  to implement this functionality.
  1648. '**     
  1649. '** Errors:    No return code for errors, you must Raise them
  1650. '** Author:    MMeth
  1651. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1652. '**                             allow the user to step backwards.)
  1653. '**
  1654. '*************************************************************************
  1655.  
  1656. PUBLIC FUNCTION PathChangeAPR (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  1657. DIM path$
  1658.  
  1659.     DebugMsg "Function Start", "PathChangeAPR"
  1660.  
  1661.     PathChangeAPR = gNEXT
  1662.  
  1663.     APRPrintDirs "PathChangeAPR"
  1664.  
  1665.    path$ = GetSymbolValue (destdirsym$)
  1666.    '' The following is a psudocode example
  1667.    ''''''rc$ = DetectVersionPriorToDarwin(path$)
  1668.    ''''''If rc$ = "BEAGLE" then
  1669.    ''''''   ShowPathError SID_BEAGLE_FOUND, SID_ERR_EXISTBEAGLE, path$
  1670.    ''''''   PathChangeAPR = gBACK
  1671.    ''''''end if   
  1672.  
  1673.     DebugMsg "Function End", "PathChangeAPR"
  1674.  
  1675. END FUNCTION    'PathChangeAPR
  1676.  
  1677.  
  1678.  
  1679.  
  1680. '*************************************************************************
  1681. '** FUNCTION InitCopyListAPR (prodno%, network$, direction$) AS STRING
  1682. '**
  1683. '** Purpose:  Product must Initialize the copylist
  1684. '**          
  1685. '** Must Do: You must initialize the copy list.  However,
  1686. '** =======  if you leave the code as is (don't touch it at all),
  1687. '**          it will probably work for you. Copy list must be initialized.
  1688. '**          CAUTION: Make sure that your toplevel section in the
  1689. '**                   acronym.SCR has a keyword of "acronymTOP"
  1690. '**
  1691. '** In Symbols : 
  1692. '** Out Symbols: 
  1693. '**            
  1694. '** Arguments:  All paremeters are **read only**. 
  1695. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1696. '**                   toolkit in the order in which you were registered.
  1697. '**                   When your product is part of SmartSuite, SmartSuite
  1698. '**                   will always be product #1. (prodno% >=1)
  1699. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1700. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1701. '**                      then step backwards
  1702. '**     
  1703. '** Errors:    No return code for errors, you must Raise them
  1704. '** Author:    MMeth
  1705. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1706. '**                             allow the user to step backwards.)
  1707. '**
  1708. '*************************************************************************
  1709.  
  1710. PUBLIC FUNCTION InitCopyListAPR (prodno%, network$, direction$) AS STRING
  1711. DIM i%, sym$, sym1$, sym2$, sym3$, chpt$, nextprod$, notused%, FeatureToFind$
  1712. DIM defaultlang$, prevqmfdir$, buf$, rv%, section$, srcDir$, chptname$
  1713.                                             ON Error STFQUIT GOTO COPYLISTERROR
  1714.  
  1715.     DebugMsg "Function Start", "InitCopyListAPR"
  1716.  
  1717.     APRPrintDirs "InitCopyList, Before Language Code"
  1718.  
  1719.     '** For non-language install, they will all go into the same directory
  1720.     '** same directory, for example:
  1721.     SetSymbolValue "APRLANGDIR", GetSymbolValue("APRDIR")
  1722.     SetSymbolValue "APRMASTERSLANGDIR", GetSymbolValue("APRMASTERSDIR")
  1723.     SetSymbolValue "APRMASTERSIMGLANGDIR", GetSymbolValue("APRMASTERSLANGDIR") + LdString(SID_APR_MASTERSIMG_DIR)
  1724.     SetSymbolValue "APRSAMPLESLANGDIR", GetSymbolValue("APRSAMPLESDIR")
  1725.     SetSymbolValue "APRTOURLANGDIR", GetSymbolValue("APRLANGDIR")
  1726.     SetSymbolValue "APRTOURDIR", GetSymbolValue("APRLANGDIR")
  1727.  
  1728.     IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1729.         '** if this is an automated install, get the directory from the response file
  1730.         SetSymbolValue "APRDEMODIR", TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRDEMODIR")) 
  1731.         SetSymbolValue "APRDEMOLANGDIR", TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRDEMODIR")) 
  1732.     ELSE
  1733.         SetSymbolValue "APRDEMODIR", GetSymbolValue("APRDIR") + LdString(SID_APR_DEMOS_DIR)
  1734.         SetSymbolValue "APRDEMOLANGDIR", GetSymbolValue("APRDEMODIR")
  1735.     End If
  1736.  
  1737.  
  1738.     SetSymbolValue "APRICONLANGDIR", GetSymbolValue("APRLANGDIR")
  1739.  
  1740.  
  1741.     APRPrintDirs "Start InitCopyList"
  1742.  
  1743.    InitCopyListAPR = direction$
  1744.    '**  In the backwards case, keep backing up
  1745.    If direction$ = gBACK Then
  1746.       EXIT FUNCTION
  1747.    End If
  1748.  
  1749.  
  1750.    sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  1751.    chpt$ = Lot_GetChapterFromKeyWord(sym$)
  1752.    If chpt$ = "" Then
  1753.       ERROR STFQUIT
  1754.    End IF
  1755.  
  1756.    SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  1757.  
  1758.    CASE gCOMPLETE$
  1759.       i% = F_COMPLETE
  1760.    CASE gLAPTOP$
  1761.       i% = F_LAPTOP
  1762.    CASE gCUSTOM$
  1763.       i% = F_CUSTOM
  1764.    END SELECT
  1765.  
  1766.    Lot_InitializeCopyList chpt$, i%
  1767.  
  1768.    '** Make sure to turn off all sections not available on the server.
  1769.    If (network$ = gNODE) Then
  1770.         nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)  
  1771.         chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)
  1772.         WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  1773.              FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  1774.              If Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE Then
  1775.                 notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  1776.              End If
  1777.  
  1778.              chpt$ = Lot_GetNext() 
  1779.         WEND
  1780.  
  1781.       '** Add basic.cl and other .cl files to node user dir
  1782.       chpt$ = Lot_GetChapterFromKeyword("WIN32SHRCHARTUSER")    
  1783.       section$ =  Lot_GetChapterValStr(chpt$, F_NOTHING)    
  1784.       srcDir$ = Lot_GetDestDirValueFromInstallIni("COMPONENTSDIR")
  1785.       AddSectionFilesToCopyList section$, srcDir$, GetSymbolValue("LOTUSUSERDIR")
  1786.  
  1787.     '** If Default server install, turn on all product sections to make this a FULL install
  1788.     ELSEIF network$ = gSERVER$ AND i% = F_COMPLETE THEN
  1789.  
  1790.         '** Get the name of the obsolete files section.  We do
  1791.         '**  not want to turn that one on along with the rest.
  1792.         sym1$ = Reg_GetProductAcronym(prodno%) & "OBSFILES1"    
  1793.         sym2$ = Reg_GetProductAcronym(prodno%) & "OBSFILES2"
  1794.         sym3$ = Reg_GetProductAcronym(prodno%) & "DUMMYSCRIPTHELP"
  1795.  
  1796.         '** At this point chpt$ is APRTOP.  Here, we will get APRTOP's
  1797.         '**  next sibling.
  1798.         nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)
  1799.  
  1800.         '** Loop through all of the INF sections, turning on
  1801.         '**  all except the obsolete files sections.
  1802.         chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)
  1803.         WHILE chpt$ <> "" AND chpt$ <> nextprod$
  1804.  
  1805.             '** If the current chapter is not APROBSFILES1, APROBSFILES2, 
  1806.             '** or APRDUMMYSCRIPTHELP then turn it on
  1807.             IF Lot_GetChapterValStr(chpt$, F_KEYWORD) <> sym1$ _
  1808.                     AND Lot_GetChapterValStr(chpt$, F_KEYWORD) <> sym2$ _
  1809.                     AND Lot_GetChapterValStr(chpt$, F_KEYWORD) <> sym3$ _
  1810.             THEN
  1811.                 notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
  1812.             END IF
  1813.  
  1814.             '** Move on to the next chapter
  1815.             chpt$ = Lot_GetNext()
  1816.         WEND
  1817.    End If
  1818.    
  1819.     ' ** Turn on server tag file for server install
  1820.     If (network$ = gSERVER) Then
  1821.         chptname$ = Lot_GetChapterFromKeyword("APRSERVERCORE")
  1822.         notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  1823.     End If
  1824.  
  1825.  
  1826.     '**  Special determination of NT system files that may already exist
  1827.     notused% = APR_TurnOnNTSpecialFiles (prodno%, network$)
  1828.    
  1829.  
  1830.    ''       ****** Language Install Code ******
  1831.    ''**  We need to explicitly turn on all language sections for the current
  1832.    ''**  language, those whose keyword suffix matches language "LANG??" 
  1833.    'Lot_SetLanguageSectionsOn(prodno%)
  1834.    
  1835.  
  1836.     '** get default language
  1837.     buf = ""
  1838.     buf$ = GetPreviousLang()
  1839.     defaultlang$ = LTRIM$(buf$)
  1840.  
  1841.     '** QMF DASPWAPI Directory
  1842.     '** One last check before we let the user at it.
  1843.     buf$ = ""
  1844.     rv = 0
  1845.  
  1846.     '** During a Node install use the value written to the Cinstall.ini on the
  1847.     '** server, otherwise, use the Approach directory for this location.
  1848.     '** The user can change this in the customize MOREDIRS dialog if they're doing 
  1849.     '** a standard install, otherwise, they have to live with the defaults.
  1850.     if (network$ = gNode) Then
  1851.         SetSymbolValue "APRQMFDIR", Lot_GetDestDirValueFromInstallIni("APRQMFDIR")
  1852.     Else
  1853.         SetSymbolValue "APRQMFDIR", GetSymbolValue("APRDIR")
  1854.     End If
  1855.  
  1856.     buf$ = GetPreviousQMFDir(defaultlang$)
  1857.     prevqmfdir$ = LTRIM$(buf$)
  1858.     
  1859.     if prevqmfdir$ <> "" then
  1860.         rv% = Lot_CleanPath(prevqmfdir$)
  1861.     end if
  1862.  
  1863.     IF rv% <> 0 THEN
  1864.         SetSymbolValue "APRQMFDIR", prevqmfdir$
  1865.     END IF
  1866.  
  1867.  
  1868.  
  1869.  
  1870.    EXIT FUNCTION
  1871.  
  1872.     DebugMsg "Function End", "InitCopyListAPR"
  1873.  
  1874. COPYLISTERROR:
  1875.    ErrorMsg 0, "Developers: You need to have licenser section with APRTOP in INF file"
  1876.    ERROR STFQUIT
  1877.  
  1878. END FUNCTION    'InitCopyListAPR
  1879.  
  1880.  
  1881. '*************************************************************************
  1882. '** FUNCTION UIAPR (prodno%, network$, direction$) AS STRING
  1883. '**
  1884. '** Purpose: This is your chance to put up any User Interface
  1885. '**          that you want.  Remember, try to keep it short.
  1886. '**          In SmartSuite, if every product puts up two extra
  1887. '**          dialogs, then the SmartSuite will consist of 16 dialogs!
  1888. '**          
  1889. '**          Pay attention to the value of direction, if you are putting
  1890. '**          up more than one dialog.
  1891. '**
  1892. '**          The toolkit will do an accurate space computation later,
  1893. '**          so you can tamper with the copy list. But you shouldn't
  1894. '**          write out anything to the disk until PostCopyCofig!
  1895. '**   
  1896. '** In Symbols : 
  1897. '** Out Symbols: 
  1898. '**            
  1899. '** Arguments:  All paremeters are **read only**. 
  1900. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1901. '**                   toolkit in the order in which you were registered.
  1902. '**                   When your product is oart of SmartSuite, SmartSuite
  1903. '**                   will always be product #1. (prodno% >=1)
  1904. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1905. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1906. '**                      then step backwards
  1907. '**     
  1908. '** Errors:    No return code for errors, you must Raise them
  1909. '** Author:    MMeth
  1910. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1911. '**                             allow the user to step backwards.)
  1912. '**
  1913. '*************************************************************************
  1914.  
  1915. PUBLIC FUNCTION UIAPR (prodno%, network$, direction$) AS STRING
  1916.  
  1917. DIM notused%, chpt$, buf$
  1918. DIM szkey$, ret&, nsize&, gbuf$, defaultlang$
  1919. DIM PrevMasters$, previousprod$
  1920.  
  1921.     DebugMsg "Function Start", "UIAPR"
  1922.  
  1923.     '** If Custom and NOT part of Suite then surface dialog.
  1924.  
  1925.     IF Reg_GetProdSelectedInstallType(prodno%) = gCUSTOM$ AND _
  1926.         GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  1927.         network$ <> gSERVER$ AND GetSymbolValue(SYM_AUTOMATIONINST$) <> gTRUE$ _
  1928.     THEN
  1929.         '**  Don't allow users to change directories in an MLC install
  1930.         '** 
  1931.         '** Find the installed languages
  1932.         szkey$ = gREGLOTUS + LdString(SID_APR_PROD_NAME) + "\" +  LdString(SID_APR_PROD_VER) + "\Languages"
  1933.         IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$) = 1 THEN 
  1934.             ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, "Installed", 0, gbuf$, nsize&) 
  1935.         END IF
  1936.  
  1937.         IF NOT (MID(gbuf$,1,2) <> GetSymbolValue(SYM_INSTALL_LANGUAGE$) AND _
  1938.             GetListItem(SYM_INSTALLKINDS$, prodno%) = gREINSTALL$) _
  1939.         THEN
  1940.             notused% = RegisterCallback("APR","APRMOREDIRSCB") 
  1941.             direction$ = PopupModalDlg (DBAPR_MOREDIRS2, DBAPR_MOREDIRS2)
  1942.         END IF
  1943.     END IF
  1944.                                  
  1945.                                  
  1946.    UIAPR = direction$
  1947.    '**  In the backwards case, keep backing up
  1948.    IF direction$ = gBACK THEN
  1949.       EXIT FUNCTION
  1950.    END IF
  1951.  
  1952. %REM
  1953.     '*** Remove Obsolete Files dlg for  APR
  1954.     '** Only needed once. We do this in INITAPR.
  1955.  
  1956.     if Reg_GetObsFiles (prodno%) = 1 AND GetSymbolValue (SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  1957.       network$ = gSTANDARD$ _
  1958.     then
  1959.       notused% = RegisterCallback("APR", "APRRemoveObsoleteFiles")
  1960.       direction$ = PopupModalDlg (DBAPR_REMOVEPRODFILES, DBAPR_REMOVEPRODFILES)
  1961.  
  1962.       '** the callback did the work, on both IDC_OK and IDC_BACK we
  1963.       '** actually want to go next
  1964.       if direction$ = gBACK then
  1965.          direction$ = gNEXT        
  1966.       end if
  1967.     end if
  1968. %ENDREM
  1969.  
  1970. '*** Below are two examples of how to surface a dialog to prompt the use wether
  1971. '*** they want to backup thier SmartMasters. The 2nd example should be used since it
  1972. '*** checks wether or not the Install is a Language Install. We do NOT want to surface
  1973. '*** this during a Language Install. There is no an example of how to setup your INF file
  1974. '*** (LYT/SCR) for this since it would of been alot more work to give a 'real' example.
  1975. '*** You can use Freeelance or WordPro's INF's as an example if this is necessary
  1976.  
  1977. '*** This method ensures that the dialog will NOT surface during a Language Install
  1978. '*** And handles some other stuff differently
  1979. '    Another method    taken from  LWP.LSS
  1980. '    Give user option to backup currently installed masters
  1981. '    
  1982.     
  1983.     previousprod$ = APR_GetInstalledVersion()
  1984.  
  1985.     defaultlang$ = LTRIM$(GetPreviousLang())
  1986.     IF defaultlang$ <> "" THEN            
  1987.         defaultlang$ = LEFT$(defaultlang$,2)
  1988.     end if
  1989.  
  1990.  
  1991.     IF  previousprod$ = "APPROACH96" AND network$ = gSTANDARD$ AND _
  1992.          direction$ <> gBACK AND _
  1993.           GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ _
  1994.     THEN
  1995.          IF DoesDirExist(GetPreviousMastersDir(defaultlang$)) THEN
  1996.               IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1997.                 APRBackupSmartMasters% = Lot_GetKeyValFromResponseFile(_
  1998.                      "APR", "APRBackupSmartMasters") <> "0"
  1999.               ELSE
  2000.                 chpt$ = Lot_GetChapterFromKeyword("APRSMARTMASTERS")
  2001.                  IF (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) THEN
  2002.                       notused% = RegisterCallback("APR", "APRBACKUPMASTERSCB")
  2003.                     direction$ = PopupModalDlg(DBAPR_BACKUPMASTERS, _
  2004.                          DBAPR_BACKUPMASTERS)
  2005.                   END IF
  2006.             END IF
  2007.         END IF
  2008.     END IF
  2009.  
  2010.     DebugMsg "Function End", "UIAPR"
  2011.  
  2012. END FUNCTION    'UIAPR
  2013.  
  2014.  
  2015.  
  2016.  
  2017. '*************************************************************************
  2018. '** FUNCTION PreCopyConfigAPR (prodno%, network$, direction$, lic%) AS STRING
  2019. '**
  2020. '** Purpose: This is the very last function called before the space is
  2021. '**          accurately computed (to the last byte) and files are copied
  2022. '**          by the toolkit.  If you have any last minute changes to
  2023. '**          do, this is the time to do them.  example:
  2024. '**          Test for monitor resolution, and turn on the chapter
  2025. '**          in the copy list (a memory residident version of the INF file)
  2026. '**          with the appropriate resolution.
  2027. '**          
  2028. '** In Symbols : 
  2029. '** Out Symbols: 
  2030. '**            
  2031. '** Arguments:  All paremeters are **read only**. 
  2032. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2033. '**                   toolkit in the order in which you were registered.
  2034. '**                   When your product is part of SmartSuite, SmartSuite
  2035. '**                   will always be product #1. (prodno% >=1)
  2036. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2037. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2038. '**                      then step backwards
  2039. '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  2040. '**     
  2041. '** Errors:    No return code for errors, you must Raise them
  2042. '** Author:    MMeth
  2043. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  2044. '**                             allow the user to step backwards.)
  2045. '**
  2046. '*************************************************************************
  2047.  
  2048. PUBLIC FUNCTION PreCopyConfigAPR (prodno%, network$, direction$, lic%) AS STRING
  2049.     DIM nSections%, sym$, chpt$, notused%, count%
  2050.     DIM ObsProdDir$, installDir$, value$, ProdKey$, cbBuf&
  2051.     DIM rc%, szProd$, szVer$
  2052.     DIM aprcore%, aprchpt$, nextprod$, FeatureToFind$
  2053.  
  2054.     DebugMsg "Function Start", "PreCopyConfigAPR"
  2055.  
  2056.  
  2057.     PreCopyConfigAPR = direction$
  2058.     ''**  In the backwards case, keep backing up
  2059.     If direction$ = gBACK Then
  2060.         EXIT FUNCTION
  2061.     End If
  2062.  
  2063.     '*** REMOVE PRIOR VERSION
  2064.     '*** This section checks for installing Approach 97 over 
  2065.     '** Approach 96 or 97. If installed to the same Directory the prior
  2066.     '** version is automatically uninstalled before copy files begins.
  2067.  
  2068.     Value$ = "Path"
  2069.     ObsProdDir$ = ""
  2070.  
  2071.     '*** This is the product name as found in the registry
  2072.     szProd$ = LdString(SID_APR_PROD_NAME)
  2073.  
  2074.     '*** This is the old product version as found in the registry
  2075.     szVer$ = "4.0"
  2076.  
  2077.     ProdKey$ = "Software\Lotus\" + szProd$ +"\" + szVer$ +"\"
  2078.     
  2079.     '***Get the directory for the version to be removed
  2080.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, ProdKey$) THEN
  2081.         DebugMsg "Found Approach 4.0 on Machine", "UIAPR"
  2082.         rc% = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, ProdKey$, _
  2083.            Value$, REG_DWORD, ObsProdDir$, cbBuf&)
  2084.  
  2085.     END IF
  2086.     
  2087.     
  2088.     '** GEMINI
  2089.     IF minisuite123% = FALSE OR _
  2090.             Reg_GetProdSelectedInstallType(prodno%) <> gLAPTOP$ _
  2091.     THEN
  2092.         IF (ObsProdDir$ <> "") THEN    
  2093.             '***prepare the 2 paths for a string compare
  2094.             installDir$ = NullTrim(GetSymbolValue("APRDIR"))
  2095.             ObsProdDir$ = NullTrim(ObsProdDir$)
  2096.             IF RIGHT$(installDir$,1) <> "\" THEN installDir$ = installDir$ + "\"
  2097.             IF RIGHT$(ObsProdDir$,1) <> "\" THEN ObsProdDir$ = ObsProdDir$ + "\"
  2098.  
  2099.             DebugMsg "Install Direcotry: " + installDir$ + Chr$(13) + _
  2100.                 "Obsolete Directory: " + ObsProdDir$, "UIAPR"
  2101.  
  2102.             notused% = StrCompare(installDir$,ObsProdDir$,1)
  2103.  
  2104.             IF StrCompare(installDir$,ObsProdDir$,1) = 0 AND _
  2105.                     rc% = ERROR_SUCCESS THEN
  2106.                 
  2107.                 DebugMsg "Removing Prior Version", "UIAPR"
  2108.                 
  2109.                 notused% = RemovePriorVersion( szProd$ , szVer$)
  2110.                 g96Path$ = ObsProdDir$
  2111.                 gRemovePriorVersion% = TRUE
  2112.                 
  2113.                 DebugMsg "Prior Version Removed", "UIAPR"
  2114.             END IF
  2115.         END IF
  2116.     END IF
  2117.     '** END GEMINI
  2118.     '*** DONE REMOVING PRIOR VERSION
  2119.  
  2120.  
  2121.     If GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE Then
  2122.         '*** Setup REMOVE Sections in INF file if user selected to have us delete
  2123.         '** a prior Approach 3.0x install.
  2124.         'In a SmartSuite Install this is already taken care of.
  2125.         nSections% = 2
  2126.         FOR count% = 1 TO nSections% 
  2127.             sym$ = "APROBSFILES" + LTRIM$(STR$(count%))
  2128.             chpt$ = Lot_GetChapterFromKeyWord(sym$)
  2129.  
  2130.             DebugMsg "Symbol: " + sym$ + " & Chapter: " + chpt$, "UIAPR"
  2131.             
  2132.             IF chpt$ <> "" Then
  2133.                 IF (APRRemoveProdFiles% = TRUE) AND count% = 1 THEN
  2134.                     notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
  2135.                 ELSE
  2136.                     notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 0)
  2137.                 END IF
  2138.                 IF g96Path$ <> "" AND count% = 2 THEN
  2139.                 
  2140.                     DebugMsg "Symbol: " + sym$ + " & Chapter: " + chpt$, "UIAPR"
  2141.                     
  2142.                     IF g96Path$ = GetSymbolValue("APRDIR") THEN
  2143.                         notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
  2144.                     ELSE
  2145.                         notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 0)
  2146.                     END IF
  2147.                 END IF
  2148.             END IF
  2149.         NEXT
  2150.     End If
  2151.  
  2152.  
  2153.    ''** Tell the toolkit how many billboards you will have during file copy.
  2154.    ''** This way the toolkit will be able to calculate how long each billboard
  2155.    ''** should stay up
  2156.    If network$ <> gNODE Then
  2157.       Reg_SetBillboardNumber prodno%, 11
  2158.    Else
  2159.       Reg_SetBillboardNumber prodno%, 1
  2160.    End If
  2161.  
  2162.  
  2163.    IF network$ <> gDISTRIBUTION$ THEN
  2164.         Lot_RefreshDestination("APRLANGDIR")
  2165.         IF network$ <> gNODE$ THEN
  2166.             Lot_RefreshDestination("APRMASTERSLANGDIR")
  2167.             Lot_RefreshDestination("APRSAMPLESLANGDIR")
  2168.             Lot_RefreshDestination("APRMASTERSDIR")
  2169.             Lot_RefreshDestination("APRSAMPLESDIR")
  2170.         END IF
  2171.    END IF
  2172.  
  2173.     '** Make sure all the directories are refreshed before writing to account for 
  2174.     '** any changes the user has made that we did not catch before now.
  2175.     Lot_RefreshDestination("APRDIR")
  2176.     Lot_RefreshDestination("APRWORKDIR")
  2177.     Lot_RefreshDestination("APRICONSDIR")
  2178.     Lot_RefreshDestination("APRTOURDIR")
  2179.     Lot_RefreshDestination("APRDEMODIR")
  2180.  
  2181.  
  2182.     '** These are testing to see whether the Windows and Windows\System SCR sections
  2183.     '** are part of the copylist. There was a bug where these sections were not
  2184.     '** being included during a Node install.    
  2185.     chpt$ = Lot_GetChapterFromKeyWord("APRWINDIR")
  2186.     DebugMsg "APRWINDIR: Chapter #"  + CStr(chpt$), "PreCopyConfigAPR" 
  2187.     If (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) Then
  2188.         DebugMsg "APRWINDIR is in the copy list", "PreCopyConfigAPR"
  2189.     Else
  2190.         DebugMsg "APRWINDIR is NOT in the copy list", "PreCopyConfigAPR"
  2191.     End If
  2192.  
  2193.     chpt$ = Lot_GetChapterFromKeyWord("APRSYSFILES")
  2194.     DebugMsg "APRSYSFILES: Chapter #"  + CStr(chpt$), "PreCopyConfigAPR" 
  2195.     If (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) Then
  2196.         DebugMsg "APRSYSFILES is in the copy list", "PreCopyConfigAPR"
  2197.     Else
  2198.         DebugMsg "APRSYSFILES is NOT in the copy list", "PreCopyConfigAPR"
  2199.     End If
  2200.  
  2201.     chpt$ = Lot_GetChapterFromKeyWord("APRSYSDIRNT")
  2202.     DebugMsg "APRSYSDIRNT: Chapter #"  + CStr(chpt$), "PreCopyConfigAPR" 
  2203.     If (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) Then
  2204.         DebugMsg "APRSYSDIRNT is in the copy list", "PreCopyConfigAPR"
  2205.     Else
  2206.         DebugMsg "APRSYSDIRNT is NOT in the copy list", "PreCopyConfigAPR"
  2207.     End If                         
  2208.  
  2209.     chpt$ = Lot_GetChapterFromKeyWord("APRMSVC20")
  2210.     DebugMsg "APRMSVC20: Chapter #"  + CStr(chpt$), "PreCopyConfigAPR" 
  2211.     If (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) Then
  2212.         DebugMsg "APRMSVC20 is in the copy list", "PreCopyConfigAPR"
  2213.     Else
  2214.         DebugMsg "APRMSVC20 is NOT in the copy list", "PreCopyConfigAPR"
  2215.     End If                         
  2216.  
  2217.  
  2218.     '** Check to see if the user is installing the Scripting in Approach
  2219.     '** help files. If not, install the placeholder files.
  2220.     chpt$ = Lot_GetChapterFromKeyWord("APRSCRIPTHELP")
  2221.     DebugMsg "APRSCRIPTHELP: Chapter #"  + CStr(chpt$), "PreCopyConfigAPR" 
  2222.     If (Lot_GetChapterValInt(chpt$, F_INOROUT) = 0) Then
  2223.         APR_TurnOnDummyScriptFiles
  2224.     End If
  2225.  
  2226.     '** It's possible that someone can turn on ODBC and miss a required section
  2227.     '** This fucntion makes sure that if ODBC is selected that the required
  2228.     '** shared DLL section is also turned on.
  2229.     APRTurnOnODBCSection network$
  2230.  
  2231.  
  2232.     '** Make sure to turn off all sections not available on the server.
  2233.     '** There have been situations where node options are hierachichally checked
  2234.     '** when they are not actaully available, so do another check here, just to be sure.
  2235.     sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  2236.     chpt$ = Lot_GetChapterFromKeyWord(sym$)
  2237.     If(network$ = gNode$) Then
  2238.         nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)  
  2239.         chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)
  2240.         WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  2241.              FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  2242.              If Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE Then
  2243.                 notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  2244.              End If
  2245.              chpt$ = Lot_GetNext() 
  2246.         WEND
  2247.     End If
  2248.  
  2249.  
  2250.     DebugMsg "Backup SmartMasters? " +     CStr(APRBackupSmartMasters%), "PreCopyConfigAPR"
  2251.  
  2252.     IF APRBackupSmartMasters% = TRUE Then APRDoBackupSmartMasters
  2253.  
  2254.  
  2255.     DebugMsg "Function End", "PreCopyConfigAPR"
  2256.     APRPrintDirs "End PreCopyConfig"
  2257.  
  2258. END FUNCTION    'PreCopyConfigAPR
  2259.  
  2260.  
  2261. '*************************************************************************
  2262. '** FUNCTION  AddTheBillBoardsAPR (prodno%, network$, direction$, nbytes&)
  2263. '**
  2264. '** Purpose: This is where to add the billboards using the function:
  2265. '**          AddToBillboardList. Use nbytes& as the last parameter to
  2266. '**          the MS-SETUP function AddToBillboardList
  2267. '**
  2268. '** In Symbols : 
  2269. '** Out Symbols: 
  2270. '**            
  2271. '** Arguments:  All paremeters are **read only**. 
  2272. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2273. '**                   toolkit in the order in which you were registered.
  2274. '**                   When your product is part of SmartSuite, SmartSuite
  2275. '**                   will always be product #1. (prodno% >=1)
  2276. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2277. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2278. '**                      then step backwards
  2279. '**           nbytes: Determines the duration of billboard timing.
  2280. '**             NOTE: Make sure to use billboard Ids that are unique to
  2281. '**                   your product. e.g. IDD_APRBILLBD1_BMP & 
  2282. '**                   DB_APRBILLBD1_BMP
  2283. '**     
  2284. '** Errors:    No return code for errors, you must Raise them
  2285. '** Author:    MMeth
  2286. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  2287. '**                             allow the user to step backwards.)
  2288. '**
  2289. '*************************************************************************
  2290.  
  2291. PUBLIC FUNCTION AddTheBillBoardsAPR (prodno%, network$, direction$, nbytes&) AS STRING
  2292.  
  2293.  
  2294.     DebugMsg "Function Start", "AddTheBillBoardsAPR"
  2295.  
  2296.    AddTheBillBoardsAPR = direction$
  2297.    ''**  In the backwards case, keep backing up
  2298.    If direction$ = gBACK Then
  2299.       EXIT FUNCTION
  2300.    End If
  2301.  
  2302.    If network$ = gNODE$ Then
  2303.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2304.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2305.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD1_BMP)
  2306.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD1, "_FNameOrgDlgProc@16", nbytes&
  2307.    else
  2308.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2309.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2310.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD1_BMP)
  2311.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD1, "_FNameOrgDlgProc@16", nbytes& 
  2312.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2313.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2314.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD2_BMP)
  2315.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD2, "_FNameOrgDlgProc@16", nbytes& 
  2316.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2317.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2318.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD3_BMP)
  2319.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD3, "_FNameOrgDlgProc@16", nbytes& 
  2320.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2321.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2322.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD4_BMP)
  2323.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD4, "_FNameOrgDlgProc@16", nbytes& 
  2324.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2325.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2326.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD5_BMP)
  2327.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD5, "_FNameOrgDlgProc@16", nbytes& 
  2328.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2329.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2330.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD6_BMP)
  2331.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD6, "_FNameOrgDlgProc@16", nbytes& 
  2332.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2333.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2334.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD7_BMP)
  2335.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD7, "_FNameOrgDlgProc@16", nbytes& 
  2336.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2337.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2338.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD8_BMP)
  2339.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD8, "_FNameOrgDlgProc@16", nbytes& 
  2340.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2341.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2342.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD9_BMP)
  2343.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD9, "_FNameOrgDlgProc@16", nbytes& 
  2344.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2345.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2346.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD10_BMP)
  2347.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD10, "_FNameOrgDlgProc@16", nbytes& 
  2348.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2349.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2350.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD11_BMP)
  2351.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD11, "_FNameOrgDlgProc@16", nbytes& 
  2352.       SetListItem "NORMALFONT",1,STR$(IDC_TEXT2)
  2353.       SetListItem "IDC_BMP", 1, STR$(IDD_APR_HDR)
  2354.       SetListItem "IDC_BMP", 2, STR$(IDD_APRBILLBD12_BMP)
  2355.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_APRBILLBD12, "_FNameOrgDlgProc@16", nbytes& 
  2356.    End If
  2357.  
  2358.     DebugMsg "Function End", "AddTheBillBoardsAPR"
  2359.  
  2360.  
  2361. END FUNCTION    'AddTheBillBoardsAPR
  2362.  
  2363.  
  2364. '*************************************************************************
  2365. '** FUNCTION PostCopyConfigAPR (prodno%, network$, direction$, programgroup$) AS STRING
  2366. '**
  2367. '** Purpose: This is called just after file copy has completed.
  2368. '**          This is your opportunity to do all the configuaration
  2369. '**          you need.  This includes:
  2370. '**          
  2371. '**          1. Writing to all your ini files
  2372. '**             Don't worry about ini files related to shared components
  2373. '**          2. Writing to OLE registration database
  2374. '**             Don't worry about OLE registration related to shared 
  2375. '**             components
  2376. '**          3. Writing to any other config files you may support
  2377. '**          4. Writing out user registration information,
  2378. '**             no matter how your product picks up this info
  2379. '**          5. Create any working directories
  2380. '**             A working directory is one that does not contain any
  2381. '**             files, thus the toolkit did not create it for you.
  2382. '**
  2383. '**          NOTE: THERE are many subtleties in here if you are
  2384. '**                dealing with node and CD installs.  In particular,
  2385. '**                you must be ***very*** careful to understand where the
  2386. '**                things are that you are pointing to.  They could
  2387. '**                be on the node, server, or CD!  This, in combination
  2388. '**                with the INF file for Server/Node, is probably the 
  2389. '**                trickiest part of writing a quality install.  When 
  2390. '**                configuring, you must be careful to consider what 
  2391. '**                happens if there is a pre-existing product on the 
  2392. '**                machine, in the same location or
  2393. '**                another one!  This is very very tricky.  What happens
  2394. '**                if you had a full installation previously in location C:\FOO
  2395. '**                and now the user is installing a minimum installation in loaction
  2396. '**                D:\FOO. 
  2397. '**
  2398. '**                Each and every thing you do for configuartion needs very
  2399. '**                careful thought.
  2400. '**
  2401. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  2402. '**                This currrently tells you the location of a feature
  2403. '**                if the feature appears both in the SERVER.INF and the
  2404. '**                NODE.INF referred to by the same Keyword ID.
  2405. '**                We do not support CDs with this command yet, but we will 
  2406. '**                at some time.
  2407. '**
  2408. '**                Also look out for writing to a file when the directory
  2409. '**                doesn't exist.  If the user deselected one of your
  2410. '**                options, your install may still be running, but since
  2411. '**                there were no files to copy into the directory
  2412. '**                it wasn't created by the toolkit!
  2413. '**
  2414. '**                Finally, remember that configuration files generally
  2415. '**                hold the state that the user has customized earlier.
  2416. '**                Sometimes you don't want to overwrite these!
  2417. '**                You will primarily use three MS-SETUP functions
  2418. '**                in here: 
  2419. '**                1. CreateIniKeyValue  (writing to ini files)
  2420. '**                2. SetRegKeyValue     (writing to OLE reg DB)
  2421. '**
  2422. '**                CreateProgmanGroup &  ShowProgmanGroup are
  2423. '**                done for you by the time you reach this
  2424. '**                function.
  2425. '**
  2426. '**                You will not have to do any configuration of LOTUS SHARED
  2427. '**                tools.  The toolkit will do this for you.
  2428. '** In Symbols : 
  2429. '** Out Symbols: 
  2430. '**            
  2431. '** Arguments:  All paremeters are **read only**. 
  2432. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2433. '**                   toolkit in the order in which you were registered.
  2434. '**                   When your product is part of SmartSuite, SmartSuite
  2435. '**                   will always be product #1. (prodno% >=1)
  2436. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2437. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2438. '**                      then step backwards
  2439. '**    programgroup$: The name of the program group where the user chose to
  2440. '**                   install the program manager icons     
  2441. '**
  2442. '** Errors:    No return code for errors, you must Raise them
  2443. '** Author:    MMeth
  2444. '** Returns:   return: gNEXT 
  2445. '**
  2446. '*************************************************************************
  2447.  
  2448. PUBLIC FUNCTION PostCopyConfigAPR (prodno%, network$, direction$, programgroup$) AS STRING
  2449.     DIM ripath$, notused%, workdir$, chpt$, spelldir$, symdir$
  2450.     DIM ret%, aprchpt$, notespath$, aprdir$, szKey$
  2451.     DIM InfFile$
  2452.  
  2453.     DebugMsg "Function Start", "PostCopyConfigAPR"
  2454.  
  2455.  
  2456.     PostCopyConfigAPR = direction$
  2457.     ''**  In the backwards case, keep backing up
  2458.     If direction$ = gBACK Then
  2459.       EXIT FUNCTION
  2460.     End If
  2461.  
  2462.     aprchpt$ = Lot_GetChapterFromKeyword("APRCORE")
  2463.  
  2464.  
  2465.     If network$ <> gNODE$ Then 
  2466.       SetSymbolValue SYM_CDDRIVE$, GetSymbolValue(SYM_INSTALL_SOURCE)
  2467.     End If
  2468.                    
  2469.  
  2470.     '** If installing the MiniSuite only write to the Approach RI file if it was installed.
  2471.     If minisuite123% = FALSE Then
  2472.         ''** WRITE TO RI FILE
  2473.         ''*******************
  2474.         ''**  but only if the main product is installed - otherwise the ri file isn't there.
  2475.         IF (Lot_GetChapterValInt(APRchpt$, F_INOROUT) = 1) THEN
  2476.             ripath$ = GetSymbolValue("APRDIR")
  2477.             ripath$ = TRIM(ripath$)
  2478.             if (RIGHT(ripath$,1) <> "\") then
  2479.                     ripath$ = ripath$ + "\"
  2480.             end if
  2481.             ripath$ = ripath$ + "approach.ri"
  2482.             If Lot_WriteToRiFile (ripath$) = FALSE Then
  2483.               ErrorMsg SID_APR, LdString(SID_APR_ERR_RI) + ripath$
  2484.             End If
  2485.         End If
  2486.     Else
  2487.         IF (Lot_GetChapterValInt(APRchpt$, F_INOROUT) = 1) THEN
  2488.            ''** WRITE TO RI FILE
  2489.            ''*******************
  2490.            ''**  but only if the main product is installed - otherwise the ri file isn't there.
  2491.            IF (Lot_GetChapterValInt(APRchpt$, F_INOROUT) = 1) THEN
  2492.                 ripath$ = GetSymbolValue("APRDIR")
  2493.                 ripath$ = TRIM(ripath$)
  2494.                 if (RIGHT(ripath$,1) <> "\") then
  2495.                         ripath$ = ripath$ + "\"
  2496.                 end if
  2497.                 ripath$ = ripath$ + "approach.ri"
  2498.                 If Lot_WriteToRiFile (ripath$) = FALSE Then
  2499.                   ErrorMsg SID_APR, LdString(SID_APR_ERR_RI) + ripath$
  2500.                 End If
  2501.             End If
  2502.         End If
  2503.     End If
  2504.  
  2505.  
  2506.     If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
  2507.       GOTO SKIPCONFIG
  2508.     End If
  2509.  
  2510.     If minisuite123% = FALSE Then
  2511.         '** Write product specific registry keys
  2512.         AddRegistryKeysAPR prodno%, network$
  2513.         notused% = APR_AddRegistryEntries (prodno%, network$)
  2514.     End If
  2515.  
  2516.     '** Log the product into \windows\lotus.ini
  2517.     '** Per Ron Montero 6/12/96 we don't need to write LOTUS.INI entries anymore. --TGR 6/26/96
  2518.     'APR_AddLOTUSiniEntries prodno%, network$
  2519.  
  2520.     '** Write the OLE registration
  2521.  
  2522.     '** The following section added for CIT 2111_4
  2523.     '** Only write this stuff if program files installed
  2524.     IF (Lot_GetChapterValInt(APRchpt$, F_INOROUT) = 1) THEN
  2525.         '** Write the OLE registration database
  2526.         APR_AddOLEEntries prodno%, network$
  2527.         'ret% = Lot_WriteOLERegForAPR(network$, prodno%)
  2528.  
  2529.         If minisuite123% = TRUE Then
  2530.             '** Write product specific registry keys
  2531.             AddRegistryKeysAPR prodno%, network$
  2532.             notused% = APR_AddRegistryEntries (prodno%, network$)
  2533.         End If
  2534.     END IF
  2535.  
  2536.  
  2537.    '** Create work directory for standard and node
  2538.    '** GEMINI
  2539.     IF minisuite123% = FALSE OR _
  2540.            (minisuite123% = TRUE AND (Lot_GetChapterValInt(Lot_GetChapterFromKeyword("APRCORE"), F_INOROUT) = 1)) _
  2541.     Then
  2542.         workdir$ = GetSymbolValue("APRWORKDIR")
  2543.         CreateDir workdir$, cmoNone
  2544.         IF DoesDirExist(workdir$) = 0 Then
  2545.             ShowPathError SID_ERR_CREATEDIR, 0, workdir$
  2546.         ELSE
  2547.             Lot_RegisterObject "APRCORE", UNIN_CLASS_DIRECTORY$, workdir$
  2548.         END IF
  2549.     END IF
  2550.    '** END GEMINI
  2551.        
  2552.     '** Create spell directory under local compnent for node 
  2553. '    spelldir$ = Lot_GetDestDirValueFromInstallIni("COMPONENTSDIR")+"\spell"
  2554.     IF network$ = gNODE$ THEN
  2555.  
  2556.         DebugMsg "Creating Spell Directory on the Node.", "PostCopyConfigAPR"
  2557.         
  2558.         spelldir$ = GetSymbolValue(SYM_COMPONENTSDIR$)
  2559.         spelldir$ = TRIM$(spelldir$)
  2560.         IF Right$(spelldir$, 1) = "\" THEN
  2561.             spelldir$ = spelldir$ + "spell"
  2562.         ELSE
  2563.             spelldir$ = spelldir$ + "\spell"
  2564.         END IF
  2565.  
  2566.         CreateDir spelldir$, cmoNone
  2567.         IF DoesDirExist(spelldir$)=0 THEN
  2568.             ShowPathError SID_ERR_CREATEDIR, 0, spelldir$
  2569.         ELSE
  2570.             DebugMsg "Registering Spell Directory on the Node with Uninstall. " + spelldir$, "PostCopyConfigAPR"
  2571.             
  2572.             Lot_RegisterObject "APRCORE", UNIN_CLASS_DIRECTORY$, spelldir$
  2573.         END IF
  2574.     END IF
  2575.  
  2576.     If minisuite123% = FALSE Then
  2577.        '** Write the uninstaller - but only for the primary language
  2578.        IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  2579.             IF network$ = gSTANDARD$ THEN
  2580.                 InfFile$ = GetSymbolValue("INSTDIR") + "APR.INF"
  2581.             ELSE
  2582.                 IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  2583.                     InfFile$ = GetSymbolValue("SUITDIR") + "APRNODE.INF"
  2584.                 ELSE
  2585.                     InfFile$ = GetSymbolValue("APRDIR") + "APRNODE.INF"
  2586.                 END IF
  2587.             END IF
  2588.             Lot_RegisterUninstaller LdString(SID_APR_PROD_NAME),_
  2589.                 LdString(SID_APR_PROD_VER),_
  2590.                 LdString(SID_APR_COMMERCIALNAME),_
  2591.                 InfFile$, TRUE, FALSE, _
  2592.                 GetSymbolValue(SYM_INSTALL_LANGUAGE$),"","",""
  2593.         END IF
  2594.     End If
  2595.  
  2596.     IF minisuite123 = TRUE THEN
  2597.         IF (Lot_GetChapterValInt(APRchpt$, F_INOROUT) = 1) THEN
  2598.                '** Write the uninstaller - but only for the primary language
  2599.                IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  2600.                 IF network$ = gSTANDARD$ THEN
  2601.                     InfFile$ = GetSymbolValue("INSTDIR") + "APR.INF"
  2602.                 ELSE
  2603.                     IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  2604.                         InfFile$ = GetSymbolValue("SUITDIR") + "APRNODE.INF"
  2605.                     ELSE
  2606.                         InfFile$ = GetSymbolValue("APRDIR") + "APRNODE.INF"
  2607.                     END IF
  2608.                 END IF
  2609.                 Lot_RegisterUninstaller LdString(SID_APR_PROD_NAME),_
  2610.                     LdString(SID_APR_PROD_VER),_
  2611.                     LdString(SID_APR_COMMERCIALNAME),_
  2612.                     InfFile$, TRUE, FALSE, _
  2613.                     GetSymbolValue(SYM_INSTALL_LANGUAGE$),"","",""
  2614.                END IF
  2615.         END IF
  2616.     END IF
  2617.  
  2618.  
  2619.     IF (Lot_IsTheFeatureInstalled("APRTOP") = 1) THEN   
  2620.         IF network$ = gNODE$ THEN
  2621.                notused% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2622.                     "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Lotus Approach", "Personal Directory",_
  2623.                  REG_SZ, Lot_TrimEndSlash(GetSymbolValue("APRDIR")),_
  2624.                  (len(Lot_TrimEndSlash(GetSymbolValue("APRDIR"))) + 1))
  2625.                notused% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2626.                     "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Personal", "",_
  2627.                  REG_SZ, Lot_TrimEndSlash(GetSymbolValue("APRDIR")),_
  2628.                  (len(Lot_TrimEndSlash(GetSymbolValue("APRDIR"))) + 1))
  2629.         END IF
  2630.        END IF
  2631.  
  2632.     IF network$ = gSTANDARD$ THEN
  2633.         Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, GetSymbolValue("APRDIR") & "powerkey.dat"
  2634.         Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, GetSymbolValue("APRDIR") & "sn.dat"
  2635.        '** GEMINI
  2636.         IF minisuite123% = FALSE THEN
  2637.             Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, GetSymbolValue("APRDIR") & "cinstall.ini"
  2638.             Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, GetSymbolValue("APRDIR") & "miscobj.ini"
  2639.         END IF
  2640.     END IF
  2641.  
  2642.     Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, GetSymbolValue("APRDIR") & "apprerr.out"
  2643.  
  2644.     '** Register appevents keys with uninstaller
  2645.     Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CURRENT_USER\AppEvents\EventLabels\ApproachDone"
  2646.     Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CURRENT_USER\AppEvents\EventLabels\ApproachEnd"
  2647.     Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CURRENT_USER\AppEvents\EventLabels\ApproachStart"
  2648.     Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Approach"
  2649.  
  2650.  
  2651.     '** if the user installed Approach 97 to the same directory as Approach 96
  2652.     '** then we need to remove the registry keys for Approach 96
  2653.     DebugMsg "Checking for Upgrade - Removal of Approach 96 Registry Entries.", "PostCopyConfigAPR"
  2654.  
  2655.     If (g96Path$ <> "") Then
  2656.         If StrCompare(Trim$(UCase$(g96Path$)), Trim$(UCase$(GetSymbolValue("APRDIR"))), 0) = 0 _
  2657.                     OR (gRemovePriorVersion% = TRUE) _
  2658.         Then
  2659.             DebugMsg "Removing Approach 96 Registry Entries.", "PostCopyConfigAPR"
  2660.             
  2661.             szKey$ = "SOFTWARE\Lotus\Approach\4.0"
  2662.             notused% = Lot_RegDelAllSubKeys(HKEY_LOCAL_MACHINE, szKey$)
  2663.             notused% = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, szKey$)
  2664.             notused% = Lot_RegDelAllSubKeys(HKEY_CURRENT_USER, szKey$)
  2665.             notused% = Lot_DeleteRegKeyEx(HKEY_CURRENT_USER, szKey$)
  2666.  
  2667.             szKey$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Approach V4.0"
  2668.             notused% = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, szKey$)
  2669.         Else
  2670.             DebugMsg "Approach 96 Registry Entries NOT Removed.", "PostCopyConfigAPR"
  2671.             DebugMsg "Approach 96 Path: " & g96Path$ & Chr$(10) & _ 
  2672.                     "Approach 97 Path: " & GetSymbolValue("APRDIR"), "PostCopyConfigAPR"
  2673.         End If
  2674.     End If
  2675.  
  2676.  
  2677.     '** If the dummy script help files were copied, then we need to rename them
  2678.     '** Make the call here after all files have been copied.
  2679.     aprchpt$ = Lot_GetChapterFromKeyword("APRDUMMYSCRIPTHELP")
  2680.     IF (Lot_GetChapterValInt(aprchpt$, F_INOROUT) = 1) THEN
  2681.         APR_RenameDummyScriptFiles
  2682.     End If
  2683.  
  2684.     If gTimeBomb = TRUE AND network$ <> gSERVER$ Then
  2685.         APRHideGalleryFiles
  2686.     End If
  2687.  
  2688.  
  2689. %REM
  2690.     '** 9/30/96 TGR
  2691.     '** Robert Armes says this isn't necessary anymore as the DBNOTES 
  2692.     '** powerkey has been modified to correctly find the Notes Path itself.
  2693.  
  2694.     DebugMsg "Checking if Autoexec Flag Set", "PostCopyConfigAPR"    
  2695.     If gWriteToAutoexec% = TRUE Then
  2696.         APRWriteToAUTOEXEC
  2697.     End If
  2698. %ENDREM
  2699.  
  2700. SKIPCONFIG:
  2701.  
  2702.     DebugMsg "Function End", "PostCopyConfigAPR"
  2703.  
  2704. END FUNCTION    'PostCopyConfigAPR
  2705.  
  2706. '*************************************************************************
  2707. '** PUBLIC SUB AddRegistryKeysAPR (prodno%, network$) 
  2708. '**
  2709. '** Purpose: This is called just after file copy has completed.
  2710. '**          1. Add product specific Registry Keys.
  2711. '**
  2712. '**           Each and every thing you do for configuartion needs very
  2713. '**           careful thought.
  2714. '**
  2715. '** In Symbols : 
  2716. '** Out Symbols: 
  2717. '**            
  2718. '** Arguments:  All paremeters are **read only**. 
  2719. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2720. '**                   toolkit in the order in which you were registered.
  2721. '**                   When your product is part of SmartSuite, SmartSuite
  2722. '**                   will always be product #1. (prodno% >=1)
  2723. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2724. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2725. '**                      then step backwards
  2726. '**    programgroup$: The name of the program group where the user chose to
  2727. '**                   install the program manager icons     
  2728. '**
  2729. '** Errors:    No return code for errors, you must Raise them
  2730. '** Author:    PMD
  2731. '**
  2732. '*************************************************************************
  2733. PUBLIC SUB AddRegistryKeysAPR (prodno%, network$) 
  2734.     DIM LocPath$, Filename$, descript$, gbuf$, instvalue&, aprchpt$
  2735.     DIM szkey$, szkey2$, nsize&, nsize1&,nsize2&,Insttype$,nsize3, notused%
  2736.     DIM RegStatus&, keyvalue$, keyvalue1$,keyvalue2$, keyvalue3$, keyvalue4$ 
  2737.     DIM TypeLibCLSID$, TypeLibName$, Flags%, Desc$, FullTypeLibName$
  2738.  
  2739.     DebugMsg "Function Start", "AddRegistryKeysAPR"
  2740.  
  2741.  
  2742.     szkey$ = gREGLOTUS+"Approach\"+LdString(SID_APR_PROD_VER)
  2743.     descript$ = LdString(SID_APR_COMMERCIALNAME)
  2744.     keyvalue$ = "Path"
  2745.     keyvalue1$ = "Description"
  2746.     keyvalue2$ = "Name"
  2747.     Insttype$ = "InstallType"
  2748.     Filename = LdString(SID_APR_APREXE)
  2749.     nsize1 = len(Filename) + 1
  2750.     nsize2 = len(descript$) + 1
  2751.  
  2752.     If network$ = gNODE$ Then
  2753.         instvalue = 1
  2754.     ElseIf network$ = gSTANDARD$ Then
  2755.         instvalue = 0
  2756.     End if
  2757.     nsize3 = 4
  2758.  
  2759.     If Lot_IsTheFeatureInstalled("APRCORE") <> FALSE Then
  2760.         If network$ = gSTANDARD$ THEN
  2761.             locpath$ = Lot_WhereIsFeature(prodno%, "APRCORE", "approach.exe")
  2762.         ELSEIF network$ = gNODE$ THEN
  2763.             'locpath$ = Lot_WhereIsFeature(prodno%, "APRSERVERCORE", "server.tag")
  2764.               locpath$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  2765.         END IF
  2766.         'locpath = Lot_TrimEndSlash (locpath$)
  2767.         nsize = len(LocPath$) + 1
  2768.  
  2769.  
  2770.         regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey)
  2771.         IF DoesDirExist(Lot_TrimEndSlash (locpath$)) THEN
  2772.             regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, REG_SZ, LocPath$, nsize)
  2773.         END IF
  2774.  
  2775.         'regStatus& = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, REG_SZ, LocPath$, nsize)
  2776.         regStatus& = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue2$, REG_SZ, Filename, nsize1)
  2777.         regStatus& = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue1$, REG_SZ, descript$, nsize2)
  2778.         regStatus& = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, Insttype$, REG_DWORD, instvalue, nsize3)
  2779.  
  2780.         IF regStatus& <> ERROR_SUCCESS THEN
  2781.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szkey,"",""
  2782.         END IF
  2783.  
  2784.  
  2785.         '** Register the Approach Type Library
  2786.         TypeLibCLSID$ = "{1AAF5D8F-41E9-11CE-AEA9-00805f684C33}"
  2787.         Flags% = LIBFLAG_FCONTROL
  2788.         Desc$ = LdString(SID_APR_TLBDESC)                  
  2789.  
  2790.         TypeLibName$ = LdString(SID_APR_TLBNAME)
  2791.         FullTypeLibName = locpath + TypeLibName    
  2792.  
  2793. '        regStatus& = Lot_RegisterTypeLib(TypeLibCLSID$, LdString(SID_APR_PROD_VER), Desc$, _
  2794. '                        locpath$, FullTypeLibName$, Flags%)
  2795.  
  2796.         regStatus& = APRRegisterTypeLib(FullTypeLibName$, locpath$)
  2797.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, _
  2798.                         "HKEY_CLASSES_ROOT\TypeLib\" + TypeLibCLSID$)
  2799.  
  2800.  
  2801.     END IF
  2802.  
  2803.  
  2804.     '** Write the registry value to add the new language
  2805.     AddRegistryLanguage LdString(SID_APR_PROD_NAME), LdString(SID_APR_PROD_VER)
  2806.    
  2807.  
  2808.     '** Write shared DLLS entries and counts
  2809.  
  2810.     '** '//* This is done automatically by CIT as long as the section has _SHRCNT as the
  2811.     '**  end of the name. This change was implemented in CIT 2112_4 - This is not the recommended method
  2812.     '**  since CIT 2130. Now back to using the RegAndIncrementCount functionality.
  2813.  
  2814.  
  2815.  
  2816.     IF Lot_IsTheFeatureInstalled("APRORACLE_SHRCNT") <> FALSE _
  2817.             OR Lot_IsTheFeatureInstalled("APRSQLSERVER4_SHRCNT") <> FALSE _
  2818.             OR Lot_IsTheFeatureInstalled("APRSQLSERVER6_SHRCNT") <> FALSE _
  2819.             OR Lot_IsTheFeatureInstalled("APRSYBASE_SHRCNT") <> FALSE _
  2820.             OR Lot_IsTheFeatureInstalled("APRINFORMIX5_SHRCNT") <> FALSE _
  2821.             OR Lot_IsTheFeatureInstalled("APRINFORMIX7_SHRCNT") <> FALSE _
  2822.     THEN
  2823.  
  2824.         DIM commonFiles(8) as string
  2825.         DIM i as integer
  2826.         commonFiles(1) = "msvcrt10.dll"
  2827.         commonFiles(2) = "odbcinst.hlp"
  2828.         commonFiles(3) = "odbc32.dll"
  2829.         commonFiles(4) = "odbcad32.exe"
  2830.         commonFiles(5) = "odbccp32.dll"
  2831.         commonFiles(6) = "odbccr32.dll"
  2832.         commonFiles(7) = "odbcint.dll"
  2833.  
  2834.  
  2835.         FOR i = 1 to (ubound(commonFiles) - 1)
  2836.             RegAndIncrementCount commonFiles(i)
  2837.         NEXT                
  2838.  
  2839.         IF Lot_IsTheFeatureInstalled("APRORACLE_SHRCNT") <> FALSE THEN
  2840.             RegAndIncrementCount "corent23.dll"
  2841.             RegAndIncrementCount "orant71.dll"
  2842.             RegAndIncrementCount "ociw32.dll"
  2843.         END IF
  2844.  
  2845.         IF Lot_IsTheFeatureInstalled("APRSQLSERVER4_SHRCNT") <> FALSE THEN
  2846.             RegAndIncrementCount "dbnmpntw.dll"
  2847.             RegAndIncrementCount "ntwdblib.dll"
  2848.         END IF
  2849.     END IF
  2850.  
  2851.  
  2852.     DebugMsg "Function End", "AddRegistryKeysAPR"
  2853.  
  2854. END SUB        'AddRegistryKeysAPR
  2855.  
  2856.  
  2857.  
  2858. '*************************************************************************
  2859. '** FUNCTION AddIconsAPR (prodno%, network$, direction$, programgroup$) AS STRING
  2860. '**
  2861. '** Purpose: This is called just after file copy has completed.
  2862. '**          1. Add program manager icons of those features
  2863. '**             that were installed.
  2864. '**          NOTE: THERE are many subtleties in here if you are
  2865. '**                dealing with node and CD installs.  In particular,
  2866. '**                you must be ***very*** careful to understand where the
  2867. '**                things are that you are pointing to.  They could
  2868. '**                be on the node, server, or CD!  This, in combination
  2869. '**                with the INF file for Server/Node, is probably the 
  2870. '**                trickiest part of writing a quality install.  When 
  2871. '**                configuring, you must be careful to consider what 
  2872. '**                happens if there is a pre-existing product on the 
  2873. '**                machine, in the same location or
  2874. '**                another one!  This is very very tricky.  What happens
  2875. '**                if you had a full installation previously in location C:\FOO
  2876. '**                and now the user is installing a minimum installation in loaction
  2877. '**                D:\FOO. 
  2878. '**
  2879. '**                Each and every thing you do for configuartion needs very
  2880. '**                careful thought.
  2881. '**
  2882. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  2883. '**                This currrently tells you the location of a feature
  2884. '**                if the feature appears both in the SERVER.INF and the
  2885. '**                NODE.INF referred to by the same Keyword ID.
  2886. '**                We do not support CDs with this command yet, but we will 
  2887. '**                at some time.
  2888. '**
  2889. '**                Also look out for writing to a file when the directory
  2890. '**                doesn't exist.  If the user deselected one of your
  2891. '**                options, your install may still be running, but since
  2892. '**                there were no files to copy into the directory
  2893. '**                it wasn't created by the toolkit!
  2894. '**
  2895. '**                Finally, remember that configuration files generally
  2896. '**                hold the state that the user has customized earlier.
  2897. '**                Sometimes you don't want to overwrite these!
  2898. '**                You will primarily use three MS-SETUP functions
  2899. '**                in here: 
  2900. '**                1. CreateProgmanItem  (writing to progman) 
  2901. '**
  2902. '**                CreateProgmanGroup &  ShowProgmanGroup are
  2903. '**                done for you by the time you reach this
  2904. '**                function.
  2905. '**
  2906. '**                You will not have to do any configuration of LOTUS SHARED
  2907. '**                tools.  The toolkit will do this for you.
  2908. '** In Symbols : 
  2909. '** Out Symbols: 
  2910. '**            
  2911. '** Arguments:  All paremeters are **read only**. 
  2912. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2913. '**                   toolkit in the order in which you were registered.
  2914. '**                   When your product is part of SmartSuite, SmartSuite
  2915. '**                   will always be product #1. (prodno% >=1)
  2916. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2917. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2918. '**                      then step backwards
  2919. '**    programgroup$: The name of the program group where the user chose to
  2920. '**                   install the program manager icons     
  2921. '**
  2922. '** Errors:    No return code for errors, you must Raise them
  2923. '** Author:    MZ
  2924. '** Returns:   return: gNEXT 
  2925. '**
  2926. '*************************************************************************
  2927.  
  2928. PUBLIC FUNCTION AddIconsAPR (prodno%, network$, direction$, programgroup$) AS STRING
  2929.     DIM ripath$, exepath$, exename$, szArgument$, notused%, aprchpt$, aprdir$
  2930.     DIM LanguageQualifier$, LanguageAcronym$, Link$, Path$, rc%, featureToFind$
  2931.     DIM notespath$, AddIcon%
  2932.  
  2933.  
  2934.     DebugMsg "Function Start", "AddIconsAPR"
  2935.  
  2936.  
  2937.     AddIconsAPR = direction$
  2938.     ''**  In the backwards case, keep backing up
  2939.     IF direction$ = gBACK THEN
  2940.         EXIT FUNCTION
  2941.     END IF
  2942.  
  2943.     aprchpt$ = Lot_GetChapterFromKeyword("APRCORE")
  2944.  
  2945.     IF network$ = gSTANDARD$ THEN
  2946.        aprdir$  = Lot_WhereIsFeature(prodno%, "APRCORE", LdString(SID_APR_APREXE)) 
  2947.        featureToFind$ = "APRCORE"
  2948.     ELSEIF network$ = gNODE$ THEN
  2949.        aprdir$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  2950.        featureToFind$ = "APRSERVERCORE"
  2951.     END IF
  2952.         
  2953.     '** Check to see if the automated install has icons turned on or off.
  2954.     AddIcon% = TRUE        
  2955.     IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  2956.         '** Read the instAPR.rsp file for the appropriate option.
  2957.         AddIcon% = Lot_AutoAddiconOptions()
  2958.     END IF
  2959.  
  2960.     '** During a MiniSuite Install, don't create Icons for Approach.
  2961.     If minisuite123% = TRUE Then
  2962.         AddIcon% = FALSE
  2963.     End If
  2964.  
  2965.  
  2966.     '** Write entries in  Program Manager
  2967.     IF network$ = gSTANDARD$ OR network$ = gNODE$ THEN
  2968.         '** Only add icons if necessary - standard install or selected during automation
  2969.         IF AddIcon = TRUE THEN
  2970.            '** Check for new language install and put the appropriate language switch on the command line
  2971.            '** Do this here just in case we have new icons that do not need a language switch.
  2972.            IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN
  2973.                 IF (Lot_GetChapterValInt(aprchpt$, F_INOROUT) = 1) THEN
  2974.                     APR_AddIcon featureToFind$, programgroup$, LdString(SID_APR_COMMERCIALNAME)+"-"+GetSymbolValue(SYM_INSTALL_LANGUAGE$), LdString(SID_APR_APREXE), "/L="+GetSymbolValue(SYM_INSTALL_LANGUAGE$), "", ""
  2975.                     APR_AddIcon featureToFind$, programgroup$ + LdString(SID_APR_PROD_UPDATES), LdString(SID_APR_PROD_UPDATES)+"-"+GetSymbolValue(SYM_INSTALL_LANGUAGE$), "readme.wri", "", "", ""
  2976.                 END IF
  2977.            ELSE
  2978.                 IF (Lot_GetChapterValInt(aprchpt$, F_INOROUT) = 1) THEN
  2979.                     APR_AddIcon featureToFind$, programgroup$, LdString(SID_APR_COMMERCIALNAME), LdString(SID_APR_APREXE), "", "", ""
  2980.                     APR_AddIcon featureToFind$, programgroup$ + LdString(SID_APR_PROD_UPDATES), LdString(SID_APR_PROD_UPDATES), "readme.wri", "", "", ""
  2981.                 END IF
  2982.            END IF
  2983.         END IF
  2984.  
  2985.        IF Lot_GetChapterValInt(aprchpt$, F_INOROUT) = 1 AND (GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$) THEN
  2986.             '** This function adds the specified path to the App Paths registry entry, or the NT 3.51
  2987.             '** Environment. Here we add the Approach directory and the Compnent directory (that is what the TRUE is for)
  2988.             Lot_RegAppPath LdString(SID_APR_APREXE), aprdir$, LEFT$(aprdir$,LEN(aprdir$)-1), TRUE, "APRCORE"
  2989.  
  2990.             '** This could be replaced by a call to Lot_RegAppPath()
  2991.             IF WhatPlatform() = PLATFORM_WINNT THEN
  2992.                 APRAddNotesToPathNT
  2993.             ELSE
  2994.                 APRAddNotesToPathWin95
  2995.             END IF
  2996.        END IF
  2997.  
  2998.     END IF
  2999.  
  3000.     'SKIPCONFIG:
  3001.  
  3002.     DebugMsg "Function End", "AddIconsAPR"
  3003.  
  3004. END FUNCTION    'AddIconsAPR
  3005.  
  3006.  
  3007.  
  3008. '*************************************************************************
  3009. '** FUNCTION PostSuccessRegAPR (prodno%, network$, direction$) AS STRING
  3010. '**
  3011. '** Purpose: If you need to launch something after install runs
  3012. '** In Symbols : 
  3013. '** Out Symbols: 
  3014. '**            
  3015. '** Arguments:  All paremeters are **read only**. 
  3016. '**          prodno%: This is your prodno%.  It is assigned to you by the
  3017. '**                   toolkit in the order in which you were registered.
  3018. '**                   When your product is part of SmartSuite, SmartSuite
  3019. '**                   will always be product #1. (prodno% >=1)
  3020. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  3021. '**       direction$: gNEXT 
  3022. '**
  3023. '** Errors:    No return code for errors, you must Raise them
  3024. '** Author:    MMeth
  3025. '** Returns:   return: gNEXT 
  3026. '**
  3027. '*************************************************************************
  3028.  
  3029. PUBLIC FUNCTION PostSuccessRegAPR (prodno%, network$, direction$) AS STRING
  3030.  
  3031.     DIM ocxpath$, locpath$
  3032.  
  3033.  
  3034.     DebugMsg "Function Start", "PostSuccessRegAPR"
  3035.  
  3036.     PostSuccessRegAPR = direction$
  3037.     ''**  In the backwards case, keep backing up
  3038.     If direction$ = gBACK Then
  3039.         EXIT FUNCTION
  3040.     End If
  3041.  
  3042.  
  3043.     IF GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ THEN
  3044.         
  3045.         '** The following code section relates to Run From ROM activation.
  3046.         '** The different LST files are those needed to produce the Run from ROM effect.
  3047.         DIM nodelstpath$, serverlstpath$, serverwinsys$
  3048.  
  3049.         If network$ = gSERVER$ Then
  3050.             nodelstpath$ = GetSymbolValue(SYM_INSTALL_SOURCE)+"node.lst" 
  3051.             If Lot_DoesFileExist( nodelstpath$ ) <> 0 Then
  3052.                 CopyFile nodelstpath$, GetSymbolValue("APRDIR")+"install.lst",_
  3053.                     cmoNone, 0
  3054.                 SetFileAttr GetSymbolValue("APRDIR")+"install.lst", 0
  3055.             End If                                                            
  3056.         End If 
  3057.  
  3058.         If network$ = gDISTRIBUTION$ Then
  3059.             serverlstpath$ = GetSymbolValue(SYM_INSTALL_SOURCE)+"server.lst" 
  3060.             If Lot_DoesFileExist( serverlstpath$ ) <> 0 Then
  3061.                 CopyFile serverlstpath$, GetSymbolValue("APRDIR")+"install.lst",_
  3062.                         cmoNone, 0
  3063.                 SetFileAttr GetSymbolValue("APRDIR")+"install.lst", 0
  3064.             End If                                                            
  3065.         End If 
  3066.  
  3067.     END IF
  3068.  
  3069.     '** This is another Brute Force attempt to copy the Windows System files to the 
  3070.     '** Node machine during a Node install. Only copying these files if they Don't
  3071.     '** already exist on the users machine. If this is a Suite install these files will
  3072.     '** probably have been installed already, so this operation won't be necessary and won't be
  3073.     '** done. 
  3074.     If network$ = gNODE$ Then
  3075.         serverwinsys$ = Lot_GetDestDirValueFromInstallIni("APRDIR") + "winsys\msvcrt40.dll"
  3076.         '** File will only be copied if it can be found on the server, but not on the node.
  3077.         If Lot_DoesFileExist( serverwinsys$ ) <> 0 AND _
  3078.             Lot_DoesFileExist(GetSymbolValue("WINSYSDIR") + "msvcrt40.dll" ) = 0 _
  3079.         Then
  3080.             CopyFile serverwinsys$, GetSymbolValue("WINSYSDIR")+"msvcrt40.dll", cmoNone, 0
  3081.         End If                                                            
  3082.  
  3083.         serverwinsys$ = Lot_GetDestDirValueFromInstallIni("APRDIR") + "winsys\mfc30.dll"
  3084.         '** File will only be copied if it can be found on the server, but not on the node.
  3085.         If Lot_DoesFileExist( serverwinsys$ ) <> 0 AND _
  3086.             Lot_DoesFileExist(GetSymbolValue("WINSYSDIR") + "mfc30.dll" ) = 0 _
  3087.         Then
  3088.             CopyFile serverwinsys$, GetSymbolValue("WINSYSDIR")+"mfc30.dll", cmoNone, 0
  3089.         End If                                                            
  3090.     End If 
  3091.  
  3092.     DIM obschptname$
  3093.     obschptname$ = Lot_GetChapterFromKeyword("APROBSFILES1")
  3094.  
  3095.     If ((Lot_GetChapterValInt(obschptname$, F_INOROUT) = 1)) Then
  3096.         '** If we removed the old 3.0x version, we'll need to remove
  3097.         '** the directories too.
  3098.         APRRemoveProdDirs
  3099.     End If
  3100.  
  3101.  
  3102.     IF gNeedRestart% THEN
  3103.         Dim Restart$, ProgName$
  3104.         Restart$ = LdString(SID_APR_NEEDRESTART)
  3105.         ProgName$ = LdString(SID_APR_COMMERCIALNAME)
  3106.  
  3107.         DoMsgBox Restart$, ProgName$, MB_OK + MB_ICONINFORMATION
  3108.     END IF    
  3109.    
  3110.  
  3111.     DebugMsg "Function End", "PostSuccessRegAPR"
  3112.  
  3113. END FUNCTION    'PostSuccessRegAPR
  3114.  
  3115.  
  3116. '********************************
  3117. '********************************
  3118. '** Product Specific Functions **
  3119. '********************************
  3120. '********************************
  3121.  
  3122. '*************************************************************************
  3123. '** FUNCTION GetAPRPathfromLotusIni() AS STRING
  3124. '**
  3125. '** Purpose: Gets the product dir path from Lotus.ini file, and searches for
  3126. '**          acronym.exe in the product dir path. 
  3127. '**            
  3128. '** Author:    JYOTI KEDIA, JMD
  3129. '** Arguments: None
  3130. '** Returns:   if acronym.exe does not exist in dir specified in lotus.ini, it
  3131. '**            returns "", otherwise returns the full path to the product.
  3132. '**            NOTE: changed to not include product name by JMD
  3133. '**             includes trailing backslash
  3134. '*************************************************************************
  3135.  
  3136. FUNCTION GetAPRPathfromLotusIni() AS STRING
  3137.     DIM DestDir$, lotusinipath$, defdir$, temp%, ProdDir$, fullpath$, rv%
  3138.     DIM szkey$, keyvalue$, nsize&, gbuf$, ret&
  3139.  
  3140.     DebugMsg "Function Start", "GetAPRPathfromLotusIni"
  3141.  
  3142.     DestDir$ = GetWindowsDir()
  3143.     lotusinipath$ = DestDir$ +"lotus.ini"
  3144.  
  3145.     if DoesFileExist(lotusinipath$,femExists) then
  3146.         defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "Approach")
  3147.         if defdir$ <> "" then
  3148.             temp% = INSTR(1,LCASE$(defdir$),"approach.exe")
  3149.             if temp% <> 0 then
  3150.                 ProdDir$ = MID$(defdir$,1,(temp%-1))
  3151.                 if ProdDir$ <> "" then
  3152.                        fullpath$ = ProdDir$ + "Approach.exe"
  3153.                        if DoesFileExist(fullpath$, femExists) then
  3154.                         if ProdDir$ <> "" then
  3155.                           rv% = Lot_CleanPath(ProdDir$)
  3156.                         end if
  3157.  
  3158.                         GetAPRPathfromLotusIni = ProdDir$
  3159.                         EXIT FUNCTION
  3160.                     end if 
  3161.                 end if 
  3162.             end if 
  3163.         end if 
  3164.     end if
  3165.  
  3166.     '** Now try the registry
  3167.     GetAPRPathfromLotusIni = GetAPRPathfromRegistry()
  3168.  
  3169.     DebugMsg "Function End", "GetAPRPathfromLotusIni"
  3170.  
  3171. END FUNCTION    'GetAPRPathfromLotusIni
  3172.  
  3173. '*************************************************************************
  3174. '** FUNCTION GetAPRPathfromRegistry() AS STRING
  3175. '**
  3176. '** Purpose: Gets the product dir path from registry, and searches for
  3177. '**          acronym.exe in the product dir path. 
  3178. '**            
  3179. '** Author:    JoeG
  3180. '** Arguments: None
  3181. '** Returns:   if acronym.exe does not exist in dir specified in registry, it
  3182. '**            returns "", otherwise returns the full path to the product.
  3183. '**            NOTE: changed to not include product name by JMD
  3184. '**             includes trailing backslash
  3185. '*************************************************************************
  3186.  
  3187. FUNCTION GetAPRPathfromRegistry() AS STRING
  3188.     DIM szkey$, keyvalue$, nsize&, gbuf$, ret&
  3189.  
  3190.     DebugMsg "Function Start", "GetAPRPathfromRegistry"
  3191.  
  3192.  
  3193.     szkey$ = "SOFTWARE\Lotus\" + _
  3194.             LTRIM$(LdString(SID_APR_PROD_NAME)) + "\" + _
  3195.             LTRIM(LdString(SID_APR_PROD_VER))
  3196.     keyvalue$ = "Path"
  3197.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  3198.  
  3199.     '** If we can not find the current version, try the previous one "Approach 96(4.0)"
  3200.     IF gbuf$ = "" THEN
  3201.         szkey$ = "SOFTWARE\Lotus\" + _
  3202.             LTRIM$(LdString(SID_APR_PROD_NAME)) + "\" + "4.0"
  3203.         keyvalue$ = "Path"
  3204.         ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  3205.     END IF
  3206.  
  3207.     IF gbuf$ <> "" THEN
  3208.         gbuf$ = TRIM$(gbuf$)
  3209.  
  3210.         DebugMsg "Registry Bufffer, after TRIM: " + gbuf$ + "test", "GetAPRPathfromRegistry"
  3211.         
  3212.         gbuf$ = LEFT$(gbuf$, LEN(gbuf$)-1)
  3213.         
  3214.         DebugMsg "Registry Bufffer, after LEFT: " + gbuf$ + "test", "GetAPRPathfromRegistry"
  3215.         
  3216.         IF RIGHT$(gbuf$, 1) <> "\" THEN 
  3217.             gbuf$ = gbuf$ + "\"
  3218.         END IF
  3219.  
  3220.         IF gbuf$ <> "" AND DoesFileExist(gbuf$+"approach.exe",femExists) THEN
  3221.             GetAPRPathfromRegistry = gbuf$
  3222.         ELSE
  3223.             GetAPRPathfromRegistry = ""
  3224.         END IF
  3225.     END IF
  3226.  
  3227.  
  3228.     DebugMsg "Function End", "GetAPRPathfromRegistry"
  3229.  
  3230. END FUNCTION    'GetAPRPathfromRegistry
  3231.  
  3232.  
  3233.  
  3234. '*************************************************************************
  3235. '** PUBLIC FUNCTION InitLanguageAPR (prodno%, network$, direction$) 
  3236. '** Purpose: Finds out the installed languages and determines the nature
  3237. '**  of the install.  If not running automated, displays a message box for
  3238. '**  a reinstall or language install, for an upgrade, just continues
  3239. '**  
  3240. '** Author: JMDonohue
  3241. '** Arguments: (Not used -- to conform to product function spec)
  3242. '** Returns:  Install kind string
  3243. '**   
  3244. '**  Sets the following global symbols for later processing: 
  3245. '**   SYM_INSTALLKIND$
  3246. '**   SYM_REG_PRODUCTNAME$
  3247. '**   SYM_REG_PRODUCTVER$
  3248. '*************************************************************************
  3249. PUBLIC FUNCTION InitLanguageAPR (prodno%, network$, direction$) AS STRING
  3250.     DIM szProductName$, szProductVersion$, szInstallKind$, szLanguageSubdir$ 
  3251.  
  3252.  
  3253.     DebugMsg "Function Start", "InitLanguageAPR"
  3254.  
  3255.  
  3256.     szProductName$ =  LdString(SID_APR_PROD_NAME)
  3257.     szProductVersion$ =  LdString(SID_APR_PROD_VER)
  3258.  
  3259.     if prodno% = 1 THEN
  3260.         SetSymbolValue SYM_REG_PRODUCTNAME$ , szProductName$
  3261.         SetSymbolValue SYM_REG_PRODUCTVER$ , szProductVersion$ 
  3262.     END IF
  3263.  
  3264.     InitLanguages szProductName$, szProductVersion$, prodno%    
  3265.     gProductnum% = prodno%
  3266.     InitLanguageAPR  = ""
  3267.  
  3268.     DebugMsg "Function End", "InitLanguageAPR"
  3269.  
  3270. END FUNCTION    'InitLanguageAPR
  3271.  
  3272. '*************************************************************************
  3273. '** APRMOREDIRSCB
  3274. '** Purpose:  This SUB handles the processing for the MORE DIRECTORIES    
  3275. '**           dialog.  
  3276. '**
  3277. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  3278. '**     
  3279. '** Author: Michael Natsis
  3280. '** Arguments:
  3281. '**     
  3282. '**     
  3283. '** Returns:
  3284. '**     
  3285. '*************************************************************************
  3286. SUB APRMOREDIRSCB (hDlg&, CtrlId%, Classes$, LInst&)
  3287.     DIM dirChanged1%, dirChanged2%, dirChanged3%, i%, notused%
  3288.     DIM drvSel%,Inst%, dirToChange1$, dirToChange2$,dirToChange3$
  3289.     STATIC drvIndex%(1 to MAX_NO_DRIVECOMBOS)
  3290.  
  3291.  
  3292.     DebugMsg "Function Start", "APRMOREDIRSCB"
  3293.  
  3294.     Inst% = CINT(LInst&)
  3295.  
  3296.     SELECT CASE Classes$
  3297.     
  3298.         CASE "__DLGINIT"
  3299.  
  3300.          '** This is the directory for the SmartMaster Files
  3301.             Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  3302.             SetListItem "IDC_EDIT", 1, GetSymbolValue("APRMASTERSLANGDIR")
  3303.             drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  3304.             AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3305.  
  3306.                  
  3307.          '** This is the directory for the Work Files
  3308.             Lot_GetDriveFreeSpaceList "IDC_COMBO2"
  3309.             SetListItem "IDC_EDIT", 2, GetSymbolValue("APRWORKDIR")
  3310.             drvIndex%(1) = ValidateEditBox(hDlg& , 2)
  3311.             AddListItem SYM_UPDATELIST$, "IDC_EDIT2"
  3312.  
  3313.          '** This is the directory for the QMF Initialization File
  3314.             Lot_GetDriveFreeSpaceList "IDC_COMBO3"
  3315.             SetListItem "IDC_EDIT", 3, GetSymbolValue("APRQMFDIR")
  3316.             drvIndex%(1) = ValidateEditBox(hDlg& , 3)
  3317.             AddListItem SYM_UPDATELIST$, "IDC_EDIT3"
  3318.  
  3319.             IF GetListItem(SYM_INSTALLKINDS$, gProductnum%) = gLANGUAGEINSTALL$ THEN
  3320.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_EDIT1), FALSE))
  3321.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_COMBO1), FALSE))
  3322.                 notused% = CINT(ShowWindow (GetDlgItem(hDlg&, IDC_BRWSDIR1), SW_HIDE))
  3323.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_EDIT2), FALSE))
  3324.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_COMBO2), FALSE))
  3325.                 notused% = CINT(ShowWindow (GetDlgItem(hDlg&, IDC_BRWSDIR2), SW_HIDE))
  3326.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_BRWSDIR2), FALSE))
  3327.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_EDIT3), FALSE))
  3328.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_COMBO3), FALSE))
  3329.                 notused% = CINT(ShowWindow (GetDlgItem(hDlg&, IDC_BRWSDIR3), SW_HIDE))
  3330.             END IF
  3331.  
  3332.  
  3333.             IF  APRSMInst() = 0 THEN
  3334.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_EDIT1), FALSE))
  3335.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_COMBO1), FALSE))
  3336.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_BRWSDIR1), FALSE))
  3337.             END IF
  3338.  
  3339.  
  3340.             '** if the user did not select the QMF Powerkey, then they
  3341.             '** should not get the option to change this directory
  3342.             IF  FIsKeywordinCopyList("APRQMF") = 0 THEN
  3343.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_EDIT3), FALSE))
  3344.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_COMBO3), FALSE))
  3345.                 notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_BRWSDIR3), FALSE))
  3346.             END IF
  3347.  
  3348.  
  3349.  
  3350.     '**  You can also do this with a CASE statement i.e. CASE IDC_COMBO1 w/ SELECT CASE Inst%
  3351.  
  3352.         CASE "IDC_COMBO1"
  3353.             ComboSelChanged 1 , Inst%
  3354.               dirChanged1% = TRUE
  3355.  
  3356.         CASE "IDC_COMBO2"
  3357.               ComboSelChanged 2 , Inst%     
  3358.              dirChanged2% = TRUE
  3359.  
  3360.         CASE "IDC_COMBO3"
  3361.             ComboSelChanged 1 , Inst%
  3362.             dirChanged3% = TRUE
  3363.  
  3364.         CASE "IDC_BRWSDIR"
  3365.                drvSel% = ValidateBrowse(hDlg&,Inst%)
  3366.                SELECT CASE Inst%      
  3367.                   CASE 1    
  3368.                       dirChanged1% = TRUE
  3369.                   CASE 2    
  3370.                       dirChanged2% = TRUE
  3371.                 CASE 3    
  3372.                     dirChanged3% = TRUE
  3373.               END SELECT       
  3374.  
  3375.         CASE "IDC_EDIT"
  3376.             SELECT CASE Inst%
  3377.                 CASE 1    
  3378.                     dirChanged1% = TRUE            
  3379.                 CASE 2
  3380.                     dirChanged2% = TRUE    
  3381.                 CASE 3
  3382.                     dirChanged3% = TRUE
  3383.             END SELECT
  3384.  
  3385.         CASE "IDC_OK"
  3386.          '** Validate Paths always: to check for a file with the same name
  3387.  
  3388.         '** SMasters
  3389.             If APRSMInst() <> 0     Then    'If no SmartMasters selected don't worry about this DIR
  3390.                 drvSel% = ValidateEditBox(hDlg& , 1)
  3391.                 IF drvSel% = 0 THEN
  3392.                     SetListItem "__LASTSTATUS", 1, "Q"
  3393.                     EXIT SUB
  3394.                 ELSE 
  3395.                     drvIndex%(1) = drvSel%
  3396.                 END IF
  3397.  
  3398.                 dirToChange1$ = GetPathFromComboEdit(hDlg&, 1)
  3399.                 IF ValidatePath(dirToChange1$) = FALSE THEN
  3400.                     SetListItem "__LASTSTATUS",1,"Q"
  3401.                     EXIT SUB
  3402.                 ELSE
  3403.                      SetSymbolValue "APRMASTERSLANGDIR", dirToChange1$
  3404.                 END IF
  3405.             End If
  3406.  
  3407.         '** WorkDir 
  3408.             drvSel% = ValidateEditBox(hDlg& , 2)
  3409.             IF drvSel% = 0 THEN
  3410.                SetListItem "__LASTSTATUS", 1, "Q"
  3411.                EXIT SUB
  3412.             ELSE 
  3413.                drvIndex%(2) = drvSel%
  3414.             END IF
  3415.  
  3416.               dirToChange2$ = GetPathFromComboEdit(hDlg&, 2)
  3417.                IF ValidatePath(dirToChange2$) = FALSE THEN
  3418.                 SetListItem "__LASTSTATUS",1,"Q"
  3419.             ELSE 
  3420.                  SetSymbolValue "APRWORKDIR", dirToChange2$
  3421.             END IF
  3422.  
  3423.  
  3424.         '** QMF
  3425.             drvSel% = ValidateEditBox(hDlg& , 3)
  3426.             IF drvSel% = 0 THEN
  3427.                 SetListItem "__LASTSTATUS", 1, "Q"
  3428.                 EXIT SUB
  3429.             ELSE 
  3430.                 drvIndex%(3) = drvSel%
  3431.             END IF
  3432.  
  3433.             dirToChange3$ = GetPathFromComboEdit(hDlg&, 3)
  3434.             IF ValidatePath(dirToChange3$) = FALSE THEN
  3435.                 SetListItem "__LASTSTATUS",1,"Q"
  3436.             ELSE 
  3437.                  SetSymbolValue "APRQMFDIR", dirToChange3$
  3438.             END IF 
  3439.  
  3440.      '** Refresh destination
  3441.      Lot_RefreshDestination("APRWORKDIR")
  3442.      Lot_RefreshDestination("APRMASTERSLANGDIR")
  3443.      Lot_RefreshDestination("APRQMFDIR")
  3444.  
  3445.      SetSymbolValue "APRMASTERSIMGLANGDIR", GetSymbolValue("APRMASTERSLANGDIR") _
  3446.                                                  + LdString(SID_APR_MASTERSIMG_DIR)
  3447.      Lot_RefreshDestination("APRMASTERSIMGLANGDIR")
  3448.  
  3449.  
  3450.      '** This is an attempt to fix the customization of the samples
  3451.      '** directory in the customize dialog box.
  3452.      SetSymbolValue "APRSAMPLESLANGDIR", GetSymbolValue("APRSAMPLESDIR")
  3453.      Lot_RefreshDestination("APRSAMPLESLANGDIR")
  3454.  
  3455.     END SELECT   'Classes
  3456.  
  3457.     DebugMsg "Function End", "APRMOREDIRSCB"
  3458.     APRPrintDIRs "APRMOREDIRSCB"
  3459.  
  3460. END SUB        'APRMOREDIRSCB
  3461.  
  3462. '****************************************************************************
  3463. '** FUNCTION DetectPreviousVersion ( Productfound$ ) AS STRING
  3464. '**
  3465. '** Purpose:     Check Previous Version is install..
  3466. '**
  3467. '** Author:      schen 10/18/95 
  3468. '** Arguments:     Productfound$ 
  3469. '** Returns:       YES or NO
  3470. '****************************************************************************
  3471. FUNCTION DetectPreviousVersion ( Productfound$ ) AS STRING
  3472.     DIM destpath$, temp%, dirpath$, adwpath$, pathAPR$, APRversion$ 
  3473.     DIM lotusiniPath$,defdir$
  3474.  
  3475.  
  3476.     DebugMsg "Function Start", "DetectPreviousVersion"
  3477.  
  3478.     lotusiniPath$ = GetWindowsDir() + "lotus.ini"
  3479.  
  3480.     IF DoesFileExist(lotusinipath$,femExists) THEN
  3481.        defdir$ = GetIniKeyString(lotusiniPath$,"Lotus Applications", "Approach")
  3482.        temp% = INSTR(1,LCASE$(defdir$),"release")
  3483.  
  3484.        IF temp% <> 0 THEN
  3485.           APRversion$ = MID$(defdir$,(temp%+8),3)
  3486.        END IF
  3487.  
  3488.     ELSE
  3489.        APRversion$ = "0"
  3490.     END IF
  3491.  
  3492.     destpath$ = GetAPRPathfromLotusIni()
  3493.  
  3494.     If ( destpath$ <> "" ) then
  3495.         DetectPreviousVersion = "YES"
  3496.         IF ( APRversion$ <> "5.0" )Then
  3497.             Productfound = "True"
  3498.             SetSymbolValue "APROBSDIR1",  destpath$
  3499.         ELSE
  3500.             Productfound = "NO"
  3501.             SetSymbolValue "APROBSDIR1",LdString(SID_APR_DIR) 
  3502.         END IF       
  3503.     Else     
  3504.         DetectPreviousVersion = "NO"
  3505.         Productfound = "NO"
  3506.         SetSymbolValue "APROBSDIR1",LdString(SID_APR_DIR) 
  3507.     END IF
  3508.  
  3509.  
  3510.     DebugMsg "Function End", "DetectPreviousVersion"
  3511.  
  3512. END FUNCTION    'DetectPreviousVersion
  3513.  
  3514.  
  3515. '****************************************************************************
  3516. '** SUB APR_RemoveProdFilesCB(hDlg&, CtrlId%, Classes%, Inst&)
  3517. '**
  3518. '** Purpose:     Callback to handle Remove Files dialog.
  3519. '**
  3520. '** Author:      BMK 7/18/95 (modified by Joe Ghazal)
  3521. '** Arguments:     hDlg%, CtrlId%, Classes$, Inst%
  3522. '** Returns:       NONE
  3523. '****************************************************************************
  3524. SUB APR_RemoveProdFilesCB(hDlg&, CtrlId%, Classes$, LInst&) 
  3525.     DIM count%, chpt$, sym$, notused%
  3526.  
  3527.  
  3528.     DebugMsg "Function Start", "APR_RemoveProdFilesCB"
  3529.  
  3530.     SELECT CASE Classes$
  3531.         CASE "__DLGINIT"
  3532.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3533.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3534.             AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3535.     
  3536.         CASE "IDC_OK"
  3537.             APRRemoveProdFiles% = TRUE
  3538.  
  3539.         CASE "IDC_BACK"
  3540.             APRRemoveProdFiles% = FALSE
  3541.  
  3542.         CASE "IDC_EXIT"
  3543.             APRRemoveProdFiles% = FALSE
  3544.  
  3545.     END SELECT
  3546.  
  3547.     DebugMsg "Function End", "APR_RemoveProdFilesCB"
  3548.  
  3549. END SUB        'APR_RemoveProdFilesCB
  3550.  
  3551. '****************************************************************************
  3552. '** SUB APRRemoveObsoleteFiles(hDlg&, CtrlId%, Classes%, Inst&)
  3553. '**
  3554. '** Purpose:     callback to handle Remove Files dialog.
  3555. '**
  3556. '** Author:      BMK 7/18/95 (significantly modified by TLB, and then jshaw)
  3557. '** Arguments:     hDlg%, CtrlId%, Classes$, Inst%
  3558. '** Returns:       NONE
  3559. '****************************************************************************
  3560.  
  3561. SUB APRRemoveObsoleteFiles(hDlg&, CtrlId%, Classes$, LInst&) 
  3562. DIM nSections%, count%, chpt$, sym$, notused%
  3563.  
  3564.     DebugMsg "Function Start", "APRRemoveObsoleteFiles"
  3565.  
  3566.     nSections% = 1
  3567.  
  3568.     SELECT CASE Classes$
  3569.         CASE "__DLGINIT"
  3570.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3571.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3572.             AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3573.         CASE "IDC_OK"
  3574.             FOR count% = 1 TO nSections% 
  3575.                 sym$ = "APROBSFILES" + LTRIM$(STR$(count%))
  3576.                 chpt$ = Lot_GetChapterFromKeyWord (sym$)
  3577.                 if chpt$ <> "" THEN
  3578.                      notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  3579.                 END If
  3580.             NEXT
  3581.         CASE "IDC_BACK"
  3582.             '**  reset INF sections to OFF in case user changes their mind
  3583.             FOR count% = 1 TO nSections% 
  3584.                 sym$ = "APROBSFILES" + LTRIM$(STR$(count%))
  3585.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3586.                 IF chpt$ <> "" THEN
  3587.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3588.                 END If                                                           
  3589.             NEXT
  3590.         CASE "IDC_EXIT"
  3591.             '**  reset INF sections to OFF in case user changes their mind
  3592.             FOR count% = 1 TO nSections% 
  3593.                 sym$ = "APROBSFILES" + LTRIM$(STR$(count%))
  3594.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3595.                 IF chpt$ <> "" THEN
  3596.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3597.                 END IF
  3598.             NEXT
  3599.     END SELECT
  3600.  
  3601.     DebugMsg "Function End", "APRRemoveObsoleteFiles"
  3602.  
  3603. END SUB        'APRRemoveObsoleteFiles
  3604.  
  3605.  
  3606. '*************************************************************************
  3607. '** FUNCTION Lot_WriteOLERegForAPR(network$, prodno%) AS INTEGER
  3608. '** Purpose:    This function writes OLE registration needed
  3609. '** Author:     Chuck Shubert (copying Paul Stefancyk (copying 1-2-3 code by MZ/MMeth))
  3610. '** Arguments:  
  3611. '** Returns:    SUCCESS
  3612. '** NOTE: This function is from flw.lss
  3613. '*************************************************************************
  3614. FUNCTION Lot_WriteOLERegForAPR(network$, prodno%) AS INTEGER
  3615.  
  3616.     DIM ProgDir$, regFile, APRreg, LotusAppDir$,FoundPos,RegBuffer$
  3617.     DIM LastCount, CopyDestDir$, ExecError%, OleRegPath$, APRdir$, CommandLine$
  3618.     dim rc%
  3619.  
  3620.  
  3621.     DebugMsg "Function Start", "Lot_WriteOLERegForAPR"
  3622.  
  3623.     rc% = 0
  3624.  
  3625.     APRdir$ = Lot_WhereIsFeature(prodno%, "APRTOP", LdString(SID_APR_APREXE))
  3626.     ProgDir$ = Lot_GetDestDirValueFromInstallIni("APRDIR") + LdString(SID_APR_APREXE)
  3627.  
  3628.        CopyDestDir$ = GetSymbolValue("APRDIR")
  3629.  
  3630.     OleRegPath$ = CopyDestDir$+"approach.reg" 
  3631.     IF DoesFileExist(OleRegPath$, femExists) <> TRUE THEN EXIT FUNCTION 
  3632.  
  3633.     regFile = FreeFile()
  3634.     OPEN OleRegPath$ FOR INPUT AS regFile
  3635.     APRreg = FreeFile()
  3636.     OPEN CopyDestDir$+"APR5.reg" FOR OUTPUT AS APRreg
  3637.  
  3638.        Lot_RegisterObject "APRTOP", UNIN_CLASS_FILE$, CopyDestDir$ + "APR5.reg"
  3639.  
  3640.     '**  Read entire file into a buffer
  3641.     RegBuffer$ = INPUT$(LOF(regFile), regFile)
  3642.     LastCount = 1
  3643.  
  3644. SearchLoop:
  3645.     FoundPos = INSTR(LastCount, RegBuffer$, LdString(SID_APR_OLEREGSTRING))
  3646.     IF FoundPos = 0 THEN
  3647.         PRINT #APRreg, Mid$(RegBuffer$, LastCount)
  3648.     ELSE
  3649.         rc = rc + 1
  3650.         PRINT #APRreg, Mid$(RegBuffer$, LastCount, FoundPos-LastCount);
  3651.         LastCount = FoundPos + LEN(LdString(SID_APR_OLEREGSTRING)) ' skip token
  3652.         PRINT #APRreg, ProgDir$;
  3653.         GOTO SearchLoop
  3654.     END IF
  3655.     CLOSE #regFile, #APRreg
  3656.  
  3657.     DebugMsg "Occurences Replaced: " + CStr(rc), "Lot_WriteOLERegForAPR"
  3658.  
  3659.     '** This version not needed any more
  3660.     RemoveFile CopyDestDir$ + "approach.reg", cmoNone
  3661.     FileCopy CopyDestDir$ + "APR5.reg", CopyDestDir$ + "approach.reg"
  3662.     RemoveFile CopyDestDir$ + "APR5.reg", cmoNone
  3663.  
  3664.  
  3665.     '** register APR3.REG, need extra quotes for long file names with spaces under Chicago
  3666.     IF WhatPlatform() = PLATFORM_WIN95 THEN
  3667.         CommandLine$ =     "regedit /s " +  """" + CopyDestDir$ + "approach.reg" + """"
  3668.     ELSE
  3669.         CommandLine$ =     "regedit /s " + CopyDestDir$ + "approach.reg"
  3670.     END IF
  3671.  
  3672.  
  3673.     ExecError% = WinExec (CommandLine$, SW_HIDE)
  3674.  
  3675.     Lot_WriteOLERegForAPR = SUCCESS
  3676.  
  3677.     DebugMsg "Function End", "Lot_WriteOLERegForAPR"
  3678.  
  3679. END FUNCTION    'Lot_WriteOLERegForAPR
  3680.  
  3681.  
  3682. '*************************************************************************
  3683. '** PUBLIC SUB APRBACKUPMASTERSCB(hDlg%, CtrlId%, Classes$, Inst%) AS INTEGER
  3684. '**
  3685. '** Purpose: Handles Dialog for Backup of currently installed smasters
  3686. '**            
  3687. '** Author:    Michael Natsis
  3688. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3689. '** Returns:   SUCCESS
  3690. '*************************************************************************
  3691. PUBLIC SUB APRBACKUPMASTERSCB(hDlg&, CtrlId%, Classes$, Inst&)
  3692.  
  3693.  
  3694.     DebugMsg "Function Start", "APRBACKUPMASTERSCB"
  3695.  
  3696.     SELECT CASE Classes$
  3697.             
  3698.     CASE "IDC_OK"
  3699.         APRBackupSmartMasters% = TRUE
  3700.     CASE "IDC_CONTINUE"
  3701.         APRBackupSmartMasters% = FALSE
  3702.     CASE "IDC_EXIT"
  3703.         APRBackupSmartMasters% = FALSE
  3704.     END SELECT
  3705.         
  3706.     DebugMsg "Function End", "APRBACKUPMASTERSCB"
  3707.  
  3708. END SUB    'APRBACKUPMASTERSCB
  3709.  
  3710.  
  3711.  
  3712. '*************************************************************************
  3713. '*************************************************************************
  3714. '*************************************************************************
  3715. '**
  3716. '**        Steve's Functions
  3717. '**
  3718. '*************************************************************************
  3719. '*************************************************************************
  3720. '*************************************************************************
  3721.  
  3722.  
  3723. '*************************************************************************
  3724. '** FUNCTION StrGSub(S$, SKey$, SSub$) AS INTEGER
  3725. '**
  3726. '** Purpose:     Globally substitute part of a string with another string
  3727. '** Author:     Steve Smythe
  3728. '** Arguments:     ReadFn$ - Input/Read File Name
  3729. '**                WriteFn$ - Output/Write file name
  3730. '**                SKey$ - String to search for and replace
  3731. '**                SSub$ - Replacement string to use
  3732. '**                
  3733. '** Returns:    None
  3734. '*************************************************************************
  3735. FUNCTION StrGSub(S$, SKey$, SSub$) AS INTEGER
  3736.     DIM pos%, rc%
  3737.  
  3738.  
  3739. '    DebugMsg "Function Start", "StrGSub"
  3740.  
  3741.     if StrCompare(SKey$, SSub$) = 0 then
  3742. '        DebugMsg "Strings are equal" + chr$(13) +_
  3743. '                "Looking for: " + SKey$ + chr$(13) +_
  3744. '                "Replacing with: " + SSub$, "StrGSub"
  3745.         EXIT Function
  3746.     End if
  3747.  
  3748.                         
  3749.     rc = 0
  3750.  
  3751. 'DebugMsg "Looking for: " + SKey$ + chr$(13) +_
  3752. '        "Replacing with: " + SSub$, "StrGSub"
  3753.  
  3754.     pos = InStr(1, S, SKey)
  3755.  
  3756. 'DebugMsg SKey$ + " found at Position: " + CStr(pos), "StrGSub"
  3757.  
  3758.     DO WHILE(pos >= 1)
  3759.         S = LEFT$(S, pos-1) + SSub + MID$(S, pos + Len(SKEY))
  3760.         rc = rc + 1
  3761.         pos = InStr(1, S, SKey)
  3762.     LOOP
  3763.  
  3764.     if rc > 0 then
  3765.         DebugMsg "Modified Approach.REG line to: " + S$, "StrGSub"
  3766.     end if
  3767.  
  3768.     StrGSub = 1
  3769.  
  3770. '    DebugMsg "Function End", "StrGSub"
  3771.  
  3772. END FUNCTION ' StrGSub()
  3773.  
  3774.  
  3775. '*************************************************************************
  3776. '** FUNCTION FileSub(ReadFn$, WriteFn$, SKey$, SSub$) AS INTEGER
  3777. '**
  3778. '** Purpose:     Substitute all instances of one string with another
  3779. '** Author:     Steve Smythe
  3780. '** Arguments:     ReadFn$ - Input/Read File Name
  3781. '**                WriteFn$ - Output/Write file name
  3782. '**                SKey$ - String to search for and replace
  3783. '**                SSub$ - Replacement string to use
  3784. '**                
  3785. '** Returns:    None
  3786. '*************************************************************************
  3787. FUNCTION FileSub(ReadFn$, WriteFn$, SKey$, SSub$) AS INTEGER
  3788.     DIM rf%, wf%, S$, rc%
  3789.    
  3790.     DebugMsg "Function Start", "FileSub"
  3791.     DebugMsg "Output filename: " + WriteFn, "FileSub"
  3792.     DebugMsg "Input filename: " + ReadFn, "FileSub"
  3793.  
  3794.     IF RIGHT$(ReadFn$, 1) = "." THEN
  3795.         ReadFn$ = LEFT$(ReadFn$, LEN(ReadFn$) - 1)
  3796.     END IF
  3797.  
  3798.     IF RIGHT$(WriteFn$, 1) = "." THEN
  3799.         WriteFn$ = LEFT$(WriteFn$, LEN(WriteFn$) - 1)
  3800.     END IF
  3801.  
  3802.     rf = FreeFile()
  3803.  
  3804.     DebugMsg "About to open file for input: " + ReadFn + chr(13) + "File#: " + Cstr(rf), "FileSub"
  3805.     
  3806.     OPEN ReadFn FOR INPUT AS #rf                                     
  3807.     wf = FreeFile()
  3808.  
  3809.     DebugMsg "About to open file for output: " + WriteFn + chr(13) + "File#: " + CStr(wf), "FileSub"
  3810.     
  3811.     OPEN WriteFn FOR OUTPUT AS #wf
  3812.         DO WHILE NOT Eof(rf)
  3813.     LINE INPUT #rf, S
  3814.         rc = StrGSub(S, SKey, SSub)
  3815.         PRINT #wf, S
  3816.         LOOP
  3817.     CLOSE #rf, #wf
  3818.  
  3819.     FileSub = rc
  3820.  
  3821.     DebugMsg "Function End", "FileSub"
  3822.  
  3823. END FUNCTION ' FileSub()
  3824.  
  3825.  
  3826. '*************************************************************************
  3827. '** FUNCTION FixCompnentPath(CompnentPath$) AS STRING
  3828. '**
  3829. '** Purpose:     Removes extra \ at end of string
  3830. '** Author:     Steve Smythe
  3831. '** Arguments:     CompnentPath$ - Path to fix
  3832. '**                
  3833. '** Returns:    None
  3834. '*************************************************************************
  3835. FUNCTION FixCompnentPath(CompnentPath$) AS STRING
  3836.     DIM tmp$
  3837.    
  3838.     DebugMsg "Function Start", "FixCompnentPath"
  3839.  
  3840.     tmp$ = CompnentPath$
  3841.  
  3842.     while(RIGHT$(tmp$, 1) = "\")
  3843.     tmp$ = left$(tmp$, len(tmp$)-1)
  3844.     wend
  3845.  
  3846.     CompnentPath$ = tmp$ + "\"
  3847.    
  3848.     FixCompnentPath = CompnentPath$
  3849.  
  3850.     DebugMsg "Function End", "FixCompnentPath"
  3851.  
  3852. END FUNCTION ' FixCompnentPath
  3853.  
  3854.  
  3855. '*************************************************************************
  3856. '** FUNCTION APR_AddODBCiniEntries(prodno%, network$) AS INTEGER
  3857. '**
  3858. '** Purpose:     Add Approach Entries to the ODBC INI file
  3859. '** Author:     Steve Smythe
  3860. '** Arguments:     prodno% - Install Product Number
  3861. '**                
  3862. '** Returns:    None
  3863. '*************************************************************************
  3864. FUNCTION APR_AddODBCiniEntries(prodno%) AS INTEGER
  3865.    '** Write entries in odbc.ini
  3866.    
  3867.     DebugMsg "Function Start", "APR_AddODBCiniEntries"
  3868.  
  3869.     DIM odbcini$
  3870.     odbcini$ = GetSymbolValue("WINDIR") + "ODBC.INI"
  3871.     CreateIniKeyValue odbcini$, "ODBC - Null", "Null", "-0-", cmoOverwrite
  3872.  
  3873.     DebugMsg "Function End", "APR_AddODBCiniEntries"
  3874.  
  3875. END FUNCTION ' APR_AddODBCiniEntries(prodno%)
  3876.  
  3877.  
  3878. '*************************************************************************
  3879. '** FUNCTION APR_AddApproachiniEntries(prodno%, network$) AS INTEGER
  3880. '**
  3881. '** Purpose:     Add Approach Entries to the Approach INI file
  3882. '** Author:     Steve Smythe
  3883. '** Arguments:     prodno% - Install Product Number
  3884. '**                
  3885. '** Returns:    None
  3886. '*************************************************************************
  3887. FUNCTION APR_AddAPPROACHiniEntries(prodno%) AS INTEGER
  3888.    '** Write entries in approach.ini
  3889.  
  3890.     DebugMsg "Function Start", "APR_AddAPPROACHiniEntries"
  3891.  
  3892.    
  3893.         DIM aprini$
  3894.         aprini$ = GetSymbolValue("WINDIR") + "APPROACH.INI"
  3895.         CreateIniKeyValue aprini$, "SmartIcons-4.0", "IconPath", Lot_WhereIsFeature(prodno%, "APRCORE", "approach.exe"), cmoOverwrite
  3896.         CreateIniKeyValue aprini$, "InfoBox", "X Location", "100", cmoOverwrite
  3897.         CreateIniKeyValue aprini$, "InfoBox", "Y Location", "100", cmoOverwrite
  3898.         CreateIniKeyValue aprini$, "SQL", "iReadOnly", "0", cmoOverwrite
  3899.         CreateIniKeyValue aprini$, "SQL", "iIncludeSystemTable", "0", cmoOverwrite
  3900.         CreateIniKeyValue aprini$, "SQL", "iCacheTableNameOn", "0", cmoOverwrite
  3901.  
  3902.     DebugMsg "Function End", "APR_AddAPPROACHiniEntries"
  3903.  
  3904. END FUNCTION ' APR_AddAPPROACHiniEntries(prodno%)
  3905.        
  3906.  
  3907. '*************************************************************************
  3908. '** FUNCTION APR_AddLOTUSiniEntries(prodno%, network$) AS INTEGER
  3909. '**
  3910. '** Purpose:     Add Approach Entries to the Lotus INI file
  3911. '** Author:     Steve Smythe
  3912. '** Arguments:     prodno% - Install Product Number
  3913. '**             network$ - network install type
  3914. '**                
  3915. '** Returns:    None
  3916. '*************************************************************************
  3917. FUNCTION APR_AddLOTUSiniEntries(prodno%, network$) AS INTEGER
  3918.    '** Write entries in lotus.ini
  3919.   
  3920.  
  3921.     DebugMsg "Function Start", "APR_AddLOTUSiniEntries"
  3922.  
  3923.   '** This code isn't needed now that SmartSuite doesn't ship any 16 bit products. --TGR 6/26/96
  3924.  
  3925.     DIM lotini$
  3926.  
  3927.     lotini$ = GetWindowsDir() + "LOTUS.INI"
  3928.     IF network$ = gSTANDARD$ THEN
  3929.         IF DoesFileExist(Lot_WhereIsFeature(prodno%, "APRCORE", "approach.exe")+"approach.exe", femExists) THEN
  3930.             CreateIniKeyValue lotini$, "Lotus Applications", "Approach", Lot_WhereIsFeature(prodno%, "APRCORE", "approach.exe") + "approach.exe Lotus Approach 97", cmoOverwrite
  3931.         END IF
  3932.     ELSEIF network$ = gNODE$ THEN
  3933.         IF DoesFileExist(Lot_WhereIsFeature(prodno%, "APRSERVERCORE", "approach.exe")+"approach.exe", femExists) THEN
  3934.             CreateIniKeyValue lotini$, "Lotus Applications", "Approach", Lot_WhereIsFeature(prodno%, "APRSERVERCORE", "approach.exe") + "approach.exe Lotus Approach 97", cmoOverwrite
  3935.         END IF
  3936.     END IF
  3937.  
  3938.     DebugMsg "Function End", "APR_AddLOTUSiniEntries"
  3939.  
  3940. END FUNCTION ' APR_AddLOTUSiniEntries(prodno%, network$)
  3941.  
  3942.        
  3943. '*************************************************************************
  3944. '** FUNCTION APR_AddLTSTOOLSiniEntries(prodno%, network$) AS INTEGER
  3945. '**
  3946. '** Purpose:     Add Approach Entries to the Lotus Tools INI file
  3947. '** Author:     Steve Smythe
  3948. '** Arguments:     prodno% - Install Product Number
  3949. '**             network$ - network install type
  3950. '**                
  3951. '** Returns:    None
  3952. '*************************************************************************
  3953. FUNCTION APR_AddLTSTOOLSiniEntries(prodno%, network$) AS INTEGER
  3954.    '** Write entries in ltstools.ini
  3955.        DIM toolsini$, componentdir$
  3956.     DIM approachtbl$, chartdll$
  3957.     
  3958.  
  3959.     DebugMsg "Function Start", "APR_AddLTSTOOLSiniEntries"
  3960.  
  3961.     toolsini$ = GetSymbolValue("WINDIR") + "LTSTOOLS.INI"
  3962.     approachtbl$ = GetSymbolValue("WINDIR")+"APPROACH.TBL"
  3963.  
  3964.     if network$ = gNODE$ then
  3965.         componentdir$ = GetSymbolValue(SYM_NETCOMPONENT$)
  3966.     else
  3967.         componentdir$ = GetSymbolValue(SYM_COMPONENTSDIR$)
  3968.     end if
  3969.  
  3970.  
  3971.     'Ching Nam Kee in Lotus Singapore says the EN in this file name is for ENGINE, not English.
  3972.     'chartdll$ = "ltch" + GetSymbolValue(SYM_INSTALL_LANGUAGE$) + "21.dll"
  3973.     chartdll$ = "ltchen21.dll" 
  3974.  
  3975.     CreateIniKeyValue toolsini$, "Approach Servers", "LotusChart", componentdir$ + chartdll$, cmoOverwrite
  3976.     CreateIniKeyValue toolsini$, "Approach Servers", "LotusChart\DataFormat", ".cht", cmoOverwrite
  3977.  
  3978.     If DoesFileExist(approachtbl$, femExists) <> 0 Then
  3979.         KILL approachtbl$
  3980.     End If
  3981.  
  3982.     DebugMsg "Function End", "APR_AddLTSTOOLSiniEntries"
  3983.  
  3984. END FUNCTION ' APR_AddLTSTOOLSiniEntries(prodno%)
  3985.    
  3986.  
  3987. '*************************************************************************
  3988. '** FUNCTION APR_AddRegistryEntries(prodno%, network$) AS INTEGER
  3989. '**
  3990. '** Purpose:     Add Approach Entries to the Registry
  3991. '** Author:     Steve Smythe
  3992. '** Arguments:     prodno% - Install Product Number
  3993. '**             network$ - network install type
  3994. '**                
  3995. '** Returns:    None
  3996. '*************************************************************************
  3997. FUNCTION APR_AddRegistryEntries(prodno%, network$) AS INTEGER
  3998.     DIM KEY_LOTUS$, gbuf$, keyval$, Desc$, Descnum&, nsize&, regStatus&, componentdir$, aprdir$
  3999.     DIM dssdir$, dsspath$
  4000.     DIM drivetype%, driveletter$, LanguageAcronym$
  4001.  
  4002.     DebugMsg "Function Start", "APR_AddRegistryEntries"
  4003.  
  4004.     '** Determine the Drive Type for install, so we can do specific CD processing
  4005.     driveletter$ = LEFT( GetSymbolValue(SYM_INSTALL_SOURCE) ,1)+ ":\"        
  4006.     drivetype% = GetDriveType(driveletter$)
  4007.     LanguageAcronym$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4008.  
  4009.  
  4010.  
  4011.    '** Create Registry Entries
  4012.    
  4013.     IF (network$ <> gSERVER$ and network$ <> gDISTRIBUTION$) THEN
  4014.         
  4015.         IF network$ = gNODE$ THEN
  4016.             aprdir$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  4017.             componentdir$ = GetSymbolValue(SYM_NETCOMPONENT$)
  4018.         ELSE
  4019.             aprdir$ = GetSymbolValue("APRDIR")
  4020.             componentdir$ = GetSymbolValue(SYM_COMPONENTSDIR$)
  4021.         END IF
  4022.  
  4023.         WriteDialSettingstoApproachINI
  4024.  
  4025. '=============== SHARED COMPONENT SECTION =======================
  4026.  
  4027.         APR_RegisterSharedComponent "WIN32SHRAFIDMANPRG", "AFIDMan", "3.2"
  4028.         APR_RegisterSharedComponent "WIN32SHRQUICKDEMOPRG", "Animations", "1.1"
  4029.         APR_RegisterSharedComponent "WIN32SHRBUBBHELPPRG", "Bubble Help", "1.2"
  4030.         APR_RegisterSharedComponent "WIN32SHRCCSTRPRG", "ccStr", "1.0"
  4031.         APR_RegisterSharedComponent "WIN32SHRCHARTPRG", "Chart", "2.1"
  4032.         APR_RegisterSharedComponent "WIN32SHRCUSTSUPPHELPPRG", "CustomerSupportHelp", "4.0"
  4033.         APR_RegisterSharedComponent "WIN32SHRDIALOGDLLPRG", "Dialog DLL", "3.0"
  4034.         APR_RegisterSharedComponent "WIN32SHRSHAREDHELPPRG", "Help", "3.1"
  4035.         APR_RegisterSharedComponent "WIN32SHRSMARTICONPRG", "Icon Palette", "7.1"
  4036.         APR_RegisterSharedComponent "WIN32SHRUIMSPRG", "InfoBox", "2.1"
  4037.         APR_RegisterSharedComponent "WIN32SHRINTERNETPRG", "Internet", "1.0"
  4038.         APR_RegisterSharedComponent "WIN32SHRLISDBPRG", "LISDB", "1.0"
  4039.         APR_RegisterSharedComponent "WIN32SHRLOTUSSCRIPTPRG", "LotusScript", "3.1"
  4040.         APR_RegisterSharedComponent "WIN32SHRSTDPLAYERPRG", "Player", "1.1"
  4041.         APR_RegisterSharedComponent "WIN32SHRSPELLPRG", "Spell", "4.0"
  4042.         APR_RegisterSharedComponent "WIN32SHRSTATUSBARPRG", "Status Bar", "6.1"
  4043.         APR_RegisterSharedComponent "WIN32TEAMMAILSHRPRG", "TeamMail", "1.1"
  4044.         APR_RegisterSharedComponent "WIN32SHRTITLEBARPRG", "Title Bar", "1.0"
  4045.         APR_RegisterSharedComponent "WIN32SHRUINST", "Uninstall", "1.0"
  4046.         APR_RegisterSharedComponent "WIN32SHRUINSTLANGEN", "Uninstall", "1.0"
  4047.  
  4048. '=============== MAIN SECTION =======================
  4049.  
  4050.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)
  4051.         keyval$ = "Description"
  4052.         Desc$ = LdString(SID_APR_TIP)
  4053.         nsize = len(Desc$)+1
  4054.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4055.  
  4056.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)
  4057.         keyval$ = "UserName"
  4058.         Desc$ = GetSymbolValue(SYM_NAME$)
  4059.         nsize = len(Desc$)+1
  4060.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4061.  
  4062.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)
  4063.         keyval$ = "CompanyName"
  4064.         Desc$ = GetSymbolValue(SYM_COMPANY$)
  4065.         nsize = len(Desc$)+1
  4066.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4067.  
  4068. '******** Tour Registry *************
  4069.  
  4070.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Tour"
  4071.         keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4072.  
  4073.         '** if this is a CD install and Tour wasn't selected as a custom option, 
  4074.         '** point to the CD for running the tour
  4075.         If (drivetype% = 5) AND (network$ = gStandard$) _ 
  4076.                     AND (Lot_IsTheFeatureInstalled("APRTOUR") = FALSE) _
  4077.         Then
  4078.             Desc$ = driveletter$ + LdString(SID_APR_TOUR_CDDIR)
  4079.         Else
  4080.             If network$ = gNODE$ Then
  4081.                 Desc$ = Lot_GetDestDirValueFromInstallIni("APRTOURDIR") + LdString(SID_APR_TOUR_DIR)
  4082.             Else
  4083.                 Desc$ = GetSymbolValue("APRTOURDIR") + LdString(SID_APR_TOUR_DIR)
  4084.             End If
  4085.         End If
  4086.  
  4087.         nsize = len(Desc$)+1
  4088.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4089.  
  4090.  
  4091.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Player"
  4092.         keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4093.  
  4094.         '** if this is a CD install and Tour wasn't selected as a custom option, 
  4095.         '** point to the CD for running the tour player
  4096.         If (drivetype% = 5) AND (network$ = gStandard$) _ 
  4097.                     AND (Lot_IsTheFeatureInstalled("APRTOUR") = FALSE) _
  4098.         Then
  4099.             Desc$ = driveletter$ + LdString(SID_APR_COMPNENT_CDDIR) + LdString(SID_APR_PLAYER_DIR)
  4100.         ELSE
  4101.             If network$ = gNODE$ then
  4102.                 Desc$ = GetSymbolValue(SYM_NETCOMPONENT$)
  4103.             Else
  4104.                 Desc$ = GetSymbolValue(SYM_COMPONENTSDIR$)
  4105.             End if
  4106.  
  4107.             Desc$ = TRIM$(Desc$)
  4108.  
  4109.             IF Right$(Desc$, 1) = "\" THEN
  4110.                 Desc$ = Desc$ + LdString(SID_APR_PLAYER_DIR)
  4111.             ELSE
  4112.                 Desc$ = Desc$ + "\" + LdString(SID_APR_PLAYER_DIR)
  4113.             END IF
  4114.         END IF
  4115.  
  4116.         nsize = len(Desc$)+1
  4117.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4118.  
  4119.  
  4120. '************************************
  4121.  
  4122.  
  4123.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Samples"
  4124.         keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4125.         IF network$ = gNODE$ THEN
  4126.             Desc$ = GetSymbolValue("APRSAMPLESDIR")
  4127.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  4128.                 Desc$ = Desc$ + Lot_SetLanguageDirectory(LanguageAcronym$) + "\"
  4129.             END IF
  4130.         ELSE
  4131.             Desc$ = GetSymbolValue("APRSAMPLESLANGDIR")
  4132.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  4133.                 Desc$ = Desc$ + Lot_SetLanguageDirectory(LanguageAcronym$) + "\"
  4134.             END IF
  4135.         END IF
  4136.         nsize = len(Desc$)+1
  4137.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4138.  
  4139.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Demo"
  4140.         keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4141.         IF network$ = gNODE$ THEN
  4142.             Desc$ = GetSymbolValue("APRDEMODIR")
  4143.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  4144.                 Desc$ = Desc$ + Lot_SetLanguageDirectory(LanguageAcronym$) + "\"
  4145.             END IF
  4146.         ELSE
  4147.             Desc$ = GetSymbolValue("APRDEMOLANGDIR")
  4148.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  4149.                 Desc$ = Desc$ + Lot_SetLanguageDirectory(LanguageAcronym$) + "\"
  4150.             END IF
  4151.         END IF
  4152.         nsize = len(Desc$)+1
  4153.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4154.  
  4155.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Work"
  4156.         keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4157.         Desc$ = GetSymbolValue("APRWORKDIR")
  4158.         nsize = len(Desc$)+1
  4159.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4160.  
  4161.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\SMasters"
  4162.         keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4163.         IF network$ = gNODE$ THEN
  4164.             Desc$ = GetSymbolValue("APRMASTERSDIR") 
  4165.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  4166.                 Desc$ = Desc$ + Lot_SetLanguageDirectory(LanguageAcronym$) + "\"
  4167.             END IF
  4168.         ELSE
  4169.             Desc$ = GetSymbolValue("APRMASTERSLANGDIR") 
  4170.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  4171.                 Desc$ = Desc$ + Lot_SetLanguageDirectory(LanguageAcronym$) + "\"
  4172.             END IF
  4173.         END IF
  4174.         nsize = len(Desc$)+1
  4175.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4176.  
  4177.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Icons"
  4178.         keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4179.         Desc$ = GetSymbolValue("APRICONLANGDIR") + LdString(SID_APR_ICONS_DIR)
  4180.         nsize = len(Desc$)+1
  4181.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4182.  
  4183.         '** Extra Extensions section for Fa. What is the language subdir?
  4184.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths\Icons"
  4185.         keyval$ = "Extension" + GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4186.         IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  4187.             Desc$ = Lot_SetLanguageDirectory(LanguageAcronym$)
  4188.         ELSE
  4189.             Desc$ = ""
  4190.         END IF
  4191.         nsize = len(Desc$)+1
  4192.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4193.  
  4194.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Paths"
  4195.         keyval$ = "RegInfoPath"
  4196.         Desc$ = GetSymbolValue("APRDIR") + "approach.ri"
  4197.         nsize = len(Desc$)+1
  4198.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4199.  
  4200.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\InfoBox"
  4201.         keyval$ = "X Location"
  4202.         Descnum = 0
  4203.         nsize = 4
  4204.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4205.  
  4206.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\InfoBox"
  4207.         keyval$ = "Y Location"
  4208.         Descnum = 0
  4209.         nsize = 4
  4210.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4211.  
  4212.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4213.         keyval$ = "dBase IV"
  4214.         Descnum = 1
  4215.         nsize = 4
  4216.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4217.  
  4218.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4219.         keyval$ = "dBase III+"
  4220.         Descnum = 2
  4221.         nsize = 4
  4222.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4223.  
  4224.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4225.         keyval$ = "Lotus Notes - Workspace"
  4226.         Descnum = 3
  4227.         nsize = 4
  4228.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4229.  
  4230.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4231.         keyval$ = "Lotus Notes - Server"
  4232.         Descnum = 4
  4233.         nsize = 4
  4234.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4235.  
  4236.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4237.         keyval$ = "Lotus Notes - Local"
  4238.         Descnum = 5
  4239.         nsize = 4
  4240.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4241.  
  4242.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4243.         keyval$ = "IBM DB2"
  4244.         Descnum = 6
  4245.         nsize = 4
  4246.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4247.  
  4248.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4249.         keyval$ = "FoxPro"
  4250.         Descnum = 7
  4251.         nsize = 4
  4252.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4253.  
  4254.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4255.         keyval$ = "Paradox"
  4256.         Descnum = 8
  4257.         nsize = 4
  4258.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4259.  
  4260.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4261.         keyval$ = "1-2-3 Ranges"
  4262.         Descnum = 9
  4263.         nsize = 4
  4264.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4265.  
  4266.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4267.         keyval$ = "Oracle"
  4268.         Descnum = 10
  4269.         nsize = 4
  4270.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4271.  
  4272.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4273.         keyval$ = "SQL Server"
  4274.         Descnum = 11
  4275.         nsize = 4
  4276.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4277.  
  4278.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ShowTypes"
  4279.         keyval$ = "ODBC Data Sources"
  4280.         Descnum = 12
  4281.         nsize = 4
  4282.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4283.  
  4284.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\HideTypes"
  4285.         keyval$ = "File Type to Hide goes here"
  4286.         Descnum = 0
  4287.         nsize = 4
  4288.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_DWORD,Descnum,nsize)
  4289.  
  4290.  
  4291.  
  4292.  
  4293. '=========== Approach General Section ===========================
  4294.  
  4295.         IF Lot_IsTheFeatureInstalled("APRHELP") <> FALSE OR Lot_IsTheFeatureInstalled("APRHELPLANG"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)) <> FALSE THEN
  4296.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4297.             keyval$ = "iHelpInstalled"
  4298.             Descnum = 1
  4299.             nsize = 4
  4300.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_DWORD, Descnum&, nsize&)
  4301.         ELSEIF Lot_IsTheFeatureInstalled("APRCORE") <> FALSE THEN
  4302.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4303.             keyval$ = "iHelpInstalled"
  4304.             Descnum = 0
  4305.             nsize = 4
  4306.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_DWORD, Descnum&, nsize&)
  4307.         END IF
  4308.        
  4309.         IF Lot_IsTheFeatureInstalled("WIN32SHRSPELLPRG") <> FALSE THEN
  4310.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4311.             keyval$ = "iSpellCheckInstalled"
  4312.             Descnum = 1
  4313.             nsize = 4
  4314.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4315.  
  4316.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4317.             keyval$ = "iSpellerOptions"
  4318.             Descnum = 15
  4319.             nsize = 4
  4320.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4321.         ELSEIF Lot_IsTheFeatureInstalled("APRCORE") <> FALSE THEN
  4322.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4323.             keyval$ = "iSpellCheckInstalled"
  4324.             Descnum = 0
  4325.             nsize = 4
  4326.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4327.         END IF
  4328.  
  4329.         IF Lot_IsTheFeatureInstalled("APRPARADOX") <> FALSE Then
  4330.             DIM SysCountry$
  4331.             SysCountry$ = APRGetSystemCountry()
  4332.  
  4333.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4334.             keyval$ = "ParadoxCaseSensitive"
  4335.             If StrCompare(SysCountry$, "UNITED STATES") Then
  4336.                 Descnum = 1 'Non-US Setting
  4337.             Else
  4338.                 Descnum = 0 'US Setting
  4339.             End If
  4340.             nsize = 4
  4341.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4342.  
  4343.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4344.             keyval$ = "sParadoxSortOption"
  4345.             If StrCompare(SysCountry$, "UNITED STATES") = 0 Then
  4346.                 Desc$ = "ASCII" 'US Setting
  4347.             ElseIf (StrCompare(SysCountry$, "SWEDEN") = 0) OR _
  4348.                         (StrCompare(SysCountry$, "FINLAND") = 0) Then
  4349.                 Desc$ = "SWEDFIN" 'Setting for Swedish and Finnish users
  4350.             ElseIf (StrCompare(SysCountry$, "NORWAY") = 0) OR _
  4351.                         (StrCompare(SysCountry$, "DENMARK") = 0) Then
  4352.                 Desc$ = "NORDAN" 'Setting for Norwegian and Dannish users
  4353.             Else
  4354.                 Desc$ = "INTL" 'Default setting for all other countries
  4355.             End If
  4356.             nsize = len(Desc$)+1
  4357.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4358.         End If
  4359.  
  4360.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4361.         keyval$ = "Maximized"
  4362.         Descnum = 1
  4363.         nsize = 4
  4364.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4365.  
  4366.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4367.         keyval$ = "icon_desc"
  4368.         Descnum = 1
  4369.         nsize = 4
  4370.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4371.  
  4372.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4373.         keyval$ = "Preferred Font"
  4374.         Desc$ = "MS Sans Serif"
  4375.         nsize = len(Desc$)+1
  4376.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4377.  
  4378.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4379.         keyval$ = "RegInfoPath"
  4380.         Desc$ = GetSymbolValue("APRDIR") + "approach.ri"
  4381.         nsize = len(Desc$)+1
  4382.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4383.  
  4384.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4385.         keyval$ = "sLastReturnAddress"
  4386.         Desc$ = ""
  4387.         nsize = len(Desc$)+1
  4388.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4389.  
  4390.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4391.         keyval$ = "iUseReturnAddress"
  4392.         Descnum = 1
  4393.         nsize = 4
  4394.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4395.  
  4396.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4397.         keyval$ = "sFirstSalutationStr"
  4398.         Desc$ = "Dear"
  4399.         nsize = len(Desc$)+1
  4400.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4401.  
  4402.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4403.         keyval$ = "sSecondSalutaionStr"
  4404.         Desc$ = ":"
  4405.         nsize = len(Desc$)+1
  4406.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4407.  
  4408.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4409.         keyval$ = "iUseSalutation"
  4410.         Descnum = 1
  4411.         nsize = 4
  4412.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4413.  
  4414.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4415.         keyval$ = "sLastClose"
  4416.         Desc$ = "Sincerely yours,"
  4417.         nsize = len(Desc$)+1
  4418.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4419.  
  4420.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4421.         keyval$ = "iUseClose"
  4422.         Descnum = 1
  4423.         nsize = 4
  4424.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4425.  
  4426.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4427.         keyval$ = "iAddEnvelope"
  4428.         Descnum = 1
  4429.         nsize = 4
  4430.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4431.  
  4432.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4433.         keyval$ = "DefaultMailingLabelType"
  4434.         Desc$ = "Avery 5160, 5260, 6460, 8160: Address"
  4435.         nsize = len(Desc$)+1
  4436.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4437.  
  4438.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4439.         keyval$ = "idBaseShareLocalDatabases"
  4440.         Descnum = 1
  4441.         nsize = 4
  4442.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4443.  
  4444.  
  4445.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\General"
  4446.         keyval$ = "iShowDataInDesign"
  4447.         Descnum = 1
  4448.         nsize = 4
  4449.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4450.  
  4451.  
  4452. '============== Help Registry ==========================
  4453.  
  4454.         IF Lot_IsTheFeatureInstalled("APRHELP") <> FALSE THEN
  4455.             KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4456.             keyval$ = "la1n50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".hlp"
  4457.             Desc$ = aprdir$
  4458.             nsize = len(Desc$)+1
  4459.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4460.             Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\la1n50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".hlp"
  4461.  
  4462.             KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4463.             keyval$ = "la1n50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".cnt"
  4464.             Desc$ = aprdir$
  4465.             nsize = len(Desc$)+1
  4466.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4467.             Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\la1n50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".cnt"
  4468.  
  4469.             'Dont forget to uninstall the GID file.
  4470.             Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, GetSymbolValue("APRDIR") + "la1n50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".gid"
  4471.  
  4472.             If Lot_IsTheFeatureInstalled("APRSCRIPTHELP") <> FALSE Then
  4473.                 KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4474.                 keyval$ = "lasn50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".hlp"
  4475.                 Desc$ = aprdir$
  4476.                 nsize = len(Desc$)+1
  4477.                     regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4478.                 Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\lasn50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".hlp"
  4479.  
  4480.                 KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4481.                 keyval$ = "lasn50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".cnt"
  4482.                 Desc$ = aprdir$
  4483.                 nsize = len(Desc$)+1
  4484.                     regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4485.                 Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\lasn50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".cnt"
  4486.  
  4487.                 'Dont forget to uninstall the GID file.
  4488.                 Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, GetSymbolValue("APRDIR") + "lasn50"+GetSymbolValue(SYM_INSTALL_LANGUAGE$)+".gid"
  4489.             End If
  4490.  
  4491.             IF Lot_IsTheFeatureInstalled("APRORACLE_SHRCNT") <> FALSE _
  4492.                     OR Lot_IsTheFeatureInstalled("APRSQLSERVER4_SHRCNT") <> FALSE _
  4493.                     OR Lot_IsTheFeatureInstalled("APRSQLSERVER6_SHRCNT") <> FALSE _
  4494.                     OR Lot_IsTheFeatureInstalled("APRSYBASE_SHRCNT") <> FALSE _
  4495.                     OR Lot_IsTheFeatureInstalled("APRINFORMIX5_SHRCNT") <> FALSE _
  4496.                     OR Lot_IsTheFeatureInstalled("APRINFORMIX7_SHRCNT") <> FALSE _
  4497.             THEN
  4498.                 KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4499.                 keyval$ = "ivdrv09.hlp"
  4500.                 Desc$ = aprdir$
  4501.                 nsize = len(Desc$)+1
  4502.                     regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4503.                 Lot_RegisterObject "APRODBC", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4504.  
  4505.                 KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4506.                 keyval$ = "ivdrv09.cnt"
  4507.                 Desc$ = aprdir$
  4508.                 nsize = len(Desc$)+1
  4509.                     regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4510.                 Lot_RegisterObject "APRODBC", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4511.  
  4512.                 'Dont forget to uninstall the GID file.
  4513.                 Lot_RegisterObject "APRODBC", UNIN_CLASS_FILE$, GetSymbolValue(SYM_WINSYSDIR$)+"ivdrv09.gid"
  4514.             
  4515.                 IF Lot_IsTheFeatureInstalled("APRORACLE_SHRCNT") <> FALSE THEN 
  4516.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4517.                     keyval$ = "loor709.cnt"
  4518.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4519.                     nsize = len(Desc$)+1
  4520.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4521.                     Lot_RegisterObject "APRORACLE_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4522.  
  4523.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4524.                     keyval$ = "loor709.hlp"
  4525.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4526.                     nsize = len(Desc$)+1
  4527.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4528.                     Lot_RegisterObject "APRORACLE_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4529.  
  4530.                     'Dont forget to uninstall the GID file.
  4531.                     Lot_RegisterObject "APRORACLE_SHRCNT", UNIN_CLASS_FILE$, GetSymbolValue(SYM_WINSYSDIR$)+"loor709.gid"
  4532.                 END IF
  4533.                 IF Lot_IsTheFeatureInstalled("APRSQLSERVER4_SHRCNT") <> FALSE THEN 
  4534.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4535.                     keyval$ = "loss09.cnt"
  4536.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4537.                     nsize = len(Desc$)+1
  4538.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4539.                     Lot_RegisterObject "APRSQLSERVER4_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4540.  
  4541.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4542.                     keyval$ = "loss09.hlp"
  4543.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4544.                     nsize = len(Desc$)+1
  4545.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4546.                     Lot_RegisterObject "APRSQLSERVER4_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4547.  
  4548.                     'Dont forget to uninstall the GID file.
  4549.                     Lot_RegisterObject "APRSQLSERVER4_SHRCNT", UNIN_CLASS_FILE$, GetSymbolValue(SYM_WINSYSDIR$)+"loss09.gid"
  4550.                 END IF
  4551.                 IF Lot_IsTheFeatureInstalled("APRSQLSERVER6_SHRCNT") <> FALSE THEN 
  4552.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4553.                     keyval$ = "loss609.cnt"
  4554.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4555.                     nsize = len(Desc$)+1
  4556.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4557.                     Lot_RegisterObject "APRSQLSERVER6_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4558.  
  4559.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4560.                     keyval$ = "loss609.hlp"
  4561.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4562.                     nsize = len(Desc$)+1
  4563.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4564.                     Lot_RegisterObject "APRSQLSERVER6_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4565.  
  4566.                     'Dont forget to uninstall the GID file.
  4567.                     Lot_RegisterObject "APRSQLSERVER6_SHRCNT", UNIN_CLASS_FILE$, GetSymbolValue(SYM_WINSYSDIR$)+"loss609.gid"
  4568.                 END IF
  4569.                 IF Lot_IsTheFeatureInstalled("APRSYBASE_SHRCNT") <> FALSE THEN 
  4570.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4571.                     keyval$ = "losyb09.cnt"
  4572.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4573.                     nsize = len(Desc$)+1
  4574.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4575.                     Lot_RegisterObject "APRSYBASE_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4576.  
  4577.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4578.                     keyval$ = "losyb09.hlp"
  4579.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4580.                     nsize = len(Desc$)+1
  4581.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4582.                     Lot_RegisterObject "APRSYBASE_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4583.  
  4584.                     'Dont forget to uninstall the GID file.
  4585.                     Lot_RegisterObject "APRSYBASE_SHRCNT", UNIN_CLASS_FILE$, GetSymbolValue(SYM_WINSYSDIR$)+"losyb09.gid"
  4586.                 END IF
  4587.                 IF Lot_IsTheFeatureInstalled("APRINFORMIX5_SHRCNT") <> FALSE THEN 
  4588.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4589.                     keyval$ = "loinf509.cnt"
  4590.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4591.                     nsize = len(Desc$)+1
  4592.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4593.                     Lot_RegisterObject "APRINFORMIX5_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4594.  
  4595.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4596.                     keyval$ = "loinf509.hlp"
  4597.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4598.                     nsize = len(Desc$)+1
  4599.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4600.                     Lot_RegisterObject "APRINFORMIX5_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4601.  
  4602.                     'Dont forget to uninstall the GID file.
  4603.                     Lot_RegisterObject "APRINFORMIX5_SHRCNT", UNIN_CLASS_FILE$, GetSymbolValue(SYM_WINSYSDIR$)+"loinf509.gid"
  4604.                 END IF
  4605.                 IF Lot_IsTheFeatureInstalled("APRINFORMIX7_SHRCNT") <> FALSE THEN 
  4606.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4607.                     keyval$ = "loinf709.cnt"
  4608.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4609.                     nsize = len(Desc$)+1
  4610.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4611.                     Lot_RegisterObject "APRINFORMIX7_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4612.  
  4613.                     KEY_LOTUS = "SOFTWARE\Microsoft\Windows\Help"
  4614.                     keyval$ = "loinf709.hlp"
  4615.                     Desc$ = GetSymbolValue(SYM_WINSYSDIR$)
  4616.                     nsize = len(Desc$)+1
  4617.                         regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4618.                     Lot_RegisterObject "APRINFORMIX7_SHRCNT", UNIN_CLASS_REGISTRY_VALUE$, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+keyval$
  4619.  
  4620.                     'Dont forget to uninstall the GID file.
  4621.                     Lot_RegisterObject "APRINFORMIX7_SHRCNT", UNIN_CLASS_FILE$, GetSymbolValue(SYM_WINSYSDIR$)+"loinf709.gid"
  4622.                 END IF
  4623.             END IF
  4624.             
  4625.         END IF
  4626.  
  4627.  
  4628.  
  4629.  
  4630.  
  4631. '============ Powerkey Registry =====================
  4632.  
  4633.  
  4634.         IF Lot_IsTheFeatureInstalled("APRNOTES") <> FALSE THEN
  4635.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Notes"
  4636.             keyval$ = "TextFieldWidth"
  4637.             Descnum = 100
  4638.             nsize = 4
  4639.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4640.  
  4641.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+ LdString(SID_APR_PROD_VER) + "\Notes"
  4642.             keyval$ = "OpenCompositeAsPicture"
  4643.             Descnum = 1
  4644.             nsize = 4
  4645.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4646.         END IF          
  4647.  
  4648.  
  4649.         IF Lot_IsTheFeatureInstalled("APRQMF") <> FALSE THEN
  4650.                If network$ = gSTANDARD$ THEN
  4651.                 dsspath$ = Lot_WhereIsFeature(prodno%, "APRCORE", LdString(SID_APR_APREXE))
  4652.             ELSEIF network$ = gNODE$ THEN
  4653.                   dsspath$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  4654.             END IF
  4655.             
  4656.             'dsspath$ = Lot_TrimEndSlash (dsspath$)
  4657.             dsspath$ = GetSymbolValue("APRQMFDIR")
  4658.             dssdir$ = GetSymbolValue("APRWORKDIR")
  4659.  
  4660.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\QMF"
  4661.             keyval$ = "DssDir"
  4662.             Desc$ = dssdir$
  4663.             nsize = len(Desc$) + 1
  4664.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4665.  
  4666.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+ LdString(SID_APR_PROD_VER) + "\QMF"
  4667.             keyval$ = "DssPath"
  4668.             Desc$ = dsspath$
  4669.             nsize = len(Desc$) + 1
  4670.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4671.  
  4672.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+ LdString(SID_APR_PROD_VER) + "\QMF"
  4673.             keyval$ = "DsqCommTrace"
  4674.             Desc$ = "Off"
  4675.             nsize = len(Desc$) + 1
  4676.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4677.  
  4678.         END IF          
  4679.  
  4680.  
  4681.  
  4682.  
  4683. '=============== ICON Registry =======================
  4684.  
  4685.         '** Register extentions and icons with uninstaller.  approach.reg writes these to registry on install.
  4686.         Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\approach"
  4687.         Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.apt"
  4688.         Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.apr"
  4689.         Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.vew"
  4690.         Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.mpr"
  4691.         Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachView"
  4692.         Lot_RegisterObject "APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachSMaster"
  4693.  
  4694.  
  4695. '=============== CHART 2.1 Registry =======================
  4696.  
  4697.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Approach Servers"
  4698.         keyval$ = "LotusChart"
  4699.         Desc$ = componentdir$ + "ltchen21.dll"
  4700.         nsize = len(Desc$)+1
  4701.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4702.  
  4703.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Approach Servers\LotusChart"
  4704.         keyval$ = "Capabilities"
  4705.         Desc$ = "0x42cdd"
  4706.         nsize = len(Desc$)+1
  4707.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4708.  
  4709.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Approach Servers\LotusChart"
  4710.         keyval$ = "DataFormat"
  4711.         Desc$ = ".cht"
  4712.         nsize = len(Desc$)+1
  4713.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4714.  
  4715.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Approach Servers\LotusChart"
  4716.         keyval$ = "ContextFormat"
  4717.         Desc$ = ".cht"
  4718.         nsize = len(Desc$)+1
  4719.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4720.  
  4721.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\Approach Servers\LotusChart"
  4722.         keyval$ = "MenuText"
  4723.         Desc$ = "&Chart..."
  4724.         nsize = len(Desc$)+1
  4725.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4726.  
  4727.  
  4728. '=============== ODBC Registry =======================
  4729.        
  4730.     DIM oraclechpt$, sql4chpt$, sql6chpt$, sybchpt$, inf5chpt$, inf7chpt$
  4731.     DIM oracle%, sql4%, sql6%, syb%, inf5%, inf7%, symws$, getws$, installsysdir$
  4732.      
  4733.  
  4734.     'Setup a Debug Message to help track registry problems with Shared Windows Node Install
  4735.     symws$ = GetSymbolValue(SYM_WINSYSDIR$)
  4736.     getws$ = GetWindowsSysDir()
  4737.     DebugMsg "Windows System Directory Symbol: " & symws$ & chr$(10) & _
  4738.             "Windows System Directory Function: " & getws$, "APR_AddRegistryEntries"
  4739.  
  4740.     'Set a variable for the System Directory. I have found in Most cases
  4741.     'the above calls for xxws$ return the same value. However in cases where
  4742.     'the values differ, the function call appears to be the correct value.
  4743.  
  4744.     'However there appears to be a further complication when doing a standalone
  4745.     'install while running a shared windows node, so I think this should be the
  4746.     'final correction for this problem.
  4747.     IF network$ = gNODE$ THEN
  4748.         installsysdir$ = getws$
  4749.     Else
  4750.         installsysdir$ = symws$
  4751.     End If
  4752.  
  4753.     '** Get All the ODBC Driver Chapter Numbers from the INF File
  4754.     oraclechpt$ = Lot_GetChapterFromKeyword("APRORACLE_SHRCNT")
  4755.     sql4chpt$ = Lot_GetChapterFromKeyword("APRSQLSERVER4_SHRCNT")
  4756.     sql6chpt$ = Lot_GetChapterFromKeyword("APRSQLSERVER6_SHRCNT")
  4757.     sybchpt$ = Lot_GetChapterFromKeyword("APRSYBASE_SHRCNT")
  4758.     inf5chpt$ = Lot_GetChapterFromKeyword("APRINFORMIX5_SHRCNT")
  4759.     inf7chpt$ = Lot_GetChapterFromKeyword("APRINFORMIX7_SHRCNT")
  4760.  
  4761.  
  4762.     '** Find out if any of these sections are in the copy list. The previous
  4763.     '** method used to see if they were installed - which they are on a Node install
  4764.     '** because they're on the server, but not necessarily copied to the user's
  4765.     '** machine, so we only want to register the ODBC drivers, if they're copied
  4766.     '** locally. I think this will work better than "IsTheFeatureInstall"
  4767.     oracle% = Lot_GetChapterValInt(oraclechpt$, F_INOROUT)
  4768.     sql4% = Lot_GetChapterValInt(sql4chpt$, F_INOROUT)
  4769.     sql6% = Lot_GetChapterValInt(sql6chpt$, F_INOROUT)
  4770.     syb% = Lot_GetChapterValInt(sybchpt$, F_INOROUT)
  4771.     inf5% = Lot_GetChapterValInt(inf5chpt$, F_INOROUT)
  4772.     inf7% = Lot_GetChapterValInt(inf7chpt$, F_INOROUT)
  4773.  
  4774.  
  4775.     '** If this is a Node install, it's possible that these drivers were installed
  4776.     '** during the server install to a shared windows server directory.
  4777.     '** So let's check to see if any of the sections not in the copylist are
  4778.     '** actually installed.
  4779.     If network = gNode$ then
  4780.         If oracle% = 0 then
  4781.             If Lot_DoesFileExist(GetWindowsSysDir() + "loor709.dll" ) <> 0 Then
  4782.                 oracle% = 1
  4783.             End If
  4784.         End If
  4785.         If sql4% = 0 then
  4786.             If Lot_DoesFileExist(GetWindowsSysDir() + "loss09.dll" ) <> 0 Then
  4787.                 sql4% = 1
  4788.             End If
  4789.         End If
  4790.         If sql6% = 0 then
  4791.             If Lot_DoesFileExist(GetWindowsSysDir() + "loss609.dll" ) <> 0 Then
  4792.                 sql6% = 1
  4793.             End If
  4794.         End If
  4795.         If syb% = 0 then
  4796.             If Lot_DoesFileExist(GetWindowsSysDir() + "losyb09.dll" ) <> 0 Then
  4797.                 syb% = 1
  4798.             End If
  4799.         End If
  4800.         If inf5% = 0 then
  4801.             If Lot_DoesFileExist(GetWindowsSysDir() + "loinf509.dll" ) <> 0 Then
  4802.                 inf5% = 1
  4803.             End If
  4804.         End If
  4805.         If inf7% = 0 then
  4806.             If Lot_DoesFileExist(GetWindowsSysDir() + "loinf709.dll" ) <> 0 Then
  4807.                 inf7% = 1
  4808.             End If
  4809.         End If
  4810.     End If
  4811.  
  4812.  
  4813. %REM
  4814. /************
  4815.         'SQL or ORACLE or Sybase or Informix Selected
  4816.         IF (Lot_IsTheFeatureInstalled("APRORACLE") <> FALSE) OR _
  4817.                  (Lot_IsTheFeatureInstalled("APRSQLSERVER4") <> FALSE) OR _
  4818.                  (Lot_IsTheFeatureInstalled("APRSQLSERVER6") <> FALSE) OR _
  4819.                  (Lot_IsTheFeatureInstalled("APRSYBASE") <> FALSE) OR _
  4820.                  (Lot_IsTheFeatureInstalled("APRINFORMIX5") <> FALSE) OR _
  4821.                  (Lot_IsTheFeatureInstalled("APRINFORMIX7") <> FALSE) THEN
  4822. *************/
  4823. %ENDREM
  4824.  
  4825.  
  4826.         '** SQL or ORACLE or Sybase or Informix Selected
  4827.     IF (oracle% = 1) OR (sql4% = 1) OR (sql6% = 1) OR _
  4828.            (syb% = 1) OR (inf5% = 1) OR (inf7% = 1) THEN
  4829.   
  4830.  
  4831.             '** A
  4832.             KEY_LOTUS="Software\INTERSOLV\WIN.INI\Compatibility"
  4833.             keyval$ = "LPX"
  4834.             Desc$ = "3496"
  4835.             nsize = len(Desc$)+1
  4836.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4837.  
  4838.             '** L
  4839.             'KEY_LOTUS="Software\INTERSOLV\WIN.INI\Compatibility"
  4840.             'keyval$ = "LPX"
  4841.             'Desc$ = "3496"
  4842.             'nsize = len(Desc$)+1
  4843.             'regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4844.  
  4845.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ODBC"
  4846.             keyval$ = "ApproachErrorLogFile"
  4847.             Desc$ = "apprerr.out"
  4848.             nsize = len(Desc$)+1
  4849.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4850.  
  4851.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ODBC"
  4852.             keyval$ = "TurnTraceOn"
  4853.             Descnum = 0
  4854.             nsize = 4
  4855.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4856.  
  4857.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\ODBC"
  4858.             keyval$ = "TraceFile"
  4859.             Desc$ = "tracefile.out"
  4860.             nsize = len(Desc$)+1
  4861.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize)
  4862.  
  4863.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\SQL"
  4864.             keyval$ = "iReadOnly"
  4865.             Descnum = 0
  4866.             nsize = 4
  4867.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4868.  
  4869.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\"+LdString(SID_APR_PROD_VER)+"\SQL"
  4870.             keyval$ = "iIncludeSystemTable"
  4871.             Descnum = 0
  4872.             nsize = 4
  4873.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4874.  
  4875.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\OEM to ANSI"
  4876.             keyval$ = "Translator"
  4877.             Desc$ = installsysdir$ + "IVTRN09.DLL"
  4878.             nsize = len(Desc$)+1
  4879.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4880.  
  4881.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  4882.             keyval$ = "Setup"
  4883.             Desc$ = installsysdir$ + "IVTRN09.DLL"
  4884.             nsize = len(Desc$)+1
  4885.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4886.  
  4887.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Translators"
  4888.             keyval$ = "OEM to ANSI"
  4889.             Desc$ = "Installed"
  4890.             nsize = len(Desc$)+1
  4891.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4892.  
  4893.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core"
  4894.             keyval$ = "Usage Count"
  4895.             Descnum = 1
  4896.             nsize = 4
  4897.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_DWORD, Descnum, nsize)
  4898.  
  4899.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4900.             keyval$ = "ODBC32.DLL"
  4901.             Desc$ = installsysdir$ + "ODBC32.DLL"
  4902.             nsize = len(Desc$)+1
  4903.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4904.  
  4905.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4906.             keyval$ = "ODBCCR32.DLL"
  4907.             Desc$ = installsysdir$ + "ODBCCR32.DLL"
  4908.             nsize = len(Desc$)+1
  4909.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4910.  
  4911.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4912.             keyval$ = "MSVCRT10.DLL"
  4913.             Desc$ = installsysdir$ + "MSVCRT10.DLL"
  4914.             nsize = len(Desc$)+1
  4915.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4916.  
  4917.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4918.             keyval$ = "MSVCRT20.DLL"
  4919.             Desc$ = installsysdir$ + "MSVCRT20.DLL"
  4920.             nsize = len(Desc$)+1
  4921.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4922.  
  4923.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4924.             keyval$ = "ODBCINT.DLL"
  4925.             Desc$ = installsysdir$ + "ODBCINT.DLL"
  4926.             nsize = len(Desc$)+1
  4927.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4928.  
  4929.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4930.             keyval$ = "ODBCCP32.DLL"
  4931.             Desc$ = installsysdir$ + "ODBCCP32.DLL"
  4932.             nsize = len(Desc$)+1
  4933.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4934.  
  4935.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4936.             keyval$ = "ODBCCP32.CPL"
  4937.             Desc$ = installsysdir$ + "ODBCCP32.CPL"
  4938.             nsize = len(Desc$)+1
  4939.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4940.  
  4941.             KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList"
  4942.             keyval$ = "ODBCINST.HLP"
  4943.             Desc$ = installsysdir$ + "ODBCINST.HLP"
  4944.             nsize = len(Desc$)+1
  4945.             regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4946.  
  4947.             '** ORACLE Selected
  4948.             If oracle% = 1 then
  4949.             'IF Lot_IsTheFeatureInstalled("APRORACLE") <> FALSE THEN
  4950.                 '** B
  4951.                 KEY_LOTUS="Software\ODBC\ODBC.INI\ODBC Data Sources"
  4952.                 keyval$ = "Oracle7 tables-Approach97"
  4953.                 Desc$ = "INTERSOLV OEM 2.12 32-BIT Oracle7"
  4954.                 nsize = len(Desc$)+1
  4955.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4956.  
  4957.                 '** G
  4958.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
  4959.                 keyval$ = "INTERSOLV OEM 2.12 32-BIT Oracle7"
  4960.                 Desc$ = "Installed"
  4961.                 nsize = len(Desc$)+1
  4962.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4963.                 
  4964.                 '** P
  4965.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  4966.                 keyval$ = "Description"
  4967.                 Desc$ = "Oracle7 Server"
  4968.                 nsize = len(Desc$)+1
  4969.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4970.  
  4971.                 '** Q
  4972.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  4973.                 keyval$ = "ServerName"
  4974.                 Desc$ = ""
  4975.                 nsize = len(Desc$)+1
  4976.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4977.  
  4978.                 '** R
  4979.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  4980.                 keyval$ = "Servers"
  4981.                 Desc$ = ""
  4982.                 nsize = len(Desc$)+1
  4983.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4984.  
  4985.                 '** S
  4986.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  4987.                 keyval$ = "LogonID"
  4988.                 Desc$ = ""
  4989.                 nsize = len(Desc$)+1
  4990.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4991.  
  4992.                 '** T
  4993.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  4994.                 keyval$ = "LockTimeOut"
  4995.                 Desc$ = "-1"
  4996.                 nsize = len(Desc$)+1
  4997.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  4998.  
  4999.                 '** U
  5000.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  5001.                 keyval$ = "ArraySize"
  5002.                 Desc$ = "60000"
  5003.                 nsize = len(Desc$)+1
  5004.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5005.  
  5006.                 '** V
  5007.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  5008.                 keyval$ = "CatalogComments"
  5009.                 Desc$ = "0"
  5010.                 nsize = len(Desc$)+1
  5011.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5012.                 
  5013.                 '** D
  5014.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  5015.                 keyval$ = "Driver"
  5016.                 Desc$ = installsysdir$ + "LOOR709.DLL"
  5017.                 nsize = len(Desc$)+1
  5018.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5019.  
  5020.                 '** J
  5021.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  5022.                 keyval$ = "Driver"
  5023.                 Desc$ = installsysdir$ + "LOOR709.DLL"
  5024.                 nsize = len(Desc$)+1
  5025.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5026.  
  5027.                 '** K
  5028.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  5029.                 keyval$ = "Setup"
  5030.                 Desc$ = installsysdir$ + "LOOR709.DLL"
  5031.                 nsize = len(Desc$)+1
  5032.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5033.  
  5034.                 '** O
  5035.                 KEY_LOTUS="Software\ODBC\ODBC.INI\Oracle7 tables-Approach97"
  5036.                 keyval$ = "Driver"
  5037.                 Desc$ = installsysdir$ + "LOOR709.DLL"
  5038.                 nsize = len(Desc$)+1
  5039.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5040.  
  5041.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  5042.                 keyval$ = "APILevel"
  5043.                 Desc$ = "1"
  5044.                 nsize = len(Desc$)+1
  5045.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5046.  
  5047.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  5048.                 keyval$ = "ConnectFunctions"
  5049.                 Desc$ = "YYY"
  5050.                 nsize = len(Desc$)+1
  5051.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5052.  
  5053.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  5054.                 keyval$ = "DriverODBCVer"
  5055.                 Desc$ = "02.50"
  5056.                 nsize = len(Desc$)+1
  5057.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5058.  
  5059.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  5060.                 keyval$ = "FileUsage"
  5061.                 Desc$ = "0"
  5062.                 nsize = len(Desc$)+1
  5063.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5064.  
  5065.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Oracle7"
  5066.                 keyval$ = "SQLLevel"
  5067.                 Desc$ = "1"
  5068.                 nsize = len(Desc$)+1
  5069.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5070.  
  5071.             END IF
  5072.  
  5073.             '** SQL 4 Selected
  5074.             If sql4% = 1 then
  5075.             'IF Lot_IsTheFeatureInstalled("APRSQLSERVER4") <> FALSE THEN
  5076.                 '** F
  5077.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
  5078.                 keyval$ = "INTERSOLV OEM 2.12 32-BIT SQLServer"
  5079.                 Desc$ = "Installed"
  5080.                 nsize = len(Desc$)+1
  5081.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5082.  
  5083.                 '** C
  5084.                 KEY_LOTUS="Software\ODBC\ODBC.INI\ODBC Data Sources"
  5085.                 keyval$ = "MS Sybase SQL Server-Approach97"
  5086.                 Desc$ = "INTERSOLV OEM 2.12 32-BIT SQLServer"
  5087.                 nsize = len(Desc$)+1      
  5088.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5089.  
  5090.                 '** N
  5091.                 KEY_LOTUS="Software\ODBC\ODBC.INI\ODBC Data Sources"
  5092.                 keyval$ = "MS Sybase SQL Server-Approach97"
  5093.                 Desc$ = "INTERSOLV OEM 2.12 32-BIT SQLServer"
  5094.                 nsize = len(Desc$)+1
  5095.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5096.  
  5097.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5098.                 keyval$ = "Cancel"
  5099.                 Desc$ = "1"
  5100.                 nsize = len(Desc$)+1
  5101.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5102.                 
  5103.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5104.                 keyval$ = "CursorCacheSize"
  5105.                 Desc$ = "1"
  5106.                 nsize = len(Desc$)+1
  5107.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5108.  
  5109.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5110.                 keyval$ = "Gateway"
  5111.                 Desc$ = "0"
  5112.                 nsize = len(Desc$)+1
  5113.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5114.  
  5115.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5116.                 keyval$ = "Netapi"
  5117.                 Desc$ = "0"
  5118.                 nsize = len(Desc$)+1
  5119.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5120.  
  5121.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5122.                 keyval$ = "TwoPhaseCommit"
  5123.                 Desc$ = "0"
  5124.                 nsize = len(Desc$)+1
  5125.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5126.  
  5127.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5128.                 keyval$ = "YieldProc"
  5129.                 Desc$ = "1"
  5130.                 nsize = len(Desc$)+1
  5131.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5132.                 
  5133.                 '** E
  5134.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5135.                 keyval$ = "Driver"
  5136.                 Desc$ = installsysdir$ + "LOSS09.DLL"
  5137.                 nsize = len(Desc$)+1
  5138.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5139.  
  5140.                 '** W
  5141.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS Sybase SQL Server-Approach97"
  5142.                 keyval$ = "Driver"
  5143.                 Desc$ = installsysdir$ + "LOSS09.DLL"
  5144.                 nsize = len(Desc$)+1
  5145.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5146.  
  5147.                 '** H
  5148.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer"
  5149.                 keyval$ = "Driver"
  5150.                 Desc$ = installsysdir$ + "LOSS09.DLL"
  5151.                 nsize = len(Desc$)+1
  5152.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5153.  
  5154.                 '** I
  5155.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer"
  5156.                 keyval$ = "Setup"
  5157.                 Desc$ = installsysdir$ + "LOSS09.DLL"
  5158.                 nsize = len(Desc$)+1
  5159.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5160.  
  5161.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer"
  5162.                 keyval$ = "APILevel"
  5163.                 Desc$ = "1"
  5164.                 nsize = len(Desc$)+1
  5165.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5166.  
  5167.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer"
  5168.                 keyval$ = "ConnectFunctions"
  5169.                 Desc$ = "YYY"
  5170.                 nsize = len(Desc$)+1
  5171.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5172.  
  5173.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer"
  5174.                 keyval$ = "DriverODBCVer"
  5175.                 Desc$ = "02.50"
  5176.                 nsize = len(Desc$)+1
  5177.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5178.  
  5179.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer"
  5180.                 keyval$ = "FileUsage"
  5181.                 Desc$ = "0"
  5182.                 nsize = len(Desc$)+1
  5183.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5184.  
  5185.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer"
  5186.                 keyval$ = "SQLLevel"
  5187.                 Desc$ = "1"
  5188.                 nsize = len(Desc$)+1
  5189.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5190.             END IF
  5191.  
  5192.             '** SQL 6 Selected
  5193.             If sql6% = 1 then
  5194.             'IF Lot_IsTheFeatureInstalled("APRSQLSERVER6") <> FALSE THEN
  5195.                 '** F
  5196.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
  5197.                 keyval$ = "INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5198.                 Desc$ = "Installed"
  5199.                 nsize = len(Desc$)+1
  5200.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5201.  
  5202.                 '** C
  5203.                 KEY_LOTUS="Software\ODBC\ODBC.INI\ODBC Data Sources"
  5204.                 keyval$ = "MS SQL Server6-Approach97"
  5205.                 Desc$ = "INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5206.                 nsize = len(Desc$)+1      
  5207.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5208.  
  5209.                 '** N
  5210.                 KEY_LOTUS="Software\ODBC\ODBC.INI\ODBC Data Sources"
  5211.                 keyval$ = "MS SQL Server6-Approach97"
  5212.                 Desc$ = "INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5213.                 nsize = len(Desc$)+1
  5214.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5215.  
  5216.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS SQL Server6-Approach97"
  5217.                 keyval$ = "Cancel"
  5218.                 Desc$ = "1"
  5219.                 nsize = len(Desc$)+1
  5220.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5221.                 
  5222.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS SQL Server6-Approach97"
  5223.                 keyval$ = "CursorCacheSize"
  5224.                 Desc$ = "1"
  5225.                 nsize = len(Desc$)+1
  5226.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5227.  
  5228.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS SQL Server6-Approach97"
  5229.                 keyval$ = "Gateway"
  5230.                 Desc$ = "0"
  5231.                 nsize = len(Desc$)+1
  5232.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5233.  
  5234.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS SQL Server6-Approach97"
  5235.                 keyval$ = "Netapi"
  5236.                 Desc$ = "0"
  5237.                 nsize = len(Desc$)+1
  5238.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5239.  
  5240.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS SQL Server6-Approach97"
  5241.                 keyval$ = "TwoPhaseCommit"
  5242.                 Desc$ = "0"
  5243.                 nsize = len(Desc$)+1
  5244.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5245.  
  5246.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS SQL Server6-Approach97"
  5247.                 keyval$ = "YieldProc"
  5248.                 Desc$ = "1"
  5249.                 nsize = len(Desc$)+1
  5250.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5251.  
  5252.                 KEY_LOTUS="Software\ODBC\ODBC.INI\MS SQL Server6-Approach97"
  5253.                 keyval$ = "Driver"
  5254.                 Desc$ = installsysdir$ + "LOSS609.DLL"
  5255.                 nsize = len(Desc$)+1
  5256.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5257.                 
  5258.                 '** H
  5259.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5260.                 keyval$ = "Driver"
  5261.                 Desc$ = installsysdir$ + "LOSS609.DLL"
  5262.                 nsize = len(Desc$)+1
  5263.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5264.  
  5265.                 '** I
  5266.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5267.                 keyval$ = "Setup"
  5268.                 Desc$ = installsysdir$ + "LOSS609.DLL"
  5269.                 nsize = len(Desc$)+1
  5270.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5271.  
  5272.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5273.                 keyval$ = "APILevel"
  5274.                 Desc$ = "1"
  5275.                 nsize = len(Desc$)+1
  5276.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5277.  
  5278.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5279.                 keyval$ = "ConnectFunctions"
  5280.                 Desc$ = "YYY"
  5281.                 nsize = len(Desc$)+1
  5282.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5283.  
  5284.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5285.                 keyval$ = "DriverODBCVer"
  5286.                 Desc$ = "02.50"
  5287.                 nsize = len(Desc$)+1
  5288.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5289.  
  5290.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5291.                 keyval$ = "FileUsage"
  5292.                 Desc$ = "0"
  5293.                 nsize = len(Desc$)+1
  5294.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5295.  
  5296.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT SQLServer6"
  5297.                 keyval$ = "SQLLevel"
  5298.                 Desc$ = "1"
  5299.                 nsize = len(Desc$)+1
  5300.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5301.             END IF
  5302.  
  5303.             '** Sybase System 10 & 11 Install
  5304.             '** ODBC.INI entries are not made here because user must have client installed first
  5305.             '** and we can't determine the appropriate settings during install, so the user must
  5306.             '** make the additions manually
  5307.             If syb% = 1 then
  5308.             'IF Lot_IsTheFeatureInstalled("APRSYBASE") <> FALSE THEN
  5309.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
  5310.                 keyval$ = "INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5311.                 Desc$ = "Installed"
  5312.                 nsize = len(Desc$)+1
  5313.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5314.             
  5315.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5316.                 keyval$ = "Driver"
  5317.                 Desc$ = installsysdir$ + "LOSYB09.DLL"
  5318.                 nsize = len(Desc$)+1
  5319.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5320.  
  5321.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5322.                 keyval$ = "Setup"
  5323.                 Desc$ = installsysdir$ + "LOSYB09.DLL"
  5324.                 nsize = len(Desc$)+1
  5325.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5326.  
  5327.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5328.                 keyval$ = "APILevel"
  5329.                 Desc$ = "1"
  5330.                 nsize = len(Desc$)+1
  5331.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5332.  
  5333.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5334.                 keyval$ = "ConnectFunctions"
  5335.                 Desc$ = "YYY"
  5336.                 nsize = len(Desc$)+1
  5337.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5338.  
  5339.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5340.                 keyval$ = "DriverODBCVer"
  5341.                 Desc$ = "02.50"
  5342.                 nsize = len(Desc$)+1
  5343.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5344.  
  5345.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5346.                 keyval$ = "FileUsage"
  5347.                 Desc$ = "0"
  5348.                 nsize = len(Desc$)+1
  5349.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5350.  
  5351.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT Sybase System 10"
  5352.                 keyval$ = "SQLLevel"
  5353.                 Desc$ = "0"
  5354.                 nsize = len(Desc$)+1
  5355.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5356.             END IF
  5357.  
  5358.  
  5359.             '** Informix5 Driver Installed
  5360.             '** ODBC.INI entries are not made here because user must have client installed first
  5361.             '** and we can't determine the appropriate settings during install, so the user must
  5362.             '** make the additions manually
  5363.             If inf5% = 1 then
  5364.             'IF Lot_IsTheFeatureInstalled("APRINFORMIX5") <> FALSE THEN
  5365.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
  5366.                 keyval$ = "INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5367.                 Desc$ = "Installed"
  5368.                 nsize = len(Desc$)+1
  5369.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5370.  
  5371.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5372.                 keyval$ = "Driver"
  5373.                 Desc$ = installsysdir$ + "LOINF509.DLL"
  5374.                 nsize = len(Desc$)+1
  5375.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5376.  
  5377.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5378.                 keyval$ = "Setup"
  5379.                 Desc$ = installsysdir$ + "LOINF509.DLL"
  5380.                 nsize = len(Desc$)+1
  5381.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5382.  
  5383.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5384.                 keyval$ = "APILevel"
  5385.                 Desc$ = "1"
  5386.                 nsize = len(Desc$)+1
  5387.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5388.  
  5389.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5390.                 keyval$ = "ConnectFunctions"
  5391.                 Desc$ = "YYY"
  5392.                 nsize = len(Desc$)+1
  5393.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5394.  
  5395.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5396.                 keyval$ = "DriverODBCVer"
  5397.                 Desc$ = "02.50"
  5398.                 nsize = len(Desc$)+1
  5399.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5400.  
  5401.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5402.                 keyval$ = "FileUsage"
  5403.                 Desc$ = "0"
  5404.                 nsize = len(Desc$)+1
  5405.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5406.  
  5407.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX5"
  5408.                 keyval$ = "SQLLevel"
  5409.                 Desc$ = "1"
  5410.                 nsize = len(Desc$)+1
  5411.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5412.             END IF
  5413.  
  5414.  
  5415.             '** Informix7 Driver Installed
  5416.             '** ODBC.INI entries are not made here because user must have client installed first
  5417.             '** and we can't determine the appropriate settings during install, so the user must
  5418.             '** make the additions manually
  5419.             If inf7% = 1 then
  5420.             'IF Lot_IsTheFeatureInstalled("APRINFORMIX7") <> FALSE THEN
  5421.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
  5422.                 keyval$ = "INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5423.                 Desc$ = "Installed"
  5424.                 nsize = len(Desc$)+1
  5425.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5426.  
  5427.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5428.                 keyval$ = "Driver"
  5429.                 Desc$ = installsysdir$ + "LOINF709.DLL"
  5430.                 nsize = len(Desc$)+1
  5431.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5432.  
  5433.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5434.                 keyval$ = "Setup"
  5435.                 Desc$ = installsysdir$ + "LOINF709.DLL"
  5436.                 nsize = len(Desc$)+1
  5437.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5438.  
  5439.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5440.                 keyval$ = "APILevel"
  5441.                 Desc$ = "1"
  5442.                 nsize = len(Desc$)+1
  5443.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5444.  
  5445.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5446.                 keyval$ = "ConnectFunctions"
  5447.                 Desc$ = "YYY"
  5448.                 nsize = len(Desc$)+1
  5449.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5450.  
  5451.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5452.                 keyval$ = "DriverODBCVer"
  5453.                 Desc$ = "02.50"
  5454.                 nsize = len(Desc$)+1
  5455.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5456.  
  5457.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5458.                 keyval$ = "FileUsage"
  5459.                 Desc$ = "0"
  5460.                 nsize = len(Desc$)+1
  5461.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5462.  
  5463.                 KEY_LOTUS="SOFTWARE\ODBC\ODBCINST.INI\INTERSOLV OEM 2.12 32-BIT INFORMIX7"
  5464.                 keyval$ = "SQLLevel"
  5465.                 Desc$ = "1"
  5466.                 nsize = len(Desc$)+1
  5467.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize)
  5468.             END IF
  5469.  
  5470.         END IF
  5471.  
  5472.     END IF
  5473.  
  5474.  
  5475.     DebugMsg "Function End", "APR_AddRegistryEntries"
  5476.  
  5477. END FUNCTION ' APR_AddRegistryEntries(prodno%)
  5478.  
  5479.  
  5480. '*************************************************************************
  5481. '*************************************************************************
  5482. '*************************************************************************
  5483. '**
  5484. '**        Joe's Functions
  5485. '**
  5486. '*************************************************************************
  5487. '*************************************************************************
  5488. '*************************************************************************
  5489.  
  5490. '*************************************************************************
  5491. '** FUNCTION GetNotesPathfromRegistry() AS STRING
  5492. '**
  5493. '** Purpose: Gets the Notes dir path from registry, and searches for
  5494. '**          notes.exe in the product dir path. 
  5495. '**            
  5496. '** Author:    JoeG
  5497. '** Arguments: None
  5498. '** Returns:   if notes.exe does not exist in dir specified in registry, it
  5499. '**            returns "", otherwise returns the full path to the product.
  5500. '**            NOTE: changed to not include product name by JMD
  5501. '**             includes trailing backslash
  5502. '*************************************************************************
  5503.  
  5504. FUNCTION GetNotesPathfromRegistry() AS STRING
  5505.     DIM szkey$, keyvalue$, nsize&, gbuf$, ret&
  5506.  
  5507.     DebugMsg "Function Start", "GetNotesPathfromRegistry"
  5508.  
  5509.     keyvalue$ = "Path"
  5510.  
  5511.     '** Look for Notes 5.0 or greater first.
  5512.     szkey$ = "SOFTWARE\Lotus\Notes"
  5513.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  5514.  
  5515.     IF gbuf$ <> "" THEN 
  5516.         gbuf$ = TRIM$(gbuf$)
  5517.         GetNotesPathfromRegistry = LEFT$(gbuf$, LEN(gbuf$)-1)
  5518.     ELSE
  5519.         '** If Notes couldn't be found, look for v4.1
  5520.         szkey$ = "SOFTWARE\Lotus\Notes\4.1"
  5521.         ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  5522.  
  5523.         IF gbuf$ <> "" THEN 
  5524.             gbuf$ = TRIM$(gbuf$)
  5525.             GetNotesPathfromRegistry = LEFT$(gbuf$, LEN(gbuf$)-1)
  5526.         ELSE    
  5527.             '** If Notes 5.0+ or 4.1 couldn't be found, look for v4.0
  5528.             szkey$ = "SOFTWARE\Lotus\Notes\4.0"
  5529.             ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  5530.  
  5531.             IF gbuf$ <> "" THEN 
  5532.                 gbuf$ = TRIM$(gbuf$)
  5533.                 GetNotesPathfromRegistry = LEFT$(gbuf$, LEN(gbuf$)-1)
  5534.             ELSE    
  5535.                 GetNotesPathfromRegistry = ""
  5536.             END IF
  5537.         END IF
  5538.     END IF
  5539.  
  5540.     DebugMsg "Function End", "GetNotesPathfromRegistry"
  5541.  
  5542. END FUNCTION    'GetNotesPathfromRegistry
  5543.  
  5544. '*************************************************************************
  5545. '** FUNCTION APR_AddOLEEntries(prodno%, network$) AS INTEGER
  5546. '**
  5547. '** Purpose:     Add OLE Registration Entries to the Registry
  5548. '** Author:     Joe Ghazal
  5549. '** Arguments:     prodno% - Install Product Number
  5550. '**             network$ - network install type
  5551. '**                
  5552. '** Returns:    None
  5553. '*************************************************************************
  5554. FUNCTION APR_AddOLEEntries(prodno%, network$) AS INTEGER
  5555.     DIM winINIpath$, iniSection$
  5556.     DIM OleRegPath$, ExecError%, curpath$, newpath$, notused%
  5557.  
  5558.     DebugMsg "Function Start", "APR_AddOLEEntries"
  5559.  
  5560.        '** Write the OLE registration
  5561.    
  5562.     '**  register WINOBJ32.REG
  5563.     OleRegPath$ = GetSymbolValue("APRDIR") + "APPROACH.REG"
  5564.  
  5565.     IF DoesFileExist(OleRegPath$, femExists) <> FALSE THEN
  5566.  
  5567.         '** Remove 3.02 WIN.INI entries
  5568.         winINIpath$ = GetWindowsDir() + "WIN.INI"
  5569.         iniSection$ = "embedding"
  5570.         RemoveIniKey winINIpath$, iniSection$, "ApproachApplication", cmoNone%
  5571.         RemoveIniKey winINIpath$, iniSection$, "ApproachForm", cmoNone%
  5572.         RemoveIniKey winINIpath$, iniSection$, "ApproachReport", cmoNone%
  5573.         RemoveIniKey winINIpath$, iniSection$, "ApproachLetter", cmoNone%
  5574.         RemoveIniKey winINIpath$, iniSection$, "ApproachLabels", cmoNone%
  5575.         RemoveIniKey winINIpath$, iniSection$, "ApproachWorksheet", cmoNone%
  5576.         RemoveIniKey winINIpath$, iniSection$, "ApproachCrosstab", cmoNone%
  5577.         RemoveIniKey winINIpath$, iniSection$, "ApproachChart", cmoNone%
  5578.         
  5579.         iniSection$ = "Extensions"
  5580.         RemoveIniKey winINIpath$, iniSection$, "apr", cmoNone%
  5581.         RemoveIniKey winINIpath$, iniSection$, "apt", cmoNone%
  5582.         RemoveIniKey winINIpath$, iniSection$, "vew", cmoNone%
  5583.  
  5584.         IF network$ = gNODE$ THEN
  5585.             ExecError% = FileSub(OleRegPath, GetSymbolValue("APRDIR") + "WINOBJ32.DAT", LdString(SID_APR_OLEREGSTRING), Lot_GetDestDirValueFromInstallIni("APRDIR") + "approach.exe")
  5586.         ELSE
  5587. '                            FileSub(ReadFn$, WriteFn$, SKey$, SSub$)
  5588.             ExecError% = FileSub(OleRegPath, GetSymbolValue("APRDIR") + "WINOBJ32.DAT", LdString(SID_APR_OLEREGSTRING), Lot_WhereIsFeature(prodno%, "APRCORE", "approach.exe") + "approach.exe")
  5589.         END IF
  5590.  
  5591.         curpath$ = CurDir()
  5592.         newpath$ = GetSymbolValue("APRDIR")
  5593.  
  5594.         ExecError% = Lot_regedit(newpath$, "WINOBJ32.DAT")
  5595.         KILL newpath$ + "approach.reg"
  5596.         NAME newpath$ + "winobj32.dat" AS newpath$ + "approach.reg"
  5597.  
  5598.         '** Register approach.reg entries with uninstaller
  5599.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\Approach.Application.97")
  5600.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{1AAF5D7A-41E9-11CE-AEA9-00805f684C33}")
  5601.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\Approach.Application")
  5602.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachApplication")
  5603.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028701-0000-0000-C000-000000000046}")
  5604.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachForm")
  5605.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028702-0000-0000-C000-000000000046}")
  5606.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachReport")
  5607.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028703-0000-0000-C000-000000000046}")
  5608.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachLetter")
  5609.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028704-0000-0000-C000-000000000046}")
  5610.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachLabels")
  5611.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028705-0000-0000-C000-000000000046}")
  5612.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachWorksheet")
  5613.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028706-0000-0000-C000-000000000046}")
  5614.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachCrosstab")
  5615.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028707-0000-0000-C000-000000000046}")
  5616.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachChart")
  5617.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028708-0000-0000-C000-000000000046}")
  5618.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\ApproachEnvelope")
  5619.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{00028709-0000-0000-C000-000000000046}")
  5620.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\DataTransferObject")
  5621.         notused% = Lot_RegisterObject("APRCORE", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\CLSID\{000287CC-0000-0000-C000-000000000046}")
  5622.  
  5623.     END IF
  5624.  
  5625.  
  5626.     DebugMsg "Function End", "APR_AddOLEEntries"
  5627.  
  5628. END FUNCTION ' APR_AddOLEEntries(prodno%)
  5629.  
  5630.  
  5631. '*************************************************************************
  5632. '** FUNCTION APR_TurnOnNTSpecialFiles (prodno%, network$) AS INTEGER
  5633. '**
  5634. '** Purpose:     Add NT Specific files to the copy list if installing to NT
  5635. '** Author:     Joe Ghazal
  5636. '** Arguments:     prodno% - Install Product Number
  5637. '**             network$ - network install type
  5638. '**                
  5639. '** Returns:    None
  5640. '*************************************************************************
  5641. FUNCTION APR_TurnOnNTSpecialFiles (prodno%, network$) AS INTEGER
  5642.     
  5643.     DIM sysdirpath$, chptname$, msvcchpt$, winsyschpt$, notused%
  5644.  
  5645.  
  5646.     DebugMsg "Function Start", "APR_TurnOnNTSpecialFiles"
  5647.  
  5648.     sysdirpath$ = GetWindowsSysDir()
  5649.     chptname$ = Lot_GetChapterFromKeyword("APRSYSDIRNT")
  5650.     msvcchpt$ = Lot_GetChapterFromKeyword("APRMSVC20")
  5651.     winsyschpt$ = Lot_GetChapterFromKeyword("APRSYSFILES")
  5652.  
  5653.     If (network$ = gSTANDARD) OR (network$ = gNODE) Then
  5654.         '** This file provides 3D effect to dialogs. Only needed for NT 3.51
  5655.         '** if using the Program Manager Shell.
  5656.         if (WhatPlatform() = PLATFORM_WINNT) AND (NOT IsNewShell()) AND _
  5657.          (DoesFileExist(sysdirpath$ + "ctl3d32.dll", femExists) = FALSE) Then
  5658.             DebugMsg "CTL3D32.DLL doesn't exist. Adding to CopyList", "APR_TurnOnNTSpecialFiles"
  5659.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  5660.         Else
  5661.             DebugMsg "CTL3D32.DLL exists. NOT Added to CopyList", "APR_TurnOnNTSpecialFiles"
  5662.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  5663.            End if
  5664.  
  5665.         '** This file is needed by Approach, but is supplied with Win95.
  5666.         if (WhatPlatform() = PLATFORM_WINNT) AND _
  5667.          (DoesFileExist(sysdirpath$ + "msvcrt20.dll", femExists) = FALSE) Then
  5668.             DebugMsg "MSVCRT20.DLL doesn't exist. Adding to CopyList", "APR_TurnOnNTSpecialFiles"
  5669.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (msvcchpt$, 1)
  5670.         Else
  5671.             DebugMsg "MSVCRT20.DLL exists. NOT Added to CopyList", "APR_TurnOnNTSpecialFiles"
  5672.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (msvcchpt$, 0)
  5673.            End if
  5674.  
  5675.         '** Windows System Files aren't being copied during a node install, so I'm going to 
  5676.         '** force them into the copylist. This should deliver MSVCRT40.DLL required by the 
  5677.         '** Shared Components and MFC30.DLL required by Approach.
  5678.         If (network$ = gNODE) Then
  5679.             DebugMsg "Node Install, Adding WINSYS Files to CopyList", "APR_TurnOnNTSpecialFiles"
  5680.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (winsyschpt$, 1)
  5681.         End If
  5682.  
  5683.     ElseIf (network$ = gSERVER) Then
  5684.         '** These files should always be copied to the server, you don't know what the
  5685.         '** node machines are going to be running.
  5686.         notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  5687.         notused%  = Lot_SetChapterFilesInCopyListInOrOut (msvcchpt$, 1)
  5688.         notused%  = Lot_SetChapterFilesInCopyListInOrOut (winsyschpt$, 1)
  5689.     End If
  5690.  
  5691.  
  5692.     DebugMsg "Function End", "APR_TurnOnNTSpecialFiles"
  5693.  
  5694. END FUNCTION     'APR_TurnOnNTSpecialFiles
  5695.  
  5696.  
  5697. '*************************************************************************
  5698. '** SUB APR_AddIcon(Feature$, Group$, Caption$, File$, CommandArgs$, WorkingDir$, Icon$)
  5699. '**
  5700. '** Purpose:     Adds Icons to Program Groups or StartMenu Folder
  5701. '** Author:     Based on Freelance Graphic's FLW_AddIcon()
  5702. '** Arguments:     Feature$ - The Feature to create the icon for
  5703. '**                Group$ - Name of the Program Group or Start Menu Folder
  5704. '**             Caption$ - Icon Caption
  5705. '**             File$ - File name linked to Icon (eg. Approach.exe)
  5706. '**             CommandArgs$ - Command Line Arguments for the icon
  5707. '**             WorkingDir$ - Working Directory for the Icon Properties
  5708. '**             Icon$ - Which Icon to use
  5709. '**             
  5710. '**                
  5711. '** Returns:    None
  5712. '*************************************************************************
  5713. '*************************************************************************
  5714. '**  Based on Freelance Graphic's FLW_AddIcon()
  5715. '** -------------------------------------------------------------------------
  5716. SUB APR_AddIcon(Feature$, Group$, Caption$, File$, CommandArgs$, WorkingDir$, Icon$)
  5717.  
  5718.     DIM Path$, ProdNo%
  5719.  
  5720.     DebugMsg "Function Start", "APR_AddIcon"
  5721.  
  5722.  
  5723.     ProdNo% = Reg_GetProductNo("APR")
  5724.  
  5725.     Path$=Lot_WhereIsFeature(ProdNo%, Feature$, File$)
  5726.  
  5727.     IF Path$ = "" THEN
  5728.         Path$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  5729.     END IF
  5730.  
  5731.     IF (WorkingDir$ = "") THEN
  5732.         WorkingDir$ = Path$
  5733.     END IF
  5734.  
  5735.     '** Do this next line to register icons with uninstall even in node situation.
  5736.     Feature$ = "APRCORE"
  5737.  
  5738.     IF IsNewShell() THEN
  5739.         IF strCompare(Left$(Caption$, Len(LdString(SID_APR_PROD_UPDATES))),LdString(SID_APR_PROD_UPDATES)) = 0 THEN
  5740.             Caption$ = LdString(SID_APR_LOTUS_UA) + Caption$
  5741.             Path$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  5742.         END IF
  5743.         Lot_AddLinkToFolder ProdNo%, Path$ + File$, Caption$ + ".lnk", Caption$, CommandArgs$, WorkingDir$
  5744.         Lot_RegisterObject Feature$, UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(1)+ Caption$ + ".lnk"
  5745.     ELSE
  5746.         IF strCompare(Right$(Group$, Len(LdString(SID_APR_PROD_UPDATES))),LdString(SID_APR_PROD_UPDATES)) = 0 THEN
  5747.             Group$ = Left$(Group$, Len(Group$) - Len(LdString(SID_APR_PROD_UPDATES)))
  5748.             Path$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  5749.         END IF
  5750.  
  5751.         DebugMsg "About to Add Icon -- " + chr$(13) +_
  5752.             "Group: " + Group$ + chr(13) +_
  5753.             "Caption: " + Caption$ + chr$(13) +_
  5754.             "Path/File: " + Path$ + File$ + chr$(13) +_
  5755.             "Command Args: " + CommandArgs$, "APR_AddIcon"
  5756.  
  5757.         '** Create a program manager group
  5758.         CreateProgmanGroup CHR$(34) + Group$ + CHR$(34), "", cmoVital
  5759.  
  5760.         CreateProgmanItem Group$, Caption$, Path$ + File$ + " " + CommandArgs$, "", cmoOverwrite
  5761.         Lot_RegisterObject Feature$, UNIN_CLASS_ICON$, Group$ + "\" + Caption$
  5762.     END IF
  5763.  
  5764.     DebugMsg "Function End", "APR_AddIcon"
  5765.  
  5766. END SUB        'APR_AddIcon
  5767.  
  5768. '*************************************************************************
  5769. '** APR_RegisterSharedComponent(Key$, FileName$, Version$)
  5770. '**
  5771. '** Purpose:     Registers a shared component dependency for Approach
  5772. '** Author:     Joe Ghazal
  5773. '** Arguments: Key$ is the CIT Shared Component ID
  5774. '**             FileName$ is the Name of the Shared Component
  5775. '**            Version$ is the version number of the shared component
  5776. '** Returns:    None
  5777. '*************************************************************************
  5778. SUB APR_RegisterSharedComponent(Key$, FileName$, Version$)
  5779.     DIM RegKeyName$, rc&, hlp$, hlp2$
  5780.  
  5781.     DebugMsg "Function Start", "APR_RegisterSharedComponent"
  5782.  
  5783.  
  5784.     IF Lot_IsTheFeatureInstalled(Key$) <> FALSE THEN
  5785.         RegKeyName$ = "SOFTWARE\Lotus\" + LdString(SID_APR_PROD_NAME) + "\" _
  5786.                     + LdString(SID_APR_PROD_VER) + "\Components\" + FileName$ + "\" + Version$
  5787.  
  5788.         rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, RegKeyName$)
  5789.         IF rc& <> ERROR_SUCCESS THEN
  5790.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$ + "\" + RegKeyName$,"",""
  5791.         END IF
  5792.     END IF
  5793.  
  5794.  
  5795.     'We need to register appropriate Help GID files for uninstall
  5796.     SELECT CASE Key$
  5797.  
  5798.         CASE "WIN32SHRCUSTSUPPHELPPRG"
  5799.             hlp$ = "cs1n97" & GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  5800.             hlp2$ = ""
  5801.         CASE "WIN32SHRCHARTPRG"
  5802.             hlp$ = "lc1n21" & GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  5803.             hlp2$ = "lc2n21" & GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  5804.         CASE "WIN32SHRLOTUSSCRIPTPRG"
  5805.             hlp$ = "lsen31" & GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  5806.             hlp2$ = "lsln31" & GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  5807.         CASE "WIN32TEAMMAILSHRPRG"
  5808.             hlp$ = "tm1n11" & GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  5809.             hlp2$ = ""
  5810.         CASE "WIN32SHRSTDPLAYERPRG"
  5811.             hlp$ = "mb1c11" & GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  5812.             hlp2$ = ""
  5813.  
  5814.         CASE ELSE
  5815.             hlp$ = ""
  5816.             hlp2$ = ""
  5817.  
  5818.     END SELECT
  5819.  
  5820.  
  5821.     If hlp$ <> "" Then
  5822.         Lot_RegisterObject Key$, UNIN_CLASS_FILE$, GetSymbolValue(SYM_COMPONENTSDIR$) & hlp$ + ".gid"
  5823.     End If
  5824.  
  5825.     If hlp2$ <> "" Then
  5826.         Lot_RegisterObject Key$, UNIN_CLASS_FILE$, GetSymbolValue(SYM_COMPONENTSDIR$) & hlp2$ + ".gid"
  5827.     End If
  5828.  
  5829.  
  5830.     DebugMsg "Function End", "APR_RegisterSharedComponent"
  5831.  
  5832. END SUB        'APR_RegisterSharedComponent
  5833.  
  5834. '*************************************************************************
  5835. '** FUNCTION APR_IsInstalled()
  5836. '**
  5837. '** Purpose:     Determines if APR is already installed
  5838. '** Author:     Joe Ghazal
  5839. '** Arguments:  None
  5840. '** Returns:      INTEGER indicating APR is found or not.
  5841. '*************************************************************************
  5842. FUNCTION APR_IsInstalled() AS INTEGER
  5843.     DIM pos%, LotusIni$, Executable$, spacePos%
  5844.  
  5845.     DebugMsg "Function Start", "APR_IsInstalled"
  5846.  
  5847.  
  5848.     APR_IsInstalled = FALSE
  5849.     LotusIni$ = GetWindowsDir() + "lotus.ini"
  5850.     Executable$ = GetIniKeyString(LotusIni$, "Lotus Applications", "Approach")
  5851.     pos% = INSTR(UCASE$(Executable$), "APPROACH.EXE")
  5852.  
  5853.     IF pos% <> 0 THEN
  5854.         spacepos% = INSTR(Executable$, " ")
  5855.        IF spacePos% THEN
  5856.             Executable$ = LEFT$(Executable$, spacePos%)
  5857.        END IF
  5858.         IF DoesFileExist(Executable$, femExists) THEN
  5859.             APR_IsInstalled = TRUE
  5860.         END IF
  5861.     END IF
  5862.  
  5863.     DebugMsg "Function End", "APR_IsInstalled"
  5864.  
  5865. END FUNCTION    'APR_IsInstalled
  5866.  
  5867. '*************************************************************************
  5868. '** FUNCTION APR_GetInstalledVersion()
  5869. '**
  5870. '** Purpose:     Determines which version, if any, of Approach is installed
  5871. '** Author:     Joe Ghazal
  5872. '** Arguments:  None
  5873. '** Returns:      STRING indicating which version was found
  5874. '*************************************************************************
  5875. FUNCTION APR_GetInstalledVersion() AS STRING
  5876.     DIM fname$, Version$,INIpath$
  5877.  
  5878.     DebugMsg "Function Start", "APR_GetInstalledVersion"
  5879.  
  5880.     INIpath$ = GetAPRPathFromLotusINI()
  5881.  
  5882.     DebugMsg "Previous install found in: " + INIpath$, "APR_GetInstalledVersion"
  5883.  
  5884.     IF INIpath$ <> "" THEN
  5885.         fname$ = INIpath$ + "approach.exe"
  5886.         IF DoesFileExist(fname$,femExists) THEN
  5887.             IF Lot_IsDestVerNewerOrEqual(fname$,4,0,0,0) = 0 THEN
  5888.                 APR_GetInstalledVersion$ = "APPROACH"
  5889.             ELSEIF Lot_IsDestVerNewerOrEqual(fname$,5,0,0,0) = 0 THEN
  5890.                 APR_GetInstalledVersion$ = "APPROACH96"
  5891.             ELSE
  5892.                 APR_GetInstalledVersion$ = "APPROACH97"
  5893.             END IF
  5894.            END IF
  5895.     END IF
  5896.  
  5897.     DebugMsg "Function End", "APR_GetInstalledVersion"
  5898.  
  5899. END FUNCTION    'APR_GetInstalledVersion
  5900.  
  5901. '****************************************************************************
  5902. '** FUNCTION RemNullInString(s as string) AS STRING
  5903. '**
  5904. '** Purpose:     Removes null chars from string.
  5905. '** Author:      Joe Ghazal
  5906. '** Arguments:     s$ - string to have NULLS removed
  5907. '** Returns:       string without NULLS
  5908. '****************************************************************************
  5909. FUNCTION RemNullInString(s as string) AS STRING
  5910.     DIM ln%, tmpS$, i%, c$
  5911.     
  5912.     DebugMsg "Function Start", "RemNullInString"
  5913.  
  5914.     s$ = trim$(s$)
  5915.     ln% = LEN(s)
  5916.     FOR i% = 1 to ln%   
  5917.           c$ = MID$(s$, i%, 1)
  5918.           IF IsNull(c$) = FALSE THEN
  5919.             'print c$
  5920.             tmpS$ = tmpS$ + c$
  5921.         ELSE
  5922.             EXIT FOR
  5923.        END IF
  5924.     NEXT
  5925.     RemNullInString = TRIM$(tmpS$)
  5926.     'print "tmpS$= " +tmpS$
  5927.  
  5928.     DebugMsg "Function End", "RemNullInString"
  5929.  
  5930. END FUNCTION    'RemNullInString
  5931.  
  5932.  
  5933. '****************************************************************************
  5934. '** FUNCTION GetNotesFromPath() AS STRING
  5935. '** Purpose:   Search for Notes on the users PATH. IF we can't find "NOTES"
  5936. '**                search the "lotus.ini" file for the notes path. if we
  5937. '**            find "NOTES" then we continue the check and see if we
  5938. '**            can locate "notes.ini" if successful Notes is really
  5939. '**            is installed on this system so we set the variables
  5940. '**                listed below.
  5941. '**             
  5942. '** OUT symbols:
  5943. '**                       
  5944. '**             
  5945. '**             
  5946. '** In Symbols: 
  5947. '**             
  5948. '**     
  5949. '** Author:  Michael Clark, Thangv, JoeG
  5950. '** Arguments:
  5951. '**     
  5952. '**     
  5953. '** Returns: DRIVE:PATH\FILE
  5954. '**     
  5955. '*************************************************************************
  5956. FUNCTION GetNotesFromPath() AS STRING
  5957.     DIM sym$, SymName$, found%, dum%, buffer$, DestDir$, ProductDir$
  5958.     DIM NotesProg$, NotesIni$, NotesData$
  5959.  
  5960.     DebugMsg "Function Start", "GetNotesFromPath"
  5961.  
  5962.     GetNotesFromPath = ""
  5963.     NotesIni$ = "notes.ini"
  5964.    
  5965.     DebugMsg "Checking for Notes in Environment", "GetNotesFromPath"
  5966.  
  5967.     NotesProg$ = LCASE$(FindTargetOnEnvVar(W16_NOTES,"PATH"))
  5968.     IF NotesProg$ <> "" Then
  5969.         found% = INSTR(1,LCASE$(NotesProg$),W16_NOTES)
  5970.         DebugMsg "Found 16bit Notes, Already in PATH", "GetNotesFromPath"
  5971. '        gWriteToAutoExec% = TRUE
  5972.     ELSE
  5973.         NotesProg$ = LCASE$(FindTargetOnEnvVar(W32_NOTES,"PATH"))
  5974.         IF NotesProg$ <> "" Then
  5975.             found% = INSTR(1,LCASE$(NotesProg$),W32_NOTES)
  5976.             DebugMsg "Found 32bit Notes, already in PATH", "GetNotesFromPath"
  5977.         END IF
  5978.     END IF
  5979.    
  5980.  
  5981.     IF found% = 0 Then
  5982.         '**  As A last resort check to see if we can find the Notes executable
  5983.         '**  directory in "Lotus.ini".
  5984.         ' PRINT "Can not Find notes so looking for notes in Lotus.ini"
  5985.         DebugMsg "Can't Find notes so looking for notes in Lotus.ini", "GetNotesFromPath"
  5986.         DestDir$ = GetWindowsDir() + "lotus.ini"
  5987.         NotesProg$ = LCASE$(GetIniKeyString(DestDir$,"Lotus Applications","NOTES"))
  5988.         found% = INSTR(1,LCASE$(NotesProg$),"notes.exe")
  5989.     END IF    
  5990.  
  5991.     IF found% <> 0 Then
  5992.         '**  Strip "NOTES.EXE" or W16 or W32 dll from string
  5993.         NotesProg$ = MID$(NotesProg$,1,(found%-1))
  5994.         IF NotesProg$ <> "" THEN
  5995.             dum% = Lot_CleanPath(NotesProg$)
  5996.            END If
  5997.        
  5998.        DebugMsg "Found Notes in :" + NotesProg$, "GetNotesFromPath"
  5999.         
  6000.        If Lot_DoesFileExist(NotesProg$ + W16_NOTES) <> 0 Then
  6001.             DebugMsg "Found 16bit Notes, Setting Autoexec Flag", "GetNotesFromPath"
  6002.             gWriteToAutoexec% = TRUE
  6003.        End If
  6004.     END IF
  6005.    
  6006.    
  6007.     IF NotesProg$ <> "" Then
  6008.         '**  Since we found Notes. Get the data dir from the notes.ini
  6009.         '**  if we do not find notes.ini then the user has Notes but it's 
  6010.         '**  not configured properly.
  6011.  
  6012.         '**  For NLM we need to save the path of the client Notes Dir.
  6013.         '**  becaues the is the Notes setup program for NLM.
  6014.         ProductDir$ = FindTargetOnEnvVar(NotesIni$,"PATH")
  6015.         
  6016.        DebugMsg "Notes.ini path returned :"+ProductDir$, "GetNotesFromPath"
  6017.  
  6018.         IF ProductDir$ <> "" THEN  
  6019.             NotesData$ = LCASE$(GetIniKeyString(ProductDir$,"NOTES","Directory"))
  6020.             IF NotesData$ = "" THEN
  6021.                 NotesProg$ = ""
  6022.             END IF
  6023.             'dum% = Lot_CleanPath(NotesData$)
  6024.         ELSE
  6025.             NotesProg$=""
  6026.         END IF
  6027.     END IF
  6028.  
  6029.     GetNotesFromPath = NotesProg$
  6030.    
  6031.     DebugMsg "Function End", "GetNotesFromPath"
  6032.  
  6033. End FUNCTION    'GetNotesFromPath
  6034.  
  6035. '****************************************************************************
  6036. '** SUB RegAndIncrementCount(s$)
  6037. '**
  6038. '** Purpose:     Increments the shared dll count in registry.
  6039. '**                    This function has been superceeded in CIT 2.1
  6040. '**                    After build 2112_4, this is nol longer necessary
  6041. '** Author:      Joe Ghazal
  6042. '** Arguments:     s$ (shared filename)
  6043. '** Returns:       NONE
  6044. '****************************************************************************
  6045. SUB RegAndIncrementCount(s$)
  6046.     DIM regStatus&, subkey$, keyval$, Descnum as variant, nsize&, lpBuf$, value$, Descnum2&
  6047.  
  6048.     DebugMsg "Function Start", "RegAndIncrementCount"
  6049.  
  6050.  
  6051.     subkey$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs"
  6052.     value$ = GetWindowsSysDir() + s$
  6053.     nsize& = 4
  6054.  
  6055.     IF Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, subkey$, value$, REG_DWORD, Descnum, nsize&) = 0 THEN
  6056.         Descnum2& = val(Descnum) + 1
  6057.     ELSE
  6058.         Descnum2& = 1
  6059.     END IF
  6060.     regStatus& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, subkey$, value$, REG_DWORD, Descnum2&, nsize&)
  6061.  
  6062.     DebugMsg "Function End", "RegAndIncrementCount"
  6063.  
  6064. END SUB        'RegAndIncrementCount
  6065.  
  6066. '****************************************************************************
  6067. '** SUB APRAddNotesToPathNT
  6068. '** Purpose:     Add notes to NT environment path
  6069. '**
  6070. '** Author:      Joe Ghazal
  6071. '** Arguments:     NONE
  6072. '** Returns:       NONE
  6073. '****************************************************************************
  6074. SUB APRAddNotesToPathNT
  6075.     DIM notespath$, buf$, regStatus&, keyval$, KEY_LOTUS$, Desc$, nsize%
  6076.  
  6077.     DebugMsg "Function Start", "APRAddNotesToPathNT"
  6078.  
  6079.  
  6080.     notespath$ = GetNotesPathFromRegistry()
  6081.  
  6082.     '**    if Running on NT, Can't use Notes 3.3 or other 16 bit version, so don't look 
  6083.     '** in path because all we'll find is the 16 bit version. --TR 4/22/96
  6084. '    IF notespath$ = "" THEN
  6085. '        notespath$ =  GetNotesFromPath() 
  6086. '    END IF
  6087.  
  6088.  
  6089. %REM
  6090.     '** This code should be obsolete now that Robert Armes has modified the DBNOTES
  6091.     '** Powerkey to look at the App Paths registry key. TGGR 9/30/96
  6092.     IF NOT IsNewShell() Then    
  6093.         IF notespath$ <> "" THEN
  6094.  
  6095.             '** Modify User Environment Variables
  6096.             KEY_LOTUS = "ENVIRONMENT"
  6097.             keyval$ = "Path"
  6098.             buf$ = ""
  6099.             IF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, buf$, 256) <> 0 THEN
  6100.             '**  Path key doesn't exist
  6101.                 Desc$ = notespath$
  6102.                 nsize% = len(Desc$) + 1
  6103. '                regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, notespath$, len(notespath$))
  6104.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize%)
  6105.                 IF regStatus& = 0 THEN
  6106.                     gNeedRestart% = TRUE    
  6107.                 END IF
  6108.             ELSE                   
  6109.                 buf$ = TRIM$(buf$)
  6110.                 IF buf$ <> "" THEN
  6111.                     IF LEN(buf$) = 1 THEN
  6112.                         buf$ = ""
  6113.                     ELSE
  6114.                         buf$ = LEFT$(buf$, len(buf$)-1)
  6115.                     END IF
  6116.                     Desc$ = buf$ + ";" + notespath$
  6117.                 ELSE
  6118.                     Desc$ = notespath$
  6119.                 END IF
  6120.  
  6121.                 IF InStr(buf$, notespath$) = 0 OR buf$ = "" THEN
  6122.                     nsize% = len(Desc$) + 1
  6123.                     regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize%)
  6124.                     IF regStatus& = 0 THEN
  6125.                         gNeedRestart% = TRUE    
  6126.                     END IF
  6127.                 END IF
  6128.             END IF
  6129.  
  6130.  
  6131.             '** Modify System Environment Variables
  6132.             KEY_LOTUS = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
  6133.             keyval$ = "Path"
  6134.             buf$ = ""
  6135.             IF Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, KEY_LOTUS, "Path", REG_SZ, buf$, 256) <> 0 THEN
  6136.             '**  Path key doesn't exist
  6137.                 Desc$ = notespath$
  6138.                 nsize% = len(Desc$) + 1
  6139. '                regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, notespath$, len(notespath$))
  6140.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize%)
  6141.                 IF regStatus& = 0 THEN
  6142.                     gNeedRestart% = TRUE    
  6143.                 END IF
  6144.             ELSE                   
  6145.                 buf$ = TRIM$(buf$)
  6146.                 IF buf$ <> "" THEN
  6147.                     IF LEN(buf$) = 1 THEN
  6148.                         buf$ = ""
  6149.                     ELSE
  6150.                         buf$ = LEFT$(buf$, len(buf$)-1)
  6151.                     END IF
  6152.                     Desc$ = buf$ + ";" + notespath$
  6153.                 ELSE
  6154.                     Desc$ = notespath$
  6155.                 END IF
  6156.  
  6157.                 IF InStr(buf$, notespath$) = 0 OR buf$ = "" THEN
  6158.                     nsize% = len(Desc$) + 1
  6159.                     regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, KEY_LOTUS, keyval$, REG_SZ, Desc$, nsize%)
  6160.                     IF regStatus& = 0 THEN
  6161.                         gNeedRestart% = TRUE    
  6162.                     END IF
  6163.                 END IF
  6164.             END IF
  6165.         END IF   
  6166.     End If
  6167. %ENDREM
  6168.  
  6169.  
  6170.     '** Just in case it's needed by the Notes Powerkey, we'll write the Notes Path
  6171.     '** to the App Paths key, too.    This is all we do for NT 4.0
  6172.     APRAddNotesToPathWin95
  6173.  
  6174.  
  6175.     DebugMsg "Function End", "APRAddNotesToPathNT"
  6176.  
  6177. END SUB        'APRAddNotesToPathNT
  6178.  
  6179. '****************************************************************************
  6180. '** SUB APRAddNotesToPathWin95
  6181. '** Purpose:     Add notes to WIN95 App Aath
  6182. '**
  6183. '** Author:      Joe Ghazal
  6184. '** Arguments:     NONE
  6185. '** Returns:       NONE
  6186. '****************************************************************************
  6187. SUB APRAddNotesToPathWin95
  6188. DIM notespath$, buf$, regStatus&, keyval$, KEY_LOTUS$, Desc$, nsize%
  6189.  
  6190.     DebugMsg "Function Start", "APRAddNotesToPathWin95"
  6191.  
  6192.     notespath$ = GetNotesPathFromRegistry()
  6193.  
  6194.     '** We use this function under NT and Win95. If Notes is not in the 
  6195.     '** registry then it can't be a 32 bit version and therefore
  6196.     '** won't work under NT, so don't bother looking for it.
  6197.     IF notespath$ = "" AND WhatPlatform() <> PLATFORM_WINNT Then
  6198.         notespath$ =  GetNotesFromPath() 
  6199.     END IF
  6200.     
  6201.     IF notespath$ <> "" THEN
  6202.         notespath$ = Lot_TrimEndSlash(notespath$)
  6203.         buf$ = ""
  6204.         IF Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + LdString(SID_APR_APREXE), "Path", REG_SZ, buf$, 256) = 0 THEN
  6205.             buf$ = TRIM$(buf$)
  6206.             IF buf$ <> "" THEN
  6207.                 buf$ = LEFT$(buf$, len(buf$)-1)
  6208.  
  6209.                 KEY_LOTUS = "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\"+LdString(SID_APR_APREXE)
  6210.                 keyval$ = "Path"
  6211.                 Desc$ = notespath$  + ";" + buf$
  6212.                 nsize% = len(Desc$)+1
  6213.                 regStatus& = Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize%)
  6214.           END IF
  6215.        END IF
  6216.     END IF   
  6217.  
  6218.     DebugMsg "Function End", "APRAddNotesToPathWin95"
  6219.  
  6220. END SUB        'APRAddNotesToPathWin95
  6221.  
  6222. '*************************************************************************
  6223. '** SUB APRFixupServerDirectory
  6224. '**
  6225. '** Purpose:     Adjusts the source directory for server top level directories
  6226. '**                since CIT doesn't handle these correctly.
  6227. '**                    This function has been superceeded in CIT 2.1
  6228. '**                    
  6229. '** Author:     TLB, modified by JoeG.
  6230. '** Arguments:  The directory symbol and the feature name
  6231. '*************************************************************************
  6232. SUB APRFixupServerDirectory(DirSym$, Feature$)
  6233.     DIM Src$, Dest$, chpt$, Sect$
  6234.  
  6235.     DebugMsg "Function Start", "APRFixupServerDirectory"
  6236.  
  6237.  
  6238.     Src$ = Lot_GetDestDirValueFromInstallIni(DirSym$) + Lot_SetLanguageDirectory(GetSymbolValue(SYM_INSTALL_LANGUAGE$))+"\"
  6239.     Dest$ = GetSymbolValue(DirSym$) '+ Lot_SetLanguageDirectory(GetSymbolValue(SYM_INSTALL_LANGUAGE$))+"\"
  6240.     chpt$ = Lot_GetChapterFromKeyword(Feature$)
  6241.     Sect$ = Lot_GetChapterValStr(chpt$, F_NOTHING)
  6242.     AddSectionFilesToCopyList Sect$, Src$, Dest$
  6243.  
  6244.     DebugMsg "Function End", "APRFixupServerDirectory"
  6245.  
  6246. END SUB        'APRFixupServerDirectory
  6247.  
  6248.  
  6249.  
  6250. '*************************************************************************
  6251. '*************************************************************************
  6252. '*************************************************************************
  6253. '**
  6254. '**        Terry's Functions
  6255. '**
  6256. '*************************************************************************
  6257. '*************************************************************************
  6258. '*************************************************************************
  6259.  
  6260.  
  6261.  
  6262. '*************************************************************************
  6263. '** APRPrintDIRs
  6264. '**
  6265. '** Purpose:     Prints DIR Symbols During install - Debug routine
  6266. '**            
  6267. '** Author:       Terry Ridgway
  6268. '** Arguments:     Text String Description of Calling Location
  6269. '** Returns:       None
  6270. '*************************************************************************
  6271. SUB APRPrintDIRs(FunctionName$)
  6272. DIM boxType&, Message$, Title$
  6273.  
  6274.  
  6275.     '** gDebug is a Global variable and is set in the Initialize sub.
  6276.     IF gDebugDIRs% = FALSE THEN EXIT SUB
  6277.  
  6278.  
  6279.  
  6280.     boxType = 0 + 64 'OK Button + Exclamation Pt
  6281.     Title$ = "Approach Install Debug Output: " + FunctionName$
  6282.  
  6283.     Message$ = _
  6284.      "APRDIR: " + GetSymbolValue ("APRDIR") + Chr(13) +_
  6285.      "APRLANGDIR: " + GetSymbolValue ("APRLANGDIR") + Chr(13) + _
  6286.      Chr(13) + _
  6287.      "APRWORKDIR: " + GetSymbolValue ("APRWORKDIR") + Chr(13) + _
  6288.      Chr(13) + _
  6289.      "APRMASTERSDIR: " + GetSymbolValue ("APRMASTERSDIR") + Chr(13) + _
  6290.      "APRMASTERSLANGDIR: " + GetSymbolValue ("APRMASTERSLANGDIR") + Chr(13) + _
  6291.      Chr(13) + _
  6292.      "APRSAMPLESDIR: " + GetSymbolValue ("APRSAMPLESDIR") + Chr(13) + _
  6293.      "APRSAMPLESLANGDIR: " + GetSymbolValue ("APRSAMPLESLANGDIR") + Chr(13) + _
  6294.      Chr(13) + _
  6295.      "APROBSDIR1: " + GetSymbolValue ("APROBSDIR1") + Chr(13) + _
  6296.      "APROBSDIR2: " + GetSymbolValue ("APROBSDIR2") + Chr(13) + _
  6297.      Chr(13) + _
  6298.      "APRDIRNAME: " + GetSymbolValue ("APRDIRNAME") + Chr(13) + _
  6299.      "APRLANGDIRNAME: " + GetSymbolValue ("APRLANGDIRNAME") + Chr(13) + _
  6300.      Chr(13) + _
  6301.      "APRICONSDIR: " + GetSymbolValue("APRICONSDIR") + Chr(13) + _
  6302.      "APRICONLANGDIR: " + GetSymbolValue("APRICONLANGDIR") + Chr(13) + _
  6303.      "APRICONSCRIPTLANGDIR: " + GetSymbolValue("APRICONSCRIPTLANGDIR") + Chr(13) + _
  6304.      "APRICONMAINBARLANGDIR: " + GetSymbolValue("APRICONMAINBARLANGDIR") + Chr(13) + _
  6305.      Chr(13) + _
  6306.      "APRQMFDIR: " + GetSymbolValue("APRQMFDIR") + Chr(13) + _
  6307.      Chr(13) + _
  6308.      "APRTOURDIR: " + GetSymbolValue("APRTOURDIR") + Chr(13) + _
  6309.      "APRTOURLANGDIR: " + GetSymbolValue("APRTOURLANGDIR") + Chr(13) + _
  6310.      Chr(13) + _
  6311.      "WINDIR: " + GetSymbolValue("WINDIR") + Chr(13) + _
  6312.      "WINSYSDIR: " + GetSymbolValue("WINSYSDIR") + Chr(13) + _
  6313.      "LOTUSUSERDIR: " + GetSymbolValue("LOTUSUSERDIR") + Chr(13) + _
  6314.      "COMPONENTSDIR: " + GetSymbolValue("COMPONENTSDIR")
  6315.  
  6316.     MessageBox Message$, boxType&, Title$
  6317.  
  6318.  
  6319. END SUB        'APRPrintDIRs
  6320.  
  6321.  
  6322. '*************************************************************************
  6323. '** GetPreviousMastersDir() as STRING
  6324. '**
  6325. '** Purpose:     Returns the previous SmartMasters directory for use with the
  6326. '**              Backup SMasters function.
  6327. '**            
  6328. '** Author:        Terry Ridgway
  6329. '** Arguments:     None
  6330. '** Returns:       String Value for the previously installed Approach SmartMasters
  6331. '*************************************************************************
  6332. FUNCTION GetPreviousMastersDir(defaultlang$) AS STRING
  6333.  
  6334. DIM KEY_LOTUS$, keyval$
  6335. DIM gbuf$, nsize&, ret&
  6336.  
  6337.     DebugMsg "Function Start", "GetPreviousMastersDir"
  6338.  
  6339.     IF GetSymbolValue(SYM_NETWORK$) = gSTANDARD$  OR _
  6340.            GetSymbolValue(SYM_NETWORK$) = gNODE$ _
  6341.     THEN
  6342.         ret& = 0
  6343.         nsize& = 256
  6344.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\" + LdString(SID_APR_PROD_VER) + "\Paths\SMasters"
  6345.  
  6346.         if defaultlang$ = "" then
  6347.             keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  6348.         else
  6349.             keyval$ = defaultlang$
  6350.         end if
  6351.  
  6352.         '** Check for the Approach 97 Smasters DIR
  6353.         IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  6354.             '** if this is an automated install, get the directory from the respnse file
  6355.             gbuf$ = TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRMASTERSDIR")) 
  6356.             ret& = 0
  6357.         ELSE
  6358.             IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, KEY_LOTUS$) = 1 THEN 
  6359.                 ret& =  Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6360.             ELSE   
  6361.                 '** Can not find Approach 97, look for Approach 96 key
  6362.                 KEY_LOTUS = "SOFTWARE\Lotus\Approach\4.0\SMastersDir"
  6363.                 IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, KEY_LOTUS$) = 1 THEN 
  6364.                     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6365.                 END IF
  6366.             END IF
  6367.         END IF
  6368.  
  6369.         DebugMsg "PreviousSMastersDir: " + gbuf$, "GetPreviousMastersDir"
  6370.  
  6371.         if ret& = 0 then
  6372.             GetPreviousMastersDir = gbuf$
  6373.         else
  6374.             GetPreviousMastersDir = ""
  6375.         end if
  6376.     End if
  6377.  
  6378.  
  6379.     DebugMsg "Function End", "GetPreviousMastersDir"
  6380.  
  6381. END FUNCTION    'GetPreviousMastersDir
  6382.  
  6383.  
  6384. '*************************************************************************
  6385. '** GetPreviousWorkDir
  6386. '**
  6387. '** Purpose: Returns the previous Working directory for use with setting
  6388. '**          the DIR for a new install
  6389. '**
  6390. '** Author:    Terry Ridgway
  6391. '** Arguments: None
  6392. '** Returns:   String Value for the previously installed Approach Working DIR
  6393. '*************************************************************************
  6394. FUNCTION GetPreviousWorkDir(defaultlang$, prodno%) AS STRING
  6395.  
  6396. DIM KEY_LOTUS$, keyval$
  6397. DIM gbuf$, nsize&, ret&
  6398.  
  6399.     DebugMsg "Function Start", "GetPreviousWorkDir"
  6400.  
  6401.     '** Don't default to the previous directory if it's a Language install
  6402.     If GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then
  6403.         GetPreviousWorkDir = ""
  6404.         EXIT FUNCTION
  6405.     End If
  6406.  
  6407.  
  6408.     IF GetSymbolValue(SYM_NETWORK$) = gSTANDARD$  OR _
  6409.            GetSymbolValue(SYM_NETWORK$) = gNODE$ _
  6410.     THEN
  6411.         ret& = 0
  6412.         nsize& = 256
  6413.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\" + LdString(SID_APR_PROD_VER) + "\Paths\Work"
  6414.  
  6415.         if defaultlang$ = "" then
  6416.             keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  6417.         else
  6418.             keyval$ = defaultlang$
  6419.         end if
  6420.  
  6421.         '** Check for the Approach 97 Working DIR
  6422.         IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  6423.             '** if this is an automated install, get the directory from the respnse file
  6424.             gbuf$ = TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRWORKDIR")) 
  6425.             ret& = 0
  6426.         ELSE
  6427.             IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, KEY_LOTUS$) = 1 THEN 
  6428.                 ret& =  Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6429.             ELSE   
  6430.                 '** Can not find Approach 97, look for Approach 96 key
  6431.                 KEY_LOTUS = "SOFTWARE\Lotus\Approach\4.0\WorkingDir"
  6432.                 IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, KEY_LOTUS$) = 1 THEN 
  6433.                     ret& =  Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6434.                 END IF
  6435.             END IF
  6436.         END IF
  6437.  
  6438.         DebugMsg "PreviousWorkDir: " + gbuf$, "GetPreviousWorkDir"
  6439.  
  6440.         if ret& = 0 then
  6441.             GetPreviousWorkDir = gbuf$
  6442.         else
  6443.             GetPreviousWorkDir = " "
  6444.         end if
  6445.     End If
  6446.  
  6447.     DebugMsg "Function End", "GetPreviousWorkDir"
  6448.  
  6449. END FUNCTION    'GetPreviousWorkDir
  6450.  
  6451.  
  6452. '*************************************************************************
  6453. '** GetPreviousSamplesDir
  6454. '**
  6455. '** Purpose: Returns the previous Samples directory for use with setting
  6456. '**          the DIR for a new install
  6457. '**
  6458. '** Author:    Terry Ridgway
  6459. '** Arguments: None
  6460. '** Returns:   String Value for the previously installed Approach Samples DIR
  6461. '*************************************************************************
  6462. FUNCTION GetPreviousSamplesDir(defaultlang$) AS STRING
  6463.  
  6464. DIM KEY_LOTUS$, keyval$
  6465. DIM gbuf$, nsize&, ret&
  6466.  
  6467.     DebugMsg "Function Start", "GetPreviousSamplesDir"
  6468.  
  6469.     IF GetSymbolValue(SYM_NETWORK$) = gSTANDARD$  OR _
  6470.            GetSymbolValue(SYM_NETWORK$) = gNODE$ _
  6471.     THEN
  6472.         ret& = 0
  6473.         nsize& = 256
  6474.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\" + LdString(SID_APR_PROD_VER) + "\Paths\Samples"
  6475.  
  6476.         DebugMsg "Samples Registry Key: " + KEY_LOTUS$, "GetPreviousSamplesDir"
  6477.  
  6478.         if defaultlang$ = "" then
  6479.             keyval$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  6480.         else
  6481.             keyval$ = defaultlang$
  6482.         end if
  6483.  
  6484.         '** Check for the Approach 97 Samples DIR
  6485.         IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  6486.             '** if this is an automated install, get the directory from the respnse file
  6487.             gbuf$ = TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRSAMPLESDIR")) 
  6488.             ret& = 0
  6489.         ELSE
  6490.             IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, KEY_LOTUS$) = 1 THEN 
  6491.                 ret& =  Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6492.             ELSE   
  6493.                 '** Can not find Approach 97, look for Approach 96 key
  6494.                 KEY_LOTUS = "SOFTWARE\Lotus\Approach\4.0\SamplesDir"
  6495.                 IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, KEY_LOTUS$) = 1 THEN 
  6496.                     ret& =  Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6497.                 END IF
  6498.             END IF
  6499.         End If
  6500.  
  6501.         DebugMsg "PreviousSampleDir: " + gbuf$, "GetPreviousSamplesDir"
  6502.         
  6503.         if ret& = 0 then
  6504.             GetPreviousSamplesDir = gbuf$
  6505.         else
  6506.             GetPreviousSamplesDir = ""
  6507.         end if
  6508.     End If
  6509.  
  6510.     DebugMsg "Function End", "GetPreviousSamplesDir"
  6511.  
  6512. END FUNCTION    'GetPreviousSamplesDir
  6513.  
  6514. '*************************************************************************
  6515. '** GetPreviousLang
  6516. '**
  6517. '** Purpose: Returns the previously installed language for use with setting
  6518. '**          the DIRs for a new install
  6519. '**
  6520. '** Author:    Terry Ridgway
  6521. '** Arguments: None
  6522. '** Returns:   String Value for the previously installed Approach Language
  6523. '*************************************************************************
  6524. FUNCTION GetPreviousLang() AS STRING
  6525.  
  6526. DIM KEY_LOTUS$, keyval$
  6527. DIM gbuf$, nsize&, ret&
  6528.  
  6529.     DebugMsg "Function Start", "GetPreviousLang"
  6530.  
  6531.     IF GetSymbolValue(SYM_NETWORK$) = gSTANDARD$  OR _
  6532.            GetSymbolValue(SYM_NETWORK$) = gNODE$ _
  6533.     THEN
  6534.         ret& = 0
  6535.         nsize& = 256
  6536.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\" + LdString(SID_APR_PROD_VER) + "\Languages"
  6537.         keyval$ = "Default"
  6538.  
  6539.         '** Check for the Approach 97 Languages
  6540.         IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, KEY_LOTUS$) = 1 THEN 
  6541.             ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6542.         ELSE   
  6543.             '** Can not find Approach 97, look for Approach 96 key
  6544.             KEY_LOTUS = "SOFTWARE\Lotus\Approach\4.0\Languages"
  6545.             IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, KEY_LOTUS$) = 1 THEN 
  6546.                 ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6547.             END IF
  6548.         END IF
  6549.  
  6550.         DebugMsg "PreviousLanguage: " + gbuf$, "GetPreviousLang"
  6551.         
  6552.         if ret& = 0 then
  6553.             GetPreviousLang = gbuf$
  6554.         else
  6555.             GetPreviousLang = ""
  6556.         end if
  6557.     End If
  6558.  
  6559.     DebugMsg "Function End", "GetPreviousLang"
  6560.  
  6561. END FUNCTION    'GetPreviousLang
  6562.  
  6563. '*************************************************************************
  6564. '** GetPreviousQMFDir
  6565. '**
  6566. '** Purpose: Returns the previous QMF directory for use with setting
  6567. '**          the DIR for a new install
  6568. '**
  6569. '** Author:    Terry Ridgway
  6570. '** Arguments: None
  6571. '** Returns:   String Value for the previously installed QMF Initialization 
  6572. '**                file DIR
  6573. '*************************************************************************
  6574. FUNCTION GetPreviousQMFDir(defaultlang$) AS STRING
  6575.  
  6576. DIM KEY_LOTUS$, keyval$
  6577. DIM gbuf$, nsize&, ret&
  6578.  
  6579.     DebugMsg "Function Start", "GetPreviousQMFDir"
  6580.  
  6581.     IF GetSymbolValue(SYM_NETWORK$) = gSTANDARD$  OR _
  6582.            GetSymbolValue(SYM_NETWORK$) = gNODE$ _
  6583.     THEN
  6584.         ret& = 0
  6585.         nsize& = 256
  6586.         KEY_LOTUS = "SOFTWARE\Lotus\Approach\" + LdString(SID_APR_PROD_VER) + "\QMF"
  6587.         keyval$ = "DssPath"
  6588.  
  6589.         '** Check for the Approach 97 Samples DIR
  6590.         IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  6591.             '** if this is an automated install, get the directory from the respnse file
  6592.             gbuf$ = TRIM$(Lot_GetKeyValFromResponseFile("APR", "APRQMFDIR")) 
  6593.             ret& = 0
  6594.         ELSE
  6595.             IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, KEY_LOTUS$) = 1 THEN 
  6596.                 ret& =  Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6597.         '
  6598.         '**     This wasn't part of a 96 install. I'll leave it here so we can test 98/97 later.
  6599.         '    ELSE   
  6600.         '        'Can not find Approach 97, look for Approach 96 key
  6601.         '        KEY_LOTUS = "SOFTWARE\Lotus\Approach\4.0\SamplesDir"
  6602.         '        IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, KEY_LOTUS$) = 1 THEN 
  6603.         '            ret& =  Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, KEY_LOTUS$, keyval$, 0, gbuf$, nsize&) 
  6604.         '        END IF
  6605.             END IF
  6606.         End If
  6607.  
  6608.         if ret& = 0 then
  6609.             GetPreviousQMFDir = gbuf$
  6610.         else
  6611.             GetPreviousQMFDir = ""
  6612.         end if
  6613.     End If
  6614.  
  6615.     DebugMsg "Function End", "GetPreviousQMFDir"
  6616.  
  6617. END FUNCTION    'GetPreviousQMFDir
  6618.  
  6619. '****************************************************************************
  6620. '** SUB APRAddQMFToEnvironmentNT
  6621. '** Purpose:     Add QMF Variable to NT environment
  6622. '**
  6623. '** Author:      Terry Ridgway
  6624. '** Arguments:     NONE
  6625. '** Returns:       NONE
  6626. '****************************************************************************
  6627. SUB APRAddQMFToEnvironmentNT(prodno%, network$)
  6628.     DIM dssdir$, dsspath$, buf$, regStatus&, keyval$, KEY_LOTUS$, Desc$, nsize%   
  6629.  
  6630.     DebugMsg "Function Start", "APRAddQMFToEnvironmentNT"
  6631.  
  6632.        If network$ = gSTANDARD$ THEN
  6633.         dssdir$ = Lot_WhereIsFeature(prodno%, "APRCORE", LdString(SID_APR_APREXE))
  6634.     ELSEIF network$ = gNODE$ THEN
  6635.           dssdir$ = Lot_GetDestDirValueFromInstallIni("APRDIR")
  6636.     END IF
  6637.     
  6638.     dssdir$ = Lot_TrimEndSlash (dssdir$)
  6639.     dsspath$ = GetSymbolValue("APRWORKDIR")
  6640.  
  6641.     DebugMsg "DSSDIR: " + dssdir$ + chr(13) +    "DSSPATH: " + dsspath$, "APRAddQMFToEnvironmentNT"
  6642.  
  6643.  
  6644.     IF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, "ENVIRONMENT", "DSSDIR", REG_SZ, buf$, 256) <> 0 THEN
  6645.     '**  Path key doesn't exist
  6646.         Lot_CreateRegKeyValueEx HKEY_CURRENT_USER, "ENVIRONMENT", "DSSDIR", REG_SZ, dssdir$, len(dssdir$)
  6647.         KEY_LOTUS = "ENVIRONMENT"
  6648.         keyval$ = "DSSDIR"
  6649.         Desc$ = dssdir$
  6650.         nsize% = len(Desc$) + 1
  6651.         regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize%)
  6652.         IF regStatus& = 0 THEN
  6653.             gNeedRestart% = TRUE    
  6654.         END IF
  6655.     END IF
  6656.  
  6657.     IF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, "ENVIRONMENT", "DSSPATH", REG_SZ, buf$, 256) <> 0 THEN
  6658.     '**  Path key doesn't exist
  6659.         Lot_CreateRegKeyValueEx HKEY_CURRENT_USER, "ENVIRONMENT", "DSSPATH", REG_SZ, dsspath$, len(dsspath$)
  6660.         KEY_LOTUS = "ENVIRONMENT"
  6661.         keyval$ = "DSSPATH"
  6662.         Desc$ = dsspath$
  6663.         nsize% = len(Desc$) + 1
  6664.         regStatus& = Lot_CreateRegKeyValueEx (HKEY_CURRENT_USER,KEY_LOTUS, keyval$, REG_SZ,Desc$,nsize%)
  6665.         IF regStatus& = 0 THEN
  6666.             gNeedRestart% = TRUE    
  6667.         END IF
  6668.     END IF
  6669.  
  6670.  
  6671.     DebugMsg "Function End", "APRAddQMFToEnvironmentNT"
  6672.  
  6673. END SUB        'APRAddQMFToEnvironmentNT
  6674.  
  6675. '*************************************************************************
  6676. '** SUB APRDoBackupSmartMasters()
  6677. '**
  6678. '** Purpose: Does the work of backing up currently installed masters
  6679. '**
  6680. '** Author:    Troy Bartlett - Stolen from LWP.LSS
  6681. '** Arguments: NONE
  6682. '** Returns:   NONE
  6683. '*************************************************************************
  6684.  
  6685. SUB APRDoBackupSmartMasters()
  6686. DIM PrevMasters$, NewMasters$, idx%, Master$, OrigMaster$, BackupMaster$
  6687. DIM PrevMasterImg$, NewMasterImg$
  6688.  
  6689.     DebugMsg "Entering Backup SmartMasters Processing", "APRDoBackupSmartMasters"
  6690.  
  6691.     PrevMasters$ = GetPreviousMastersDir(GetPreviousLang())
  6692.     PrevMasters$ = TRIM(PrevMasters$)
  6693.     PrevMasters$ = LEFT$(PrevMasters$, LEN(PrevMasters$)-1)
  6694.     NewMasters$ = GetSymbolValue("APRBACKUPDIR")
  6695.     PrevMasterImg$ = PrevMasters$ + "images"
  6696.     NewMasterImg$ = NewMasters$ + "images"
  6697.  
  6698.     DebugMsg "Previous Masters: " + PrevMasters$, "APRDoBackupSmartMasters"
  6699.     DebugMsg "New Masters: " + NewMasters$, "APRDoBackupSmartMasters"
  6700.  
  6701.     IF DoesDirExist(NewMasters$) THEN
  6702.         FOR idx% = 1 TO 99
  6703.             IF DoesDirExist(NewMasters$ + LTRIM$(STR$(idx%))) = FALSE THEN
  6704.                 NewMasters$ = NewMasters$ + LTRIM$(STR$(idx%)) + "\"
  6705.                 EXIT FOR
  6706.             END IF
  6707.         NEXT
  6708.     END IF
  6709.  
  6710.     IF DoesDirExist(PrevMasters$) AND _
  6711.         NOT DoesDirExist(NewMasters$) _
  6712.     THEN
  6713.         
  6714.         DebugMsg "Creating Directory: " + NewMasters$, "APRDoBackupSmartMasters"
  6715.         
  6716.         CreateDir NewMasters$, cmoNone
  6717.         Master$ = DIR$(PrevMasters$ + "*.*")
  6718.         WHILE Master$ <> ""
  6719.             OrigMaster$ = PrevMasters$ + Master$
  6720.             BackupMaster$ = NewMasters$ + Master$
  6721.  
  6722.             DebugMsg "Previous Master file: " + OrigMaster$, "APRDoBackupSmartMasters"
  6723.             DebugMsg "New Master file: " + BackupMaster$, "APRDoBackupSmartMasters"
  6724.  
  6725.             '**  Per Paul: Just copy, don't remove original
  6726.             CopyFile OrigMaster$, BackupMaster$, cmoNone, 0
  6727.             Master$ = DIR$()
  6728.         WEND
  6729.  
  6730.  
  6731.         '** This section will be needed for Suite 98 over Suite 97
  6732.         'CreateDir NewMasterImg$, cmoNone
  6733.         'Master$ = DIR$(PrevMasterImg$ + "*.*")
  6734.         'WHILE Master$ <> ""
  6735.         '    OrigMaster$ = PrevMasterImg$ + Master$
  6736.         '    BackupMaster$ = NewMasterImg$ + Master$
  6737.         '
  6738.         '    DebugMsg "Previous Master file: " + OrigMaster$, "APRDoBackupSmartMasters"
  6739.         '    DebugMsg "New Master file: " + BackupMaster$, "APRDoBackupSmartMasters"
  6740.         '
  6741.         '    ' Per Paul: Just copy, don't remove original
  6742.         '    CopyFile OrigMaster$, BackupMaster$, cmoNone, 0
  6743.         '    Master$ = DIR$()
  6744.         'WEND
  6745.  
  6746.     END IF
  6747.  
  6748.     DebugMsg "Function End", "APRDoBackupSmartMasters"
  6749.  
  6750. END SUB        'APRDoBackupSmartMasters
  6751.  
  6752. '*************************************************************************
  6753. '** DebugMsg(msg$, title$)
  6754. '**
  6755. '** Purpose:     Prints DIR Symbols During install - Debug routine
  6756. '**            
  6757. '** Author:       Terry Ridgway
  6758. '** Arguments:     msg$           - Message to be displayed
  6759. '**                location$     - Text String Description of Calling Location
  6760. '** Returns:       None
  6761. '*************************************************************************
  6762. SUB DebugMsg(msg$, location$)
  6763.     
  6764.     DIM boxType&, Message$, Title$
  6765.  
  6766.  
  6767.     '** gDebug is a Global variable and is set in the Initialize sub.
  6768.     IF gDebugMsg% = FALSE THEN EXIT SUB
  6769.  
  6770.  
  6771.  
  6772.     boxType = 0 + 64 'OK Button + Exclamation Pt
  6773.     Title$ = "Approach Install Debug Output: " + location$
  6774.  
  6775.  
  6776.     MessageBox msg$, boxType&, Title$
  6777.  
  6778. END SUB        'DebugMsg
  6779.  
  6780.  
  6781. '*************************************************************************
  6782. '** APRRemoveProdDirs()
  6783. '**
  6784. '** Purpose:     Remove the Approach 3.0x directories if the option to remove
  6785. '**                the product was selected by the user.
  6786. '**            
  6787. '** Author:       Terry Ridgway
  6788. '** Arguments:     None
  6789. '** Returns:       None
  6790. '*************************************************************************
  6791. SUB APRRemoveProdDirs()
  6792.  
  6793.     DIM Apr3Dir$, DirArray$(1 to 25), ArraySize%, n%
  6794.  
  6795.     DebugMsg "Function Start", "APRRemoveProdDirs"
  6796.  
  6797.     Apr3Dir$ = GetSymbolValue("APROBSDIR1")
  6798.     ArraySize% = 25
  6799.  
  6800.     '** Initialize the Directory Array with all the directories we need to remove
  6801.     DirArray$(1)    = Apr3Dir$ + "tutorial\\icons\\workico"
  6802.     DirArray$(2)    = Apr3Dir$ + "tutorial\\icons\\previco"
  6803.     DirArray$(3)    = Apr3Dir$ + "tutorial\\icons\\reptico"
  6804.     DirArray$(4)    = Apr3Dir$ + "tutorial\\icons\\oldicons"
  6805.     DirArray$(5)    = Apr3Dir$ + "tutorial\\icons\\findico"
  6806.     DirArray$(6)    = Apr3Dir$ + "tutorial\\icons\\desgnico"
  6807.     DirArray$(7)    = Apr3Dir$ + "tutorial\\icons\\crossico"
  6808.     DirArray$(8)    = Apr3Dir$ + "tutorial\\icons\\browsico"
  6809.     DirArray$(9)    = Apr3Dir$ + "tutorial\\icons"
  6810.     DirArray$(10)    = Apr3Dir$ + "tutorial\\files"
  6811.     DirArray$(11)    = Apr3Dir$ + "tutorial"
  6812.     DirArray$(12)    = Apr3Dir$ + "samples\\prospect"
  6813.     DirArray$(13)    = Apr3Dir$ + "samples\\projmgnt"
  6814.     DirArray$(14)    = Apr3Dir$ + "samples\\manufact"
  6815.     DirArray$(15)    = Apr3Dir$ + "samples"
  6816.     DirArray$(16)    = Apr3Dir$ + "icons\\workico"
  6817.     DirArray$(17)    = Apr3Dir$ + "icons\\previco"
  6818.     DirArray$(18)    = Apr3Dir$ + "icons\\reptico"
  6819.     DirArray$(19)    = Apr3Dir$ + "icons\\oldicons"
  6820.     DirArray$(20)    = Apr3Dir$ + "icons\\findico"
  6821.     DirArray$(21)    = Apr3Dir$ + "icons\\desgnico"
  6822.     DirArray$(22)    = Apr3Dir$ + "icons\\crossico"
  6823.     DirArray$(23)    = Apr3Dir$ + "icons\\browsico"
  6824.     DirArray$(24)    = Apr3Dir$ + "icons"
  6825.     DirArray$(25)    = Apr3Dir$
  6826.  
  6827.  
  6828.     '** Remove the directories
  6829.     For n = 1 to ArraySize%
  6830.         RemoveDir DirArray$(n), cmoNone
  6831.     Next n
  6832.  
  6833.  
  6834.     DebugMsg "Function End", "APRRemoveProdDirs"
  6835.  
  6836. END SUB        'APRRemoveProdDirs
  6837.                           
  6838.  
  6839.  
  6840. '**********************************************************************
  6841. '**  SUB APRWriteToAUTOEXEC
  6842. '**
  6843. '**  This function writes the Notes 3.x path to the Autoexec.BAT file
  6844. '**  used during Win95 installs because the App Paths section of the
  6845. '**  registry is not currently being used by dbnotes.dll and it needs
  6846. '**  this in order to find it's DLLs.
  6847. '**
  6848. '**
  6849. '***********************************************************************
  6850. SUB APRWriteToAUTOEXEC
  6851.  
  6852.     DIM fauto%, ftemp%, text$, dspc%, inpath%, notespath$, pathadded%
  6853.     DIM ChangeMsg$, MsgTitle$, PathWrite$, Created%, added%
  6854.  
  6855.     DebugMsg "Function Start", "APRWriteToAUTOEXEC"
  6856.  
  6857.     if WhatPlatform() = PLATFORM_WINNT Then
  6858.         '** We should only be calling this function from Win95 installs
  6859.            '** which have 16 bit Lotus Notes installed.
  6860.            EXIT SUB
  6861.     End If
  6862.  
  6863.  
  6864.     notespath$ = GetNotesFromPath()
  6865.     PathWrite$ = "Set Path=" + notespath$ + ";%PATH%"
  6866.     ChangeMsg$ = LdString(SID_APR_AUTOEXEC_CHANGE)
  6867.     MsgTitle$ = LdString(SID_APR_PROD_NAME) + " Install"
  6868.     inpath% = FALSE
  6869.     added% = FALSE
  6870.     Created% = FALSE
  6871.  
  6872.  
  6873.     '** If there is no Autoexec file we need to create one.
  6874.     If Lot_DoesFileExist("c:\autoexec.bat") = 0 Then
  6875.         fauto% = Freefile()
  6876.         Open "c:\autoexec.bat" For Output As fauto%
  6877.         Print #fauto%, PathWrite$
  6878.         Created% = TRUE
  6879.         Close #fauto%
  6880.         gNeedRestart% = True
  6881.     End If
  6882.  
  6883.     '** Otherwise we need to add the Notes Path to the PATH Variable of the existing file.
  6884.     If Created% = FALSE Then
  6885.  
  6886.  
  6887.         '** Backup the Autoexec.bat file
  6888.         'Filecopy "c:\autoexec.bat", "c:\autoexec.xxx" 
  6889.         '** Everything seems to be working here now, so we don't need this first backup.
  6890.         
  6891.         '** Open the autoexec.bat file
  6892.         fauto% = Freefile()
  6893.         Open "c:\autoexec.bat" For Input As fauto%
  6894.         
  6895.         '** Open a temp file for copying the adjusted contents of autoexec
  6896.         ftemp% = Freefile()
  6897.         Open "c:\temp0000.bat" For Output As ftemp%
  6898.         
  6899.         
  6900.         While (Not Eof(fauto%))    
  6901.             Line Input #fauto%, text$
  6902.             text$ = Ucase$(text$)
  6903.             
  6904.             '** Check for PATH line in autoexec
  6905.             If Instr(text$, "PATH") >0 Then
  6906.                 '** First Check to see if we need to do the addition.
  6907.                 If(Instr(text$, notespath$)) > 0 Then
  6908.                     '** Make sure the line isn't REM'd out.
  6909.                     If(Instr(text$, "REM")) = 0 Then
  6910.                         inpath% = True
  6911.                     End If
  6912.                 End If
  6913.             End If
  6914.             
  6915.             '** Write the lines out to the temp file.
  6916.             Print #ftemp%, text$
  6917.         Wend
  6918.         
  6919.         '** If users didn't have Notes in any PATH lines add to the end of the file.
  6920.         If inpath% <> True Then
  6921.             Print #ftemp%, PathWrite$
  6922.             added% = TRUE
  6923.         End If
  6924.  
  6925.         '** Close our open files
  6926.         Close #ftemp%
  6927.         Close #fauto%
  6928.     
  6929.     End If
  6930.            
  6931.     
  6932.    '** if we had to make a path change, backup the current file and rename our temp
  6933.     '** otherwise delete the temp.
  6934.     '** Tell the user if we made a change
  6935.     If added% = TRUE Then
  6936.         Filecopy "c:\autoexec.bat",  "c:\autoexec.lts"
  6937.         Filecopy "c:\temp0000.bat",  "c:\autoexec.bat"
  6938.         Kill "c:\temp0000.bat"
  6939.         Messagebox ChangeMsg$, 0 + 48, MsgTitle$
  6940.         gNeedRestart% = True
  6941.     Else
  6942.         If Lot_DoesFileExist("c:\temp0000.bat") <> 0 Then
  6943.             Kill "c:\temp0000.bat"
  6944.        End If
  6945.     End If
  6946.     
  6947.     
  6948.  
  6949.     DebugMsg "Function End", "APRWriteToAUTOEXEC"
  6950.  
  6951. END SUB        'APRWriteToAUTOEXEC
  6952.  
  6953.  
  6954.  
  6955. '*************************************************************************
  6956. '** Function APRIsAdmin()
  6957. '**
  6958. '** Purpose:     To Determine if a user has administrator rights on NT
  6959. '**
  6960. '**            
  6961. '** Author:       Terry Ridgway - Adapted from Logo Requirements Handbook
  6962. '** Arguments:     None
  6963. '** Returns:       True if User has Admin Rights, False if not.
  6964. '*************************************************************************
  6965. FUNCTION APRIsAdmin() AS INTEGER
  6966.  
  6967.     DIM hSC&
  6968.  
  6969.     DebugMsg "Starting User Rights Check", "APRIsAdmin"
  6970.  
  6971.     '** Try an Admin Privilege API. If it works return TRUE
  6972.     '** else return FALSE
  6973.  
  6974.     hSC = OpenSCManager("", "ServicesActive", GENERIC_READ + GENERIC_WRITE + GENERIC_EXECUTE)
  6975.  
  6976.     If hSC <> 0 Then
  6977.         CloseServiceHandle(hSC)
  6978.         APRIsAdmin = TRUE
  6979.         DebugMsg "User Has Admin Rights", "APRIsAdmin"
  6980.     Else
  6981.         APRIsAdmin = FALSE
  6982.         DebugMsg "User Does NOT Have Admin Rights", "APRIsAdmin"
  6983.     End If
  6984.  
  6985.     DebugMsg "Finished User Rights Check", "APRIsAdmin"
  6986.  
  6987.     
  6988. END FUNCTION    'APRIsAdmin
  6989.  
  6990.  
  6991.  
  6992.  
  6993. '*************************************************************************
  6994. '** Function APRSMInst()
  6995. '**
  6996. '** Purpose:     To Determine if a user has selected to install any SmartMasters
  6997. '**
  6998. '**            
  6999. '** Author:       Terry Ridgway
  7000. '** Arguments:     None
  7001. '** Returns:       True if User is installing SmartMasters, False if not.
  7002. '*************************************************************************
  7003. FUNCTION APRSMInst() AS Integer
  7004.  
  7005.     Dim SMInst%
  7006.  
  7007.     DebugMsg "Function Start", "APRSMInst"
  7008.  
  7009.     SMInst% = 0
  7010.     '** if the user did not select any SmartMasters, then they
  7011.     '** should not get the option to change this directory
  7012.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER1LANGEN"))
  7013.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER2LANGEN"))
  7014.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER3LANGEN"))
  7015.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER5LANGEN"))
  7016.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER6LANGEN"))
  7017.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER7LANGEN"))
  7018.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER8LANGEN"))
  7019.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER9LANGEN"))
  7020.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER10LANGEN"))
  7021.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER11LANGEN"))
  7022.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER12LANGEN"))
  7023.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER13LANGEN"))
  7024.     SMInst% = SMInst% OR CINT(FIsKeywordinCopyList("APRSMARTMASTER14LANGEN"))
  7025.  
  7026.  
  7027.     APRSMInst = SMInst%
  7028.  
  7029.     DebugMsg "Function End", "APRSMInst"
  7030.  
  7031. END FUNCTION    'APRSMInst()
  7032.  
  7033.  
  7034. '*************************************************************************
  7035. '** SUB APR_TurnOnDummyScriptFiles()
  7036. '**
  7037. '** Purpose:     Add Dummy Script help files to the copy list if not
  7038. '**                installing the real ones.
  7039. '** Author:     Terry Ridgway
  7040. '** Arguments:     none
  7041. '**                
  7042. '** Returns:    None
  7043. '*************************************************************************
  7044. SUB APR_TurnOnDummyScriptFiles()
  7045.     
  7046.     DIM aprdirpath$, chptname$, notused%, aprchpt$
  7047.  
  7048.     DebugMsg "Function Start", "APR_TurnOnDummyScriptFiles"
  7049.  
  7050.     aprdirpath$ = GetSymbolValue("APRDIR")
  7051.     chptname$ = Lot_GetChapterFromKeyword("APRDUMMYSCRIPTHELP")
  7052.     aprchpt$ = Lot_GetChapterFromKeyword("APRCORE")
  7053.  
  7054.  
  7055.     If (Lot_GetChapterValInt(aprchpt$, F_INOROUT) = 1) Then
  7056.         If (DoesFileExist(aprdirpath$ + "lasn50" + GetSymbolValue(SYM_INSTALL_LANGUAGE$) + ".hlp", femExists) = FALSE) Then
  7057.             DebugMsg "Approach Scripting Help File doesn't exist. Adding to CopyList", "APR_TurnOnDummyScriptFiles"
  7058.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  7059.         Else
  7060.             DebugMsg "Approach Scripting Help File exists. NOT Added to CopyList", "APR_TurnOnDummyScriptFiles"
  7061.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  7062.         End if
  7063.     End If
  7064.  
  7065.     DebugMsg "Function End", "APR_TurnOnDummyScriptFiles"
  7066.  
  7067. END SUB     'APR_TurnOnDummyScriptFiles
  7068.  
  7069.  
  7070. '*************************************************************************
  7071. '** SUB APR_RenameDummyScriptFiles()
  7072. '**
  7073. '** Purpose:     Rename Dummy script help files after copying them
  7074. '** Author:     Terry Ridgway
  7075. '** Arguments:     None
  7076. '**                
  7077. '** Returns:    None
  7078. '*************************************************************************
  7079. SUB APR_RenameDummyScriptFiles()
  7080.     
  7081.     DIM aprdirpath$, compnentdirpath$, aprschlp$, lslnhlp$, lsenhlp$
  7082.  
  7083.     DebugMsg "Function Start", "APR_RenameDummyScriptFiles"
  7084.  
  7085.     aprdirpath$ = GetSymbolValue("APRDIR")
  7086.     compnentdirpath$ = GetSymbolValue(SYM_COMPONENTSDIR$)  
  7087.  
  7088.     aprschlp$ = aprdirpath$ + "lasn50" + GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  7089.     lslnhlp$ = compnentdirpath$ + "lsln31" + GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  7090.     lsenhlp$ = compnentdirpath$ + "lsen31" + GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  7091.  
  7092.  
  7093.     If (DoesFileExist(aprschlp$ + ".hlp", femExists) = FALSE) Then
  7094.         FileCopy aprdirpath$ + "nolas.hlp", aprschlp$ + ".hlp"
  7095.         FileCopy aprdirpath$ + "nolas.cnt", aprschlp$ + ".cnt"
  7096.         Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, aprschlp$ + ".hlp"
  7097.         Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, aprschlp$ + ".cnt"
  7098.         Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, aprschlp$ + ".gid"
  7099.     End if
  7100.  
  7101.     If     GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  7102.             minisuite123% <> TRUE _
  7103.     Then
  7104.         If (DoesFileExist(lslnhlp$ + ".hlp", femExists) = FALSE) Then
  7105.             FileCopy aprdirpath$ + "nolas.hlp", lslnhlp$ + ".hlp"
  7106.             'APRChangeTheDate lslnhlp$ + ".hlp"
  7107.             Lot_RegisterObject "WIN32SHRLOTUSSCRIPTPRG", UNIN_CLASS_FILE$, lslnhlp$ + ".hlp"
  7108.             Lot_RegisterObject "WIN32SHRLOTUSSCRIPTPRG", UNIN_CLASS_FILE$, lslnhlp$ + ".gid"
  7109.         End if
  7110.  
  7111.         If (DoesFileExist(lsenhlp$ + ".hlp", femExists) = FALSE) Then
  7112.             FileCopy aprdirpath$ + "nolas.hlp", lsenhlp$ + ".hlp"
  7113.             'APRChangeTheDate lsenhlp$ + ".hlp"
  7114.             Lot_RegisterObject "WIN32SHRLOTUSSCRIPTPRG", UNIN_CLASS_FILE$, lsenhlp$ + ".hlp"
  7115.             Lot_RegisterObject "WIN32SHRLOTUSSCRIPTPRG", UNIN_CLASS_FILE$, lsenhlp$ + ".gid"
  7116.         End if
  7117.     End if
  7118.  
  7119.     RemoveFile aprdirpath$ + "nolas.hlp", cmoForce
  7120.     RemoveFile aprdirpath$ + "nolas.cnt", cmoForce
  7121.  
  7122.     DebugMsg "Function End", "APR_RenameDummyScriptFiles"
  7123.  
  7124. END SUB     'APR_RenameDummyScriptFiles
  7125.  
  7126.  
  7127.  
  7128. '*************************************************************************
  7129. '** FUNCTION APRGetSystemCountry()
  7130. '**
  7131. '** Purpose:     Retrieve the Country setting from Windows.
  7132. '** Author:     Terry Ridgway
  7133. '** Arguments:     None
  7134. '**                
  7135. '** Returns:    UPPER CASE String Value of Country Name.
  7136. '*************************************************************************
  7137. FUNCTION APRGetSystemCountry() As String
  7138.     Dim ret As Long    
  7139.     Dim buf As String * 255
  7140.     Dim sSysCountry As String
  7141.     Dim llen As Long
  7142.     
  7143.     DebugMsg "Function Start", "APRGetSystemCountry"
  7144.  
  7145.     llen = 255
  7146.     
  7147.     ret = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SENGCOUNTRY, buf$, llen)
  7148.  
  7149.     'if the function fails it returns zero, otherwise ret contains the number
  7150.     'of characters copied to the buffer.
  7151.     If ret = 0 then
  7152.         sSysCountry$ = "Unknown"
  7153.     Else
  7154.         sSysCountry$ = Trim$(buf$)
  7155.         sSysCountry$ = Left$(sSysCountry$, ret - 1)
  7156.     End If
  7157.  
  7158.  
  7159.     APRGetSystemCountry = UCase$(sSysCountry$)
  7160.  
  7161.  
  7162.     DebugMsg "System Country Setting:" & UCase$(sSysCountry$), "APRGetSystemCountry"
  7163.     DebugMsg "Function End", "APRGetSystemCountry"
  7164.  
  7165. END FUNCTION     'APRGetSystemCountry
  7166.  
  7167.  
  7168.  
  7169. '*************************************************************************
  7170. '** SUB APRChangeTheDate(fn as String)
  7171. '**
  7172. '** Purpose:     Change the date stamp on the specified file.
  7173. '**                The idea is to retro date our dummy scripting help files
  7174. '**                so that another product will overwrite them with real ones
  7175. '**                which may have older dates than our dummies.
  7176. '**
  7177. '** Author:     Terry Ridgway
  7178. '** Arguments:     fully qualified path and filename to be changed.
  7179. '**                
  7180. '** Returns:    None
  7181. '*************************************************************************
  7182. SUB APRChangeTheDate(fnpath as String)
  7183.  
  7184.     DIM windir$, res%, Platform%
  7185.     DIM progmanexe$
  7186.    
  7187.     windir$ = GetWindowsDir()
  7188.  
  7189.     '** Does the specified file exist?   
  7190.     If DoesFileExist (fnpath$, femExists) = 1  Then
  7191.  
  7192.         Platform% = WhatPlatform()
  7193.  
  7194.         '** Determine the operating system and location of progman.exe
  7195.         If Platform% = PLATFORM_WINNT Then
  7196.             progmanexe$ = windir$ + "SYSTEM32\" + "progman.exe"
  7197.         Else 
  7198.             progmanexe$ = windir$ + "progman.exe"
  7199.         End If
  7200.  
  7201.         '** Change the date/time stamp on the specified file to match progman.exe
  7202.        '    res% = filedate ( progmanexe$, fnpath$ )
  7203.     End If
  7204.  
  7205.  
  7206. END SUB
  7207.  
  7208.  
  7209. '*************************************************************************
  7210. '** SUB APRTurnOnODBCSection()
  7211. '**
  7212. '** Purpose:     Add ODBC_SHRCNT to the copy list when installing ODBC.
  7213. '**                as it's possible to turn on ODBC without this required section
  7214. '** Author:     Terry Ridgway
  7215. '** Arguments:     none
  7216. '**                
  7217. '** Returns:    None
  7218. '*************************************************************************
  7219. SUB APRTurnOnODBCSection(network as String)
  7220.     
  7221.     DIM chptname$, shrchptname$, notused%, orcchptname$, orschptname$
  7222.     DIM ssschptname$, sscchptname$,    ss6chptname$, sybchptname$, in5chptname$, in7chptname$
  7223.  
  7224.  
  7225.     DebugMsg "Function Start", "APRTurnOnODBCSection"
  7226.  
  7227.     chptname$ = Lot_GetChapterFromKeyword("APRODBC")
  7228.     shrchptname$ = Lot_GetChapterFromKeyword("APRODBC_SHRCNT")
  7229.  
  7230.     orcchptname$ = Lot_GetChapterFromKeyword("APRORACLECOMMON")
  7231.     orschptname$ = Lot_GetChapterFromKeyword("APRORACLE_SHRCNT")
  7232.     ssschptname$ = Lot_GetChapterFromKeyword("APRSQLSERVER4_SHRCNT")
  7233.     sscchptname$ = Lot_GetChapterFromKeyword("APRSQLSERVER4COMMON")
  7234.     ss6chptname$ = Lot_GetChapterFromKeyword("APRSQLSERVER6_SHRCNT")
  7235.     sybchptname$ = Lot_GetChapterFromKeyword("APRSYBASE_SHRCNT")
  7236.     in5chptname$ = Lot_GetChapterFromKeyword("APRINFORMIX5_SHRCNT")
  7237.     in7chptname$ = Lot_GetChapterFromKeyword("APRINFORMIX7_SHRCNT")
  7238.  
  7239.  
  7240.     If (Lot_GetChapterValInt(chptname$, F_INOROUT) = 1) OR _
  7241.         (Lot_GetChapterValInt(orcchptname$, F_INOROUT) = 1) OR _
  7242.         (Lot_GetChapterValInt(orschptname$, F_INOROUT) = 1) OR _
  7243.         (Lot_GetChapterValInt(ssschptname$, F_INOROUT) = 1) OR _
  7244.         (Lot_GetChapterValInt(sscchptname$, F_INOROUT) = 1) OR _
  7245.         (Lot_GetChapterValInt(ss6chptname$, F_INOROUT) = 1) OR _
  7246.         (Lot_GetChapterValInt(sybchptname$, F_INOROUT) = 1) OR _
  7247.         (Lot_GetChapterValInt(in5chptname$, F_INOROUT) = 1) OR _
  7248.         (Lot_GetChapterValInt(in7chptname$, F_INOROUT) = 1) _ 
  7249.     Then
  7250.         DebugMsg "Approach Shared ODBC Files Added to CopyList", "APRTurnOnODBCSection"
  7251.         notused% = Lot_SetChapterFilesInCopyListInOrOut (shrchptname$, 1)
  7252.  
  7253.         'During a Node install it is possible that individual drivers can be selected
  7254.         'from the Node Features dialog without the ODBC drives. This line is added
  7255.         'to take care of that problem.
  7256.         If network$ = gNODE$ Then
  7257.             notused% = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  7258.         End If
  7259.  
  7260.     Else
  7261.         DebugMsg "Approach Shared ODBC Files NOT Added to CopyList", "APRTurnOnODBCSection"
  7262.  
  7263.         '** don't turn them off, there's really no reason they'd be on when not wanted.
  7264.         'notused% = Lot_SetChapterFilesInCopyListInOrOut (shrchptname$, 0)
  7265.     End if
  7266.  
  7267.  
  7268.     DebugMsg "Function End", "APRTurnOnODBCSection"
  7269.  
  7270. END SUB     'APRTurnOnODBCSection
  7271.  
  7272.  
  7273.  
  7274. '*************************************************************************
  7275. '** SUB APRHideGalleryFiles()
  7276. '**
  7277. '** Purpose:     Rename files so that they are hidden from the user.
  7278. '**                This gives us the trial period for the Evaluation CD
  7279. '** Author:     Terry Ridgway - stolen from SUIT.LSS
  7280. '** Arguments:     none
  7281. '**                
  7282. '** Returns:    None
  7283. '*************************************************************************
  7284. SUB APRHideGalleryFiles()
  7285.  
  7286.  
  7287.     'TimeBomb specific renaming and file dateing calls
  7288.     DIM windir$, progmanpath$, updateprogman%
  7289.     DIM progvermajor, progverminor
  7290.     DIM versionstring$, newerver
  7291.     DIM progmantime$, progyear, progyearstr$
  7292.     DIM progmonth, progmonthstr$
  7293.     DIM progday, progdaystr$
  7294.     DIM proghour, proghourstr$
  7295.     DIM progminute, progminutestr$
  7296.     DIM progsecond, progsecondstr$
  7297.     DIM fstampdate$, fstamptime$, res%, Platform%
  7298.     DIM numb%, progmanexe$
  7299.            
  7300.     updateprogman% = 1
  7301.  
  7302.     windir$ = GetWindowsDir()
  7303.     progmanpath$ = windir$ + "Progman.dll"
  7304.  
  7305.    
  7306.     'the Approach TimeBomb has never been installed
  7307.     If DoesFileExist (progmanpath$, femExists) = 1 Then
  7308.  
  7309.         versionstring$ = GetVersionOfFile(progmanpath$)
  7310.         progvermajor = GetVersionNthField(versionstring$,3)
  7311.         progvermajor = int(progvermajor)
  7312.  
  7313.         progverminor = GetVersionNthField(versionstring$,4)
  7314.         progverminor = int(progverminor)
  7315.  
  7316.         'update the Progman.dll only if it is an earlier version
  7317.         If progvermajor > 5 Then 
  7318.             updateprogman% = 0
  7319.         ElseIf progvermajor = 5 AND progverminor >= 0 Then  
  7320.             updateprogman% = 0
  7321.         End If
  7322.     End If
  7323.  
  7324.     ' do the actual updating and time stamping
  7325.     If updateprogman% = 1 Then
  7326.         FileCopy windir$ + "ltsmkt03.dll", progmanpath$
  7327.         Platform% = WhatPlatform()
  7328.         If Platform% = PLATFORM_WINNT Then
  7329.             progmanexe$ = windir$ + "SYSTEM32\" + "progman.exe"
  7330.         Else 
  7331.             progmanexe$ = windir$ + "progman.exe"
  7332.         End If
  7333.  
  7334.         res% = filedate ( progmanexe$, progmanpath$ )
  7335.     end if
  7336.  
  7337.     RemoveFile windir$ + "ltsmkt03.dll", cmoForce
  7338.  
  7339.  
  7340. END SUB        'APRHideGalleryFiles
  7341.  
  7342.  
  7343. '*************************************************************************
  7344. '** FUNCTION RegisterTypeLib( typelibname as string, helpdir as string ) as long
  7345. '**
  7346. '** Purpose:     Completes the TypeLib registration that is missed by CIT
  7347. '**                
  7348. '** Author:     
  7349. '** Arguments:     TypeLibrary Name and Help Directory location
  7350. '**                
  7351. '** Returns:    Return from the WINAPI registration functions
  7352. '*************************************************************************
  7353. FUNCTION APRRegisterTypeLib( typelibname as string, helpdir as string ) as long
  7354.     Dim typlib As Long
  7355.     Dim hresult As Long
  7356.     typlib = 0
  7357.     
  7358.     hresult = LoadTypeLibrary( typelibname, typlib)
  7359.     If hresult = 0 Then
  7360.         hresult = RegisterTypeLibrary( typlib, typelibname, helpdir)
  7361.     End If
  7362.  
  7363.     APRRegisterTypeLib = hresult
  7364.     
  7365. End FUNCTION
  7366.  
  7367.  
  7368. '*************************************************************************
  7369. '** Sub WriteDialSettingstoApproachINI()
  7370. '**
  7371. '** Purpose:     Writes the missing Dialer settings to the Approach.ini file
  7372. '**                If the entry already exists it is not written.
  7373. '**                
  7374. '** Author:     Terry Ridgway
  7375. '** Arguments:     None
  7376. '**                
  7377. '** Returns:    None
  7378. '*************************************************************************
  7379. SUB WriteDialSettingstoApproachINI()
  7380.  
  7381.     
  7382.     DIM sSection As String
  7383.     DIM ret As Integer
  7384.     DIM sIniFile As String
  7385.     DIM notused As Integer
  7386.     DIM windir$, res%, Platform%
  7387.     
  7388.     sIniFile$ = "Approach.ini"
  7389.     sSection$ = "Autodialer"
  7390.     windir$ = GetWindowsDir()
  7391.  
  7392.  
  7393.     '** Does the specified file exist?   
  7394.     If DoesFileExist (windir$ & sIniFile$, femExists) = 0 Then
  7395.         Lot_RegisterObject "APRCORE", UNIN_CLASS_FILE$, windir$ & sIniFile$
  7396.     End If
  7397.  
  7398.     'Only write the options if they're not already in the INI file.
  7399.     ret = GetPrivateProfileInt(sSection$, "LongDist", 999, sIniFile$)
  7400.     If ret = 999 Then
  7401.         notused = WritePrivateProfileString(sSection$, "LongDist", "1", sIniFile$)
  7402.     End If
  7403.     
  7404.     ret = GetPrivateProfileInt(sSection$, "LdThresh", 999, sIniFile$)
  7405.     If ret = 999 Then
  7406.         notused = WritePrivateProfileString(sSection$, "LdThresh", "8", sIniFile$)
  7407.     End If
  7408.     
  7409.  
  7410. End SUB
  7411.  
  7412.