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