home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 January / pcwk_01_1999_B.iso / Lotus123 / SPANISH / INSTALL1.DSK / 123.LSS next >
Text File  |  1997-01-23  |  179KB  |  4,764 lines

  1. ''/*********************************************************************
  2. ''
  3. ''   Module Name:   123.lss
  4. ''
  5. ''   Module Code:   COMINST
  6. ''
  7. ''   Author:              
  8. ''
  9. ''   Creation Date:      
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1991
  12. ''   Description: 
  13. ''  
  14. ''
  15. ''   Additional authors:
  16. ''
  17. ''   Change History:
  18. ''   $Log:   //bluebird/logfiles/GEMINI/cisdk/123/123.lss  $
  19. '' 
  20. ''    Rev 1.213   23 Jan 1997 16:42:18   jlu
  21. '' SPR 31298.
  22. '' 
  23. ''    Rev 1.212   05 Dec 1996 08:58:24   mhishinu
  24. '' Fixed DBCS string truncation problem. (SPR #29486)
  25. '' 
  26. ''    Rev 1.211   01 Dec 1996 00:53:24   mhishinu
  27. '' Changed the disk space requirements, 32MB for default, 25MB for minimum.
  28. ''  (SPR #8694)
  29. '' 
  30. ''    Rev 1.210   20 Nov 1996 08:41:06   jsgrant
  31. '' 
  32. '' Checking in correct version of previous fix.
  33. '' 
  34. ''    Rev 1.209   19 Nov 1996 17:11:14   jsgrant
  35. '' SPR 28047. Added NEW_lotRegisterTypeLib call for 123 type library.
  36. '' CR=Jeannie Lu
  37. '' 
  38. ''    Rev 1.208   05 Nov 1996 16:57:02   jlu
  39. '' SPR 27733
  40. '' 
  41. ''    Rev 1.207   01 Nov 1996 16:28:02   jlu
  42. '' Fixed SPR 27319, not use SID_123_PROGDIR to determine 123r5 path.
  43. '' 
  44. ''    Rev 1.206   16 Oct 1996 15:38:32   amello
  45. '' No longer need 123wcmpt.grg
  46. '' 
  47. ''    Rev 1.205   11 Oct 1996 15:46:30   jlu
  48. '' Turn all node options visiable in Node.
  49. '' 
  50. ''    Rev 1.204   09 Oct 1996 20:12:16   mhishinu
  51. '' Modified for the LOTUS.BCF file.
  52. '' 
  53. ''    Rev 1.203   09 Oct 1996 11:23:52   jlu
  54. '' Check for embedded running Gemini.
  55. '' 
  56. ''    Rev 1.202   08 Oct 1996 20:20:28   jlu
  57. '' Added readme.wri icons.
  58. '' 
  59. ''    Rev 1.201   08 Oct 1996 13:22:20   amello
  60. '' Added new function get_and_set_registry.  This function uses new version
  61. '' of regspt.dll.  The new version allows us to use the 123w97.grg file to
  62. '' update the registry for the DBASE drivers.
  63. '' 
  64. ''    Rev 1.200   05 Oct 1996 14:20:28   jlu
  65. '' Added HCU\SW\L\123\97.0\Paths\Personal
  66. '' 
  67. ''    Rev 1.199   05 Oct 1996 13:13:58   jlu
  68. '' Modified WriteMapRegFor123 to handle MLC *.tvc files.
  69. '' 
  70. ''    Rev 1.198   02 Oct 1996 15:14:58   jlu
  71. '' Fixed SPR 24860 by changing HLM\Software to HLM\SOFTWARE.
  72. '' 
  73. ''    Rev 1.197   26 Sep 1996 16:45:28   jlu
  74. '' Modified CleanRegistrys123 to clean up the new CLSID number for gemini.
  75. '' 
  76. ''    Rev 1.196   20 Sep 1996 17:30:00   jlu
  77. '' Delete grg files in PostCopyConfig.
  78. '' 
  79. ''    Rev 1.195   16 Sep 1996 17:30:16   mhishinu
  80. '' Modified code for Run From ROM.
  81. '' 
  82. ''    Rev 1.194   16 Sep 1996 13:55:26   mhishinu
  83. '' Deleted debug messages.
  84. '' 
  85. ''    Rev 1.193   13 Sep 1996 10:26:02   mhishinu
  86. '' Modified Get123PathFromRegistry function. (SPR #23828)
  87. '' 
  88. ''    Rev 1.192   11 Sep 1996 20:30:10   mhishinu
  89. '' Added code to copy LTSCSN10.DLL to the node.
  90. '' 
  91. ''    Rev 1.191   11 Sep 1996 14:34:40   mhishinu
  92. '' Added code to copy ltscsn10.tlb on the server to the compoents directory
  93. '' on the node. That's a workaround for a ccStr bug. (SPR #22549)
  94. '' 
  95. ''    Rev 1.190   10 Sep 1996 20:11:00   mhishinu
  96. '' Added code for Run From Rom. LOTUSROM.BCF on the server is copied to
  97. '' LOTUS.BCF on the node.
  98. '' 
  99. ''    Rev 1.189   05 Sep 1996 11:01:48   mhishinu
  100. '' Modified PreCopyConfig and PostCopyConfig so that entries in LOTUS.BCF are
  101. '' appended on a first install or on a customize install.
  102. '' 
  103. ''    Rev 1.188   04 Sep 1996 14:59:12   jlu
  104. '' Fixed MLC build lannching bug with /L <Lang> switch.
  105. '' 
  106. ''    Rev 1.187   04 Sep 1996 10:38:50   jlu
  107. '' Modified Lot_WriteMapRegFor123 to fixed MLC MapDataPath.
  108. '' 
  109. ''    Rev 1.186   03 Sep 1996 17:31:22   jlu
  110. '' Modified CleanRegistry123.
  111. '' 
  112. ''    Rev 1.185   03 Sep 1996 16:05:44   jlu
  113. '' Added NodeOptions for ODBC drivers.
  114. '' 
  115. ''    Rev 1.184   22 Aug 1996 15:52:08   jlu
  116. '' Modified DoBackupMaps().
  117. '' 
  118. ''    Rev 1.183   21 Aug 1996 16:06:44   jlu
  119. '' Move TeamConsolidate to PreCopyConfig123().
  120. '' 
  121. ''    Rev 1.182   16 Aug 1996 16:28:58   mhishinu
  122. '' Modified AddIcons123 function. (SPR #16767)
  123. '' Modified CleanRegistryKeys123 sub so that Install doesn't delete
  124. '' HCU\S.\L.\123\97.0 key.
  125. '' 
  126. ''    Rev 1.181   16 Aug 1996 15:04:50   mhishinu
  127. '' Modified Init123, PathChange123 and PostCopyConfig so that SmartIcons files
  128. '' are copied to appropriate language directory.
  129. '' 
  130. ''    Rev 1.180   15 Aug 1996 16:53:22   mhishinu
  131. '' Deleted duplicated odbccp32.dll. (SPR #21850)
  132. '' Modified for MLC paths.
  133. '' 
  134. ''    Rev 1.179   14 Aug 1996 14:51:48   mhishinu
  135. '' Modified PostCopyConfig123 function.
  136. '' Added GetDestinationSymbolValue123 function.
  137. '' 
  138. ''    Rev 1.178   13 Aug 1996 14:23:14   mhishinu
  139. '' Replaced "SYBASE_SHRCNT" with "SYBASEPRG_SHRCNT". (SPR #21414, 21417)
  140. '' 
  141. ''    Rev 1.177   09 Aug 1996 14:32:16   mhishinu
  142. '' Modified PostCopyConfig so that values under HCU/S/Lotus/123/97.0/Paths/*
  143. '' are written correctly. (SPR #19498)
  144. '' 
  145. ''    Rev 1.176   07 Aug 1996 16:47:58   jlu
  146. '' Modified AddRegistryKeys().
  147. '' 
  148. ''    Rev 1.175   06 Aug 1996 13:20:42   jlu
  149. '' Removed DoBackUpMaps from node install
  150. '' 
  151. ''    Rev 1.174   01 Aug 1996 16:45:32   pdonahue
  152. '' 
  153. '' Changed write_bcf to only write entries if a feature is being
  154. '' installed in the current install.
  155. '' 
  156. ''    Rev 1.173   01 Aug 1996 16:27:04   pdonahue
  157. '' added code to supress sqlsevername dialog in case of a node install.
  158. '' 
  159. ''    Rev 1.172   31 Jul 1996 13:56:54   jlu
  160. '' Modified GetNotesPath123() to fix Notes v4.0 problem.
  161. '' 
  162. ''    Rev 1.171   30 Jul 1996 15:07:40   jlu
  163. '' Modified GetNotesPath123() to handle Notes v5 v4.5 and v4.11.
  164. '' 
  165. ''    Rev 1.170   29 Jul 1996 16:11:38   pdonahue
  166. '' 
  167. '' removed comment from the line of code that increments the shared
  168. '' dll counter.  This function has been fixed in the new CIT build.
  169. '' 
  170. ''    Rev 1.169   29 Jul 1996 14:46:58   jlu
  171. '' Made AltComp registry key point to where 123w.exe is installed.
  172. '' 
  173. ''    Rev 1.168   29 Jul 1996 13:51:26   pdonahue
  174. '' changed sqlprg to sqlprg_shrcnt in 123ui to surface dialog
  175. '' when SQL drivers are selected.
  176. '' 
  177. ''    Rev 1.167   25 Jul 1996 16:43:56   jlu
  178. '' Fixed SPR# 20051
  179. '' 
  180. ''    Rev 1.166   25 Jul 1996 16:11:02   pdonahue
  181. '' added code to increment counter for odbc driver. However, Cit function
  182. '' IncrementSharedDllcount is not working. Commented out function call 
  183. '' until this function is fixed.
  184. '' 
  185. ''    Rev 1.165   25 Jul 1996 15:27:32   pdonahue
  186. '' added shrcnt section to odbc section names
  187. '' 
  188. ''    Rev 1.164   23 Jul 1996 11:06:10   chelon
  189. '' Removed unneeded print statement.
  190. '' 
  191. ''    Rev 1.163   22 Jul 1996 15:24:40   jlu
  192. '' Put back changes to CleanRegistryFor123()
  193. '' 
  194. ''    Rev 1.162   22 Jul 1996 13:13:12   pdonahue
  195. '' 
  196. '' change sql_server sqlserver
  197. '' 
  198. ''    Rev 1.161   22 Jul 1996 12:03:00   pdonahue
  199. '' fixed notes sql entry in write_bcf_file.
  200. '' 
  201. ''    Rev 1.160   21 Jul 1996 17:51:36   ihachem
  202. ''  Backed out JLU change made in rev 1.158 because they are distroying
  203. ''  Windows 95 machines. It seems that all HKEY_CLASSES_ROOT keywords are deleted.
  204. '' 
  205. '' 
  206. ''    Rev 1.159   19 Jul 1996 16:27:48   mhishinu
  207. '' Modified Write_BCF_FILE SUB.
  208. '' 
  209. ''    Rev 1.158   19 Jul 1996 15:43:36   jlu
  210. '' Modified CleanRegistryKeys123().
  211. '' 
  212. ''    Rev 1.157   18 Jul 1996 18:32:06   pdonahue
  213. '' added code to write server name to bcf file for sql 4.0
  214. '' 
  215. ''    Rev 1.156   18 Jul 1996 18:00:54   pdonahue
  216. '' removed shrcnt suffix from odbc sections.
  217. '' 
  218. ''    Rev 1.155   16 Jul 1996 14:14:48   mhishinu
  219. '' Removed node options feature.
  220. '' 
  221. ''    Rev 1.154   15 Jul 1996 19:24:40   muehara
  222. '' Changed Pitch to FontPich to remove the error. Is this reserved word?
  223. '' 
  224. ''    Rev 1.153   15 Jul 1996 15:40:30   muehara
  225. '' Changed pitch1 to Pitch for Asia.
  226. '' 
  227. ''    Rev 1.152   15 Jul 1996 12:16:38   pdonahue
  228. '' added a new symbol for sql server name.
  229. '' 
  230. ''    Rev 1.151   13 Jul 1996 18:58:08   mhishinu
  231. '' Fixed SPR #19433.
  232. '' 
  233. ''    Rev 1.150   12 Jul 1996 20:00:56   mhishinu
  234. '' Modified ProductReg123 and PreCopyConfig123 functions
  235. '' for node options feature.
  236. '' 
  237. ''    Rev 1.149   11 Jul 1996 19:05:44   muehara
  238. '' Moved string data to 123ui.rc for Asia.
  239. '' 
  240. ''    Rev 1.148   11 Jul 1996 11:04:02   pdonahue
  241. '' changed driver32 to driver
  242. '' 
  243. ''    Rev 1.147   10 Jul 1996 17:36:38   jlu
  244. '' Removed Animation 1.0 key from shared component's list.
  245. '' 
  246. ''    Rev 1.146   09 Jul 1996 20:01:28   jlu
  247. '' Removed helps from minimum install, also help keys for uninstall.
  248. '' 
  249. ''    Rev 1.145   09 Jul 1996 11:03:20   jlu
  250. '' Fixed Altcomp key to point to where the latest statusbar lives.
  251. '' 
  252. ''    Rev 1.144   08 Jul 1996 20:00:02   mhishinu
  253. '' CIT BLD 2130_3
  254. '' 
  255. ''    Rev 1.143   08 Jul 1996 18:27:22   pdonahue
  256. '' added code to surface dialog for SQL server name.
  257. '' 
  258. ''    Rev 1.142   08 Jul 1996 15:29:22   pdonahue
  259. '' added code to write lotus.bcf file.
  260. '' 
  261. ''    Rev 1.141   07 Jul 1996 14:03:54   ihachem
  262. ''  Defined IgnoreEvenAlignment$ (see muehara change)
  263. '' 
  264. ''    Rev 1.140   06 Jul 1996 18:33:40   muehara
  265. '' Added CodePage and IgnoreEvenAlignment for Asia.
  266. '' 
  267. ''    Rev 1.139   28 Jun 1996 16:53:02   muehara
  268. '' Added Kinsouku strings and Font information for CKT.
  269. '' 
  270. ''    Rev 1.138   25 Jun 1996 18:13:44   jlu
  271. '' Added Lot_WriteHlpRegFor123().
  272. '' 
  273. ''    Rev 1.137   24 Jun 1996 17:04:14   pdonahue
  274. '' added code for notes_SQL drivers.
  275. '' 
  276. ''    Rev 1.136   22 Jun 1996 17:48:46   ihachem
  277. '' Changed DESK.exe to 123W.exe (per: Jim Snyder-Grant)
  278. '' 
  279. ''    Rev 1.135   19 Jun 1996 14:31:52   jlu
  280. '' Fixed SPR #16082
  281. '' 
  282. ''    Rev 1.134   18 Jun 1996 16:24:46   mhishinu
  283. '' Added RegisterObject call to delete PANOSE.DAT.
  284. '' 
  285. ''    Rev 1.133   17 Jun 1996 14:13:34   jlu
  286. '' Removed lcrttb4.dll from Lot_WriteOCXRegFor123
  287. '' 
  288. ''    Rev 1.132   12 Jun 1996 16:13:42   mhishinu
  289. '' Fixed SPR #16204.
  290. '' HLM\S.\L.\123\97.0 and HCU\S.\L.\123\97.0 don't need to be registered
  291. '' by RegisterObject calls.
  292. '' 
  293. ''    Rev 1.131   10 Jun 1996 11:02:28   jlu
  294. '' Mdified MigrateUserPrefReg() to migrate currency_display
  295. '' 
  296. ''    Rev 1.130   06 Jun 1996 17:04:12   jlu
  297. '' Changed CCstr version to 1.0
  298. '' 
  299. ''    Rev 1.129   05 Jun 1996 15:41:38   mhishinu
  300. '' Fixed SPR #14092 and 13655.
  301. '' 
  302. ''    Rev 1.128   03 Jun 1996 13:14:08   pdonahue
  303. '' changed paradox connectfuntions from YYY to YYN
  304. '' 
  305. ''    Rev 1.127   31 May 1996 18:00:06   jlu
  306. '' Change mapdatapath registry from HLM to HCU.
  307. '' 
  308. ''    Rev 1.126   30 May 1996 16:07:58   jlu
  309. '' Fixed shortcut uninstall problem for suite.
  310. '' 
  311. ''    Rev 1.125   30 May 1996 14:47:38   mhishinu
  312. '' Changed product size (C.R. JLU)
  313. '' 
  314. ''    Rev 1.124   28 May 1996 16:28:42   mhishinu
  315. '' Changed Product Size for Gemini. (C.R. JLU)
  316. '' 
  317. ''    Rev 1.122   23 May 1996 19:58:04   pdonahue
  318. '' 
  319. '' added missing OEM to the first DBase entry.
  320. '' 
  321. ''    Rev 1.121   23 May 1996 19:10:48   pdonahue
  322. '' created new section for paradox driver in 123.std and add a check
  323. '' to see if the section is installed.
  324. '' 
  325. ''    Rev 1.120   23 May 1996 17:38:34   pdonahue
  326. '' fixed registry entry for paradox api level.
  327. '' 
  328. ''    Rev 1.119   22 May 1996 17:50:50   amello
  329. '' Added odbc files and commented out remove prior version call from precopyconfig.
  330. '' 
  331. ''    Rev 1.118   22 May 1996 16:18:08   jlu
  332. '' Corrected ProdSize for minimum/default install.
  333. '' 
  334. ''    Rev 1.117   22 May 1996 15:24:56   jlu
  335. '' Removed 123TEAMCONS are a NodeOption
  336. '' 
  337. ''    Rev 1.116   21 May 1996 19:18:22   jlu
  338. '' Modified PrecopyConfig using xxx template.
  339. '' 
  340. ''    Rev 1.115   21 May 1996 15:26:18   jlu
  341. '' Fixed shortcut path for uninstall.
  342. '' 
  343. ''    Rev 1.114   20 May 1996 17:03:24   pdonahue
  344. '' Added Registry entries for ODBC
  345. '' 
  346. ''    Rev 1.113   17 May 1996 19:44:44   jlu
  347. '' Modified AddRegistryFor123
  348. '' 
  349. ''    Rev 1.112   16 May 1996 16:31:16   jlu
  350. '' Modified PostCopyConfig for path registry.
  351. '' 
  352. ''    Rev 1.111   15 May 1996 19:47:16   jlu
  353. '' Modified PostCopyConfig.
  354. '' 
  355. ''    Rev 1.110   15 May 1996 19:29:08   jlu
  356. '' Added path values to registry.
  357. '' 
  358. ''    Rev 1.109   14 May 1996 20:03:32   jlu
  359. '' CIT BLD 2122_4
  360. '' 
  361. ''    Rev 1.108   13 May 1996 15:21:36   jlu
  362. '' Modified Lot_WriteMapRegFor123.
  363. '' 
  364. ''    Rev 1.107   13 May 1996 14:50:42   jlu
  365. '' Removed OLd_WriteOLERegFor123 and Old_WriteFexRegFor123.
  366. '' 
  367. ''    Rev 1.106   09 May 1996 14:39:52   pdonahue
  368. '' modified upgrade code for MLC.  In case of an MLC install do surface 
  369. '' upgrade dialog or set path to previous install path.
  370. '' 
  371. ''    Rev 1.105   08 May 1996 19:47:54   jlu
  372. '' Modified init123()
  373. '' 
  374. ''    Rev 1.104   07 May 1996 20:04:14   jlu
  375. '' Modified PostCopyConfig()
  376. '' 
  377. '' 
  378. ''    Rev 1.103   07 May 1996 12:34:34   chelon
  379. '' Added a space between /L and LanguageAcronym.
  380. '' 
  381. ''    Rev 1.102   06 May 1996 18:51:30   jlu
  382. '' CIT BLD 2121_4
  383. '' 
  384. ''    Rev 1.101   02 May 1996 22:57:52   ihachem
  385. '' Changed ENMAPS.DLL to MAPSEN.DLL
  386. '' 
  387. ''    Rev 1.100   01 May 1996 19:13:42   jlu
  388. '' Modified AddRegistryFor123()
  389. '' 
  390. ''    Rev 1.99   30 Apr 1996 17:17:24   jlu
  391. '' CIT BLD 2120_4
  392. '' 
  393. ''    Rev 1.98   30 Apr 1996 17:10:12   jlu
  394. '' CIT BLD 2120_4
  395. '' 
  396. ''    Rev 1.97   26 Apr 1996 20:58:38   jlu
  397. '' Modified CleanRegistryKeys123()
  398. '' 
  399. ''    Rev 1.96   26 Apr 1996 20:37:46   jlu
  400. '' Modified CleanRegistry()
  401. '' 
  402. ''    Rev 1.95   26 Apr 1996 20:15:30   jlu
  403. '' Modified Lot_OLEregfor123()
  404. '' 
  405. ''    Rev 1.94   26 Apr 1996 10:27:46   jlu
  406. '' Enabled new OLE registration that utilized regspt.dll
  407. '' 
  408. ''    Rev 1.93   23 Apr 1996 15:31:00   pdonahue
  409. '' removed obsolete calls to markfixupsourcedirsymbol and added
  410. '' marklanguagesubdir for MLC
  411. '' 
  412. ''    Rev 1.92   22 Apr 1996 18:31:16   jlu
  413. '' CIT BLD 2119_4
  414. '' 
  415. ''    Rev 1.91   22 Apr 1996 19:11:02   muehara
  416. '' Changed Gemini Version to 97.0 for WWEXE
  417. '' 
  418. ''    Rev 1.90   20 Apr 1996 13:55:10   jlu
  419. '' Enabled MigrateFillsPref().
  420. '' 
  421. ''    Rev 1.89   19 Apr 1996 18:48:48   jlu
  422. '' Added MigrateFillsPrefReg()
  423. '' 
  424. ''    Rev 1.88   19 Apr 1996 11:02:50   amello
  425. '' WWEXE Code: Merged in for Masato Uehara, (sorry it took so long,  I am very slow) AMM.
  426. '' 
  427. ''    Rev 1.87   18 Apr 1996 19:18:48   jlu
  428. '' Changed Gemini Version to 97.0
  429. '' 
  430. ''    Rev 1.86   17 Apr 1996 19:30:34   jlu
  431. '' CIT BLD 2118_4
  432. '' 
  433. ''    Rev 1.85   16 Apr 1996 19:29:24   jlu
  434. '' Changed all map keynames.
  435. '' 
  436. ''    Rev 1.84   12 Apr 1996 19:00:04   jlu
  437. '' Added code to check for running of Raptor/Monrue.
  438. '' 
  439. ''    Rev 1.83   11 Apr 1996 20:34:50   jlu
  440. '' Added China Map.
  441. '' 
  442. ''    Rev 1.82   10 Apr 1996 18:45:16   jlu
  443. '' Modified Team Consolidate Install Section.
  444. '' 
  445. ''    Rev 1.81   10 Apr 1996 10:09:10   jlu
  446. '' CIT BLD 2117_4
  447. '' 
  448. ''    Rev 1.80   05 Apr 1996 18:57:42   jlu
  449. '' Added code to remove old maps for un-install
  450. '' 
  451. ''    Rev 1.79   04 Apr 1996 17:36:18   jlu
  452. '' Added code to register Old Maps copied from Rator.
  453. '' 
  454. ''    Rev 1.78   04 Apr 1996 17:01:40   pdonahue
  455. '' changed shrhelpprg to shrhelpdata
  456. '' 
  457. ''    Rev 1.77   04 Apr 1996 16:41:30   pdonahue
  458. '' modified shared components version numbers and added registration.
  459. '' for new components.
  460. '' 
  461. ''    Rev 1.76   03 Apr 1996 16:40:46   jlu
  462. '' Added DoBackupMaps().
  463. '' 
  464. ''    Rev 1.75   02 Apr 1996 19:47:30   jlu
  465. '' Added Lot_WriteImgRegFor123.
  466. '' 
  467. ''    Rev 1.74   02 Apr 1996 13:54:18   jlu
  468. '' CIT BLD 2116_4
  469. '' 
  470. ''    Rev 1.73   02 Apr 1996 12:12:18   jlu
  471. '' Fixed 123SAMPLESLANGDIR.
  472. '' 
  473. ''    Rev 1.72   02 Apr 1996 10:42:06   jlu
  474. '' Added symbols NOTES41DIR and NOTES41DATADIR.
  475. '' 
  476. ''    Rev 1.71   01 Apr 1996 18:44:46   jlu
  477. '' Added TeamComputing Registration.
  478. '' 
  479. ''    Rev 1.70   01 Apr 1996 14:51:02   pdonahue
  480. '' fixed langdirname
  481. ''
  482. ''    Rev 1.69   29 Mar 1996 17:55:08   jlu
  483. '' Changed all map titles to RC strings in Lot_WriteMapRegFor123().
  484. '' 
  485. ''    Rev 1.68   29 Mar 1996 10:33:24   jlu
  486. '' Cleaned up init123()
  487. '' 
  488. ''    Rev 1.67   27 Mar 1996 11:29:04   amello
  489. '' Migrate Monroe settings again.
  490. '' 
  491. ''    Rev 1.66   26 Mar 1996 18:30:56   jlu
  492. '' Fix Node Install UI problem.
  493. '' 
  494. ''    Rev 1.65   25 Mar 1996 18:13:12   jlu
  495. '' CIT BLD 2115_4
  496. '' 
  497. ''    Rev 1.64   22 Mar 1996 18:57:42   jlu
  498. '' Added CleanRegistryKeys123().
  499. '' 
  500. ''    Rev 1.63   21 Mar 1996 20:59:00   amello
  501. '' We are not migrate monroe/raptor settings until Alex P. fixes problems with Win95 registry settings
  502. '' 
  503. ''    Rev 1.62   20 Mar 1996 19:35:08   jlu
  504. '' Added GetInstTypeFromRegistry().
  505. '' 
  506. ''    Rev 1.61   19 Mar 1996 19:42:44   jlu
  507. '' Fix Lot_WriteMapRegFor123 for map registration.
  508. '' 
  509. ''    Rev 1.59   18 Mar 1996 17:51:34   jlu
  510. '' CIT BLD 2114_4
  511. '' 
  512. ''    Rev 1.58   18 Mar 1996 16:29:34   jlu
  513. '' Fixed Lot_WriteMapRegFor123() for node install.
  514. '' 
  515. ''    Rev 1.57   17 Mar 1996 18:09:02   jlu
  516. '' Modified Lot_WriteOLERegFor123.
  517. '' 
  518. ''    Rev 1.56   15 Mar 1996 18:58:00   jlu
  519. '' Added Lot_RegFexFor123() for file extensions.
  520. '' 
  521. ''    Rev 1.53   14 Mar 1996 18:55:54   jlu
  522. '' Added Lot_RegMapFor123()
  523. '' 
  524. ''    Rev 1.52   12 Mar 1996 18:58:46   jlu
  525. '' CIT BLD 2113_4
  526. '' 
  527. ''    Rev 1.51   11 Mar 1996 17:43:38   jlu
  528. '' Fix BackupMaster.
  529. '' 
  530. ''    Rev 1.50   07 Mar 1996 18:12:18   jlu
  531. '' Added BackupMaster Dialogue.
  532. '' 
  533. ''    Rev 1.48   05 Mar 1996 15:02:20   amello
  534. '' Added AltComponent Value under and it points to local path
  535. '' 
  536. ''    Rev 1.46   04 Mar 1996 14:02:38   pdonahue
  537. '' Added code to register shared components.
  538. '' 
  539. ''    Rev 1.45   01 Mar 1996 19:35:34   jlu
  540. '' Corrected Lot_RegOLEfor123()
  541. '' 
  542. ''    Rev 1.44   29 Feb 1996 16:25:50   jlu
  543. '' Write the OLE registration database
  544. '' 
  545. ''    Rev 1.43   29 Feb 1996 15:06:36   pdonahue
  546. '' removed 16bit code from moredirs.
  547. '' 
  548. ''    Rev 1.42   29 Feb 1996 14:36:48   pdonahue
  549. '' fixed detect previous version.
  550. '' 
  551. ''    Rev 1.41   28 Feb 1996 18:30:38   jlu
  552. '' Added seporator support for MigratePrefReg().
  553. '' 
  554. ''    Rev 1.40   27 Feb 1996 10:35:04   jlu
  555. '' CIT BLD 2111_4
  556. '' 
  557. ''    Rev 1.39   26 Feb 1996 14:10:04   pdonahue
  558. '' changed init 123 to fix problem with obsolete file directory path.
  559. '' 
  560. ''    Rev 1.38   23 Feb 1996 14:57:44   jlu
  561. '' Added work-around for RegCreateKeyValueEx() for REG_BINARY and REG_MULTI_SZ
  562. '' 
  563. ''    Rev 1.37   22 Feb 1996 19:26:22   jlu
  564. '' Modified MigratePrefReg().
  565. '' 
  566. ''    Rev 1.36   22 Feb 1996 17:30:38   jlu
  567. '' Modified MigratePrefReg().
  568. '' 
  569. ''    Rev 1.35   21 Feb 1996 19:00:52   jlu
  570. '' Added @Func registry settings
  571. '' 
  572. ''    Rev 1.34   20 Feb 1996 12:29:20   jlu
  573. '' CIT BLD 2110_4
  574. '' 
  575. ''    Rev 1.33   18 Feb 1996 18:44:46   jlu
  576. '' Added setion for map files in MigratePrefReg()
  577. '' 
  578. ''    Rev 1.32   15 Feb 1996 18:54:34   jlu
  579. '' Turned on 123OBSDIR for obseleting old files.
  580. '' 
  581. ''    Rev 1.31   14 Feb 1996 18:54:54   jlu
  582. '' Set upgrade flag for MONROE and RAPTOR
  583. '' 
  584. ''    Rev 1.30   14 Feb 1996 18:27:12   jlu
  585. '' Modified MigrateIniReg()
  586. '' 
  587. ''    Rev 1.29   13 Feb 1996 19:12:18   jlu
  588. '' Modified DetectPreviousVersion().
  589. '' 
  590. ''    Rev 1.28   13 Feb 1996 14:41:22   jlu
  591. '' Backed out changes made yesterday. (CR: Chelon)
  592. '' 
  593. ''    Rev 1.27   12 Feb 1996 18:38:06   jlu
  594. '' Added MigrateUserPrefReg().
  595. '' 
  596. ''    Rev 1.26   12 Feb 1996 18:32:24   jlu
  597. '' Added MigrateUserPrefReg().
  598. '' 
  599. ''    Rev 1.25   12 Feb 1996 17:07:34   pdonahue
  600. '' added code to find out if Gemini is already installed.
  601. '' 
  602. ''    Rev 1.24   08 Feb 1996 20:43:34   jlu
  603. '' Corrected product size values.
  604. ''
  605. ''    Rev 1.23   08 Feb 1996 11:19:58   pdonahue
  606. '' fixed upgrade code to surface remove obsolete file dialog for Monroe.
  607. '' 
  608. ''    Rev 1.22   07 Feb 1996 15:52:30   pdonahue
  609. '' removed programs subdirectory moved file to the 123 directory.
  610. '' 
  611. ''    Rev 1.21   07 Feb 1996 15:00:20   jlu
  612. '' Corrected typo mistake.
  613. '' 
  614. ''    Rev 1.20   06 Feb 1996 15:19:12   jlu
  615. '' CIT build 2108_4
  616. '' 
  617. ''    Rev 1.19   05 Feb 1996 11:43:40   pdonahue
  618. '' added code to find LegoAppMdiView window.
  619. '' 
  620. ''    Rev 1.18   02 Feb 1996 19:50:44   jlu
  621. '' Modified AddIcon123().
  622. '' 
  623. ''    Rev 1.17   02 Feb 1996 18:23:06   jlu
  624. '' Added PrevVersions123(), AddRegistryKeys123() and RegisterSharedComponent().
  625. '' 
  626. ''    Rev 1.16   01 Feb 1996 11:08:32   jlu
  627. '' Added Write123Reg() for 1-2-3 registry entries.
  628. '' 
  629. ''    Rev 1.15   29 Jan 1996 18:24:08   jlu
  630. '' New CIT build 2107_4
  631. '' 
  632. ''    Rev 1.14   25 Jan 1996 16:21:00   jlu
  633. '' Added OLE registry Info. (CR: Pam Donahue)
  634. '' 
  635. ''    Rev 1.13   22 Jan 1996 12:18:52   pdonahue
  636. '' set compdir to 123dir in pathchange.  This should be remove when
  637. '' the shared components are install to the components directory.
  638. '' 
  639. ''    Rev 1.12   18 Jan 1996 14:49:52   pdonahue
  640. '' added support for share32 and created a temporary symbol for the
  641. '' shared components directory.
  642. '' 
  643. ''    Rev 1.11   11 Jan 1996 14:20:56   pdonahue
  644. '' added code to check for previous version of 123.
  645. ''*********************************************************************/
  646.  
  647. USE "LANGUAGE"
  648. OPTION DECLARE
  649. PUBLIC vmflag AS INTEGER
  650. PUBLIC oleregflag AS INTEGER
  651. PUBLIC upgrade AS INTEGER
  652. PUBLIC BackupSmartMasters123%
  653. DIM fWriteBCF%
  654.  
  655. TYPE RegComponents
  656.     hkey AS LONG
  657.     registeruninstall AS LONG
  658.     deletekey AS LONG
  659.     subkeylen AS LONG
  660.     valuenamelen  AS LONG
  661.     valuelen  AS LONG
  662.     subkey AS STRING * 255
  663.     valuename AS STRING * 255
  664.     value AS STRING * 255
  665. END TYPE
  666.  
  667. CONST VERTRES = 10
  668.  
  669. CONST FILE_ATTRIBUTE_NORMAL& = &h00000080
  670.  
  671. '** These Are the Required Functions that Products must provide
  672. '***************************************************************
  673. DECLARE PUBLIC FUNCTION ProductReg123 (prodno%, network$, direction$) AS STRING
  674. DECLARE PUBLIC FUNCTION DefaultUserReg123 (prodno%, network$, direction$) AS STRING
  675. DECLARE PUBLIC FUNCTION Init123 (prodno%, network$, direction$, basedir$) AS STRING
  676. DECLARE PUBLIC FUNCTION PrevVersions123 (prodno%, network$, direction$) AS STRING
  677. DECLARE PUBLIC FUNCTION PathChange123 (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  678. DECLARE PUBLIC FUNCTION InitCopyList123 (prodno%, network$, direction$) AS STRING
  679. DECLARE PUBLIC FUNCTION PreCopyConfig123 (prodno%, network$, direction$, lic%) AS STRING
  680. DECLARE PUBLIC FUNCTION AddTheBillBoards123 (prodno%, network$, direction$, nbytes&) AS STRING
  681. DECLARE PUBLIC FUNCTION PostCopyConfig123 (prodno%, network$, direction$, programgroup$) AS STRING
  682. DECLARE PUBLIC FUNCTION AddIcons123 (prodno%, network$, direction$, programgroup$) AS STRING
  683. DECLARE PUBLIC FUNCTION UI123 (prodno%, network$, direction$) AS STRING
  684. DECLARE PUBLIC FUNCTION PostSuccessReg123 (prodno%, network$, direction$) AS STRING
  685. DECLARE PUBLIC SUB AddRegistryKeys123 (prodno%, network$) 
  686. DECLARE PUBLIC FUNCTION InitLanguage123 (prodno%, network$, direction$) AS STRING
  687. DECLARE FUNCTION DetectPreviousVersion (Productfound$) AS STRING
  688. DECLARE SUB RemoveObsoleteFiles123 (hDlg&, CtrlId%, Classes$, LInst&)
  689. DECLARE SUB SQLSERVERNAMECB (hDlg&, CtrlId%, Classes$, Inst&)
  690.  
  691. '** Product specific functions
  692. '*****************************
  693. DECLARE FUNCTION Get123PathfromLotusIni() AS STRING
  694. DECLARE SUB RegisterSharedComponent(Key$, FileName$, Version$)
  695. DECLARE FUNCTION Lot_WriteOLERegFor123(network$, prodno%) AS INTEGER
  696. DECLARE FUNCTION Get_and_Set_Registry_Entries(FeatureKeyWord$, grgPath$, exePath$, winsysPath$, sectionName$) AS INTEGER
  697.  
  698. DECLARE FUNCTION FindWindowA LIB "user32" (ByVal lpClassName As Any, ByVal lpCaption As Any) AS LONG
  699.  
  700. DECLARE FUNCTION CopyFileA LIB "kernel32" ALIAS "CopyFileA" (Byval szSrc$, Byval szDest$, Byval cmo&) AS LONG
  701. DECLARE FUNCTION SetFileAttributesA LIB "kernel32" ALIAS "SetFileAttributesA" (Byval szFile$, Byval dwFileAttributes&) AS LONG
  702.  
  703. DECLARE FUNCTION GetPrivateProfileString LIB "kernel32" ALIAS "GetPrivateProfileStringA" (ByVal szSect$, ByVal szKey$,_
  704. ByVal  szDefault$,ByVal szBuf$,ByVal cbBuf AS Long,ByVal szFile$) AS LONG
  705.  
  706. '*****************************WWEXE[[
  707. DECLARE FUNCTION GetACP LIB "kernel32" ALIAS "GetACP" () AS LONG
  708. '*****************************WWEXE]]
  709.  
  710. DECLARE FUNCTION Lot_GetPrivateProfileString LIB "kernel32" ALIAS "GetPrivateProfileStringA"_
  711. (ByVal szSect$, ByVal szKey AS Long, ByVal szDefault$,ByVal szBuf$,ByVal cbBuf AS Long,ByVal szFile$) AS LONG
  712.  
  713. DECLARE FUNCTION WritePrivateProfileString LIB "kernel32" ALIAS "WritePrivateProfileStringA" (ByVal szSect$, ByVal szKey$,_
  714. ByVal  szString$,ByVal szFile$) AS LONG
  715.  
  716. DECLARE PUBLIC FUNCTION RegSetValueExM LIB "advapi32" ALIAS "RegSetValueExA" (ByVal hKey&, ByVal lpValueName$, ByVal Reserved&, ByVal dwType&, ByVal lpData$, ByVal cbData&) AS LONG
  717. DECLARE PUBLIC FUNCTION RegDeleteKey LIB "advapi32" ALIAS "RegDeleteKeyA" (ByVal hKey&, ByVal szKey$) AS LONG
  718. DECLARE PUBLIC FUNCTION RegDeleteValue LIB "advapi32" ALIAS "RegDeleteValueA" (ByVal hKey&, ByVal szKey$) AS LONG
  719.  
  720. DECLARE PUBLIC FUNCTION RegOpenKeyEx LIB "advapi32" ALIAS "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&) AS LONG
  721. DECLARE PUBLIC FUNCTION RegCloseKeyEx LIB "advapi32" ALIAS "RegCloseKey" (ByVal hKey&)  AS LONG
  722.  
  723. DECLARE PUBLIC FUNCTION RegEnumKey LIB "advapi32" ALIAS "RegEnumKeyA" (ByVal hKey&, ByVal dwIndex&, lpName$, ByVal cbName&) AS LONG
  724.  
  725. '** This Three Functions are expoted from regspt.dll listed in install.lst **
  726. DECLARE PUBLIC FUNCTION OpenGRG Lib "regspt.dll" Alias "_OpenGRGFile@8" (Byval filename As String, fileHandle As Long)  AS LONG
  727. DECLARE PUBLIC SUB CloseGRG Lib "regspt.dll" Alias "_CloseGRGFile@4" (Byval  fileHandle As Long)  
  728. DECLARE PUBLIC FUNCTION ParseLine Lib "regspt.dll" Alias "_ParseNextLine@24" (Byval fileHandle As Long, Byval replacement As String, Byval replacement2 As String, components As RegComponents, Byval sectionName As String, sectionFound As LONG )  AS LONG
  729.  
  730. DECLARE FUNCTION DetectVersionPriorToDarwin (destination$) AS STRING
  731. DECLARE FUNCTION Get123PathfromRegistry() AS STRING
  732. DECLARE FUNCTION GetInstTypefromRegistry() AS LONG
  733.  
  734. DECLARE FUNCTION GetPreviousMastersDir() AS STRING
  735. DECLARE FUNCTION GetPreviousMapsDir() AS STRING
  736. DECLARE SUB MigrateUserPrefReg()
  737. DECLARE SUB MigrateFillsPrefReg()
  738. DECLARE SUB DoBackupSmartMasters()
  739. DECLARE SUB DoBackupMaps()
  740. DECLARE SUB Write_ODBC_Reg(prodno%, network$)
  741. DECLARE SUB Write_BCF_FILE(prodno%, network$) 
  742. DECLARE SUB CleanRegistryKeys123(prodno%)
  743. DECLARE FUNCTION Lot_WriteMapRegFor123(network$, prodno%) AS INTEGER
  744. DECLARE FUNCTION Lot_WriteOCXRegFor123(network$, prodno%) AS INTEGER    
  745. DECLARE FUNCTION Lot_WriteImgRegFor123(network$, prodno%) AS INTEGER    
  746. DECLARE FUNCTION Lot_WriteHlpRegFor123(network$, prodno%) AS INTEGER    
  747. DECLARE FUNCTION Lot_RegUninstFilFor123(network$, prodno%) AS INTEGER
  748. DECLARE FUNCTION GetNotesPath123(notespath$, notesdatapath$) AS INTEGER
  749. DECLARE FUNCTION GetDestinationSymbolValue123(dirsym$, flang%) AS STRING
  750.  
  751. '** EXCEPTION FUNCTIONS (OPTIONAL: Regiseterd in the INF File)
  752. '*************************************************************
  753. DECLARE PUBLIC FUNCTION HELPEX123 (Chapter$,fInCopy%) AS INTEGER
  754.  
  755. '*************************************************************************
  756. '**************************** Required Functions *************************
  757. '*************************************************************************
  758.  
  759. '*************************************************************************
  760. '** SUB Initialize
  761. '**
  762. '** Purpose: The only purpose of this routine is to register your product.
  763. '**          This routine assigns your acronym to your product.
  764. '**          Without this function, your product will not install.
  765. '**          All you need to do in this subroutine is:
  766. '**                   modify 123 -> your acronym.
  767. '**
  768. '**          ASSUMPTIONS: Many things in the toolkit key off of your
  769. '**                       acronym. These are the constraints:
  770. '**                       1. Your top level chapter in the INF must
  771. '**                          have a KEYWORD of your acronym +"TOP"
  772. '**                          e.g. acronymTOP
  773. '** Author:  Marcel Meth  
  774. '** Arguments: None
  775. '** Returns:   NONE
  776. '*************************************************************************
  777. SUB Initialize
  778.    Reg_RegisterProductNames "123", LdString(SID_123)
  779. END SUB
  780.  
  781. '*************************************************************************
  782. '** FUNCTION ProductReg123 (prodno%, network$, direction$) AS INTEGER
  783. '**
  784. '** Purpose: This function allows your product to register itself
  785. '**          in the Install Product Registry.  The toolkit stores
  786. '**          the information provided and will provide you with
  787. '**          various features accordingly.  For example, if you support
  788. '**          shared files, the toolkit will do most of the work
  789. '**          for the COMPNENT directory.
  790. '**
  791. '**          For the most part you should use only Reg_Set... Functions.
  792. '**          
  793. '**
  794. '**          If you turn on ATM, LICENSING, or SHARED tools, then
  795. '**          you must be sure to add the appropriate lines and files
  796. '**          in your acronym.SCR and acronym.LYT, respectively. 
  797. '**          See Cookbook.
  798. '**
  799. '**          If you support server install, (because you need the files
  800. '**          for Licenser), you will have to make sure that you have 
  801. '**          the correct **entire** contents of install.lyt and install.scr 
  802. '**          for the install files in your acronym.SCR and acronym.LYT
  803. '**          
  804. '**
  805. '** Arguments:  All parameters are **read only**. 
  806. '**          prodno%: This is your prodno%.  It is assigned to you by the
  807. '**                   toolkit in the order in which you were registered.
  808. '**                   When your product is part of SmartSuite, SmartSuite
  809. '**                   will always be product #1. (prodno% >=1)
  810. '**          network$: UNINITIALIZED
  811. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  812. '**                      then step backwards, i.e start at your last dialog
  813. '**                      first.
  814. '**     
  815. '** Errors:    No return code for errors, you must Raise them
  816. '** Author:    MMeth
  817. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  818. '**                             allow the user to step backwards.)
  819. '*************************************************************************
  820.  
  821. PUBLIC FUNCTION ProductReg123 (prodno%, network$, direction$) AS STRING
  822.    ProductReg123 = gNEXT
  823.  
  824.    '** FOR a complete set of things to register
  825.    '** see API doc under Reg_Set...
  826.  
  827.    Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  828.  
  829.    If network$ = gNODE$ Then
  830.         Reg_SetProdSizes prodno%, 2 * 1048576, 2 * 1048576
  831.    Else
  832.         Reg_SetProdSizes prodno%, 32 * 1048576, 25 * 1048576
  833.    End If
  834.  
  835.    '** If you need Lotusapp or datalens support turn this on.
  836.    'Reg_SetShareFlags prodno%, 1, 1, 1, 1 
  837.  
  838.    '** If you need Components directory turn this on.
  839.    Reg_SetShare32Flag prodno%, 1
  840.  
  841.    '** Coming to an install program near you soon
  842.    'Reg_SetCDOption prodno%,Inst%,CDOptStr$ 
  843.    'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% 
  844.  
  845.    '** Any options that you want your sys-admin and node user to see
  846.    '** must be entered here.  They must correspond with keywrods in the
  847.    '** inf file. This functionality will be avilable March 4, but you
  848.    '** can set these fields now!
  849.    'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$  
  850.    'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% 
  851.  
  852.    Reg_SetNodeOption prodno%,1,"DBASEPRG_SHRCNT"  
  853.    Reg_SetNodeOptionSelected prodno%,1,1 
  854.  
  855.    Reg_SetNodeOption prodno%,2,"PARADOXPRG_SHRCNT"  
  856.    Reg_SetNodeOptionSelected prodno%,2,1 
  857.  
  858.    Reg_SetNodeOption prodno%,3,"SQLPRG_SHRCNT"  
  859.    Reg_SetNodeOptionSelected prodno%,3,1 
  860.  
  861.    Reg_SetNodeOption prodno%,4,"NOTESSQLPRG_SHRCNT"  
  862.    Reg_SetNodeOptionSelected prodno%,4,1 
  863.  
  864.    Reg_SetNodeOption prodno%,5,"SYBASEPRG_SHRCNT"  
  865.    Reg_SetNodeOptionSelected prodno%,5,1 
  866.  
  867.    Reg_SetNodeOption prodno%,6,"ODBCTEXTPRG_SHRCNT"  
  868.    Reg_SetNodeOptionSelected prodno%,6,1 
  869.  
  870.    '** Toolkit default is for no server supprt, turn on if desired.
  871.    Reg_SetSrvSupport prodno%, 1
  872.  
  873.    '** Toolkit default is for no server supprt, turn on if desired.
  874.    '** license support only available for server install.
  875.    Reg_SetLicenseSupport prodno%, 0
  876.  
  877.    '** Toolkit default is no ATM support
  878.    Reg_SetATMSupport prodno%, 0
  879.  
  880.    '** This is the default value the user will see.
  881.    Reg_SetProgManagerGroup ProdNo%, LdString(SID_123_GROUPTITLE)
  882.  
  883.    '** Required if you have a work, smartmasters and backup directories
  884.    '** register support with the toolkit to surface the dialog
  885.    Reg_SetMoreDirsData prodno%, "MOREDIRSCB", DB123_MOREDIRS4, _
  886.      DB123_MOREDIRS4
  887.  
  888. END FUNCTION
  889.  
  890. '*************************************************************************
  891. '** FUNCTION DefaultUserReg123 (prodno%, network$, direction$) AS STRING
  892. '**
  893. '** Purpose: **Only** the first registered product gets called.
  894. '**          For SmartSuite, this will be SmartSuite.
  895. '**          This function allows you to set the default user registration
  896. '**          information that the user will be shown. The toolkit
  897. '**          will provide default values from MS-Windows. If you disagree
  898. '**          with them you should modify them in this function using:
  899. '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  900. '**          
  901. '**          It is up to you how you store registration information.
  902. '**          It will not be stored until later in PostCopyConfig123.
  903. '**          The CIT provides functions that allow you to access .ri 
  904. '**          files: Lot_ReadDefaultsfromRi(ripath$).
  905. '**
  906. '**          If you need to write back to the floppy, do it here.
  907. '**          Most Lotus products will no longer write back to the floppy.
  908. '**          Remeber, you can't write back to a CD or network!
  909. '**
  910. '** In Symbols : SYM_NAME$, SYM_COMPANY$
  911. '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  912. '**            
  913. '** Arguments:  All parameters are **read only**. 
  914. '**          prodno%: This is your prodno%.  It is assigned to you by the
  915. '**                   toolkit in the order in which you were registered.
  916. '**                   When your product is part of SmartSuite, SmartSuite
  917. '**                   will always be product #1. (prodno% >=1)
  918. '**          network$: UNINITIALIZED
  919. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  920. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  921. '**                      then step backwards
  922. '**     
  923. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  924. '**                      then step backwards, i.e start at your last dialog
  925. '**                      first.
  926. '**     
  927. '** Errors:    No return code for errors, you must Raise them
  928. '** Author:    MMeth
  929. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  930. '**                             allow the user to step backwards.)
  931. '*************************************************************************
  932.  
  933. PUBLIC FUNCTION DefaultUserReg123 (prodno%, network$, direction$) AS STRING
  934.     DIM ripath$, defdir$, temp%, rc%
  935.  
  936.    DefaultUserReg123 = gNEXT
  937.  
  938.    If network$ = gNODE$ Then
  939.       ripath$ = MakePath (GetSymbolValue(SYM_STF_SRCDIR$), "123w.ri")
  940.    ElseIf network$ = gSTANDARD$ Then
  941.       '** Get123.... is in this file and illustrates how to
  942.       '** retrieve you prod. from lotus.ini
  943.  
  944.         defdir$ = Get123PathfromRegistry() 
  945.       if defdir$ = "" Then
  946.     defdir$ = Get123PathfromLotusIni()
  947.     if defdir$ = "" Then 
  948.                 goto rinotfound
  949.             End if
  950.         else
  951.         ripath$ = MakePath(defdir$, "123w.ri")
  952.     End If
  953.     End if
  954.  
  955.    '' RETURNS TRUE IF SUCCESSFULLY FOUND RI FILE AND READ INFORMATION
  956.    '' This functions populates: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  957.    rc% = Lot_ReadDefaultsfromRi(ripath$) 
  958.  
  959. rinotfound:
  960.  
  961. END FUNCTION
  962.  
  963.  
  964. '*************************************************************************
  965. '** FUNCTION Init123 (prodno%, network$, direction$, basedir$) AS STRING
  966. '**
  967. '** Purpose: This function will be called after the Welcome dialog has been
  968. '**          filled in by the user. This is the first time you will be 
  969. '**          called when the server parameter is valid.  
  970. '**          You need to use this function to intialize certain things. 
  971. '**          (See the MUST DO below).
  972. '**          
  973. '**          This is a good place to put up a LotusScript messagebox warning the user
  974. '**          of a previous version of your product. If there is a previous
  975. '**          version you might want to steer them towards overwriting it,
  976. '**          deleting the old version, or allowing both versions to exist.
  977. '**          
  978. '**
  979. '** Must Do: You **MUST** set inital values for all of the destination
  980. '** =======  directories that you refer to in your INF file.  If you do not,
  981. '**          then InitCopylist will fail!  e.g. SetSymbolValue "123DIR", basedir$
  982. '**          Of course you may be more intelligent.  You should preface your
  983. '**          directory with basedir$.  The toolkit is finding a good drive
  984. '**          letter and basedirectory.  Also, remeber all paths end in a
  985. '**          \ and are lower case.
  986. '**
  987. '**          You should **NOT** define LOTUSFONTSDIR, WINDIR, 
  988. '**          USERDIR & WINSYSDIR. The toolkit does this for you.
  989. '**
  990. '**          Once you have defined destdir symbols, you need to register
  991. '**          them with the toolkit. (See the code below)
  992. '**
  993. '** In Symbols : 
  994. '** Out Symbols: 
  995. '**            
  996. '** Arguments:  All parameters are **read only**. 
  997. '**          prodno%: This is your prodno%.  It is assigned to you by the
  998. '**                   toolkit in the order in which you were registered.
  999. '**                   When your product is part of SmartSuite, SmartSuite
  1000. '**                   will always be product #1. (prodno% >=1)
  1001. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1002. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1003. '**                      then step backwards
  1004. '**     
  1005. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1006. '**                      then step backwards, i.e start at your last dialog
  1007. '**                      first.
  1008. '**
  1009. '**          basedir$:   The toolkit has found a good base. for your directory.
  1010. '**                      This is it.  You should use it.  This will make Smart
  1011. '**                      Suite work, and will pick a good drive letter for you.
  1012. '**     
  1013. '** Errors:    No return code for errors, you must Raise them
  1014. '** Author:    MMeth
  1015. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1016. '**                             allow the user to step backwards.)
  1017. '**
  1018. '*************************************************************************
  1019.  
  1020. PUBLIC FUNCTION Init123 (prodno%, network$, direction$, basedir$) AS STRING
  1021. DIM sym$, previousprod$, symname$, defdir$, position%, proddir$, iniPath$
  1022. DIM rv%, def$, parentdir$, Productfound$, chpt2$, notused%, nfind&, Title$, nFind2&
  1023. DIM nFind1&, nFind3&
  1024. Productfound$ = False
  1025.  
  1026.    Init123 = direction$
  1027.    '' In the backwards case, keep backing up
  1028.    If direction$ = gBACK Then
  1029.       EXIT FUNCTION
  1030.    End If
  1031.  
  1032.    '' Setup Default directory settings
  1033.         basedir$ = GetSymbolValue(SYM_BASEDIR$)
  1034.  
  1035.    '' Setup Default directory settings and the associated
  1036.    '' text that the user will see
  1037.  
  1038.    sym$ = Reg_GetDirSymbolList(prodno%)
  1039.    symname$ = sym$ + gNAME
  1040.  
  1041.    ''These two line register it with the toolkit.
  1042.    SetListItem sym$, 1, "123DIR"
  1043.    SetListItem symname$, 1, "123DIRNAME"
  1044.  
  1045.    ''the names aren't used, but register anyway 
  1046.    SetListItem sym$, 2, "123WORKDIR"
  1047.    SetListItem symname$, 2, "123WORKDIRNAME"
  1048.  
  1049.    SetListItem sym$, 3, "123MASTERSDIR"
  1050.    SetListItem symname$, 3, "123MASTERSDIRNAME"
  1051.  
  1052.    SetListItem sym$, 4, "123BACKUPDIR"
  1053.    SetListItem symname$, 4, "123BACKUPDIRNAME"
  1054.  
  1055.    SetListItem sym$, 5, "123SAMPLESDIR"
  1056.    SetListItem symname$, 5, "123SAMPLEDIRNAME"
  1057.  
  1058.    SetListItem symname$, 6, "SYM_SQLSERVERNAME"
  1059.    SetSymbolValue SYM_SQLSERVERNAME, ""
  1060.  
  1061.    '** NOTE The path in the string table is lower case and ends with a slash
  1062.     SetSymbolValue "123DIR", basedir$ + LdString(SID_123_DIR)
  1063.     SetSymbolValue "123WORKDIR", basedir$ + LdString(SID_123WORK_DIR) + LdString(SID_123_DIR)
  1064.     SetSymbolValue "123MASTERSDIR", basedir$ + LdString(SID_123MASTERS_DIR) + LdString(SID_123_DIR)
  1065.     SetSymbolValue "123BACKUPDIR", basedir$ + LdString(SID_123BACKUP_DIR) + LdString(SID_123_DIR)
  1066.     SetSymbolValue "123SAMPLESDIR", basedir$ + LdString(SID_123SAMPLES_DIR) + LdString(SID_123_DIR)
  1067.  
  1068.     SetSymbolValue "123LANGDIR", GetSymbolValue("123DIR")
  1069.     SetSymbolValue "123SAMPLESLANGDIR", GetSymbolValue("123SAMPLESDIR")
  1070.     SetSymbolValue "123MASTERSLANGDIR", GetSymbolValue("123MASTERSDIR")
  1071.     SetSymbolValue "123ICONLANGDIR", GetSymbolValue("123DIR") & LdString(SID_123ICONS_DIR)
  1072.     SetSymbolValue "123MAPLANGDIR", GetSymbolValue("123DIR") & LdString(SID_123MAPS_DIR)
  1073.  
  1074.     SetSymbolValue "NOTES41DIR", GetSymbolValue("123DIR")
  1075.     SetSymbolValue "NOTES41DATADIR", GetSymbolValue("123DIR")
  1076.  
  1077.    '** This will be the name of the directory that shows up in captions in 
  1078.    '** toolkit dialogs (Static text)
  1079.    SetSymbolValue "123DIRNAME", LdString(SID_123_DIRNAME)
  1080.    SetSymbolValue "123WORKDIRNAME", LdString(SID_123WORK_DIRNAME)
  1081.    SetSymbolValue "123MASTERSDIRNAME", LdString(SID_123MASTERS_DIRNAME)
  1082.    SetSymbolValue "123BACKUPDIRNAME", LdString(SID_123BACKUP_DIRNAME)
  1083.     SetSymbolValue "123SAMPLESDIRNAME", basedir$ + LdString(SID_123SAMPLES_DIRNAME)
  1084.  
  1085.    SetSymbolValue "123LANGDIRNAME", GetSymbolValue("123DIRNAME")
  1086.  
  1087.    '** Put up dialog box, if a version of app is currently running
  1088.    '==========================================================
  1089.    '** Use the window address of the Window name - Caption
  1090.    '** You can alternatly use the address of the class name...MAN
  1091.  
  1092.     '** Use the window class name and see if we can find it
  1093.     nFind& = FindWindowA("LegoAppMdiView",0&)
  1094.     nFind1& = FindWindowA("LegoAppSDIView",0&)
  1095.     nFind2& = FindWindowA("123WParent",0&)
  1096.     nFind3& = FindWindowA("OLEInPlaceAppView",0&)
  1097.  
  1098.     while direction$ = gNEXT$ AND (nFind&<>0 or nFind1&<>0 or nFind2&<>0 or nFind3&<>0)
  1099.     direction$ = PopupModalDlg (DB123_RUNNING, DB123_RUNNING)
  1100.     if direction$ = gBACK$ then
  1101.         Init123 = direction$
  1102.         EXIT FUNCTION
  1103.     end if
  1104.     nFind& = FindWindowA("LegoAppMdiView",0&)
  1105.     nFind2& = FindWindowA("123WParent",0&)
  1106.     wend                                                                                             
  1107.  
  1108.    '** Put up a dlg box, if previous version of product found
  1109.    '==========================================================
  1110.  
  1111.   If network$ = gSTANDARD$ or network$ = gNODE$ Then
  1112.       previousprod$ = DetectPreviousVersion(Productfound$)
  1113.  
  1114.     If Productfound$ = "True" and _ 
  1115.             (previousprod$ = "MONROE" or previousprod$ = "RAPTOR") Then
  1116.         Reg_SetObsFiles prodno%,1
  1117.         end if
  1118.  
  1119.         proddir$ = Get123PathfromRegistry()
  1120.         If proddir$ <> "" and _
  1121.             GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ Then
  1122.         if GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ then
  1123.             Reg_SetPreviousVersion prodno%,"1"
  1124.             else
  1125.             direction$ = PopupModalDlg (DB_EXISTING123, DB_EXISTING123)
  1126.             If direction$ = gBACK Then
  1127.             Init123 = direction$
  1128.             EXIT FUNCTION
  1129.             End If
  1130.             End if
  1131.     End if 
  1132.     End if 
  1133.  
  1134.    '** Set up directory variables for 123
  1135.    '** ==================================================
  1136.  
  1137.   SELECT CASE network$
  1138.  
  1139.   CASE gSERVER$
  1140.        SetSymbolValue "123NAME", LdString(SID_123_SERVER_DIRNAME) 
  1141.  
  1142.   CASE gDISTRIBUTION$
  1143.         SetSymbolValue "123NAME", LdString(SID_123_DIST_DIRNAME)
  1144.  
  1145.   CASE gSTANDARD$, gNODE$
  1146.       '' check if there is an existing product
  1147.         proddir$ = Get123PathfromRegistry()
  1148.         if proddir$ <> "" and _
  1149.         GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ Then
  1150.         SetSymbolValue "123DIR", proddir$
  1151.         end if
  1152.  
  1153.         IF previousprod$ = "MONROE" or previousprod$ = "RAPTOR" THEN
  1154.         defdir$ = Get123PathfromLotusIni()
  1155.             proddir$ = defdir$
  1156.  
  1157.             dim defdirlen%, lastposition%
  1158.  
  1159.             '' Get the last position of "\" in path
  1160.             while defdir$ <> ""
  1161.                 defdirlen% = len(defdir$)
  1162.                 lastposition% = lastposition% + position%
  1163.             position% = INSTR(1, defdir$, "\")
  1164.                 defdir$ = RIGHT(defdir$, defdirlen% - position%)
  1165.             wend
  1166.  
  1167.         ''Get the 1-2-3 directory, excluding <programs> dir
  1168.         IF proddir$ <> "" and lastposition% > 0 THEN
  1169.             proddir$ = MID$(proddir$, 1, lastposition%)
  1170.         SetSymbolValue "123OBSDIR1", proddir$ 
  1171.         END IF
  1172.         END IF
  1173.  
  1174. ''  CASE gNODE$
  1175. ''              if GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ then
  1176. ''                      IF previousprod$ = "MONROE" or previousprod$ = "RAPTOR" THEN
  1177. ''                      defdir$ = Get123PathfromLotusIni()
  1178. ''                      IF defdir$ <> "" THEN
  1179. ''                              ''Get The directory, including the trailing slash, but not "programs\\"
  1180. ''                              position% = INSTR(1, defdir$, LdString(SID_123_PROGDIR))
  1181. ''
  1182. ''                              IF defdir$ <> "" or position% > 0 THEN
  1183. ''                                      proddir$ = MID$(defdir$,1, position% - 1)
  1184. ''                      SetSymbolValue "123OBSDIR1", proddir$ 
  1185. ''                              END IF
  1186. ''                      END IF
  1187. ''                      END IF
  1188. ''              end if
  1189.   END SELECT
  1190.  
  1191. '' Mark directory symbols that need source file adjustment 
  1192. '' Bare filename in .inf file, symbol will be set to the installed location
  1193. '' on the server obtained by reading the server cinstall.ini file
  1194.     MarkFixupSourceDirSymbol("123WORKDIR")
  1195.     MarkFixupSourceDirSymbol("123MASTERSLANGDIR")
  1196.     MarkFixupSourceDirSymbol("123SAMPLESLANGDIR")
  1197.  
  1198. '' secondary language on the SERVER
  1199.    MarkLanguageSubdir("123LANGDIR")
  1200.    MarkLanguageSubdir("123SAMPLESLANGDIR")
  1201.    MarkLanguageSubdir("123MASTERSLANGDIR")
  1202.    MarkLanguageSubdir("123ICONLANGDIR")
  1203.    MarkLanguageSubdir("123MAPLANGDIR")
  1204.  
  1205. END FUNCTION
  1206.  
  1207. '*************************************************************************
  1208. '** FUNCTION PrevVersions123 (prodno%, network$, direction$) AS STRING
  1209. '**
  1210. '** Purpose: This function is called only for SmartSUite.  It is called
  1211. '**          immediately after all the other product functions for
  1212. '**          Init123 are called.  It allows SmartSuite to assess whether
  1213. '**          there are older versions of products around.
  1214. '**          
  1215. '** In Symbols : 
  1216. '** Out Symbols: 
  1217. '**            
  1218. '** Arguments:  All parameters are **read only**. 
  1219. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1220. '**                   toolkit in the order in which you were registered.
  1221. '**                   When your product is part of SmartSuite, SmartSuite
  1222. '**                   will always be product #1. (prodno% >=1)
  1223. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1224. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1225. '**                      then step backwards
  1226. '**     
  1227. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1228. '**                      then step backwards, i.e start at your last dialog
  1229. '**                      first.
  1230. '**
  1231. '** Errors:    No return code for errors, you must Raise them
  1232. '** Author:    MMeth
  1233. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1234. '**                             allow the user to step backwards.)
  1235. '**
  1236. '*************************************************************************
  1237. PUBLIC FUNCTION PrevVersions123 (prodno%, network$, direction$) AS STRING
  1238. DIM nProducts%, prodIndex%, i%
  1239.  
  1240.       nProducts% = Reg_GetNumberOfProducts()
  1241.       FOR prodIndex% = 1 to nProducts%
  1242.       If Reg_GetPreviousVersion(prodIndex%) <> "" Then
  1243.          i% = DoMsgBox("Older Versions Found","", MB_OK)
  1244.          GOTO PREVPRODFOUND
  1245.       End If
  1246.       NEXT
  1247.  
  1248. PREVPRODFOUND:
  1249.  
  1250. END FUNCTION
  1251.  
  1252. '*************************************************************************
  1253. '** FUNCTION PathChange123 (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  1254. '**
  1255. '** Purpose: This function is called whenever the user proposes changes
  1256. '**          to a path for your product.  By the time this function calls
  1257. '**          you, the paths have already been checked syntactically, and
  1258. '**          the directory has been checked to see that it is writeable.
  1259. '**          Your obligation is to verify that the proposed new path is ok
  1260. '**          with you.  If not, put up a Lotus Script :"MESSAGEBOX" 
  1261. '**          telling the user and return gBACK.
  1262. '**          
  1263. '** In Symbols : 
  1264. '** Out Symbols: 
  1265. '**            
  1266. '** Arguments:  All parameters are **read only**. 
  1267. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1268. '**                   toolkit in the order in which you were  registered.
  1269. '**                   When your product is part of SmartSuite, SmartSuite
  1270. '**                   will always be product #1. (prodno% >=1)
  1271. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1272. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1273. '**                      then step backwards
  1274. '**      destdirsym$: The destdir symbol that has changed. e.g. "123DIR"
  1275. '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  1276. '**                   your top level product directory should change,
  1277. '**                   probably "123DIR". When it is false, it means that
  1278. '**                   all related directories should change. It is **YOUR
  1279. '**                   RESPONSIBILITY**  to implement this functionality.
  1280. '**     
  1281. '** Errors:    No return code for errors, you must Raise them
  1282. '** Author:    MMeth
  1283. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1284. '**                             allow the user to step backwards.)
  1285. '**
  1286. '*************************************************************************
  1287.  
  1288. PUBLIC FUNCTION PathChange123 (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  1289.     DIM path$
  1290.  
  1291.    PathChange123 = gNEXT
  1292.     IF destdirsym$ = "123DIR" OR destdirsym$ = GetSymbolValue("123DIR") THEN
  1293.         path$ = GetSymbolValue("123DIR")
  1294.         SetSymbolValue "123LANGDIR", path$
  1295.         Lot_RefreshDestination("123DIR")
  1296.         Lot_RefreshDestination("123LANGDIR")
  1297.         ' icons direcotry must be under 123DIR
  1298.         SetSymbolValue "123ICONLANGDIR", path$ & LdString(SID_123ICONS_DIR)
  1299.         Lot_RefreshDestination("123ICONLANGDIR")
  1300.         ' maps direcotry must be under 123DIR
  1301.         SetSymbolValue "123MAPLANGDIR", path$ & LdString(SID_123MAPS_DIR)
  1302.         Lot_RefreshDestination("123MAPLANGDIR")
  1303.     END IF
  1304. END FUNCTION
  1305.  
  1306. '*************************************************************************
  1307. '** FUNCTION InitCopyList123 (prodno%, network$, direction$) AS STRING
  1308. '**
  1309. '** Purpose:  Product must Initialize the copylist
  1310. '**          
  1311. '** Must Do: You must initialize the copy list.  However,
  1312. '** =======  if you leave the code as is (don't touch it at all),
  1313. '**          it will probably work for you. Copy list must be initialized.
  1314. '**          CAUTION: Make sure that your toplevel section in the
  1315. '**                   acronym.SCR has a keyword of "acronymTOP"
  1316. '**
  1317. '** In Symbols : 
  1318. '** Out Symbols: 
  1319. '**            
  1320. '** Arguments:  All parameters are **read only**. 
  1321. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1322. '**                   toolkit in the order in which you were registered.
  1323. '**                   When your product is part of SmartSuite, SmartSuite
  1324. '**                   will always be product #1. (prodno% >=1)
  1325. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1326. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1327. '**                      then step backwards
  1328. '**     
  1329. '** Errors:    No return code for errors, you must Raise them
  1330. '** Author:    MMeth
  1331. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1332. '**                             allow the user to step backwards.)
  1333. '**
  1334. '*************************************************************************
  1335.  
  1336. PUBLIC FUNCTION InitCopyList123 (prodno%, network$, direction$) AS STRING
  1337. DIM i%, sym$, chpt$, nextprod$, notused%, featuretofind$,chpt2$,section$,SourceWorkDir$,chpt1$
  1338.  
  1339. ON Error STFQUIT GOTO COPYLISTERROR
  1340.  
  1341.    InitCopyList123 = direction$
  1342.    '' In the backwards case, keep backing up
  1343.    If direction$ = gBACK Then
  1344.       EXIT FUNCTION
  1345.    End If
  1346.  
  1347.    sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  1348.    chpt$ = Lot_GetChapterFromKeyWord(sym$)
  1349.    If chpt$ = "" Then
  1350.       ErrorMsg 0, "No chapter in INF for 123TOP"
  1351.       ERROR STFQUIT
  1352.    End IF
  1353.     
  1354.    SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  1355.  
  1356.    CASE gCOMPLETE$
  1357.       i% = F_COMPLETE
  1358.    CASE gLAPTOP$
  1359.       i% = F_LAPTOP
  1360.    CASE gCUSTOM$
  1361.       i% = F_CUSTOM
  1362.    END SELECT
  1363.  
  1364.    Lot_InitializeCopyList chpt$, i%
  1365.  
  1366.    '** Make sure to turn off all sections not available on the server.
  1367.    If network$ = gNODE Then
  1368.       nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)  
  1369.     chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)  
  1370.     WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  1371.             FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  1372.             If Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE Then
  1373.                 notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  1374.             End If
  1375.  
  1376.             chpt$ = Lot_GetNext() 
  1377.     WEND
  1378.    End If
  1379.    EXIT FUNCTION
  1380.  
  1381. COPYLISTERROR:
  1382.    ErrorMsg 0, "Developers: You need to have licenser section with 123TOP in INF file"
  1383.    ERROR STFQUIT
  1384.  
  1385. END FUNCTION
  1386.  
  1387. '*************************************************************************
  1388. '** FUNCTION UI123 (prodno%, network$, direction$) AS STRING
  1389. '**
  1390. '** Purpose: This is your chance to put up any User Interface
  1391. '**          that you want.  Remember, try to keep it short.
  1392. '**          In SmartSuite, if every product puts up two extra
  1393. '**          dialogs, then the SmartSuite will consist of 16 dialogs!
  1394. '**          
  1395. '**          Pay attention to the value of direction, if you are putting
  1396. '**          up more than one dialog.
  1397. '**
  1398. '**          The toolkit will do an accurate space computation later,
  1399. '**          so you can tamper with the copy list. But you shouldn't
  1400. '**          write out anything to the disk until PostCopyCofig!
  1401. '**   
  1402. '** In Symbols : 
  1403. '** Out Symbols: 
  1404. '**            
  1405. '** Arguments:  All parameters are **read only**. 
  1406. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1407. '**                   toolkit in the order in which you were registered.
  1408. '**                   When your product is oart of SmartSuite, SmartSuite
  1409. '**                   will always be product #1. (prodno% >=1)
  1410. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1411. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1412. '**                      then step backwards
  1413. '**     
  1414. '** Errors:    No return code for errors, you must Raise them
  1415. '** Author:    MMeth
  1416. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1417. '**                             allow the user to step backwards.)
  1418. '**
  1419. '*************************************************************************
  1420.  
  1421. PUBLIC FUNCTION UI123 (prodno%, network$, direction$) AS STRING
  1422. DIM notused%, chpt$,chpt2$
  1423.  
  1424.     '*** If custom and not Suite  then surface the more dirs dlg
  1425.    '*** 
  1426.    IF network = gSTANDARD$ then
  1427.      IF Reg_GetProdSelectedInstallType(prodno%) = gCUSTOM$ AND _
  1428.     GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ Then           
  1429.     notused% = RegisterCallback("123","MOREDIRSCB") 
  1430.     direction$ = PopupModalDlg (DB123_MOREDIRS4, DB123_MOREDIRS4)
  1431.      END IF
  1432.    END IF
  1433.  
  1434.    UI123 = direction$
  1435.    '' In the backwards case, keep backing up
  1436.    If direction$ = gBACK Then
  1437.       EXIT FUNCTION
  1438.    End If
  1439.  
  1440.    IF network = gSTANDARD$ or network = gNODE$ then
  1441.      chpt2$ = Lot_GetChapterFromKeyWord("SQLPRG_SHRCNT") 
  1442.      if Lot_GetChapterValInt(chpt2$, F_INOROUT) = 1 then
  1443.     notused% = RegisterCallback("123", "SQLSERVERNAMECB")
  1444.     direction$ = PopupModalDlg (DBM_SQL_SERVER_NAME, DBM_SQL_SERVER_NAME)
  1445.     IF direction$ = gBACK$ THEN
  1446.       ' UI123 = direction$
  1447.        SetSymbolValue SYM_SQLSERVERNAME, ""
  1448.       ' EXIT FUNCTION
  1449.     END IF
  1450.      End If
  1451.    END IF
  1452.  
  1453.   '*** Remove Obsolete Files dlg for  123
  1454.    if Reg_GetObsFiles (prodno%) = 1 AND GetSymbolValue (SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  1455.       network$ = gSTANDARD$ _
  1456.    then
  1457.       notused% = RegisterCallback("123", "RemoveObsoleteFiles123")
  1458.       direction$ = PopupModalDlg (DB123_REMOVEPRODFILES, DB123_REMOVEPRODFILES)
  1459.     
  1460.       '*    the callback did the work, on both IDC_OK and IDC_BACK we
  1461.       '* actually want to go next
  1462.       if direction$ = gBACK then
  1463.          direction$ = gNEXT             
  1464.       end if
  1465.    end if
  1466.  
  1467. '******Method 2 **********
  1468. '*** This method ensures that the dialog will NOT surface during a Language Install
  1469. '*** And handles some other stuff differently
  1470. '       Another method  taken from  LWP.LSS
  1471. '        Give user option to backup currently installed masters
  1472.  
  1473.     IF upgrade = 1 AND network$ = gSTANDARD$ AND _
  1474.         direction$ <> gBACK AND _
  1475.         GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ _
  1476.     THEN
  1477.         IF DoesDirExist(GetPreviousMastersDir()) THEN
  1478.             IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1479.                 BackupSmartMasters123% = Lot_GetKeyValFromResponseFile(_
  1480.                     "123", "BackupSmartMasters") <> "0"
  1481.             ELSE
  1482.                 chpt$ = Lot_GetChapterFromKeyword("123MASTERS")
  1483.                 IF (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) THEN
  1484.                     notused% = RegisterCallback("123", "DB_123BACKUPMASTERSCB")
  1485.                     direction$ = PopupModalDlg(DB123_BACKUPMASTERS, _
  1486.                         DB123_BACKUPMASTERS)
  1487.                 END IF
  1488.             END IF
  1489.             IF (BackupSmartMasters123% = TRUE) THEN
  1490.                 DoBackupSmartMasters
  1491.             END IF
  1492.         END IF
  1493.     END IF
  1494.  
  1495. END FUNCTION
  1496.  
  1497.  
  1498. '*************************************************************************
  1499. '** FUNCTION PreCopyConfig123 (prodno%, network$, direction$, lic%) AS STRING
  1500. '**
  1501. '** Purpose: This is the very last function called before the space is
  1502. '**          accurately computed (to the last byte) and files are copied
  1503. '**          by the toolkit.  If you have any last minute changes to
  1504. '**          do, this is the time to do them.  example:
  1505. '**          Test for monitor resolution, and turn on the chapter
  1506. '**          in the copy list (a memory residident version of the INF file)
  1507. '**          with the appropriate resolution.
  1508. '**          
  1509. '** In Symbols : 
  1510. '** Out Symbols: 
  1511. '**            
  1512. '** Arguments:  All parameters are **read only**. 
  1513. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1514. '**                   toolkit in the order in which you were registered.
  1515. '**                   When your product is part of SmartSuite, SmartSuite
  1516. '**                   will always be product #1. (prodno% >=1)
  1517. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1518. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1519. '**                      then step backwards
  1520. '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  1521. '**     
  1522. '** Errors:    No return code for errors, you must Raise them
  1523. '** Author:    MMeth
  1524. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1525. '**                             allow the user to step backwards.)
  1526. '**
  1527. '*************************************************************************
  1528.  
  1529. PUBLIC FUNCTION PreCopyConfig123 (prodno%, network$, direction$, lic%) AS STRING
  1530.    DIM notused%, hDC&, numypixels%, scrnres$, chpt$, chptname$, chpt1$, used% ,proddir$
  1531.    DIM bcfpath$, insttype$
  1532.  
  1533.    PreCopyConfig123 = gNEXT
  1534.  
  1535.     ''       ****** Language Install Code ******
  1536.    '' For each destination directory that will have language subdirectories for 
  1537.    '' the non-primary language, reset the symbols appropriately
  1538.     '' For a language install SetLanguageSubdir will append the language element 
  1539.     '' to the subdirectory name: e.g.,
  1540.     '' \lotus\smasters for german becomes \lotus\smasters\deutsch 
  1541.     If GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN
  1542.       SetLanguageSubdir "123LANGDIR", "123LANGDIR"
  1543.    END IF
  1544.    IF network$ <> gDISTRIBUTION$ THEN
  1545.         Lot_RefreshDestination("123LANGDIR")
  1546.    END IF
  1547.  
  1548.    ''** Tell the toolkit how many billboards you will have during file copy.
  1549.    ''** This way the toolkit will be avle to calculate how long each billboard
  1550.    ''** should stay up
  1551.    If network$ <> gNODE Then
  1552.       Reg_SetBillboardNumber prodno%, 12
  1553.    Else
  1554.       Reg_SetBillboardNumber prodno%, 1
  1555.    End If
  1556.  
  1557.    hDC& = GetDC(HwndFrame())
  1558.    numYPixels% = GetDeviceCaps(hDC&,VERTRES)
  1559.    notused% = ReleaseDC(HwndFrame(), hDC&)
  1560.    If numYPixels% <= 480 Then
  1561.       ScrnRes$ = "VGA"
  1562.    Else
  1563.       ScrnRes$ = "SVGA"
  1564.    End If
  1565.  
  1566.    If network$ = gSTANDARD$ Then
  1567.       '' RI FILE STANDARD 
  1568.       chptname$ = Lot_GetChapterFromKeyword("123SNDATSVR")
  1569.       notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  1570.    End If
  1571.  
  1572.    If network$ = gSTANDARD$ OR network$=gNODE$ Then
  1573.  
  1574.         ''** Team Consolidate
  1575.         DIM notespath$, notesdatapath$, tcchpt$
  1576.         tcchpt$ = Lot_GetChapterFromKeyword("123TEAMCONS")
  1577.     If Lot_GetChapterValInt(tcchpt$, F_INOROUT) = 1 Then
  1578.             notused% = Lot_SetChapterFilesInCopyListInOrOut(tcchpt$, 0)
  1579.             IF GetNotesPath123(notespath$, notesdatapath$) THEN
  1580.                 ' Notes installed
  1581.                 SetSymbolValue "NOTES41DIR", notespath$
  1582.                 SetSymbolValue "NOTES41DATADIR", notesdatapath$
  1583.                 notused% = Lot_SetChapterFilesInCopyListInOrOut(tcchpt$, 1)
  1584.                 Lot_RefreshDestination("NOTES41DIR")
  1585.                 Lot_RefreshDestination("NOTES41DATADIR")
  1586.             ELSE
  1587.                 notused% = Lot_SetChapterFilesInCopyListInOrOut(tcchpt$, 0)
  1588.             END IF
  1589.         End If
  1590.  
  1591.       '** TURN OFF SERVER SPECIFIC BITMAPS
  1592.       chptname$ = Lot_GetChapterFromKeyword("123SVGASRV")
  1593.       notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  1594.  
  1595.       If ScrnRes$ = "VGA" Then
  1596.         chptname$ = Lot_GetChapterFromKeyword("123VGA")
  1597.         notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  1598.         chptname$ = Lot_GetChapterFromKeyword("123SVGA")
  1599.         notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  1600.       ElseIf ScrnRes$ = "SVGA" Then
  1601.             chptname$ = Lot_GetChapterFromKeyword("123VGA")
  1602.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  1603.             chptname$ = Lot_GetChapterFromKeyword("123SVGA")
  1604.             notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  1605.       End If
  1606.  
  1607.         ''Cleanning up Registry before copy files.
  1608.         CleanRegistryKeys123 prodno%
  1609.  
  1610.         '' Only MigrareFills and BackupMaps for first language
  1611.         IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  1612.             '' Fills - migrating fills.ini to the registry
  1613.             MigrateFillsPrefReg
  1614.  
  1615.             '' Mapping - copying outside maps over, and set up registry
  1616.         If network$<>gNODE$ Then
  1617.                 If upgrade = 1 Then
  1618.                     chpt$ = Lot_GetChapterFromKeyword("123CORE")
  1619.                     IF (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) THEN
  1620.                         DoBackupMaps
  1621.                     END IF
  1622.                 End If
  1623.             End If
  1624.         END IF
  1625.  
  1626.     '*** REMOVE PRIOR VERSION
  1627.         DIM ProdKey$, Value$, ObsProdDir$, cbBuf&, installDir$
  1628.  
  1629.     ProdKey$ = "Software\Lotus\123\97.0\"
  1630.     Value$ = "Path"
  1631.  
  1632.     '***Get the directory for the version to be removed
  1633.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, ProdKey$) THEN
  1634.         notused% = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, ProdKey$, _
  1635.                         Value$, REG_DWORD, ObsProdDir$, cbBuf&)
  1636.  
  1637.         '***prepare the 2 paths for a string compare
  1638.         installDir$ = NullTrim(GetSymbolValue("123DIR"))
  1639.         ObsProdDir$ = NullTrim(ObsProdDir$)
  1640.         IF RIGHT$(installDir$,1) <> "\" THEN installDir$ = installDir$ + "\"
  1641.         IF RIGHT$(ObsProdDir$,1) <> "\" THEN ObsProdDir$ = ObsProdDir$ + "\"
  1642.  
  1643.         notused% = StrCompare(installDir$,ObsProdDir$,1)
  1644.   
  1645.         IF StrCompare(installDir$,ObsProdDir$,1) = 0 AND _
  1646.             notused% = ERROR_SUCCESS THEN
  1647. '                       notused% = RemovePriorVersion( "123" , "97.0")
  1648.         END IF
  1649.     END IF
  1650.     '*** DONE REMOVING PRIOR VERSION
  1651.  
  1652.    ElseIf network$ = gSERVER$ Then
  1653.       '' RI FILE FOR SERVER
  1654.       chptname$ = Lot_GetChapterFromKeyword("123VERSTD")
  1655.       notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  1656.       chptname$ = Lot_GetChapterFromKeyword("123VGA")
  1657.       notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  1658.       chptname$ = Lot_GetChapterFromKeyword("123SVGA")
  1659.       notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 0)
  1660.       chptname$ = Lot_GetChapterFromKeyword("123SVGASRV")
  1661.       notused%  = Lot_SetChapterFilesInCopyListInOrOut (chptname$, 1)
  1662.    End If
  1663.  
  1664.     '** set fWriteBCF% so that entries are added to LOTUS.BCF
  1665.     '** fWriteBCF should be 1 in case of:
  1666.     '**  1) node install
  1667.     '**  2) customized standalone install
  1668.     '**  3) standard (not minimum) install AND LOTUS.BCF not exists
  1669.     fWriteBCF% = 0
  1670.     IF network$ = gNODE$ THEN
  1671.         fWriteBCF% = 1
  1672.     ELSEIF network$ = gSTANDARD$ THEN
  1673.         insttype$ = Reg_GetProdSelectedInstallType(prodno%)
  1674.         IF insttype$ = gCUSTOM$ THEN
  1675.             fWriteBCF% = 1
  1676.         ELSEIF insttype$ = gCOMPLETE$ THEN
  1677.             bcfpath$ = MakePath(GetSymbolValue("123DIR"), "lotus.bcf")
  1678.             IF Lot_DoesFileExist(bcfpath$) = 0 THEN
  1679.                 fWriteBCF% = 1
  1680.             END IF
  1681.         END IF
  1682.     END IF
  1683.  
  1684. END FUNCTION
  1685.  
  1686. '*************************************************************************
  1687. '** FUNCTION  AddTheBillBoards123 (prodno%, network$, direction$, nbytes&)
  1688. '**
  1689. '** Purpose: This is where to add the billboards using the function:
  1690. '**          AddToBillboardList. Use nbytes& as the last parameter to
  1691. '**          the MS-SETUP function AddToBillboardList
  1692. '**
  1693. '** In Symbols : 
  1694. '** Out Symbols: 
  1695. '**            
  1696. '** Arguments:  All parameters are **read only**. 
  1697. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1698. '**                   toolkit in the order in which you were registered.
  1699. '**                   When your product is part of SmartSuite, SmartSuite
  1700. '**                   will always be product #1. (prodno% >=1)
  1701. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1702. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1703. '**                      then step backwards
  1704. '**           nbytes: Determines the duration of billboard timing.
  1705. '**             NOTE: Make sure to use billboard Ids that are unique to
  1706. '**                   your product. e.g. IDD_123BILLBD1_BMP & 
  1707. '**                   DB_123BILLBD1_BMP
  1708. '**     
  1709. '** Errors:    No return code for errors, you must Raise them
  1710. '** Author:    MMeth
  1711. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1712. '**                             allow the user to step backwards.)
  1713. '**
  1714. '*************************************************************************
  1715. PUBLIC FUNCTION AddTheBillBoards123 (prodno%, network$, direction$, nbytes&) AS STRING
  1716.   DIM notused%
  1717.    AddTheBillBoards123 = direction$
  1718.    '' In the backwards case, keep backing up
  1719.    If direction$ = gBACK Then
  1720.       EXIT FUNCTION
  1721.    End If
  1722.  
  1723.    '** For node only display one billboard.
  1724.    If network$ <> gNODE$ Then
  1725.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1726.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1727.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1728.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD1_BMP)
  1729.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd1, "FNameOrgDlgProc", nbytes& 
  1730.  
  1731.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1732.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1733.       SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1734.       SetListItem "NORMALFONT",4, STR$(IDC_TEXT5)
  1735.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1736.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD2_BMP)
  1737.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd2, "FNameOrgDlgProc", nbytes& 
  1738.  
  1739.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT3)
  1740.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT5)
  1741.       SetListItem "NORMALFONT",3, STR$(IDC_TEXT7)
  1742.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1743.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD3_BMP)
  1744.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd3, "FNameOrgDlgProc", nbytes& 
  1745.  
  1746.  
  1747.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT3)
  1748.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT5)
  1749.       SetListItem "NORMALFONT",3, STR$(IDC_TEXT7)
  1750.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1751.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD4_BMP)
  1752.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd4, "FNameOrgDlgProc", nbytes& 
  1753.  
  1754.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT3)
  1755.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT5)
  1756.       SetListItem "NORMALFONT",3, STR$(IDC_TEXT7)
  1757.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1758.       SetListItem "IDC_BMP", 2, STR$(IDD_123billbd5_BMP)
  1759.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd5, "FNameOrgDlgProc", nbytes& 
  1760.  
  1761.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1762.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1763.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1764.       SetListItem "IDC_BMP", 2, STR$(IDD_123billbd6_BMP)
  1765.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd6, "FNameOrgDlgProc", nbytes& 
  1766.  
  1767.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT3)
  1768.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1769.       SetListItem "IDC_BMP", 2, STR$(IDD_123billbd7_BMP)
  1770.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd7, "FNameOrgDlgProc", nbytes& 
  1771.  
  1772.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1773.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT4)
  1774.       SetListItem "NORMALFONT",3, STR$(IDC_TEXT6)
  1775.       SetListItem "NORMALFONT",4, STR$(IDC_TEXT8)
  1776.       SetListItem "NORMALFONT",5, STR$(IDC_TEXT10)
  1777.       SetListItem "NORMALFONT",6, STR$(IDC_TEXT13)
  1778.       SetListItem "NORMALFONT",7, STR$(IDC_TEXT14)
  1779.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1780.       SetListItem "IDC_BMP", 2, STR$(IDD_123billbd8_BMP)
  1781.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd8, "FNameOrgDlgProc", nbytes& 
  1782.  
  1783.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1784.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT4)
  1785.       SetListItem "NORMALFONT",3, STR$(IDC_TEXT6)
  1786.       SetListItem "NORMALFONT",4, STR$(IDC_TEXT8)
  1787.       SetListItem "NORMALFONT",5, STR$(IDC_TEXT10)
  1788.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1789.       SetListItem "IDC_BMP", 2, STR$(IDD_123billbd12_BMP)
  1790.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd12, "FNameOrgDlgProc", nbytes& 
  1791.  
  1792.  
  1793.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT3)
  1794.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT5)
  1795.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1796.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD9_BMP)
  1797.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd9, "FNameOrgDlgProc", nbytes& 
  1798.  
  1799.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT3)
  1800.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT5)
  1801.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1802.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD10_BMP)
  1803.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd10, "FNameOrgDlgProc", nbytes& 
  1804.  
  1805.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1806.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1807.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD11_BMP)
  1808.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd11, "FNameOrgDlgProc", nbytes& 
  1809.     else 
  1810.       SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1811.       SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1812.       SetListItem "IDC_BMP", 1, STR$(IDD_123TITLE_BMP)
  1813.       SetListItem "IDC_BMP", 2, STR$(IDD_123BILLBD1_BMP)
  1814.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_123billbd1, "FNameOrgDlgProc", nbytes& 
  1815.  
  1816.     End If
  1817.  
  1818. END FUNCTION
  1819.  
  1820. '*************************************************************************
  1821. '** FUNCTION PostCopyConfig123 (prodno%, network$, direction$, programgroup$) AS STRING
  1822. '**
  1823. '** Purpose: This is called just after file copy has completed.
  1824. '**          This is your opportunity to do all the configuaration
  1825. '**          you need.  This includes:
  1826. '**          
  1827. '**          1. Writing to all your ini files
  1828. '**             Don't worry about ini files related to shared components
  1829. '**          2. Writing to OLE registration database
  1830. '**             Don't worry about OLE registration related to shared 
  1831. '**             components
  1832. '**          3. Writing to any other config files you may support
  1833. '**          4. Writing out user registration information,
  1834. '**             no matter how your product picks up this info
  1835. '**          5. Create any working directories
  1836. '**             A working directory is one that does not contain any
  1837. '**             files, thus the toolkit did not create it for you.
  1838. '**
  1839. '**          NOTE: THERE are many subtleties in here if you are
  1840. '**                dealing with node and CD installs.  In particular,
  1841. '**                you must be ***very*** careful to understand where the
  1842. '**                things are that you are pointing to.  They could
  1843. '**                be on the node, server, or CD!  This, in combination
  1844. '**                with the INF file for Server/Node, is probably the 
  1845. '**                trickiest part of writing a quality install.  When 
  1846. '**                configuring, you must be careful to consider what 
  1847. '**                happens if there is a pre-existing product on the 
  1848. '**                machine, in the same location or
  1849. '**                another one!  This is very very tricky.  What happens
  1850. '**                if you had a full installation previously in location C:\FOO
  1851. '**                and now the user is installing a minimum installation in loaction
  1852. '**                D:\FOO. 
  1853. '**
  1854. '**                Each and every thing you do for configuartion needs very
  1855. '**                careful thought.
  1856. '**
  1857. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  1858. '**                This currrently tells you the location of a feature
  1859. '**                if the feature appears both in the SERVER.INF and the
  1860. '**                NODE.INF referred to by the same Keyword ID.
  1861. '**                We do not support CDs with this command yet, but we will 
  1862. '**                at some time.
  1863. '**
  1864. '**                Also look out for writing to a file when the directory
  1865. '**                doesn't exist.  If the user deselected one of your
  1866. '**                options, your install may still be running, but since
  1867. '**                there were no files to copy into the directory
  1868. '**                it wasn't created by the toolkit!
  1869. '**
  1870. '**                Finally, remember that configuration files generally
  1871. '**                hold the state that the user has customized earlier.
  1872. '**                Sometimes you don't want to overwrite these!
  1873. '**                You will primarily use three MS-SETUP functions
  1874. '**                in here: 
  1875. '**                1. CreateIniKeyValue  (writing to ini files)
  1876. '**                2. SetRegKeyValue     (writing to OLE reg DB)
  1877. '**
  1878. '**                CreateProgmanGroup &  ShowProgmanGroup are
  1879. '**                done for you by the time you reach this
  1880. '**                function.
  1881. '**
  1882. '**                You will not have to do any configuration of LOTUS SHARED
  1883. '**                tools.  The toolkit will do this for you.
  1884. '** In Symbols : 
  1885. '** Out Symbols: 
  1886. '**            
  1887. '** Arguments:  All parameters are **read only**. 
  1888. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1889. '**                   toolkit in the order in which you were registered.
  1890. '**                   When your product is part of SmartSuite, SmartSuite
  1891. '**                   will always be product #1. (prodno% >=1)
  1892. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1893. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1894. '**                      then step backwards
  1895. '**    programgroup$: The name of the program group where the user chose to
  1896. '**                   install the program manager icons     
  1897. '**
  1898. '** Errors:    No return code for errors, you must Raise them
  1899. '** Author:    MMeth
  1900. '** Returns:   return: gNEXT 
  1901. '**
  1902. '*************************************************************************
  1903.  
  1904. PUBLIC FUNCTION PostCopyConfig123 (prodno%, network$, direction$, programgroup$) AS STRING
  1905. DIM ripath$, workdir$,proddir$,progdir$,pathtowinhelp$,Helpdir$,progdir1$,progdir2$
  1906. DIM addinsdir$,Backupdir$,notused%, chpt$, ret%, InfFile$, LanguageAcronym$, langsubdir$
  1907. DIM srcbcf$, destbcf$, errcode&, loccompdir$, srvcompdir$, locfile$, srvfile$, dwtype&
  1908. CONST tlbfile$ = "ltscsn10.tlb"
  1909. CONST dllfile$ = "ltscsn10.dll"
  1910.  
  1911.    PostCopyConfig123 = direction$
  1912.    '' In the backwards case, keep backing up
  1913.    If direction$ = gBACK Then
  1914.       EXIT FUNCTION
  1915.    End If
  1916.  
  1917.    If network$ <> gNODE$ Then 
  1918.       SetSymbolValue SYM_CDDRIVE$, GetSymbolValue(SYM_INSTALL_SOURCE)
  1919.    End If
  1920.    
  1921.     IF fWriteBCF% = 1 THEN
  1922.         Write_BCF_FILE prodno%, network$
  1923.     END IF
  1924.  
  1925.     If network$ = gNODE$ Then
  1926.         '** WORKAROUND: copying LTSCSN10.TLB & .DLL to the node
  1927.         dwtype& = REG_SZ
  1928.         errcode& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, gREGLOTUSCOMP, _
  1929.                             "LocalPath", dwtype&, loccompdir$, 1024)
  1930.         IF loccompdir$ <> "" THEN
  1931.             loccompdir$ = NullTrim(loccompdir$)
  1932.             srvcompdir$ = GetSymbolValue(SYM_NETCOMPONENT$)
  1933.             ' LTSCSN10.TLB
  1934.             locfile$ = MakePath(loccompdir$, tlbfile$)
  1935.             IF Lot_DoesFileExist(locfile$) THEN
  1936.                 srvfile$ = MakePath$(srvcompdir$, tlbfile$)
  1937.                 IF Lot_DoesFileExist(srvfile$) THEN
  1938.                     errcode& = CopyFileA(srvfile$, locfile$, 0)
  1939.                 END IF
  1940.             END IF
  1941.             ' LTSCSN10.DLL
  1942.             locfile$ = MakePath(loccompdir$, dllfile$)
  1943.             IF Lot_DoesFileExist(locfile$) THEN
  1944.                 srvfile$ = MakePath$(srvcompdir$, dllfile$)
  1945.                 IF Lot_DoesFileExist(srvfile$) THEN
  1946.                     errcode& = CopyFileA(srvfile$, locfile$, 0)
  1947.                 END IF
  1948.             END IF
  1949.         END IF
  1950.     End If
  1951.  
  1952.    ''** WRITE TO RI FILE
  1953.    ''*******************
  1954.    ripath$ = GetSymbolValue("123DIR") + "123w.ri"
  1955.    If Lot_WriteToRiFile (ripath$) = FALSE Then
  1956.       '*** SHOULD BE RESOURCED STRING
  1957.       ErrorMsg SID_123,LdString(SID_123_ERR_RI) + ripath$
  1958.    End If
  1959.  
  1960.    If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
  1961.         GOTO SKIPCONFIG
  1962.     End If
  1963.  
  1964.    '** Write entries in win.ini
  1965.    '** Write entries in 123.ini
  1966.    '** Log the product into \windows\lotus.ini
  1967.    '** Write the OLE registration
  1968.    '** Only write this stuff if program files installed
  1969.     IF network = gSTANDARD$ or network = gNODE$ Then 
  1970.         'Create directories, if they aren't there already
  1971.         DIM NewDir$
  1972.         IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN
  1973.             langsubdir$ = GetSymbolValue(SYM_LANGUAGE_SUBDIR$) & "\"
  1974.         ELSE
  1975.             langsubdir$ = ""
  1976.         END IF
  1977.         NewDir$ = GetSymbolValue("123WORKDIR")
  1978.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  1979.             CreateDir NewDir$, cmoNone
  1980.             notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  1981.         END IF
  1982.         LanguageAcronym$=GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  1983.         ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  1984.                                             gREGLOTUS+"123\97.0\Paths\Work",_
  1985.                                             LanguageAcronym$,_
  1986.                                             REG_SZ,_
  1987.                                             NewDir,_
  1988.                                             LENBP(NewDir)+1)
  1989.  
  1990.         IF network$ = gSTANDARD$ THEN
  1991.             NewDir$ = GetSymbolValue("123MASTERSLANGDIR") & langsubdir$
  1992.             IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  1993.                 CreateDir NewDir$, cmoNone
  1994.                 notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  1995.             END IF
  1996.         ELSE ' network$ = gNODE$
  1997.             NewDir$ = GetDestinationSymbolValue123("123MASTERSLANGDIR", TRUE)
  1998.             IF DoesDirExist(NewDir$) = 0 THEN
  1999.                 NewDir$ = Lot_TrimEndSlash(GetSymbolValue("123MASTERSLANGDIR"))
  2000.                 CreateDir NewDir$, cmoNone
  2001.                 notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  2002.             END IF
  2003.             NewDir$ = NewDir$ & "\"
  2004.         END IF
  2005.         ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2006.                                             gREGLOTUS+"123\97.0\Paths\SMasters",_
  2007.                                             LanguageAcronym$,_
  2008.                                             REG_SZ,_
  2009.                                             NewDir$,_
  2010.                                             LENBP(NewDir$)+1)
  2011.  
  2012.         NewDir$ = GetSymbolValue("123BACKUPDIR")
  2013.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  2014.             CreateDir NewDir$, cmoNone
  2015.             notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  2016.         END IF
  2017. '               ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2018. '                                                                                       gREGLOTUS+"123\97.0\Paths\Backup,_
  2019. '                                                                                       LanguageAcronym$,_
  2020. '                                                                                       REG_SZ,_
  2021. '                                                                                       NewDir$,_
  2022. '                                                                                       LEN(NewDir$)+1)
  2023.  
  2024.         IF Lot_IsTheFeatureInstalled("123TOUR") THEN
  2025.             NewDir$ = Lot_WhereIsFeature(prodno%, "123TOUR", "tour\ssnnet"+LanguageAcronym$+".prz")
  2026.             NewDir$ = Lot_TrimEndSlash(NewDir$) & "\Tour\"
  2027.         ELSE
  2028.             NewDir$ = MakePath(GetSymbolValue("123DIR"), "Tour") + "\"
  2029.             IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  2030.                 CreateDir NewDir$, cmoNone
  2031.                 notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  2032.             END IF
  2033.         END IF
  2034.         ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2035.                                             gREGLOTUS+"123\97.0\Paths\Tour",_
  2036.                                             LanguageAcronym$,_
  2037.                                             REG_SZ,_
  2038.                                             NewDir$,_
  2039.                                             LENBP(NewDir$)+1)
  2040.  
  2041.         NewDir$ = GetSymbolValue("123ICONLANGDIR") & langsubdir$
  2042.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  2043.             CreateDir NewDir$, cmoNone
  2044.             notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  2045.         END IF
  2046.         ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2047.                                             gREGLOTUS+"123\97.0\Paths\SmartIcons",_
  2048.                                             LanguageAcronym$,_
  2049.                                             REG_SZ,_
  2050.                                             NewDir$,_
  2051.                                             LENBP(NewDir$)+1)
  2052.  
  2053.         NewDir$ = "123SAMPLELANG" & LanguageAcronym$
  2054.         IF Lot_IsTheFeatureInstalled(NewDir$) THEN
  2055.             IF network$ = gSTANDARD$ THEN
  2056.                 NewDir$ = GetSymbolValue("123SAMPLESLANGDIR") & langsubdir$
  2057.             ELSE ' network$ = gNODE$
  2058.                 NewDir$ = GetDestinationSymbolValue123("123SAMPLESLANGDIR", TRUE) & "\"
  2059.             END IF
  2060.         ELSE
  2061.             NewDir$ = GetSymbolValue("123SAMPLESLANGDIR") & langsubdir$
  2062.             IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  2063.                 CreateDir NewDir$, cmoNone
  2064.                 notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  2065.             END IF
  2066.         END IF
  2067.         ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2068.                                             gREGLOTUS+"123\97.0\Paths\Samples",_
  2069.                                             LanguageAcronym$,_
  2070.                                             REG_SZ,_
  2071.                                             NewDir$,_
  2072.                                             LENBP(NewDir$)+1)
  2073.  
  2074.         NewDir$ = MakePath(GetSymbolValue("123DIR"), "Auto") + "\"
  2075.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  2076.             CreateDir NewDir$, cmoNone
  2077.             notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  2078.         END IF
  2079.         ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2080.                                             gREGLOTUS+"123\97.0\Paths\AutoOpen",_
  2081.                                             "",_
  2082.                                             REG_SZ,_
  2083.                                             NewDir$,_
  2084.                                             LENBP(NewDir$)+1)
  2085.  
  2086.         IF Lot_IsTheFeatureInstalled("123CORE") THEN
  2087.             NewDir$ = Lot_WhereIsFeature(prodno%, "123CORE", "addins\publhtml.12a")
  2088.             NewDir$ = Lot_TrimEndSlash(NewDir$) & "\Addins\"
  2089.         ELSE
  2090.             NewDir$ = MakePath(GetSymbolValue("123DIR"), "Addins") + "\"
  2091.             IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  2092.                 CreateDir NewDir$, cmoNone
  2093.                 notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_DIRECTORY$, NewDir$)
  2094.             END IF
  2095.         END IF
  2096.         ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2097.                                             gREGLOTUS+"123\97.0\Paths\AddIns",_
  2098.                                             "",_
  2099.                                             REG_SZ,_
  2100.                                             NewDir$,_
  2101.                                             LENBP(NewDir$)+1)
  2102.  
  2103.         '** Write product specific registry keys
  2104.         AddRegistryKeys123 prodno%, network$
  2105.       ' ** Write the ODBC registration 
  2106.       Write_ODBC_Reg prodno%, network$
  2107.  
  2108.         If Lot_IsTheFeatureInstalled("123CORE") <> FALSE Then
  2109.             '** Write the OLE registration database
  2110.             ret% = Lot_WriteOLERegFor123(network$, prodno%)
  2111.  
  2112.             '** Write the OCX registration database
  2113.             ret% = Lot_WriteOCXRegFor123(network$, prodno%)
  2114.  
  2115.             '** Write the MAP registration database
  2116.             ret% = Lot_WriteMapRegFor123(network$, prodno%)
  2117.  
  2118.             '** Write the ImageMark registration database
  2119.             ret% = Lot_WriteImgRegFor123(network$, prodno%)
  2120.  
  2121.             '** Write the Help registration database
  2122.             ret% = Lot_WriteHlpRegFor123(network$, prodno%)
  2123.  
  2124.             '** Write the uninstall file(not in INF) registration database
  2125.             ret% = Lot_RegUninstFilFor123(network$, prodno%)
  2126.  
  2127.             '** Write the User Preference registration database
  2128.             IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  2129.                 If upgrade = 1 Then
  2130.                 MigrateUserPrefReg
  2131.                 End if
  2132.             END IF
  2133.  
  2134.             '** Clean up GRG files for standard install
  2135.             If network = gSTANDARD$ Then
  2136.                 Dim grgPath$
  2137.                 grgPath$ = Lot_WhereIsFeature(prodno%, "123CORE", "123w97.grg")
  2138.                 grgPath$ = MakePath(grgPath$, "123w97.grg")
  2139.                 If DoesFileExist(grgPath$, femExists) Then
  2140.                     'SetFileAttr grgPath$, 0
  2141.                     Kill grgPath$
  2142.                 End If
  2143.  
  2144.             End If
  2145.  
  2146.             proddir$ = GetSymbolValue("123DIR")
  2147.             ret% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  2148.                                             gREGLOTUS+"123\97.0\Paths\Personal",_
  2149.                                             "",_
  2150.                                             REG_SZ,_
  2151.                                             proddir$,_
  2152.                                             LENBP(proddir$)+1)
  2153.         End If
  2154.     END IF
  2155.  
  2156.    '** Write the uninstaller - but only for the primary language
  2157.    If GetSymbolValue(SYM_INSTALLKIND$) <> gLANGUAGEINSTALL$ Then
  2158.         IF network$ = gSTANDARD$ THEN
  2159.             InfFile$ = GetSymbolValue("INSTDIR") + "123.INF"
  2160.         ELSE
  2161.             IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  2162.                 InfFile$ = GetSymbolValue("SUITDIR") + "123NODE.INF"
  2163.             ELSE
  2164.                 InfFile$ = GetSymbolValue("123DIR") + "123NODE.INF"
  2165.             END IF
  2166.         END IF
  2167.         notused%=Lot_RegisterUninstaller(LdString(SID_123_PROD_NAME),_
  2168.                     LdString(SID_123_PROD_VER),_
  2169.                     LdString(SID_123_OFFICIALNAME),_
  2170.                     InfFile$,_
  2171.                     TRUE,FALSE,_
  2172.                     GetSymbolValue(SYM_INSTALL_LANGUAGE$),_
  2173.                     "c:\uninst.log","",_
  2174.                     "")
  2175.     End If
  2176.  
  2177. SKIPCONFIG:
  2178. END FUNCTION
  2179.  
  2180. '*************************************************************************
  2181. '** PUBLIC SUB AddRegistryKeys123 (prodno%, network$) 
  2182. '**
  2183. '** Purpose: This is called just after file copy has completed.
  2184. '**          1. Add product specific Registry Keys.
  2185. '**
  2186. '**           Each and every thing you do for configuartion needs very
  2187. '**           careful thought.
  2188. '**
  2189. '** In Symbols : 
  2190. '** Out Symbols: 
  2191. '**            
  2192. '** Arguments:  All parameters are **read only**. 
  2193. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2194. '**                   toolkit in the order in which you were registered.
  2195. '**                   When your product is part of SmartSuite, SmartSuite
  2196. '**                   will always be product #1. (prodno% >=1)
  2197. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2198. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2199. '**                      then step backwards
  2200. '**    programgroup$: The name of the program group where the user chose to
  2201. '**                   install the program manager icons     
  2202. '**
  2203. '** Errors:    No return code for errors, you must Raise them
  2204. '** Author:    PMD
  2205. '**
  2206. '*************************************************************************
  2207. PUBLIC SUB AddRegistryKeys123 (prodno%, network$) 
  2208. DIM LocPath$, Filename$, descript$, gbuf$, instvalue&
  2209. DIM szkey$, szkey2$, nsize&, nsize1&,nsize2&,Insttype$,nsize3,Altcomp$
  2210. DIM RegStatus&, keyvalue$, keyvalue1$,keyvalue2$, keyvalue3$, keyvalue4$, ComPath$
  2211. DIM ProdDir$, TypeLibDir$
  2212.  
  2213. '*****************************WWEXE[[
  2214. DIM BeginKinsoku$, EndKinsoku$, FontName$,   FontSize&,   FontPitch&,     CharSet&,    CodePage&,   IgnoreAlign$
  2215. DIM keyvalue10$,   keyvalue11$, keyvalue12$, keyvalue13$, keyvalue14$, keyvalue15$, keyvalue16$, keyvalue17$
  2216. DIM nsize10&,      nsize11&,    nsize12&,    nsize13&,    nsize14&,    nsize15&,    nsize16&,    nsize17&
  2217. DIM szkeyKinsoku$, szkeyPanelPref$
  2218. DIM Local
  2219. szkeyKinsoku$ = gREGLOTUS+"123\97.0\Kinsoku"
  2220. szkeyPanelPref$ = gREGLOTUS+"123\97.0\Panel Preferences"
  2221. '*****************************WWEXE]]
  2222.  
  2223. szkey$ = gREGLOTUS+"123\97.0"
  2224. descript$ = "Lotus 1-2-3 97.0"
  2225. keyvalue$ = "Path"
  2226. keyvalue1$ = "Description"
  2227. keyvalue2$ = "Name"
  2228. Insttype$ = "InstallType"
  2229. AltComp$ = "AltComponents"
  2230. Filename = "123w.exe"
  2231. nsize1 = lenbp(Filename) + 1
  2232. nsize2 = lenbp(descript$) + 1
  2233. nsize3 = lenbp(instvalue)
  2234.  
  2235. '*****************************WWEXE[[
  2236. keyvalue10$ = "BeginKinsoku"
  2237. keyvalue11$ = "EndKinsoku"
  2238. keyvalue12$ = "FontName"
  2239. keyvalue13$ = "FontSize"
  2240. keyvalue14$ = "FontPitch"
  2241. keyvalue15$ = "CharSet"
  2242. Keyvalue16$ = "CodePage"
  2243. Keyvalue17$ = "IgnoreEvenAlignment"
  2244.  
  2245.    CodePage = GetACP()
  2246.    Local    = 0
  2247.  
  2248.       BeginKinsoku$ = LdString(SID_123_BEGINKINSOKU)
  2249.       EndKinsoku$   = LdString(SID_123_ENDKINSOKU)
  2250.       IgnoreAlign$  = LdString(SID_123_IGNOREALIGN)
  2251.       FontName$     = LdString(SID_123_FONTNAME)
  2252.  
  2253. '*** for Japan
  2254.    If CodePage = 932 Then
  2255.       FontSize&     = 10
  2256.       FontPitch&    = 0
  2257.       CharSet       = 128
  2258.       Local         = 1
  2259.  
  2260. '*** for PRC
  2261.    ElseIf CodePage = 936 Then
  2262.       FontSize&     = 9 
  2263.       FontPitch&    = 1 
  2264.       CharSet       = 134 
  2265.       Local         = 1
  2266.  
  2267. '*** for Korea
  2268.    ElseIf CodePage = 949 Then
  2269.       FontSize&     = 9
  2270.       FontPitch&    = 2 
  2271.       CharSet       = 129 
  2272.       Local         = 1
  2273.  
  2274. '*** for Taiwan
  2275.    ElseIf CodePage = 950 Then
  2276.       FontSize&     = 9 
  2277.       FontPitch&    = 2 
  2278.       CharSet       = 136 
  2279.       Local         = 1
  2280.  
  2281. '   Else
  2282. '      FontSize&     = 10
  2283. '      FontPitch&    = 0
  2284. '      CharSet       = 1
  2285. '      Local         = 0
  2286.     End if
  2287.  
  2288.    If Local = 1 Then
  2289.     nsize10 = lenbp(BeginKinsoku$) + 1
  2290.     nsize11 = lenbp(EndKinsoku$) + 1
  2291.     nsize12 = lenbp(FontName$) + 1
  2292.     nsize13 = lenbp(FontSize)
  2293.     nsize14 = lenbp(FontPitch)
  2294.     nsize15 = lenbp(CharSet)
  2295.     nsize16 = lenbp(CodePage)
  2296.     nsize17 = lenbp(IgnoreAlign$) + 1
  2297.     End if
  2298. '*****************************WWEXE]]
  2299.  
  2300.    If network$ = gNODE$ Then
  2301.       instvalue = 1
  2302.    ElseIf network$ = gSTANDARD$ Then
  2303.       instvalue = 0
  2304.     End if
  2305.  
  2306.     locpath$ = Lot_WhereIsFeature(prodno%, "123CORE", LdString(SID_123_123EXE))
  2307.     nsize = lenbp(LocPath$) + 1
  2308.  
  2309.    regStatus = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey)
  2310.     ' Register for uninstall
  2311.      'regStatus = Lot_RegisterObject("123TOP", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_LOCAL_MACHINE\"+szkey$)
  2312.      'regStatus = Lot_RegisterObject("123TOP", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CURRENT_USER\"+szkey$)
  2313.      regStatus = Lot_RegisterObject("123TOP", UNIN_CLASS_REGISTRY_HIVE$, "HKEY_USERS\.DEFAULT\"+szkey$)
  2314.  
  2315.    regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, REG_SZ, LocPath$, nsize)
  2316.    regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue2$, REG_SZ, Filename, nsize1)
  2317.    regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue1$, REG_SZ, descript$, nsize2)
  2318.    regStatus = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, Insttype$, REG_DWORD, instvalue, nsize3)
  2319.  
  2320.     keyvalue$ = GetSymbolValue(SYM_NAME$)
  2321.     nsize = LENBP(keyvalue$)+1
  2322.    regStatus = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, szkey, "UserName", REG_SZ, keyvalue$, nsize)
  2323.  
  2324.     keyvalue$ = GetSymbolValue(SYM_COMPANY$)
  2325.     nsize = LENBP(keyvalue$)+1
  2326.    regStatus = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, szkey, "CompanyName", REG_SZ, keyvalue$, nsize)
  2327.  
  2328.  
  2329.  
  2330. '*****************************WWEXE[[
  2331.    If Local = 1 Then
  2332.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyKinsoku,   keyvalue10$, REG_SZ,    BeginKinsoku$, nsize10)
  2333.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyKinsoku,   keyvalue11$, REG_SZ,    EndKinsoku$, nsize11)
  2334.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyPanelPref, keyvalue12$, REG_SZ,    FontName$, nsize12)
  2335.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyPanelPref, keyvalue13$, REG_DWORD, FontSize, nsize13)
  2336.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyPanelPref, keyvalue14$, REG_DWORD, FontPitch, nsize14)
  2337.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyPanelPref, keyvalue15$, REG_DWORD, CharSet, nsize15)
  2338.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyPanelPref, keyvalue16$, REG_DWORD, CodePage, nsize16)
  2339.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkeyPanelPref, keyvalue17$, REG_SZ,  IgnoreAlign, nsize17)
  2340.     End if
  2341. '*****************************WWEXE]]
  2342.  
  2343.     ComPath$ = Lot_WhereIsFeature(prodno%, "123CORE", "123w.exe")
  2344.     nsize = lenbp(ComPath$) + 1
  2345.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, AltComp$, REG_SZ, ComPath$, nsize)
  2346.  
  2347.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\App Paths\123w.exe", "", REG_SZ, ComPath$+"123w.exe", nsize+Lenbp("123w.exe"))
  2348.    regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\App Paths\123w.exe", "Path", REG_SZ, ComPath$, nsize)
  2349.    regStatus = Lot_RegisterObject("123CORE", UNIN_CLASS_REGISTRY_HIVE$,_
  2350.                     "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\123w.exe")
  2351.  
  2352.     IF regStatus& <> ERROR_SUCCESS THEN
  2353.         RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szkey,"",""
  2354.     END IF
  2355.  
  2356.    '** Write the registry value to add the new language
  2357.     AddRegistryLanguage LdString(SID_123_PROD_NAME), _
  2358.                                 LdString(SID_123_PROD_VER)
  2359.    
  2360.    'regStatus = DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$)
  2361.  
  2362.    'if RegStatus = 1 then
  2363.       ' this is used to check the current value of an existing key.
  2364.       ' gbuf$ receives the key values data. 
  2365.       'regStatus& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, 0, gbuf$, nsize) 
  2366.    'end if
  2367.  
  2368.    'Register the 123 type library
  2369.    ProdDir$ = GetSymbolValue("123DIR")
  2370.    TypeLibDir$ = MakePath(ProdDir$, "L123TYP.TLB")
  2371.    New_RegisterTypeLib TypeLibDir$, ProdDir$
  2372.  
  2373.                                          
  2374.    '*** Register the components installed with the product
  2375.     
  2376.       RegisterSharedComponent "WIN32SHRQUICKDEMOPRG", "Animations", "1.1"
  2377.       RegisterSharedComponent "WIN32SHRASWANPRG", "Aswan", "1.4"
  2378.       RegisterSharedComponent "WIN32SHRBENTOPRG", "Bento", "3.0"
  2379.       RegisterSharedComponent "WIN32SHRBUBBHELPPRG", "Bubble Help", "1.2"
  2380.       RegisterSharedComponent "WIN32SHRCCSTRPRG", "ccStr", "1.0"
  2381.       RegisterSharedComponent "WIN32SHRCHARTPRG", "Chart", "2.1"
  2382.       RegisterSharedComponent "WIN32SHRCUSTSUPPHELPPRG", "CustomerSupportHelp", "4.0"
  2383.       RegisterSharedComponent "WIN32SHRDIALOGDLLPRG", "Dialog DLL", "3.0"
  2384.       RegisterSharedComponent "WIN32SHRGRAPHFILEFILTERPRG", "GraphicFilters", "1.1"
  2385.       RegisterSharedComponent "WIN32SHRSHAREDHELPPRG", "Help", "3.1"
  2386.       RegisterSharedComponent "WIN32SHRSMARTICONPRG", "Icon Palette", "7.1"
  2387.       RegisterSharedComponent "WIN32SHRUIMSPRG", "InfoBox", "2.1"
  2388.       RegisterSharedComponent "WIN32SHRINTERNETPRG", "Internet", "1.0"
  2389.       RegisterSharedComponent "WIN32SHRLISDBPRG", "LISDB", "1.0"
  2390.       RegisterSharedComponent "WIN32SHRLOTUSSCRIPTPRG", "LotusScript", "3.1"
  2391.       RegisterSharedComponent "WIN32SHRNOTESOPENSAVEPRG", "NotesOpenSave", "1.0"
  2392.       RegisterSharedComponent "WIN32SHRSTDPLAYERPRG", "Player", "1.1"
  2393.       RegisterSharedComponent "WIN32SHRSPELLDATA", "Spell", "4.0"
  2394.       RegisterSharedComponent "WIN32SHRSPELLPRG", "Spell", "4.0"
  2395.       RegisterSharedComponent "WIN32SHRSTATUSBARPRG", "Status Bar", "6.1"
  2396.       RegisterSharedComponent "WIN32SHRCHARTPRG", "SystemServices", "3.1"
  2397.       RegisterSharedComponent "WIN32TEAMMAILSHRPRG", "TeamMail", "1.1"
  2398.       RegisterSharedComponent "WIN32SHRTITLEBARPRG", "Title Bar", "1.0"
  2399.       RegisterSharedComponent "WIN32SHRUINST", "Uninstall", "1.0"
  2400.       RegisterSharedComponent "WIN32SHRUNSPRG", "UNS", "2.0"
  2401. END SUB
  2402.  
  2403. '*************************************************************************
  2404. '** FUNCTION AddIcons123 (prodno%, network$, direction$, programgroup$) AS STRING
  2405. '**
  2406. '** Purpose: This is called just after file copy has completed.
  2407. '**          1. Add program manager icons of those features
  2408. '**             that were installed.
  2409. '**          NOTE: THERE are many subtleties in here if you are
  2410. '**                dealing with node and CD installs.  In particular,
  2411. '**                you must be ***very*** careful to understand where the
  2412. '**                things are that you are pointing to.  They could
  2413. '**                be on the node, server, or CD!  This, in combination
  2414. '**                with the INF file for Server/Node, is probably the 
  2415. '**                trickiest part of writing a quality install.  When 
  2416. '**                configuring, you must be careful to consider what 
  2417. '**                happens if there is a pre-existing product on the 
  2418. '**                machine, in the same location or
  2419. '**                another one!  This is very very tricky.  What happens
  2420. '**                if you had a full installation previously in location C:\FOO
  2421. '**                and now the user is installing a minimum installation in loaction
  2422. '**                D:\FOO. 
  2423. '**
  2424. '**                Each and every thing you do for configuartion needs very
  2425. '**                careful thought.
  2426. '**
  2427. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  2428. '**                This currrently tells you the location of a feature
  2429. '**                if the feature appears both in the SERVER.INF and the
  2430. '**                NODE.INF referred to by the same Keyword ID.
  2431. '**                We do not support CDs with this command yet, but we will 
  2432. '**                at some time.
  2433. '**
  2434. '**                Also look out for writing to a file when the directory
  2435. '**                doesn't exist.  If the user deselected one of your
  2436. '**                options, your install may still be running, but since
  2437. '**                there were no files to copy into the directory
  2438. '**                it wasn't created by the toolkit!
  2439. '**
  2440. '**                Finally, remember that configuration files generally
  2441. '**                hold the state that the user has customized earlier.
  2442. '**                Sometimes you don't want to overwrite these!
  2443. '**                You will primarily use three MS-SETUP functions
  2444. '**                in here: 
  2445. '**                1. CreateProgmanItem  (writing to progman) 
  2446. '**
  2447. '**                CreateProgmanGroup &  ShowProgmanGroup are
  2448. '**                done for you by the time you reach this
  2449. '**                function.
  2450. '**
  2451. '**                You will not have to do any configuration of LOTUS SHARED
  2452. '**                tools.  The toolkit will do this for you.
  2453. '** In Symbols : 
  2454. '** Out Symbols: 
  2455. '**            
  2456. '** Arguments:  All parameters are **read only**. 
  2457. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2458. '**                   toolkit in the order in which you were registered.
  2459. '**                   When your product is part of SmartSuite, SmartSuite
  2460. '**                   will always be product #1. (prodno% >=1)
  2461. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2462. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2463. '**                      then step backwards
  2464. '**    programgroup$: The name of the program group where the user chose to
  2465. '**                   install the program manager icons     
  2466. '**
  2467. '** Errors:    No return code for errors, you must Raise them
  2468. '** Author:    MZ
  2469. '** Returns:   return: gNEXT 
  2470. '**
  2471. '*************************************************************************
  2472.  
  2473. PUBLIC FUNCTION AddIcons123 (prodno%, network$, direction$, programgroup$) AS STRING
  2474.     DIM ripath$, exepath$, exename$, szArgument$, notused%, LinkName$
  2475.     DIM LanguageQualifier$, LanguageAcronym$, IconName$, FilePath$
  2476.     DIM FeatureKeyWord$
  2477.  
  2478.  
  2479.    AddIcons123 = direction$
  2480.    '' In the backwards case, keep backing up
  2481.    If direction$ = gBACK Then
  2482.       EXIT FUNCTION
  2483.    End If
  2484.  
  2485.     If network$=gSERVER$ or network$=gDISTRIBUTION$ Then
  2486.         EXIT FUNCTION
  2487.     End If
  2488.  
  2489.     LanguageQualifier$ =  ""
  2490.     LanguageAcronym$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$) 
  2491.     szArgument$ = "/L " + LanguageAcronym$ 
  2492.     exename$ = LdString(SID_123_123EXE)
  2493.     exepath$ = Lot_WhereIsFeature(prodno%, "123CORE", exename$)
  2494.  
  2495.     '** If language install, add qualifier
  2496.     If GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then _
  2497.         LanguageQualifier$ = " - " & LanguageAcronym$
  2498.  
  2499.    '** Write entries in  Program Manager
  2500.    If Lot_IsTheFeatureInstalled("123CORE") <> FALSE Then
  2501.         IconName$ = LdString(SID_123_OFFICIALNAME)+LanguageQualifier
  2502.         LinkName$ = IconName$ + ".LNK"
  2503.         IF network$ = gNODE THEN
  2504.             FeatureKeyWord$ = "123TOP"
  2505.         ELSE
  2506.             FeatureKeyWord$ = "123CORE"
  2507.         END IF
  2508.         IF IsNewShell() THEN
  2509.             notused%=Lot_AddLinkToFolder(prodno%, exepath$+exename$, LinkName$, _
  2510.             "123 Program Description", szArgument$, exepath$)
  2511.             'To register a shortcut object for uninstall you use for the path the full path of the link file
  2512.             notused%=Lot_RegisterObject(FeatureKeyWord$, UNIN_CLASS_SHORTCUT$,_
  2513.                             Lot_GetProgFolder(1)+_
  2514.                             IconName$+".LNK")
  2515.         ELSE
  2516.             CreateProgmanItem  programgroup$, IconName$,_
  2517.                   exepath$+exename$+ " " + szArgument$, "", cmoOverwrite
  2518.  
  2519.             'To register an icon object for uninstall the path is: ProgramGroup$\+
  2520.             '                                                      IconName
  2521.             notused%=Lot_RegisterObject(FeatureKeyWord$, UNIN_CLASS_ICON$,_
  2522.                                                  programgroup$+"\"+IconName$)
  2523.         END IF
  2524.  
  2525.        IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN
  2526.             IconName$ = LdString(SID_123_VIEWSTRING)+LanguageQualifier
  2527.             LinkName$ = IconName$ + ".LNK"
  2528.         ELSE
  2529.             IconName$ = LdString(SID_123_VIEWSTRING)
  2530.             LinkName$ = IconName$ + ".LNK"
  2531.         END IF
  2532.  
  2533.         szArgument$ = ""
  2534.         DIM readme_wri$
  2535.         readme_wri = LdString(SID_123_README)
  2536.         IF IsNewShell() THEN
  2537.             LinkName$ = LdString(SID_123_LOTUS_UA) + LinkName$
  2538.             notused%=Lot_AddLinkToFolder(prodno%, exepath$+readme_wri, LinkName$, _
  2539.             LinkName$, szArgument$, exepath$)
  2540.  
  2541.             'To register a shortcut object for uninstall you use for the path the full path of the link file
  2542.             notused%=Lot_RegisterObject(FeatureKeyWord$, UNIN_CLASS_SHORTCUT$,_
  2543.                             Lot_GetProgFolder(1)+_
  2544.                             LinkName$)
  2545.         ELSE
  2546.             CreateProgmanItem  programgroup$, IconName$,_
  2547.                   exepath$+readme_wri+ " " + szArgument$, "", cmoOverwrite
  2548.  
  2549.             'To register an icon object for uninstall the path is: ProgramGroup$\+
  2550.             '                                                      IconName
  2551.             notused%=Lot_RegisterObject(FeatureKeyWord$, UNIN_CLASS_ICON$,_
  2552.                                                  programgroup$+"\"+IconName$)
  2553.         END IF
  2554.  
  2555.         'To register a file object for uninstall that is not in the inf but is created at install time to
  2556.         'be used by a feature
  2557.         'notused%=Lot_RegisterObject("123CORE", UNIN_CLASS_FILE$, FilePath$)
  2558.  
  2559.         'To register a file_group object for uninstall that is not in the inf but is created at install time to
  2560.         'be used by a feature of a product (that needs to be cleanup by uninstall).  
  2561.         'The FilePath$ is the full path to a directory including a wildcard (*) as a file name
  2562.         'notused%=Lot_RegisterObject("123CORE", UNIN_CLASS_FILE_GROUP$, FilePath$)
  2563.  
  2564.         'To register a directory object for uninstall that is not in the inf (as a destination directory) but is created 
  2565.         'at install time to be used by a feature of a product (that needs to be cleanup by uninstall).  
  2566.         'The DirectoryPath$ is the full path to the directory
  2567.         'notused%=Lot_RegisterObject("123CORE", UNIN_CLASS_DIRECTORY$, DirectoryPath$)
  2568.      
  2569.    End If
  2570.  
  2571.    If Lot_IsTheFeatureInstalled("123TOP") <> FALSE Then
  2572.       'To register a registry key for uninstall to cleanup when a feature is uninstalled.  
  2573.       'The KeyString$ is the full Key specification:
  2574.       'KeyString$="HKEY_LOCAL_MACHINE\SOFTWARE\lOTUS\123\97.0"
  2575.       'notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_REGISTRY_KEY$, KeyString$)
  2576.  
  2577.       'To register a registry key Value for uninstall to cleanup when a feature is uninstalled.  
  2578.       'The KeyValueString$ is the full Key+SubKey+ValueName specification:
  2579.       'HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\123\2.1\Description
  2580.       'notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_REGISTRY_VALUE$, KeyValueString$)
  2581.  
  2582.       'To register a registry key hive for uninstall to cleanup when a feature is uninstalled (the complet
  2583.       ' hive will be deleted).  
  2584.       'The KeyHive$ is the full Key Hive specification:
  2585.       ' HKEY_LOCAL_MACHINE\SOFTWARE\LOTUS\123
  2586.       'notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_REGISTRY_HIVE$, KeyHive$)
  2587.  
  2588.    End If
  2589.  
  2590. SKIPCONFIG:
  2591.  
  2592. END FUNCTION
  2593.  
  2594. '*************************************************************************
  2595. '** FUNCTION PostSuccessReg123 (prodno%, network$, direction$) AS STRING
  2596. '**
  2597. '** Purpose: If you need to launch something after install runs
  2598. '** In Symbols : 
  2599. '** Out Symbols: 
  2600. '**            
  2601. '** Arguments:  All parameters are **read only**. 
  2602. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2603. '**                   toolkit in the order in which you were registered.
  2604. '**                   When your product is part of SmartSuite, SmartSuite
  2605. '**                   will always be product #1. (prodno% >=1)
  2606. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2607. '**       direction$: gNEXT 
  2608. '**
  2609. '** Errors:    No return code for errors, you must Raise them
  2610. '** Author:    MMeth
  2611. '** Returns:   return: gNEXT 
  2612. '**
  2613. '*************************************************************************
  2614.  
  2615. PUBLIC FUNCTION PostSuccessReg123 (prodno%, network$, direction$) AS STRING
  2616.  
  2617.    PostSuccessReg123 = direction$
  2618.    '' In the backwards case, keep backing up
  2619.    If direction$ = gBACK Then
  2620.       EXIT FUNCTION
  2621.    End If
  2622.  
  2623. END FUNCTION
  2624.  
  2625. '********************************
  2626. '********************************
  2627. '** Product Specific Functions **
  2628. '********************************
  2629. '********************************
  2630.  
  2631. '*************************************************************************
  2632. '** FUNCTION Get123PathfromLotusIni() AS STRING
  2633. '**
  2634. '** Purpose: Gets the product dir path from Lotus.ini file, and searches for
  2635. '**          acronym.exe in the product dir path. 
  2636. '**            
  2637. '** Author:    JYOTI KEDIA, JMD
  2638. '** Arguments: None
  2639. '** Returns:   if acronym.exe does not exist in dir specified in lotus.ini, it
  2640. '**            returns "", otherwise returns the full path to the product.
  2641. '**            NOTE: changed to not include product name by JMD
  2642. '**             includes trailing backslash
  2643. '*************************************************************************
  2644.  
  2645. FUNCTION Get123PathfromLotusIni() AS STRING
  2646. DIM DestDir$, lotusinipath$, defdir$, temp%, proddir$, fullpath$, rv%
  2647. DIM szkey$, keyvalue$, nsize&, gbuf$, ret&
  2648.  
  2649.    DestDir$ = GetWindowsDir()
  2650.    lotusinipath$ = DestDir$ +"lotus.ini"
  2651.  
  2652.    if DoesFileExist(lotusinipath$,femExists) then
  2653.       defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "123w")
  2654.       if defdir$ <> "" then
  2655.      temp% = INSTR(1,LCASE$(defdir$),"123w.exe")
  2656.      if temp% <> 0 then
  2657.         ProdDir$ = MID$(defdir$,1,(temp%-1))
  2658.         if ProdDir$ <> "" then
  2659.            fullpath$ = ProdDir$ + "123w.exe"
  2660.            if DoesFileExist(fullpath$, femExists) then
  2661.           rv% = Lot_CleanPath(fullpath$)
  2662.           Get123PathfromLotusIni = ProdDir$
  2663.           EXIT FUNCTION
  2664.            end if 
  2665.         end if 
  2666.      end if 
  2667.       end if 
  2668.    end if
  2669.  
  2670.     '** Now try the registry
  2671.     szkey$ = "SOFTWARE\Lotus\" + _
  2672.         LTRIM$(LdString(SID_123_PROD_NAME)) + "\" + _
  2673.         LTRIM(LdString(SID_123_PROD_VER))
  2674.     keyvalue$ = "Path"
  2675.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  2676.     IF gbuf$ <> "" THEN 
  2677.         gbuf$ = TRIM$(gbuf$)
  2678.        gbuf$ = LEFT$(gbuf$, LEN(gbuf$)-1)
  2679.         Get123PathfromLotusIni = gbuf$
  2680.     ELSE    
  2681.         Get123PathfromLotusIni = ""
  2682.     END IF
  2683.  
  2684. END FUNCTION
  2685.  
  2686. PUBLIC FUNCTION InitLanguage123 (prodno%, network$, direction$) AS STRING
  2687. '*************************************************************************
  2688. '** Purpose: Finds out the installed languages and determines the nature
  2689. '**  of the install.  If not running automated, displays a message box for
  2690. '**  a language install
  2691. '**  
  2692. '** Author: JMDonohue
  2693. '** Arguments:  All parameters are **read only**. 
  2694. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2695. '**                   toolkit in the order in which you were registered.
  2696. '**                   When your product is part of SmartSuite, SmartSuite
  2697. '**                   will always be product #1. (prodno% >=1)
  2698. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2699. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2700. '**                      then step backwards
  2701. '**   
  2702. '** Returns:  (not used)
  2703. '**   
  2704. '**  Implicitly sets the following global symbols for later processing: 
  2705. '**   SYM_INSTALLKIND$
  2706. '**   SYM_INSTALLKINDS$ (list)
  2707. '**  Sets the following global symbols (based on product #1) for later 
  2708. '**  processing: 
  2709. '**   SYM_REG_PRODUCTNAME$
  2710. '**   SYM_REG_PRODUCTVER$
  2711. '*************************************************************************
  2712.    DIM szProductName$, szProductVersion$, szInstallKind$, szLanguageSubdir$ 
  2713.    szProductName$ =  LdString(SID_123_PROD_NAME)
  2714.    szProductVersion$ =  LdString(SID_123_PROD_VER)
  2715.     if prodno% = 1 THEN
  2716.     SetSymbolValue SYM_REG_PRODUCTNAME$ , szProductName$
  2717.     SetSymbolValue SYM_REG_PRODUCTVER$ , szProductVersion$ 
  2718.     END IF
  2719.    InitLanguages szProductName$, szProductVersion$, prodno%  
  2720.    InitLanguage123  = ""
  2721. END FUNCTION
  2722.  
  2723.  
  2724. '*************************************************************************
  2725. FUNCTION Get_and_Set_Registry_Entries(FeatureKeyWord$, grgPath$, exePath$, winsysPath$, sectionName$) AS INTEGER
  2726. '** Purpose:    This function retrieves Registry entries from GRG files
  2727. '**             and writes both to the registry and to the uninstall files.
  2728. '** Author:     AMELLO
  2729. '** Arguments:  
  2730. '** Returns:    SUCCESS
  2731. '** NOTE: 
  2732. '*************************************************************************
  2733.  
  2734.  
  2735. Dim components As RegComponents
  2736. DIM retval%, hkey&, subkey$, value$, valuename$, LReturn&, fileHandle&
  2737. DIM valuelen&, phkResult&, hkeyName$, chpt$
  2738. DIM sectionFound&
  2739. DIM registerUninstall&, deleteKey&
  2740. DIM subkeylen&
  2741.  
  2742.     If grgPath$ <> "" and exePath$ <> "" Then
  2743.  
  2744.         retval = OpenGRG(grgPath$, fileHandle)
  2745.         sectionFound& = FALSE
  2746.         retval = ParseLine(fileHandle, exePath$, winsysPath$, components, sectionName, sectionFound)
  2747.         ' Only fill in if ParseLine was successfull
  2748.         DO WHILE retval =  0
  2749.             hkey = components.hkey
  2750.             valuelen = components.valuelen
  2751.             subkey = Trim$(components.subkey)
  2752.             value = Trim$(components.value)
  2753.             valuename = Trim$(components.valuename)
  2754.             registerUninstall = components.registeruninstall
  2755.             deleteKey = components.deletekey
  2756.  
  2757.             If hkey <> 0 Then
  2758.  
  2759.                 SELECT CASE hkey&
  2760.                     case HKEY_LOCAL_MACHINE
  2761.                         hkeyName$ = "HKEY_LOCAL_MACHINE"
  2762.                     case HKEY_CLASSES_ROOT
  2763.                         hkeyName$ = "HKEY_CLASSES_ROOT"
  2764.                     case HKEY_USERS
  2765.                         hkeyName$ = "HKEY_USERS"
  2766.                     case HKEY_CURRENT_USER
  2767.                         hkeyName$ = "HKEY_CURRENT_USER"
  2768.                 END SELECT
  2769.  
  2770.                 If ( deleteKey& = 1 ) Then
  2771.  
  2772.                     If ( valuelen& <> 0 ) Then
  2773.                         LReturn& = RegOpenKeyEx(hkey&, subkey$, 0, KEY_ALL_ACCESS,phkResult&)
  2774.                         LReturn& = RegDeleteValue(phkResult&, valuename$)
  2775.                         LReturn& = RegCloseKeyEx(phkResult&)
  2776.                                         
  2777.                     Else
  2778.                         IF WhatPlatform() = PLATFORM_WIN95 THEN
  2779.                             LReturn& = RegDeleteKey(hkey&, subkey$)
  2780.                         ElseIF WhatPlatform() = PLATFORM_WINNT THEN
  2781.                             LReturn& = Lot_DeleteRegKeyEx(hkey&, subkey$)
  2782.                         End If
  2783.  
  2784.                     End If
  2785.  
  2786.                 Else
  2787.  
  2788.                     LReturn& = Lot_CreateRegKeyValueEx(hkey,_
  2789.                         subkey,_         
  2790.                         valuename,_
  2791.                         REG_SZ,_
  2792.                         value,_
  2793.                         valuelen+1)
  2794.  
  2795.                     If ( registerUninstall& = 1 ) Then
  2796.  
  2797.                         LReturn& = Lot_RegisterObject(FeatureKeyWord$, UNIN_CLASS_REGISTRY_HIVE$,_
  2798.                             hkeyName$+"\"+subkey)
  2799.  
  2800.                     End If
  2801.  
  2802.                 End If
  2803.  
  2804.             End If
  2805.  
  2806.         retval = ParseLine(fileHandle, exePath$, winsysPath$, components, sectionName, sectionFound)
  2807.         LOOP
  2808.  
  2809.         CloseGRG(fileHandle)
  2810.     End If
  2811. END FUNCTION
  2812.  
  2813.  
  2814.  
  2815. '*************************************************************************
  2816. '** 123MOREDIRSCB
  2817. '** Purpose:  This SUB handles the processing for the MORE DIRECTORIES    
  2818. '**           dialog.  
  2819. '**
  2820. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  2821. '**     
  2822. '** Author: Michael Natsis
  2823. '** Arguments:
  2824. '**     
  2825. '**     
  2826. '** Returns:
  2827. '**     
  2828. '*************************************************************************
  2829.  
  2830. SUB MOREDIRSCB (hDlg&, CtrlId%, Classes$, LInst&)
  2831.    DIM dirChanged1%, dirChanged2%, dirChanged3%, dirChanged4%, i%, notused% 
  2832.    DIM drvSel%,Inst%, dirToChange1$, dirToChange2$,dirToChange3$,dirToChange4$
  2833.    STATIC drvIndex%(1 to MAX_NO_DRIVECOMBOS)
  2834.  
  2835.    Inst% = CINT(LInst&)
  2836.  
  2837.    SELECT CASE Classes$
  2838.     
  2839.       CASE "__DLGINIT"
  2840.  
  2841.     '** This is the directory for the Work Files
  2842.     Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  2843.     SetListItem "IDC_EDIT", 1, GetSymbolValue("123WORKDIR")
  2844.     drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  2845.     AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  2846.  
  2847.             
  2848.      '** This is the directory for the Smart Master Files
  2849.     Lot_GetDriveFreeSpaceList "IDC_COMBO2"
  2850.     SetListItem "IDC_EDIT", 2, GetSymbolValue("123MASTERSLANGDIR")
  2851.     drvIndex%(1) = ValidateEditBox(hDlg& , 2)
  2852.     AddListItem SYM_UPDATELIST$, "IDC_EDIT2"
  2853.  
  2854.      '** This is the directory for the Backup Files
  2855.     Lot_GetDriveFreeSpaceList "IDC_COMBO3"
  2856.     SetListItem "IDC_EDIT", 3, GetSymbolValue("123BACKUPDIR")
  2857.     drvIndex%(1) = ValidateEditBox(hDlg& , 3)
  2858.     AddListItem SYM_UPDATELIST$, "IDC_EDIT3"
  2859.  
  2860.      '** This is the directory for the Sample Files
  2861.     Lot_GetDriveFreeSpaceList "IDC_COMBO4"
  2862.     SetListItem "IDC_EDIT", 4, GetSymbolValue("123SAMPLESLANGDIR")
  2863.     drvIndex%(1) = ValidateEditBox(hDlg& , 4)
  2864.     AddListItem SYM_UPDATELIST$, "IDC_EDIT4"
  2865.  
  2866.       CASE "IDC_COMBO1"
  2867.           ComboSelChanged 1, Inst%
  2868.           DirChanged1% = TRUE
  2869.         CASE "IDC_COMBO2"
  2870.         ComboSelChanged 2, Inst%
  2871.           DirChanged2% = TRUE
  2872.         CASE "IDC_COMBO3"
  2873.                     ComboSelChanged 3, Inst%
  2874.                DirChanged3% = TRUE
  2875.         CASE "IDC_COMBO4"
  2876.                     ComboSelChanged 4, Inst%
  2877.                   DirChanged4% = TRUE
  2878.  
  2879.         CASE "IDC_BRWSDIR"
  2880.     drvSel% = ValidateBrowse(hDlg&,Inst%)
  2881.     SELECT CASE Inst%      
  2882.         CASE 1  
  2883.              dirChanged1% = TRUE
  2884.         CASE 2  
  2885.              dirChanged2% = TRUE
  2886.                 CASE 3  
  2887.              dirChanged3% = TRUE
  2888.                 CASE 4
  2889.              dirChanged3% = TRUE
  2890.     END SELECT       
  2891.  
  2892.      CASE "IDC_EDIT"
  2893.             SELECT CASE Inst%
  2894.                 CASE 1  
  2895.                 dirChanged1% = TRUE                     
  2896.                 CASE 2
  2897.                 dirChanged2% = TRUE     
  2898.                 CASE 3
  2899.         dirChanged3% = TRUE
  2900.                 CASE 4
  2901.         dirChanged4% = TRUE
  2902.             END SELECT
  2903.  
  2904.      CASE "IDC_OK"
  2905.         '** Validate Paths always: to check for a file with the same name
  2906.  
  2907.         '** WorkDir 
  2908.      drvSel% = ValidateEditBox(hDlg& , 1)
  2909.      IF drvSel% = 0 THEN
  2910.         SetListItem "__LASTSTATUS", 1, "Q"
  2911.         EXIT SUB
  2912.      ELSE 
  2913.         drvIndex%(1) = drvSel%
  2914.      END IF
  2915.         dirToChange1$ = GetPathFromComboEdit(hDlg&, 1)
  2916.  
  2917.         IF ValidatePath(dirToChange1$) = FALSE THEN
  2918.                 SetListItem "__LASTSTATUS",1,"Q"
  2919.                 EXIT SUB
  2920.             ELSE
  2921.         SetSymbolValue "123WORKDIR", dirToChange1$
  2922.             END IF
  2923.  
  2924.  
  2925.         '** SMasters
  2926.     drvSel% = ValidateEditBox(hDlg& , 2)
  2927.      IF drvSel% = 0 THEN
  2928.         SetListItem "__LASTSTATUS", 1, "Q"
  2929.         EXIT SUB
  2930.      ELSE 
  2931.         drvIndex%(2) = drvSel%
  2932.      END IF
  2933.         dirToChange2$ = GetPathFromComboEdit(hDlg&, 2)
  2934.  
  2935.         IF ValidatePath(dirToChange2$) = FALSE THEN
  2936.             SetListItem "__LASTSTATUS",1,"Q"
  2937.         EXIT SUB
  2938.         ELSE 
  2939.             SetSymbolValue "123MASTERSLANGDIR", dirToChange2$
  2940.         END IF
  2941.  
  2942.  
  2943.         '** Backup
  2944.     drvSel% = ValidateEditBox(hDlg& , 3)
  2945.      IF drvSel% = 0 THEN
  2946.         SetListItem "__LASTSTATUS", 1, "Q"
  2947.         EXIT SUB
  2948.      ELSE 
  2949.         drvIndex%(3) = drvSel%
  2950.      END IF
  2951.             dirToChange3$ = GetPathFromComboEdit(hDlg&, 3)
  2952.  
  2953.        IF ValidatePath(dirToChange3$) = FALSE THEN
  2954.               SetListItem "__LASTSTATUS",1,"Q"
  2955.         EXIT SUB
  2956.        ELSE 
  2957.         SetSymbolValue "123BACKUPDIR", dirToChange3$
  2958.        END IF 
  2959.  
  2960.         '** Samples
  2961.             drvSel% = ValidateEditBox(hDlg& , 4)
  2962.      IF drvSel% = 0 THEN
  2963.         SetListItem "__LASTSTATUS", 1, "Q"
  2964.         EXIT SUB
  2965.      ELSE 
  2966.         drvIndex%(4) = drvSel%
  2967.      END IF
  2968.  
  2969.           dirToChange4$ = GetPathFromComboEdit(hDlg&, 4)
  2970.        IF ValidatePath(dirToChange4$) = FALSE THEN
  2971.               SetListItem "__LASTSTATUS",1,"Q"
  2972.               EXIT SUB
  2973.        ELSE 
  2974.         SetSymbolValue "123SAMPLESLANGDIR", dirToChange4$
  2975.        END IF 
  2976.  
  2977.      '** Refresh destination
  2978.      Lot_RefreshDestination("123WORKDIR")
  2979.      Lot_RefreshDestination("123MASTERSLANGDIR")
  2980.      Lot_RefreshDestination("123BACKUPDIR")
  2981.      Lot_RefreshDestination("123SAMPLESLANGDIR")
  2982.  
  2983. END SELECT   'Classes
  2984.  
  2985. END SUB
  2986.  
  2987. SUB RegisterSharedComponent(Key$, FileName$, Version$)
  2988. '*************************************************************************
  2989. '** Purpose:    This product routines registers the shared component for the
  2990. '**                             product and writes an entry in cinstall.ini for uninstall
  2991. '**
  2992. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  2993. '**     
  2994. '** Author: Michael Natsis (stolen from flw.lss by JMD)
  2995. '** Arguments:
  2996. '**     Key$                    Shared section keyword, "WIN32SHRSMARTICONPRG", e.g.
  2997. '**     FileName$       Name of shared component, "Icon Palette", e.g.
  2998. '**     Version$                Version of shared component, "6.0", e.g.
  2999. '**     
  3000. '*************************************************************************
  3001. DIM szProductName$, szProductVersion$, RegKeyName$
  3002.  
  3003. szProductName$ =  LdString(SID_123_PROD_NAME)
  3004. szProductVersion$ =  LdString(SID_123_PROD_VER)
  3005.  
  3006. IF Lot_IsTheFeatureInstalled(Key$) <> FALSE THEN
  3007.     RegKeyName$ = gREGLOTUS + szProductName$ + "\" + szProductVersion$ + _
  3008.      "\Components\" + FileName$ + "\" + Version$
  3009.     Lot_RegCreateKeyEx HKEY_LOCAL_MACHINE, RegKeyName$
  3010. END IF
  3011.  
  3012. END SUB
  3013.  
  3014. '****************************************************************************
  3015. '** FUNCTION DetectPreviousVersion ( Productfound$ ) AS STRING
  3016. '**
  3017. '** Purpose: Check Previous Version is install..
  3018. '**
  3019. '** Author:    Pamela Donahue
  3020. '** Arguments: Productfound$ 
  3021. '** Returns:   YES or NO
  3022. '****************************************************************************
  3023. FUNCTION DetectPreviousVersion (Productfound$) AS STRING
  3024. DIM destpath$, temp%, dirpath$, adwpath$, ole2dllpath$, path123$,ivcpath$
  3025.  
  3026.    '** DND: More path assumptions
  3027.  
  3028.     dirpath$ = Get123PathfromLotusIni()
  3029.     If dirpath$ <> "" Then
  3030.     ole2dllpath$ = MakePath(dirpath$, "ole2Drag.dll")
  3031.     ivcpath$ = MakePath(dirpath$, "ivcw.dll")
  3032.  
  3033.         If DoesFileExist(ole2dllpath$, femExists) Then
  3034.             If DoesFileExist(ivcpath$, femExists) Then
  3035.                 DetectPreviousVersion = "RAPTOR"
  3036.                     Productfound = True
  3037.                 else
  3038.                 DetectPreviousVersion = "MONROE"
  3039.                     Productfound = True
  3040.                 end if
  3041.                 upgrade = 1
  3042.         else
  3043.         DetectPreviousVersion = ""
  3044.         end if
  3045.         end if
  3046.  
  3047. END FUNCTION
  3048.  
  3049. '****************************************************************************
  3050. '** SUB RemoveObsoleteFiles123(hDlg&, CtrlId%, Classes%, Inst&)
  3051. '**
  3052. '** Purpose: callback to handle Remove Files dialog.
  3053. '**
  3054. '** Author:  BMK 7/18/95 (significantly modified by TLB, and then jshaw)
  3055. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3056. '** Returns:   NONE
  3057. '****************************************************************************
  3058.  
  3059. SUB RemoveObsoleteFiles123(hDlg&, CtrlId%, Classes$, Inst&)
  3060. DIM nSections%, count%, chpt$, sym$, notused%
  3061.  
  3062.     nSections% = 2
  3063.  
  3064.     SELECT CASE Classes$
  3065.  
  3066.     case "__DLGINIT"
  3067.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3068.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3069.         AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3070.     
  3071.     case "IDC_OK"
  3072.         for count% = 1 to nSections% 
  3073.             sym$ = "123OBSFILES" + LTRIM$(STR$(count%))
  3074.             chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3075.             if chpt$ <> "" then
  3076.                 notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
  3077.             end if                                                                                                             
  3078.         next
  3079.    
  3080.     case "IDC_BACK"
  3081.         ' reset INF sections to OFF in case user changes his/her mind
  3082.         for count% = 1 TO nSections% 
  3083.         sym$ = "123OBSFILES" + LTRIM$(STR$(count%))
  3084.         chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3085.         if chpt$ <> "" then
  3086.             notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 0)
  3087.         end if
  3088.         next
  3089.  
  3090.     case "IDC_EXIT"
  3091.         ' reset INF sections to OFF in case user changes his/her mind
  3092.         for count% = 1 TO nSections% 
  3093.         sym$ = "123OBSFILES" + LTRIM$(STR$(count%))
  3094.         chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3095.         if chpt$ <> "" then
  3096.             notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 0)
  3097.         end if
  3098.         next
  3099.     END SELECT
  3100. END SUB
  3101.  
  3102.  
  3103. '*************************************************************************
  3104. FUNCTION Lot_WriteOLERegFor123(network$, prodno%) AS INTEGER
  3105. '** Purpose:    This function writes OLE registration needed
  3106. '** Author:     JLU
  3107. '** Arguments:  
  3108. '** Returns:    SUCCESS                                      
  3109. '** NOTE: 
  3110. '*************************************************************************
  3111. Dim components As RegComponents
  3112. DIM retval%, LReturn&, grgPath$, ret%
  3113. DIM exePath$, chpt$, FeatureKeyWord$
  3114. DIM sectionName$
  3115. DIM winsysPath$
  3116.  
  3117.     winsysPath$ = GetWindowsSysDir()
  3118.     winsysPath$ = Lot_TrimEndSlash(winsysPath$)
  3119.  
  3120.     grgPath$ = Lot_WhereIsFeature(prodno%, "123CORE", "123w97.grg")
  3121.     grgPath$ = MakePath(grgPath$, "123w97.grg")
  3122.  
  3123.     exePath$ = Lot_WhereIsFeature(prodno%, "123CORE", "123w.exe")
  3124.     exePath$ = Lot_TrimEndSlash(exePath$)
  3125.  
  3126.     IF network$ = gNODE THEN
  3127.         FeatureKeyWord$ = "123TOP"
  3128.     ELSE
  3129.         FeatureKeyWord$ = "123CORE"
  3130.     END IF
  3131.  
  3132.  
  3133. '  Update OLE Default Registry settings
  3134.    sectionName = "OLE_DEFAULT"
  3135.     ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  3136.  
  3137.  
  3138. '  Update OLE Compatible Registry settings if is not an upgrade or
  3139. '  if Raptor and/or Monroe are being obsoleted.
  3140.  
  3141.     chpt$ = Lot_GetChapterFromKeyWord("123OBSFILES1")
  3142.     retval = Lot_GetChapterValInt(chpt$, F_INOROUT)
  3143.  
  3144.     If (upgrade <> 1 or (upgrade = 1 and retval <> 0))_
  3145.         and (grgPath$ <> "") and (exePath$ <> "") Then
  3146.  
  3147.         sectionName = "OLE_COMPAT"
  3148.         ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  3149.  
  3150.     End If
  3151.  
  3152.  
  3153. END FUNCTION
  3154.  
  3155. '*************************************************************************
  3156. FUNCTION Lot_WriteOCXRegFor123(network$, prodno%) AS INTEGER    
  3157. '** Purpose:    This function writes OCX registration needed
  3158. '** Author:     JLU
  3159. '** Arguments:  
  3160. '** Returns:    SUCCESS
  3161. '** NOTE: 
  3162. '*************************************************************************
  3163. DIM featPath$, notused%
  3164.  
  3165.     ' Lotus Script IDE
  3166.     If Lot_IsTheFeatureInstalled("WIN32SHRLOTUSSCRIPTIDE") <> FALSE Then
  3167.         'featPath$ = Lot_WhereIsFeature(prodno%, "WIN32SHRLOTUSSCRIPTIDE", "lcrttb4.dll")
  3168.         'featPath$ = Lot_TrimEndSlash (featPath$)
  3169.         'notused% = Lot_RegisterOCX (featPath$ + "\lcrttb4.dll")
  3170.         
  3171.         featPath$ = Lot_WhereIsFeature(prodno%, "WIN32SHRLOTUSSCRIPTIDE", "ltsctn31.ocx")
  3172.         featPath$ = Lot_TrimEndSlash (featPath$)
  3173.         notused% = Lot_RegisterOCX (featPath$ + "\ltsctn31.ocx")
  3174.     End If
  3175.  
  3176.     If Lot_IsTheFeatureInstalled("WIN32SHRLOTUSSCRIPTPRG") <> FALSE Then
  3177.         featPath$ = Lot_WhereIsFeature(prodno%, "WIN32SHRLOTUSSCRIPTPRG", "lcsrtn10.dll")
  3178.         featPath$ = Lot_TrimEndSlash (featPath$)
  3179.         notused% = Lot_RegisterOCX (featPath$ + "\lcsrtn10.dll")
  3180.     End If
  3181.  
  3182. END FUNCTION
  3183.  
  3184. '*************************************************************************
  3185. '** PUBLIC SUB DB_123BACKUPMASTERSCB(hDlg%, CtrlId%, Classes$, Inst%) AS INTEGER
  3186. '**
  3187. '** Purpose: Handles Dialog for Backup of currently installed smasters
  3188. '**            
  3189. '** Author:    Michael Natsis
  3190. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3191. '** Returns:   SUCCESS
  3192. '*************************************************************************
  3193. PUBLIC SUB DB_123BACKUPMASTERSCB(hDlg&, CtrlId%, Classes$, Inst&)
  3194.  
  3195.     SELECT CASE Classes$
  3196.             
  3197.     CASE "IDC_OK"
  3198.         BackupSmartMasters123% = TRUE
  3199.     case "IDC_BACK"
  3200.         BackupSmartMasters123% = FALSE
  3201.     case "IDC_EXIT"
  3202.         BackupSmartMasters123% = FALSE
  3203.     END SELECT
  3204.         
  3205. END SUB
  3206.  
  3207. '*************************************************************************
  3208. '** FUNCTION HELPEX123 (Chapter$,fInCopy%) AS INTEGER
  3209. '**
  3210. '** Purpose: THIS FUNCTION IS CALLED BECAUSE IT APPEARS AS AN EXCEPTION
  3211. '**          FUNCTION IN THE INF FILE. IT IS CALLED WHENEVER THE USER
  3212. '**          TOGGLES a HELP SECTION. THUS ALLOWING US TO DO SOME
  3213. '**          SPECIAL CASE WORK FOR THE ALIAS FILES.
  3214. '** Author:
  3215. '** Arguments:
  3216. '** Returns: SUCCESS
  3217. '*************************************************************************
  3218.  
  3219. PUBLIC FUNCTION HELPEX123 (Chapter$,fInCopy%) AS INTEGER
  3220.      DIM helpalias$
  3221.  
  3222.    '** Since a helpo file must be installed,
  3223.    '** either the real help file, or the alias,
  3224.    '** we toggle the alias file, when the main help file is
  3225.    '** is toggled by the user.
  3226.  
  3227.    helpalias$ = Lot_GetNextSibling (Chapter$, F_NOTHING)
  3228.    Lot_ToggleChapterFilesInCopyList helpalias$
  3229.  
  3230.    HELPEX123 = SUCCESS
  3231.  
  3232. END FUNCTION
  3233.  
  3234. '*************************************************************************
  3235. '** FUNCTION Get123PathfromRegistry() AS STRING
  3236. '**
  3237. '** Purpose: Gets the product dir path from registry, and searches for
  3238. '**          123w.exe in the product dir path. 
  3239. '**            
  3240. '** Author:    JoeG
  3241. '** Arguments: None
  3242. '** Returns:   if 123w.exe does not exist in dir specified in registry, it
  3243. '**            returns "", otherwise returns the full path to the product.
  3244. '**            NOTE: changed to not include product name by JMD
  3245. '**             includes trailing backslash
  3246. '**            NOTE: if Gemini is installed from the server to the node,
  3247. '**             returns the full path to the node
  3248. '*************************************************************************
  3249.  
  3250. FUNCTION Get123PathfromRegistry() AS STRING
  3251.     DIM szkey$, keyvalue$, nsize&, gbuf$, ret&, path123$
  3252.     DIM dwtype&, infpath$, idx%, instval&, reg123$
  3253.  
  3254.     Get123PathfromRegistry = ""
  3255.     reg123$ = LTRIM$(LdString(SID_123_PROD_NAME)) & "\" & _
  3256.                 LTRIM(LdString(SID_123_PROD_VER))
  3257.     szkey$ = "SOFTWARE\Lotus\" & reg123$
  3258.     keyvalue$ = "Path"
  3259.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  3260.     IF gbuf$ <> "" THEN
  3261.         gbuf$ = NullTrim(gbuf$)
  3262.     path123$ = gbuf$ + "\123w.exe"
  3263.         IF gbuf$ = "" OR Lot_DoesFileExist(path123$) = 0 THEN
  3264.             EXIT FUNCTION
  3265.         END IF
  3266.         instval& = GetInstTypefromRegistry()
  3267.         IF instval& = 0 THEN
  3268.             ' standalone
  3269.             Get123PathfromRegistry = gbuf$
  3270.         ELSEIF instval& = 1 THEN
  3271.             ' node
  3272.             dwtype& = REG_SZ
  3273.             gbuf$ = ""
  3274.             ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, _
  3275.                             gREGLOTUS & "123Suite\97.0\products\" & reg123$, _
  3276.                             "InfFileName", dwtype&, gbuf$, 1024)
  3277.             IF gbuf$ = "" THEN
  3278.                 dwtype& = REG_SZ
  3279.                 ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, _
  3280.                                 gREGLOTUS & "SmartSuite\97.0\products\" & reg123$, _
  3281.                                 "InfFileName", dwtype&, gbuf$, 1024)
  3282.             END IF
  3283.             IF gbuf$ <> "" THEN
  3284.                 gbuf$ = UCASE$(NullTrim(gbuf$))
  3285.                 idx% = INSTR(gbuf$, "123NODE.INF")
  3286.                 IF idx% <> 0 THEN
  3287.                     gbuf$ = LEFT$(gbuf$, idx% - 1) & "CINSTNOD.INI"
  3288.                     IF Lot_DoesFileExist(gbuf$) THEN
  3289.                         Get123PathfromRegistry = GetIniKeyString(gbuf$, _
  3290.                                 "Destination Symbols And Values", "123DIR")
  3291.                     END IF
  3292.                 END IF
  3293.             END IF
  3294.         END IF
  3295.     END IF
  3296.  
  3297. END FUNCTION
  3298.  
  3299. '*************************************************************************
  3300. FUNCTION GetInstTypefromRegistry() AS LONG
  3301. '**
  3302. '** Purpose: Gets the product Installed Type from Registry
  3303. '**            
  3304. '** Author:    JLU
  3305. '** Arguments: None
  3306. '** Returns:   InstType
  3307. '*************************************************************************
  3308. DIM szkey$, keyvalue$, nsize&, gbuf&, ret&
  3309.  
  3310.     szkey$ = "SOFTWARE\Lotus\" + _
  3311.         LTRIM$(LdString(SID_123_PROD_NAME)) + "\" + _
  3312.         LTRIM(LdString(SID_123_PROD_VER))
  3313.     keyvalue$ = "InstallType"
  3314.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, REG_DWORD, gbuf&, nsize&)
  3315.     If ret& <> 0 Then
  3316.         GetInstTypefromRegistry=-1
  3317.     Else
  3318.         GetInstTypefromRegistry=gbuf&
  3319.     End If
  3320. END FUNCTION
  3321.  
  3322. '****************************************************************************
  3323. '** SUB MigrateUserPrefReg()
  3324. '**
  3325. '** Purpose:    Migrate user preferences from 123r5.ini to the OS registry.
  3326. '**
  3327. '** Author:     JLU
  3328. '** Arguments: NONE
  3329. '** Returns:   NONE
  3330. '****************************************************************************
  3331. SUB MigrateUserPrefReg()
  3332. DIM winDir$, iniPath$, stringVal$, intVal&, tmpintVal&, tmpstrVal$
  3333. DIM uPref$, vPref$, dbOpt$, mPref$, LReturn&, index&, s1&, s2&, uFrmt$
  3334. DIM strArray(1 to 10) AS STRING
  3335. DIM sidArray(1 to 10) AS STRING 
  3336. DIM atsArray(0 to 300) AS STRING
  3337. DIM binArray AS STRING
  3338.  
  3339.    winDir$ = GetWindowsDir()
  3340.    iniPath$ = winDir$ +"123r5.ini"
  3341.  
  3342.    if DoesFileExist(iniPath$,femExists) then
  3343.         uPref$ = LdString(SID_HKYEY_DEFAULT)+_
  3344.                    LdString(SID_KEY_USER_PREFS)
  3345.         vPref$ = LdString(SID_HKYEY_DEFAULT)+_
  3346.                     LdString(SID_KEY_VIEW_PREFS)
  3347.         dbOpt$ = LdString(SID_HKYEY_DEFAULT)+_
  3348.                     LdString(SID_KEY_DBOPT)
  3349.         mPref$ = LdString(SID_HKYEY_DEFAULT)+_
  3350.                     LdString(SID_KEY_MAP_PREFS)
  3351.         uFrmt$ = LdString(SID_HKYEY_DEFAULT)+_
  3352.                     LdString(SID_KEY_FORMATS)
  3353.  
  3354.         ''-----------    [CONFIG]     -----------
  3355.         strArray(1) = "beep"
  3356.         sidArray(1)     = LdString(SID_BEEPSONERROR)
  3357.         strArray(2)     = "filelinkrefresh"
  3358.         sidArray(2)     = LdString(SID_UPDATELINKSONOPENDOC)
  3359.         strArray(3) = "undo"
  3360.         sidArray(3)     = LdString(SID_ISUNDOENABLED)
  3361.         strArray(4) = "autoexec"
  3362.         sidArray(4)     = LdString(SID_ENABLEAUTOEXECMACRO)
  3363.         strArray(5) = "dragdrop"
  3364.         sidArray(5)     = LdString(SID_ENABLEDRAGDROP)
  3365.         strArray(6) = "autosave"
  3366.         sidArray(6)     = LdString(SID_AUTOSAVE)
  3367.  
  3368.         FOR tmpintVal = 1 TO 6
  3369.     stringVal$ = GetIniKeyString(iniPath$,"CONFIG", strArray(tmpintVal))
  3370.     if stringVal$ <> "" Then 
  3371.                 intVal& = CLNG(stringVal$)
  3372.                 LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3373.                     uPref$,_
  3374.                     sidArray(tmpintVal),_    
  3375.                     REG_DWORD,_
  3376.                     intVal&,_
  3377.                     LENBP(intVal&) )
  3378.             end if
  3379.         NEXT
  3380.  
  3381.       stringVal$ = GetIniKeyString(iniPath$,"CONFIG", "currency_display")
  3382.       if stringVal$ <> "" Then 
  3383.             intVal& = (CLNG(stringVal$) + 1) MOD 2
  3384.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3385.                 uFrmt$,_
  3386.                 LdString(SID_CURRENCYASISO),_    
  3387.                 REG_DWORD,_
  3388.                 intVal&,_
  3389.                 LENBP(intVal&) )
  3390.         end if
  3391.  
  3392.         ''-----------    [ICON PALETTE]     -----------
  3393.       stringVal$ = GetIniKeyString(iniPath$,"ICON PALETTE", "visible")
  3394.       if stringVal$ <> "" then
  3395.             intVal& = CLNG(stringVal$)
  3396.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3397.                 uPref$,_
  3398.                 LdString(SID_SHOWSMARTICONS),_   
  3399.                 REG_DWORD,_
  3400.                 intVal&,_
  3401.                 LENBP(intVal&) )
  3402.       end if 
  3403.  
  3404.         ''-----------    [VIEW DEFAULTS]     -----------
  3405.         strArray(1) = "worksheet_frame"
  3406.         sidArray(1)     = LdString(SID_SHOWWORKSHEETFRAME)
  3407.         strArray(2)     = "worksheet_tabs"
  3408.         sidArray(2)     = LdString(SID_SHOWWORKSHEETTABS)
  3409.         strArray(3) = "grid_on"
  3410.         sidArray(3)     = LdString(SID_SHOWGRIDLINES)
  3411.         strArray(4) = "scroll_bars"
  3412.         sidArray(4)     = LdString(SID_SHOWSCROLLBARS)
  3413.         strArray(5) = "screen_ratio"
  3414.         sidArray(5)     = LdString(SID_ZOOMSCALE)
  3415.         strArray(6) = "drawings"
  3416.         sidArray(6)     = LdString(SID_SHOWDRAWLAYER)
  3417.         strArray(7) = "pagebreaks"
  3418.         sidArray(7)     = LdString(SID_SHOWAUTOMATICPAGEBREAKS)
  3419.         strArray(8) = "pagebreaks"
  3420.         sidArray(8)     = LdString(SID_SHOWMANUALPAGEBREAKS)
  3421.  
  3422.         FOR tmpintVal = 1 TO 8
  3423.     stringVal$ = GetIniKeyString(iniPath$,"VIEW DEFAULTS", strArray(tmpintVal))
  3424.     if stringVal$ <> "" Then 
  3425.                 intVal& = CLNG(stringVal$)
  3426.                 LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3427.                     vPref$,_
  3428.                     sidArray(tmpintVal),_    
  3429.                     REG_DWORD,_
  3430.                     intVal&,_
  3431.                     LENBP(intVal&) )
  3432.             end if
  3433.         NEXT
  3434.  
  3435.         ''-----------    [STATUS BAR]     -----------
  3436.       stringVal$ = GetIniKeyString(iniPath$,"STATUS BAR", "state")
  3437.       if stringVal$ <> "" then
  3438.             intVal& = CLNG(stringVal$)
  3439.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3440.                 uPref$,_
  3441.                 LdString(SID_SHOWSTATUSBAR),_    
  3442.                 REG_DWORD,_
  3443.                 intVal&,_
  3444.                 LENBP(intVal&) )
  3445.       end if 
  3446.  
  3447.         ''-----------    [CONTROL PANEL]     -----------
  3448.       stringVal$ = GetIniKeyString(iniPath$,"CONTROL PANEL", "cpstate")
  3449.       if stringVal$ <> "" then
  3450.             intVal& = CLNG(stringVal$)
  3451.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3452.                 uPref$,_
  3453.                 LdString(SID_SHOWCONSOLE),_      
  3454.                 REG_DWORD,_
  3455.                 intVal&,_
  3456.                 LENBP(intVal&) )
  3457.       end if 
  3458.  
  3459.         ''-----------    [START UP]     -----------
  3460.       stringVal$ = GetIniKeyString(iniPath$,"START UP", "Maximized")
  3461.       if stringVal$ <> "" then
  3462.             intVal& = CLNG(stringVal$)
  3463.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3464.                 uPref$,_
  3465.                 LdString(SID_SHOWMAXIMIZED),_    
  3466.                 REG_DWORD,_
  3467.                 intVal&,_
  3468.                 LENBP(intVal&) )
  3469.       end if 
  3470.  
  3471.         ''-----------    [FILES]    -----------
  3472.       stringVal$ = GetIniKeyString(iniPath$,"FILES", "recfiles")
  3473.       if stringVal$ <> "" then
  3474.             intVal& = CLNG(stringVal$)
  3475.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3476.                 uPref$,_
  3477.                 LdString(SID_NUMBEROFMOSTRECENTFILES),_  
  3478.                 REG_DWORD,_
  3479.                 intVal&,_
  3480.                 LENBP(intVal&) )
  3481.       end if 
  3482.  
  3483.         ''-----------    [DATABASE OPTIONS]    -----------
  3484.         strArray(1) = "AllowUpdates"
  3485.         sidArray(1)     = LdString(SID_ALLOWUPDATES)
  3486.         strArray(2)     = "UniqueRecords"
  3487.         sidArray(2)     = LdString(SID_UNIQUERECORDS)
  3488.         strArray(3) = "ShowSamples"
  3489.         sidArray(3)     = LdString(SID_SHOWSAMPLES)
  3490.         strArray(4) = "AutoRefresh"
  3491.         sidArray(4)     = LdString(SID_AUTOREFRESH)
  3492.         strArray(5) = "AutoConnect"
  3493.         sidArray(5)     = LdString(SID_AUTOCONNECT)
  3494.         strArray(6) = "LimitRecords"
  3495.         sidArray(6)     = LdString(SID_LIMITRECORDS)
  3496.         strArray(7) = "ShowExternalPrimerValue"
  3497.         sidArray(7)     = LdString(SID_SHOWEXAMPLE)
  3498.         strArray(8) = "ExternalRowLimit"
  3499.         sidArray(8)     = LdString(SID_EXTROWLIMIT)
  3500.         strArray(9) = "InternalRowLimit"
  3501.         sidArray(9)     = LdString(SID_INTROWLIMI)
  3502.  
  3503.         FOR tmpintVal = 1 TO 9
  3504.     stringVal$ = GetIniKeyString(iniPath$,"DATABASE OPTIONS", strArray(tmpintVal))
  3505.     if stringVal$ <> "" Then 
  3506.                 intVal& = CLNG(stringVal$)
  3507.                 LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3508.                     dbOpt$,_
  3509.                     LdString(SID_NUMBEROFMOSTRECENTFILES),_  
  3510.                     REG_DWORD,_
  3511.                     intVal&,_
  3512.                     LENBP(intVal&) )
  3513.             end if
  3514.         NEXT
  3515.  
  3516.         ''-----------    [CONFIG]    -----------
  3517.         ''----------- with inverted values -----
  3518.         strArray(1) = "skip_welcome"
  3519.         sidArray(1)     = LdString(SID_SHOWWELCOMESCREEN)
  3520.         strArray(2)     = "skip_smartmasters"
  3521.         sidArray(2)     = LdString(SID_REQUESTSMARTMASTERONNEWDOC)
  3522.  
  3523.         FOR tmpintVal = 1 TO 2
  3524.     stringVal$ = GetIniKeyString(iniPath$, "CONFIG", strArray(tmpintVal))
  3525.     if stringVal$ <> "" Then 
  3526.                 intVal& = (CLNG(stringVal$) + 1) MOD 2
  3527.                 LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3528.                     uPref$,_
  3529.                     sidArray(tmpintVal),_    
  3530.                     REG_DWORD,_
  3531.                     intVal&,_
  3532.                     LENBP(intVal&) )
  3533.             end if
  3534.         NEXT
  3535.  
  3536.         ''-----------    [VIEW DEFAULTS]    -----------
  3537.       stringVal$ = GetIniKeyString(iniPath$,"VIEW DEFAULTS", "pagebreaks")
  3538.       if stringVal$ <> "" then
  3539.             intVal& = CLNG(stringVal$)
  3540.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3541.                 vPref$,_
  3542.                 LdString(SID_SHOWAUTOMATICPAGEBREAKS),_  
  3543.                 REG_DWORD,_
  3544.                 intVal&,_
  3545.                 LENBP(intVal&) )
  3546.  
  3547.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_USERS,_
  3548.                 vPref$,_
  3549.                 LdString(SID_SHOWMANUALPAGEBREAKS),_     
  3550.                 REG_DWORD,_
  3551.                 intVal&,_
  3552.                 LENBP(intVal&) )
  3553.       end if 
  3554.  
  3555.         ''-----------    [FILES]     -----------
  3556.         tmpstrVal$ = ""
  3557.  
  3558.         FOR intVal = 1 TO 5
  3559.     stringVal$ = GetIniKeyString(iniPath$,"FILES", "LastOpen"&CSTR(intVal))
  3560.     if stringVal$ = "" Then 
  3561.                 EXIT FOR
  3562.             End if
  3563.             tmpstrVal$ = tmpstrVal$ + stringVal$ + Chr$(0)
  3564.         NEXT                    
  3565.  
  3566.         DIM phkResult&
  3567.         tmpstrVal$ = tmpstrVal$ + Chr$(0)
  3568.  
  3569.         '' Create this key value no matter what (required by Gemini)
  3570.         LReturn& = Lot_RegCreateKeyEx(HKEY_USERS, uPref$)
  3571.         LReturn& = RegOpenKeyEx(HKEY_USERS, uPref$, 0, KEY_ALL_ACCESS,phkResult&)
  3572.         LReturn& = RegSetValueExM(phkResult&,_
  3573.                 LdString(SID_MRFLIST),_
  3574.                 0,_
  3575.                 REG_MULTI_SZ,_
  3576.                 tmpstrVal$,_
  3577.                 LEN(tmpstrVal$)+1)
  3578.         LReturn& = RegCloseKeyEx(phkResult&)
  3579.  
  3580.         ''-----------    [ATFUNCS]     -----------
  3581.         atsArray(0)="NA"                                
  3582.         atsArray(1)="ERR"                               
  3583.         atsArray(2)="ABS"                               
  3584.         atsArray(3)="INT"                               
  3585.         atsArray(4)="SQRT"                      
  3586.         atsArray(5)="LOG"                               
  3587.         atsArray(6)="LN"                                
  3588.         atsArray(7)="PI"                                
  3589.         atsArray(8)="SIN"                               
  3590.         atsArray(9)="COS"                               
  3591.         atsArray(10)="TAN"                              
  3592.         atsArray(11)="ATAN2"                    
  3593.         atsArray(12)="ATAN"                     
  3594.         atsArray(13)="ASIN"                     
  3595.         atsArray(14)="ACOS"                     
  3596.         atsArray(15)="EXP"                              
  3597.         atsArray(16)="MOD"                              
  3598.         atsArray(17)="CHOOSE"                   
  3599.         atsArray(18)="ISNA"                     
  3600.         atsArray(19)="ISERR"                    
  3601.         atsArray(20)="FALSE"                    
  3602.         atsArray(21)="TRUE"                     
  3603.         atsArray(22)="RAND"                     
  3604.         atsArray(23)="DATE"                     
  3605.         atsArray(24)="NOW"                              
  3606.         atsArray(25)="PMT"                              
  3607.         atsArray(26)="PV"                               
  3608.         atsArray(27)="FV"                               
  3609.         atsArray(28)="IF"                               
  3610.         atsArray(29)="DAY"                              
  3611.         atsArray(30)="MONTH"                    
  3612.         atsArray(31)="YEAR"                     
  3613.         atsArray(32)="ROUND"                    
  3614.         atsArray(33)="TIME"                     
  3615.         atsArray(34)="HOUR"                     
  3616.         atsArray(35)="MINUTE"                   
  3617.         atsArray(36)="SECOND"                   
  3618.         atsArray(37)="ISNUMBER"         
  3619.         atsArray(38)="ISSTRING"         
  3620.         atsArray(39)="LENGTH"                   
  3621.         atsArray(40)="VALUE"                    
  3622.         atsArray(41)="STRING"                   
  3623.         atsArray(42)="MID"                              
  3624.         atsArray(43)="CHAR"                     
  3625.         atsArray(44)="CODE"                     
  3626.         atsArray(45)="FIND"                     
  3627.         atsArray(46)="DATEVALUE"                
  3628.         atsArray(47)="TIMEVALUE"                
  3629.         atsArray(48)="CELLPOINTER"      
  3630.         atsArray(49)="SUM"                              
  3631.         atsArray(50)="AVG"                              
  3632.         atsArray(51)="COUNT"                    
  3633.         atsArray(52)="MIN"                              
  3634.         atsArray(53)="MAX"                              
  3635.         atsArray(54)="VLOOKUP"          
  3636.         atsArray(55)="NPV"                              
  3637.         atsArray(56)="VAR"                              
  3638.         atsArray(57)="STD"                              
  3639.         atsArray(58)="IRR"                              
  3640.         atsArray(59)="HLOOKUP"          
  3641.         atsArray(60)="DSUM"                     
  3642.         atsArray(61)="DAVG"                     
  3643.         atsArray(62)="DCOUNT"                   
  3644.         atsArray(63)="DMIN"                     
  3645.         atsArray(64)="DMAX"                     
  3646.         atsArray(65)="DVAR"                     
  3647.         atsArray(66)="DSTD"                     
  3648.         atsArray(67)="INDEX"                    
  3649.         atsArray(68)="COLS"                     
  3650.         atsArray(69)="ROWS"                     
  3651.         atsArray(70)="REPEAT"                   
  3652.         atsArray(71)="UPPER"                    
  3653.         atsArray(72)="LOWER"                    
  3654.         atsArray(73)="LEFT"                     
  3655.         atsArray(74)="RIGHT"                    
  3656.         atsArray(75)="REPLACE"          
  3657.         atsArray(76)="PROPER"                   
  3658.         atsArray(77)="CELL"                     
  3659.         atsArray(78)="TRIM"                     
  3660.         atsArray(79)="CLEAN"                    
  3661.         atsArray(80)="S"                                
  3662.         atsArray(81)="N"                                
  3663.         atsArray(82)="EXACT"                    
  3664.         atsArray(83)="-CALL"            
  3665.         atsArray(84)="@"                                
  3666.         atsArray(85)="RATE"                     
  3667.         atsArray(86)="TERM"                     
  3668.         atsArray(87)="CTERM"                    
  3669.         atsArray(88)="SLN"                              
  3670.         atsArray(89)="SYD"                              
  3671.         atsArray(90)="DDB"                              
  3672.         atsArray(91)="-SPLFUNCS"        
  3673.         atsArray(92)="SHEETS"                   
  3674.         atsArray(93)="INFO"                     
  3675.         atsArray(94)="SUMPRODUCT"       
  3676.         atsArray(95)="ISRANGE"          
  3677.         atsArray(96)="DGET"                     
  3678.         atsArray(97)="DQUERY"                   
  3679.         atsArray(98)="COORD"                    
  3680.         atsArray(99)="-MATCH"                   
  3681.         atsArray(100)="TODAY"                   
  3682.         atsArray(101)="VDB"                             
  3683.         atsArray(102)="DVARS"                   
  3684.         atsArray(103)="DSTDS"                   
  3685.         atsArray(104)="VARS"                    
  3686.         atsArray(105)="STDS"                    
  3687.         atsArray(106)="D360"                    
  3688.         atsArray(107)="-BLANK"          
  3689.         atsArray(108)="ISAPP"           
  3690.         atsArray(109)="ISAAF"           
  3691.         atsArray(110)="WEEKDAY"         
  3692.         atsArray(111)="DATEDIF"         
  3693.         atsArray(112)="RANK"            
  3694.         atsArray(113)="NUMBERSTRING"    
  3695.         atsArray(114)="DATESTRING"      
  3696.         atsArray(115)="DECIMAL"         
  3697.         atsArray(116)="HEX"             
  3698.         atsArray(117)="DB"              
  3699.         atsArray(118)="PMTI"            
  3700.         atsArray(119)="SPI"             
  3701.         atsArray(120)="FULLP"           
  3702.         atsArray(121)="HALFP"           
  3703.         atsArray(122)="PUREAVG"         
  3704.         atsArray(123)="PURECOUNT"       
  3705.         atsArray(124)="PUREMAX"         
  3706.         atsArray(125)="PUREMIN"         
  3707.         atsArray(126)="PURESTD"         
  3708.         atsArray(127)="PUREVAR"         
  3709.         atsArray(128)="PURESTDS"        
  3710.         atsArray(129)="PUREVARS"        
  3711.         atsArray(130)="PMT2"            
  3712.         atsArray(131)="PV2"             
  3713.         atsArray(132)="FV2"             
  3714.         atsArray(133)="TERM2"           
  3715.         atsArray(134)="?AAF?"           
  3716.         atsArray(135)="DARWIN"          
  3717.         atsArray(136)="FACT"                    
  3718.         atsArray(137)="FVAL"                    
  3719.         atsArray(138)="PVAL"                    
  3720.         atsArray(139)="SINH"                    
  3721.         atsArray(140)="ASINH"                   
  3722.         atsArray(141)="ROUNDUP"         
  3723.         atsArray(142)="ROUNDDOWN"               
  3724.         atsArray(143)="ROUNDM"                  
  3725.         atsArray(144)="GAMMALN"         
  3726.         atsArray(145)="GAMMA"                   
  3727.         atsArray(146)="COMBIN"                  
  3728.         atsArray(147)="FACTLN"                  
  3729.         atsArray(148)="BETA"                    
  3730.         atsArray(149)="COSH"                    
  3731.         atsArray(150)="TANH"                    
  3732.         atsArray(151)="SECH"                    
  3733.         atsArray(152)="COTH"                    
  3734.         atsArray(153)="ACOSH"                   
  3735.         atsArray(154)="ATANH"                   
  3736.         atsArray(155)="ASECH"                   
  3737.         atsArray(156)="ACSCH"                   
  3738.         atsArray(157)="ACOTH"                   
  3739.         atsArray(158)="ACCRUED"         
  3740.         atsArray(159)="AVEDEV"                  
  3741.         atsArray(160)="BESSELI"         
  3742.         atsArray(161)="BESSELJ"         
  3743.         atsArray(162)="BESSELK"         
  3744.         atsArray(163)="BESSELY"         
  3745.         atsArray(164)="BETAI"                   
  3746.         atsArray(165)="BINOMIAL"                
  3747.         atsArray(166)="CHIDIST"         
  3748.         atsArray(167)="CHITEST"         
  3749.         atsArray(168)="CORREL"                  
  3750.         atsArray(169)="COV"                             
  3751.         atsArray(170)="CRITBINOMIAL"    
  3752.         atsArray(171)="DEVSQ"                   
  3753.         atsArray(172)="ERF"                             
  3754.         atsArray(173)="ERFC"                    
  3755.         atsArray(174)="ERFD"                    
  3756.         atsArray(175)="EXP2"                    
  3757.         atsArray(176)="FDIST"                   
  3758.         atsArray(177)="FTEST"                   
  3759.         atsArray(178)="GAMMAI"                  
  3760.         atsArray(179)="GEOMEAN"         
  3761.         atsArray(180)="HARMEAN"         
  3762.         atsArray(181)="KURTOSIS"                
  3763.         atsArray(182)="NORMAL"                  
  3764.         atsArray(183)="DAYS360"         
  3765.         atsArray(184)="PERCENTILE"      
  3766.         atsArray(185)="PERMUT"                  
  3767.         atsArray(186)="PRANK"                   
  3768.         atsArray(187)="REGRESSION"      
  3769.         atsArray(188)="SKEWNESS"                
  3770.         atsArray(189)="SQRTPI"                  
  3771.         atsArray(190)="TDIST"                   
  3772.         atsArray(191)="TTEST"                   
  3773.         atsArray(192)="ZTEST"                   
  3774.         atsArray(193)="IPAYMT"                  
  3775.         atsArray(194)="IRATE"                   
  3776.         atsArray(195)="MEDIAN"                  
  3777.         atsArray(196)="MIRR"                    
  3778.         atsArray(197)="NPER"                    
  3779.         atsArray(198)="PPAYMT"                  
  3780.         atsArray(199)="POISSON"         
  3781.         atsArray(200)="PRICE"                   
  3782.         atsArray(201)="YIELD"                   
  3783.         atsArray(202)="PRODUCT"         
  3784.         atsArray(203)="ACOT"                    
  3785.         atsArray(204)="ACSC"                    
  3786.         atsArray(205)="ASEC"                    
  3787.         atsArray(206)="COT"                        
  3788.         atsArray(207)="CSC"                             
  3789.         atsArray(208)="CSCH"                    
  3790.         atsArray(209)="DATEINFO"                
  3791.         atsArray(210)="DAYS"                    
  3792.         atsArray(211)="DEGTORAD"                
  3793.         atsArray(212)="DPURECOUNT"      
  3794.         atsArray(213)="ISFILE"                  
  3795.         atsArray(214)="GRANDTOTAL"      
  3796.         atsArray(215)="MATCH"                   
  3797.         atsArray(216)="PAYMT"                   
  3798.         atsArray(217)="RADTODEG"                
  3799.         atsArray(218)="SEC"                             
  3800.         atsArray(219)="SIGN"                    
  3801.         atsArray(220)="SUMSQ"                   
  3802.         atsArray(221)="TRUNC"                   
  3803.         atsArray(222)="WEIGHTAVG"               
  3804.         atsArray(223)="WORKDAY"         
  3805.         atsArray(224)="XINDEX"                  
  3806.         atsArray(225)="SUBTOTAL"                
  3807.         atsArray(226)="EVEN"                    
  3808.         atsArray(227)="LARGE"                   
  3809.         atsArray(228)="ODD"                             
  3810.         atsArray(229)="QUOTIENT"                
  3811.         atsArray(230)="REFCONVERT"      
  3812.         atsArray(231)="SEMEAN"                  
  3813.         atsArray(232)="SERIESSUM"               
  3814.         atsArray(233)="SMALL"                   
  3815.         atsArray(234)="SUMXMY2"         
  3816.         atsArray(235)="ISMACRO"         
  3817.         atsArray(236)="DDELINK"         
  3818.         atsArray(237)="PMTC"                    
  3819.         atsArray(238)="RANGENAME"               
  3820.         atsArray(239)="-USER"                   
  3821.         atsArray(240)="VERSIONINFO"     
  3822.         atsArray(241)="VERSIONDATA"     
  3823.         atsArray(242)="VERSIONCURRENT"
  3824.         atsArray(243)="SCENARIOINFO"    
  3825.         atsArray(244)="SCENARIOLAST"    
  3826.         atsArray(245)="ACCRUED2"                
  3827.         atsArray(246)="PRICE2"                  
  3828.         atsArray(247)="YIELD2"                  
  3829.         atsArray(248)="SOLVER"                  
  3830.         atsArray(249)="DURATION"                
  3831.         atsArray(250)="ISEMPTY"         
  3832.         atsArray(251)="MAXLOOKUP"               
  3833.         atsArray(252)="MDURATION"               
  3834.         atsArray(253)="MINLOOKUP"               
  3835.         atsArray(254)="NETWORKDAYS"     
  3836.         atsArray(255)="NEXTMONTH"               
  3837.         atsArray(256)="SETSTRING"               
  3838.         atsArray(257)="SUMPOSITIVE"     
  3839.         atsArray(258)="SUMNEGATIVE"     
  3840.         atsArray(259)="NPV2"                    
  3841.         atsArray(260)="MIRR2"                   
  3842.         atsArray(261)="MODULO"                  
  3843.         atsArray(262)="YEAR2"                   
  3844.         atsArray(263)="FVAMOUNT"                
  3845.         atsArray(264)="PVAMOUNT"                
  3846.         atsArray(265)="XIRR"                    
  3847.         atsArray(266)="XNPV"                    
  3848.         atsArray(267)="ISBETWEEN"               
  3849.         atsArray(268)="DECILE"                  
  3850.         atsArray(269)="FORECAST"                
  3851.         atsArray(270)="NSUM"                    
  3852.         atsArray(271)="PUREMEDIAN"      
  3853.         atsArray(272)="QUARTILE"                
  3854.         atsArray(273)="FINDB"                   
  3855.         atsArray(274)="LEFTB"                   
  3856.         atsArray(275)="LENGTHB"         
  3857.         atsArray(276)="MIDB"                    
  3858.         atsArray(277)="REPLACEB"                
  3859.         atsArray(278)="RIGHTB"                  
  3860.         atsArray(279)="DATECONVERT"     
  3861.         atsArray(280)="TLENGTH"         
  3862.         atsArray(281)="TLEFT"                   
  3863.         atsArray(282)="TRIGHT"                  
  3864.         atsArray(283)="TMID"                    
  3865.         atsArray(284)="TFIND"                   
  3866.         atsArray(285)="TREPLACE"                
  3867.         atsArray(286)="TDIGIT"                  
  3868.         atsArray(287)="EDIGIT"                  
  3869.         atsArray(288)="TNUMBERSTRING"
  3870.         atsArray(289)="TDOW"                    
  3871.         atsArray(290)="TDATESTRING"     
  3872.         atsArray(291)="TLDATESTRING"    
  3873.  
  3874.         intVal=0
  3875.         binArray$ = ""
  3876.  
  3877.         stringVal$ = GetIniKeyString(iniPath$,"ATFUNCS", "AtFunc"&CSTR(intVal))
  3878.         WHILE  stringVal$<>""
  3879.             tmpintVal& = inStr(stringVal$, ",")
  3880.             tmpstrVal$ = Left(stringVal$, tmpintVal-1)
  3881.             if tmpstrVal$="-" Then     ''SEPERATOR
  3882.                 binArray$=binArray$+Chr$(0)+Chr$(0)+Chr$(0)+Chr$(64)
  3883.             else                                                            
  3884.                 FOR index = 0 to 291            ''LOOK UP TABLE
  3885.                     if tmpstrVal$=atsArray(index) Then
  3886.                         if (index + 31) > 255 Then
  3887.                             s1=1
  3888.                             s2=(index+31) Mod 256
  3889.                         else
  3890.                             s1=index+31
  3891.                             s2=0
  3892.                         end if
  3893.                         binArray$=binArray$+Chr$(s1)+Chr$(s2)+Chr$(0)+Chr$(0)
  3894.                     end if
  3895.                 NEXT    
  3896.             end if
  3897.             intVal = intVal + 1
  3898.             stringVal$ = GetIniKeyString(iniPath$,"ATFUNCS", "AtFunc"&CSTR(intVal))
  3899.         WEND
  3900.  
  3901.         '' Create this key value no matter what (required by Gemini)
  3902.         LReturn& = Lot_RegCreateKeyEx(HKEY_USERS, uPref$)
  3903.         LReturn& = RegOpenKeyEx(HKEY_USERS, uPref$, 0, KEY_ALL_ACCESS,phkResult&)
  3904.         LReturn& = RegSetValueExM(phkResult&,_
  3905.                         LdString(SID_FAVORITEATFUNCTIONS),_
  3906.                         0,_
  3907.                         REG_BINARY,_
  3908.                         binArray,_
  3909.                         LEN(binArray))
  3910.     End if                                                                                                                                                                                                   
  3911.                                                                                                                  
  3912. END SUB
  3913.  
  3914. '*************************************************************************
  3915. '** FUNCTION GetPreviousMastersDir()
  3916. '**
  3917. '** Purpose: Determines existing path to SmartMasters or Styles
  3918. '** Author: TLB
  3919. '** Arguments:  
  3920. '** Returns:  The directory as a string
  3921. '*************************************************************************
  3922. FUNCTION GetPreviousMastersDir() AS STRING
  3923.     DIM PrevMasters$, UserIni$, Ini123$, idx%
  3924.  
  3925.     Ini123$ = GetWindowsDir() + "123r5.ini"
  3926.     PrevMasters$ = GetIniKeyString(Ini123$, "CONFIG", "template_directory")
  3927.  
  3928.     ' Only take first path if more than one
  3929.  
  3930.     idx% = INSTR(PrevMasters$, ";")
  3931.     IF idx% <> 0 THEN
  3932.         PrevMasters$ = LEFT$(PrevMasters$, idx% - 1)
  3933.     END IF
  3934.  
  3935.     GetPreviousMastersDir = Lot_TrimEndSlash(PrevMasters$)
  3936. END FUNCTION
  3937.  
  3938. '*************************************************************************
  3939. '** SUB DoBackupSmartMasters()
  3940. '**
  3941. '** Purpose: Does the work of backing up currently installed masters
  3942. '**
  3943. '** Author:    Troy Bartlett
  3944. '** Arguments: NONE
  3945. '** Returns:   NONE
  3946. '*************************************************************************
  3947. SUB DoBackupSmartMasters()
  3948. DIM PrevMasters$, NewMasters$, idx%, Master$, OrigMaster$, BackupMaster$
  3949.  
  3950.     PrevMasters$ = GetPreviousMastersDir()
  3951.     NewMasters$ = MakePath(GetSymbolValue("123MASTERSDIR"), "backup")
  3952.  
  3953.     IF DoesDirExist(PrevMasters$) AND _
  3954.         NOT DoesDirExist(NewMasters$) _
  3955.     THEN
  3956.         CreateDir NewMasters$, cmoNone
  3957.         Master$ = DIR$(PrevMasters$ + "\*.*")
  3958.         WHILE Master$ <> ""
  3959.             OrigMaster$ = PrevMasters$ + "\" + Master$
  3960.             BackupMaster$ = NewMasters$ + "\" + Master$
  3961.             CopyFile OrigMaster$, BackupMaster$, cmoNone, 0
  3962.             Master$ = DIR$()
  3963.         WEND
  3964.     END IF
  3965. END SUB
  3966.  
  3967. '*************************************************************************
  3968. FUNCTION Lot_WriteMapRegFor123(network$, prodno%) AS INTEGER
  3969. '** Purpose:    This function writes Map registration needed
  3970. '** Author:     Jeannie Lu
  3971. '** Arguments:  
  3972. '** Returns:    SUCCESS
  3973. '** NOTE: 
  3974. '*************************************************************************
  3975. DIM mapDatapath$, mapConfpath$, LReturn&, notused%, lang$, langsubdir$
  3976.  
  3977.     lang$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  3978.  
  3979.     IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN
  3980.         langsubdir$ = GetSymbolValue(SYM_LANGUAGE_SUBDIR$) & "\"
  3981.     ELSE
  3982.         langsubdir$ = ""
  3983.     END IF
  3984.  
  3985.     If Lot_IsTheFeatureInstalled("123CORE") <> FALSE Then
  3986.     mapDatapath$ = Lot_WhereIsFeature(prodno%, "123CORE", "maps"+lang$+".dll")
  3987.         mapDatapath$ = Makepath(mapDatapath$, LdString(SID_123_MAPS_DIR))
  3988.  
  3989.         IF network$ = gSTANDARD$ THEN
  3990.             mapConfpath$ = GetSymbolValue("123MAPLANGDIR") & langsubdir$ & "\"
  3991.         ELSE ' network$ = gNODE$
  3992.             mapConfpath$ = GetDestinationSymbolValue123("123MAPLANGDIR", TRUE) & "\"
  3993.         END IF
  3994.  
  3995.         LReturn& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  3996.             gREGLOTUS+"123\97.0\Paths\MapData",_
  3997.             lang$,_
  3998.             REG_SZ,_
  3999.             mapDatapath$,_
  4000.             LENBP(mapDatapath$)+1)
  4001.  
  4002.         LReturn& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  4003.             gREGLOTUS+"123\97.0\Paths\MapConfig",_
  4004.             lang$,_
  4005.             REG_SZ,_
  4006.             mapConfpath$,_
  4007.             LENBP(mapConfpath$)+1)
  4008.         'notused%=Lot_RegisterObject("123CORE", UNIN_CLASS_FILE_GROUP$, mapDatapath$+"*.*")
  4009.     End If
  4010. END FUNCTION
  4011.  
  4012. '*************************************************************************
  4013. SUB CleanRegistryKeys123(prodno%)
  4014. '** Purpose:    This function cleans registry Keys for 123.
  4015. '** Author:     Jeannie Lu
  4016. '** Arguments:  
  4017. '** Returns:    SUCCESS
  4018. '** NOTE: 
  4019. '*************************************************************************
  4020. DIM CR_Keys(0 to 15) AS STRING, tmpintVal%, LReturn&
  4021. DIM featPath$, notused%, chpt$, phkResult&
  4022.  
  4023.     chpt$ = Lot_GetChapterFromKeyword("123CORE")
  4024.     IF (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) THEN
  4025.  
  4026.         ' Remove HCU/S/L/123/97.0/Product Version if it exists
  4027.         LReturn& = RegOpenKeyEx(HKEY_CURRENT_USER, gREGLOTUS+"123\97.0", 0, KEY_ALL_ACCESS,phkResult&)
  4028.         LReturn& = RegDeleteValue(phkResult&, "Product Version")
  4029.         LReturn& = RegCloseKeyEx(phkResult&)
  4030.  
  4031.         IF WhatPlatform() = PLATFORM_WIN95 THEN
  4032.  
  4033.             '' [HKEY_LOCAL_MACHINE]
  4034.             '' LReturn& = RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\Components")
  4035.             '' LReturn& = RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\GraphicFilters")
  4036.             '' LReturn& = RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\ConfigCache")
  4037.             '' LReturn& = RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\Tools")
  4038.             LReturn& = RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\Map Preferences\Installed Maps")
  4039.             LReturn& = RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Lotus\123\6.0")
  4040.  
  4041.             '' [HKEY_USERS]
  4042.             LReturn& = RegDeleteKey(HKEY_USERS, ".DEFAULT\Software\Lotus\123\6.0")
  4043.             '' LReturn& = RegDeleteKey(HKEY_USERS, ".DEFAULT\Software\Lotus\123\97.0")
  4044.  
  4045.             '' [HKEY_CURRENT_USER]
  4046.             LReturn& = RegDeleteKey(HKEY_CURRENT_USER, "Software\Lotus\123\6.0")
  4047.             '' IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  4048.             ''      LReturn& = RegDeleteKey(HKEY_CURRENT_USER, "Software\Lotus\123\97.0")
  4049.             '' END IF
  4050.  
  4051.             '' [HKEY_CLASSES_ROOT]
  4052.             CR_Keys(0) = "123.Application.6"
  4053.             CR_Keys(1) = "123.Worksheet.6"
  4054.             CR_Keys(2) = "123.Worksheet.32"
  4055.             CR_Keys(3) = "CLSID\{29130101-2EED-1069-BF5D-00DD011186B7}"
  4056.             CR_Keys(4) = "CLSID\{29130100-2EED-1069-BF5D-00DD011186B7}"
  4057.             CR_Keys(5) = "CLSID\{29130007-2EED-1069-BF5D-00DD011186B7}"
  4058.             '' CR_Keys(5) = "Lotus123.Workbook.97"
  4059.             '' CR_Keys(6) = "Lotus123.Workbook"
  4060.             '' CR_Keys(7) = ".123"
  4061.  
  4062.             FOR tmpintVal = 0 TO 5
  4063.                 LReturn& = RegDeleteKey(HKEY_CLASSES_ROOT, CR_Keys(tmpintVal))
  4064.             NEXT
  4065.  
  4066.         ELSEIF WhatPlatform() = PLATFORM_WINNT THEN
  4067.  
  4068.             '' [HKEY_LOCAL_MACHINE]
  4069.             '' LReturn& = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\Components")
  4070.             '' LReturn& = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\GraphicFilters")
  4071.             '' LReturn& = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\ConfigCache")
  4072.             '' LReturn& = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\Tools")
  4073.             LReturn& = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, "Software\Lotus\123\97.0\Map Preferences\Installed Maps")
  4074.             LReturn& = Lot_DeleteRegKeyEx(HKEY_LOCAL_MACHINE, "Software\Lotus\123\6.0")
  4075.  
  4076.             '' [HKEY_USERS]
  4077.             LReturn& = Lot_DeleteRegKeyEx(HKEY_USERS, ".DEFAULT\Software\Lotus\123\6.0")
  4078.             '' LReturn& = Lot_DeleteRegKeyEx(HKEY_USERS, ".DEFAULT\Software\Lotus\123\97.0")
  4079.  
  4080.             '' [HKEY_CURRENT_USER]
  4081.             LReturn& = Lot_DeleteRegKeyEx(HKEY_CURRENT_USER, "Software\Lotus\123\6.0")
  4082.             '' IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  4083.             ''              LReturn& = Lot_DeleteRegKeyEx(HKEY_CURRENT_USER, "Software\Lotus\123\97.0")
  4084.             '' END IF
  4085.  
  4086.             '' [HKEY_CLASSES_ROOT]
  4087.             CR_Keys(0) = "123.Application.6"
  4088.             CR_Keys(1) = "123.Worksheet.6"
  4089.             CR_Keys(2) = "123.Worksheet.32"
  4090.             CR_Keys(3) = "CLSID\{29130101-2EED-1069-BF5D-00DD011186B7}"
  4091.             CR_Keys(4) = "CLSID\{29130100-2EED-1069-BF5D-00DD011186B7}"
  4092.             CR_Keys(5) = "CLSID\{29130007-2EED-1069-BF5D-00DD011186B7}"
  4093.             '' CR_Keys(5) = "Lotus123.Workbook.97"
  4094.             '' CR_Keys(6) = "Lotus123.Workbook"
  4095.             '' CR_Keys(7) = ".123"
  4096.  
  4097.             FOR tmpintVal = 0 TO 5
  4098.                 LReturn& = Lot_DeleteRegKeyEx(HKEY_CLASSES_ROOT, CR_Keys(tmpintVal))
  4099.             NEXT
  4100.         END IF
  4101.     END IF
  4102.  
  4103. END SUB
  4104.  
  4105. '*************************************************************************
  4106. FUNCTION Lot_WriteImgRegFor123(network$, prodno%) AS INTEGER
  4107. '** Purpose:    This function writes Map registration needed
  4108. '** Author:     Jeannie Lu
  4109. '** Arguments:  
  4110. '** Returns:    SUCCESS
  4111. '** NOTE: 
  4112. '*************************************************************************
  4113. DIM typArray(0 to 3) AS STRING, tmpintVal%, LReturn&
  4114. DIM filArray(0 to 3) AS STRING
  4115.  
  4116.     If Lot_IsTheFeatureInstalled("WIN32SHRGRAPHFILEFILTERPRG") <> FALSE Then
  4117.         typArray(0) = "BMP"
  4118.         typArray(1) = "CGM"
  4119.         typArray(2) = "PIC"
  4120.         typArray(3) = "WMF"
  4121.  
  4122.         filArray(0) = "ibbmp32.flt"
  4123.         filArray(1) = "imcgm32.flt"
  4124.         filArray(2) = "impic32.flt"
  4125.         filArray(3) = "imwmf32.flt"
  4126.  
  4127.         FOR tmpintVal = 0 TO 3
  4128.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4129.                 "SOFTWARE\Lotus\123\97.0\GraphicFilters",_
  4130.                 typArray(tmpintVal),_
  4131.                 REG_SZ,_
  4132.                 filArray(tmpintVal),_
  4133.                 LENBP(filArray(tmpintVal))+1)
  4134.         NEXT
  4135.     End If
  4136.     
  4137. END FUNCTION
  4138.  
  4139. '*************************************************************************
  4140. '** FUNCTION GetPreviousMapsDir()
  4141. '**
  4142. '** Purpose: Determines existing path to Maps
  4143. '** Author: Jeannie Lu
  4144. '** Arguments:  
  4145. '** Returns:  The directory as a string
  4146. '*************************************************************************
  4147. FUNCTION GetPreviousMapsDir() AS STRING
  4148.     DIM PrevMap$, UserIni$, Ini123$, idx%
  4149.  
  4150.     Ini123$ = GetWindowsDir() + "123r5.ini"
  4151.     PrevMap$ = GetIniKeyString(Ini123$, "MAPS", "datapath")
  4152.  
  4153.     ' Only take first path if more than one
  4154.  
  4155.     idx% = INSTR(PrevMap$, ";")
  4156.     IF idx% <> 0 THEN
  4157.         PrevMap$ = LEFT$(PrevMap$, idx% - 1)
  4158.     END IF
  4159.  
  4160.     GetPreviousMapsDir = Lot_TrimEndSlash(PrevMap$)
  4161. END FUNCTION
  4162.  
  4163. '*************************************************************************
  4164. '** SUB DoBackupMaps()
  4165. '**
  4166. '** Purpose: Does the work of backing up currently installed maps
  4167. '**
  4168. '** Author:    Jeannie Lu
  4169. '** Arguments: NONE
  4170. '** Returns:   NONE
  4171. '*************************************************************************
  4172. SUB DoBackupMaps()
  4173. DIM PrevMap$, NewMap$, Map$, OrigMap1$, OrigMap2$, BackupMap1$, BackupMap2$, iniFil$
  4174. DIM total%, ini123$, tmpStr$, x%, template$, initName$, iniPath$, title$
  4175. DIM LReturn&, notused%, mInstKey$, mapKey$, lang$
  4176.  
  4177.     PrevMap$ = GetPreviousMapsDir()
  4178.     If PrevMap$="" Then
  4179.         '' Can't locate existing maps
  4180.         EXIT SUB
  4181.     End If
  4182.  
  4183.     ini123$ = GetWindowsDir() + "123r5.ini"
  4184.     iniPath$ = GetIniKeyString(ini123$, "MAPS", "inipath")
  4185.     If iniPath$ = "" Then
  4186.         '' Can't locate existing maps inis
  4187.         EXIT SUB
  4188.     End If
  4189.     iniPath$ = Lot_TrimEndSlash(iniPath$)
  4190.  
  4191.     tmpStr$ = GetIniKeyString(ini123$, "MAPS", "Total")
  4192.     If tmpStr$ = "11" Then
  4193.         '' No Maps from outside vendor
  4194.         EXIT SUB
  4195.     End If
  4196.  
  4197.     lang$=GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  4198.  
  4199.     total% = Val(tmpStr$)
  4200.     NewMap$ = MakePath(GetSymbolValue("123DIR"), "Maps")
  4201.     CreateDir NewMap$, cmoNone
  4202.     FOR x = 12 TO total
  4203.         template$ = GetIniKeyString(ini123$,"MAPS", "Template"&CSTR(x))
  4204.  
  4205.         If template$ <> "" Then
  4206.             initName$ = GetIniKeyString(ini123$, template$, "ininame")
  4207.             title$ = GetIniKeyString(ini123$, template$, "name")
  4208.             iniFil$ = iniPath$ + "\" + initName$
  4209.             mInstKey$ = LdString(SID_KEY_MAP_PREFS) + "\Installed Maps"
  4210.  
  4211.             If DoesFileExist(iniFil$, femExists) Then
  4212.                 Map$=GetIniKeyString(iniFil$, "CONFIG", "overlay1")
  4213.  
  4214.                 '' *.tv file
  4215.                 OrigMap1 = PrevMap$ + "\" + Map$
  4216.                 '' *.tvc file
  4217.                 OrigMap2 = PrevMap$ + "\" + Map$ + "c"
  4218.  
  4219.                 If DoesFileExist(OrigMap1, femExists) And _
  4220.                     DoesFileExist(OrigMap2, femExists) Then
  4221.                     BackupMap1$ = NewMap$ + "\" + Map$
  4222.  
  4223.                     ' Wait til *.tvc files get copy to the right place (JBrodeur)
  4224.                     ' BackupMap2$ = NewMap$ + "\" + lang$ + "\" + Map$ + "c"
  4225.                     BackupMap2$ = NewMap$ + "\" + Map$ + "c"
  4226.  
  4227.                     If DoesFileExist(BackupMap1$, femExists) Then
  4228.                         SetFileAttr BackupMap1$, 0
  4229.                         Kill BackupMap1$
  4230.                     End If
  4231.  
  4232.                     If DoesFileExist(BackupMap2$, femExists) Then
  4233.                         SetFileAttr BackupMap2$, 0
  4234.                         Kill BackupMap2$
  4235.                     End If
  4236.  
  4237.                     If DoesFileExist(BackupMap1$, femExists) = 0 And _
  4238.                         DoesFileExist(BackupMap1$, femExists) = 0 Then
  4239.                         FileCopy OrigMap1$, BackupMap1$
  4240.                         FileCopy OrigMap2$, BackupMap2$
  4241.  
  4242.                         mapKey$ = mInstKey$ + "\" + template$
  4243.                         '' Register Copied Over Old Maps
  4244.                         LReturn& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4245.                             mapKey$,_
  4246.                             "File",_
  4247.                             REG_SZ,_
  4248.                             Map$,_
  4249.                             LENBP(Map$)+1)
  4250.  
  4251.                         LReturn& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4252.                             mapKey$ + "\Title",_
  4253.                             lang$,_
  4254.                             REG_SZ,_
  4255.                             title$,_
  4256.                             LENBP(title$)+1)
  4257.                     End If
  4258.                 End If
  4259.             End If
  4260.         End If
  4261.     NEXT
  4262.  
  4263. END SUB
  4264.  
  4265. '*************************************************************************
  4266. FUNCTION Lot_RegUninstFilFor123(network$, prodno%) AS INTEGER
  4267. '** Purpose:    This function registers uninstall files not in INF
  4268. '** Author:     Jeannie Lu
  4269. '** Arguments:  
  4270. '** Returns:    SUCCESS
  4271. '** NOTE: 
  4272. '*************************************************************************
  4273. DIM notused%, Path123$
  4274.    Path123$ = GetSymbolValue("123DIR")
  4275.     notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_FILE$, Path123$+"gemtimer.dat")
  4276.     notused%=Lot_RegisterObject("123TOP", UNIN_CLASS_FILE$, Path123$+"panose.dat")
  4277. END FUNCTION
  4278.  
  4279. '****************************************************************************
  4280. SUB MigrateFillsPrefReg()
  4281. '**
  4282. '** Purpose:    Migrate Fills from fills.ini to the OS registry.
  4283. '**
  4284. '** Author:     JLU
  4285. '** Arguments: NONE
  4286. '** Returns:   NONE
  4287. '****************************************************************************
  4288. DIM fillsIniPath$, value$, setVal&, itemVal&, fillsSubKey$, valueName$, lang$
  4289. DIM fillsKey$, LReturn&
  4290.  
  4291.     fillsIniPath$ = Get123PathfromLotusIni()
  4292.  
  4293.     If fillsIniPath$ <> "" Then
  4294.     fillsIniPath$ = MakePath(fillsIniPath$, "fills.ini")
  4295.  
  4296.         If DoesFileExist(fillsIniPath$, femExists) Then
  4297.             lang$ = LCase(GetSymbolValue(SYM_INSTALL_LANGUAGE$))
  4298.             setVal = 1
  4299.             itemVal = 1
  4300.             fillsKey$ = "SOFTWARE\Lotus\Components\Fills\" + lang$ + "\"
  4301.  
  4302.         value$ = GetIniKeyString(fillsIniPath$,_
  4303.                                     "SET "&CSTR(setVal),_
  4304.                                     "Item"&CSTR(itemVal))
  4305.  
  4306.           DO WHILE  value$ <> ""
  4307.               DO WHILE  value$ <> ""
  4308.                     fillsSubKey$ = fillsKey$ + "SET "&CSTR(setVal)
  4309.                     valueName$ = "Item"&CSTR(itemVal)
  4310.                     LReturn& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  4311.                                     fillsSubKey$,_
  4312.                                     valueName$,_     
  4313.                                     REG_SZ,_
  4314.                                     value$,_
  4315.                                     LENBP(value$) )
  4316.  
  4317.                 value$ = GetIniKeyString(fillsIniPath$,_
  4318.                                     "SET "&CSTR(setVal),_
  4319.                                     "case")
  4320.  
  4321.                     If value$  <> "" Then _
  4322.                         LReturn& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER,_
  4323.                                     fillsSubKey$,_
  4324.                                     "case",_         
  4325.                                     REG_SZ,_
  4326.                                     value$,_
  4327.                                     LENBP(value$) )
  4328.  
  4329.                     itemVal = itemVal + 1
  4330.                 value$ = GetIniKeyString(fillsIniPath$,_
  4331.                                     "SET "&CSTR(setVal),_
  4332.                                     "Item"&CSTR(itemVal))
  4333.                 LOOP
  4334.                 itemVal = 1
  4335.                 setVal = setVal + 1
  4336.             value$ = GetIniKeyString(fillsIniPath$,_
  4337.                                     "SET "&CSTR(setVal),_
  4338.                                     "Item"&CSTR(itemVal))
  4339.             LOOP
  4340.         End If
  4341.     End If
  4342. END SUB
  4343.  
  4344. '****************************************************************************
  4345. SUB Write_ODBC_Reg(prodno%, network$)
  4346. '**
  4347. '**
  4348. '** Author:     PMD
  4349. '** Arguments: NONE
  4350. '** Returns:   NONE
  4351. '****************************************************************************
  4352. DIM KEY_LOTUS$, gbuf$, keyval$, Desc$, nsize&, regStatus&, chpt2$, WINSYSDIR$,shrpath$
  4353. DIM FeatureKeyword$, grgPath$, exePath$, winsysPath$, sectionName$, ret%
  4354.  
  4355.     chpt2$ = Lot_GetChapterFromKeyWord("DLENF") 
  4356.     if Lot_GetChapterValInt(chpt2$, F_INOROUT) = 1 then
  4357.         WINSYSDIR$ = GetSymbolValue(SYM_WINSYSDIR$)
  4358.         DIM commonFiles(6) as string
  4359.         DIM i as integer
  4360.          commonFiles(0) = "odbc32.dll"
  4361.          commonFiles(1) = "odbcad32.exe"
  4362.          commonFiles(2) = "odbccp32.dll"
  4363.          commonFiles(3) = "odbccp32.cpl"
  4364.          commonFiles(4) = "odbccr32.dll"
  4365.          commonFiles(5) = "odbcint.dll"
  4366.  
  4367.         FOR i = 0 to (ubound(commonFiles) - 1)
  4368.             shrpath$        = WINSYSDIR$ + commonFiles(i)
  4369.            IncrementSharedDLLCount(shrpath$)
  4370.         NEXT                            
  4371.      END IF
  4372.  
  4373.  
  4374.         winsysPath$ = GetWindowsSysDir()
  4375.         winsysPath$ = Lot_TrimEndSlash(winsysPath$)
  4376.  
  4377.         grgPath$ = Lot_WhereIsFeature(prodno%, "123CORE", "123w97.grg")
  4378.         grgPath$ = MakePath(grgPath$, "123w97.grg")
  4379.  
  4380.         exePath$ = Lot_WhereIsFeature(prodno%, "123CORE", "123w.exe")
  4381.         exePath$ = Lot_TrimEndSlash(exePath$)
  4382.  
  4383.     IF network$ = gNODE THEN
  4384.         FeatureKeyWord$ = "123TOP"
  4385.     ELSE
  4386.         FeatureKeyWord$ = "123CORE"
  4387.     END IF
  4388.  
  4389.  
  4390.           IF Lot_IsTheFeatureInstalled("DBASEPRG_SHRCNT") <> FALSE THEN
  4391. 'dBASE
  4392.  
  4393.                sectionName = "DBASE"
  4394.                 ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  4395.  
  4396.           END IF
  4397.  
  4398.  
  4399.  
  4400. 'Paradox
  4401.             IF Lot_IsTheFeatureInstalled("PARADOXPRG_SHRCNT") <> FALSE THEN
  4402.  
  4403.                sectionName = "PARADOX"
  4404.                 ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  4405.  
  4406.           END IF
  4407.  
  4408.  
  4409. 'Sybase System 10       
  4410.             IF Lot_IsTheFeatureInstalled("SYBASEPRG_SHRCNT") <> FALSE THEN
  4411.  
  4412.                sectionName = "SYBASE"
  4413.                 ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  4414.  
  4415.             END IF
  4416.  
  4417.                 
  4418.             IF Lot_IsTheFeatureInstalled("SQLPRG_SHRCNT") <> FALSE THEN
  4419. 'SQLServer
  4420.                sectionName = "SQLSERVER"
  4421.                 ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  4422.  
  4423. 'SQLServer6
  4424.                sectionName = "SQLSERVER6"
  4425.                 ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  4426.  
  4427.             END IF
  4428.  
  4429.  
  4430.             IF Lot_IsTheFeatureInstalled("ODBCTEXTPRG_SHRCNT") <> FALSE THEN
  4431. 'Textfile
  4432.                sectionName = "TEXTFILE"
  4433.                 ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  4434.  
  4435.             END IF
  4436.  
  4437.             IF Lot_IsTheFeatureInstalled("NOTESSQLPRG_SHRCNT") <> FALSE THEN
  4438. 'NotesSQL
  4439.                sectionName = "NOTES_SQL"
  4440.                 ret% = Get_and_Set_Registry_Entries(FeatureKeyWord, grgPath, exePath, winsysPath, sectionName)
  4441.  
  4442.  
  4443.             END IF
  4444.  
  4445. END SUB
  4446.  
  4447.  
  4448.  
  4449. '*************************************************************************
  4450. FUNCTION Lot_WriteHlpRegFor123(network$, prodno%) AS INTEGER
  4451. '** Purpose:    This function writes Help registration needed
  4452. '** Author:     Jeannie Lu
  4453. '** Arguments:  
  4454. '** Returns:    SUCCESS
  4455. '** NOTE: 
  4456. '*************************************************************************
  4457. DIM hlpArray(1 to 5) AS STRING
  4458. DIM hlpPath(1 to 5) AS STRING
  4459. DIM feature(1 to 5) AS STRING
  4460. DIM LangAcronym$, LReturn&, tmpintVal
  4461.  
  4462.     LangAcronym$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$) 
  4463.  
  4464.     If Lot_IsTheFeatureInstalled("123MAINHELP") <> FALSE Then
  4465.         hlpArray(1) = "ss1n60"
  4466.         hlpPath$(1) = Lot_WhereIsFeature(prodno%, "123MAINHELP",_
  4467.                       hlpArray(1)+LangAcronym$+".hlp")
  4468.         feature(1) = "123MAINHELP"
  4469.     End If
  4470.  
  4471.     If Lot_IsTheFeatureInstalled("123SCRIPTHELP") <> FALSE Then
  4472.         hlpArray(2) = "sssn60"
  4473.         hlpPath(2) = Lot_WhereIsFeature(prodno%, "123SCRIPTHELP",_
  4474.                       hlpArray(2)+LangAcronym$+".hlp")
  4475.         feature(2) = "123SCRIPTHELP"
  4476.  
  4477.         'hlpArray(4) = "heading.cnt"
  4478.         'hlpPath(4) = hlpPath(2)
  4479.         'feature(4) = feature(2)
  4480.         
  4481.         'hlpArray(5) = "shared.cnt"
  4482.         'hlpPath(5) = hlpPath(2)
  4483.         'feature(5) = feature(2)
  4484.     End If
  4485.  
  4486.     If Lot_IsTheFeatureInstalled("123ATFUNCHELP") <> FALSE Then
  4487.         hlpArray(3) = "ssfn60"
  4488.         hlpPath(3) = Lot_WhereIsFeature(prodno%, "123ATFUNCHELP",_
  4489.                       hlpArray(3)+LangAcronym$+".hlp")
  4490.         feature(3) = "123ATFUNCHELP"
  4491.     End If
  4492.  
  4493.     FOR tmpintVal = 1 TO 3
  4494.         If hlpPath(tmpintVal) <> "" Then
  4495.             If network$ = gNODE$ Then feature(tmpintVal) = "123TOP"
  4496.  
  4497.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4498.                 "SOFTWARE\Microsoft\Windows\Help",_
  4499.                 hlpArray(tmpintVal)+LangAcronym$+".hlp",_
  4500.                 REG_SZ,_
  4501.                 hlpPath(tmpintVal),_
  4502.                 LENBP(hlpPath(tmpintVal))+1)
  4503.  
  4504.         LReturn& = Lot_RegisterObject(feature(tmpintVal), UNIN_CLASS_REGISTRY_VALUE,_
  4505.                 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+_
  4506.                 hlpArray(tmpintVal)+LangAcronym$+".hlp")
  4507.                 
  4508.             LReturn& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4509.                 "SOFTWARE\Microsoft\Windows\Help",_
  4510.                 hlpArray(tmpintVal)+LangAcronym$+".cnt",_
  4511.                 REG_SZ,_
  4512.                 hlpPath(tmpintVal),_
  4513.                 LENBP(hlpPath(tmpintVal))+1)
  4514.  
  4515.         LReturn& = Lot_RegisterObject(feature(tmpintVal), UNIN_CLASS_REGISTRY_VALUE$,_
  4516.                 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+_
  4517.                 hlpArray(tmpintVal)+LangAcronym$+".cnt")
  4518.         End If
  4519.     NEXT
  4520.  
  4521.     'FOR tmpintVal = 4 TO 5
  4522.     '       If hlpArray(tmpintVal) <> "" Then
  4523.     '               LReturn& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4524.     '                       "SOFTWARE\Microsoft\Windows\Help",_
  4525.     '                       hlpArray(tmpintVal),_
  4526.     '                       REG_SZ,_
  4527.     '                       hlpPath(tmpintVal),_
  4528.     '                       LEN(hlpPath(tmpintVal))+1)
  4529.     '
  4530.    '            LReturn& = Lot_RegisterObject(feature(tmpintVal), UNIN_CLASS_REGISTRY_VALUE$,_
  4531.     '                       "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help\"+_
  4532.     '                       hlpArray(tmpintVal))
  4533.     '       End If
  4534.     'NEXT
  4535.  
  4536. END FUNCTION
  4537. '****************************************************************************
  4538. SUB Write_BCF_FILE(prodno%, network$) 
  4539. '**
  4540. '**
  4541. '** Author:     PMD
  4542. '** Arguments: NONE
  4543. '** Returns:   NONE
  4544. '****************************************************************************
  4545. DIM line1$,line2$,line3$,ProdDir$,tmpline$,filenum%,chpt$
  4546.  
  4547.  If Lot_IsTheFeatureInstalled("123CORE") <> FALSE Then
  4548.    ''ProdDir$ = Lot_WhereIsFeature(prodno%, "123CORE", "Lotus.bcf") 
  4549.    ProdDir$ = GetSymbolValue("123DIR")
  4550.    If ProdDir$ <> "" AND _
  4551.    Lot_DoesFileExist(MakePath(ProdDir$, "lotus.bcf")) then
  4552.       filenum% = FreeFile()
  4553.       OPEN ProdDir$ + "lotus.bcf"  FOR APPEND AS filenum%
  4554.     PRINT #filenum%, 
  4555.  
  4556. 'dBASE
  4557.      chpt$ = Lot_GetChapterFromKeyWord("DBASEPRG_SHRCNT") 
  4558.      if Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 then
  4559.     line1$ = |Dn="dBASE_IV" DL="DLODBC32"| 
  4560.     line2$ = |DD="ODBC Driver for dBASE IV Tables"| 
  4561.     line3$ = |DC="driver=LODBF09.DLL";|
  4562.     PRINT #filenum%, 
  4563.     PRINT #filenum%, line1$ 
  4564.     PRINT #filenum%, line2$ 
  4565.     PRINT #filenum%, line3$ 
  4566.      END IF
  4567.  
  4568.  
  4569. 'Paradox
  4570.      chpt$ = Lot_GetChapterFromKeyWord("PARADOXPRG_SHRCNT") 
  4571.      if Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 then
  4572.     line1$ = |DN="Paradox" DL="DLODBC32"| 
  4573.     line2$ = |DD="ODBC 32-bit Driver for Paradox Tables"| 
  4574.     line3$ = |DC="driver=LOIDP09.DLL";|
  4575.     PRINT #filenum%, 
  4576.     PRINT #filenum%, line1$ 
  4577.     PRINT #filenum%, line2$ 
  4578.     PRINT #filenum%, line3$ 
  4579.       END IF
  4580.  
  4581. 'Sybase System 10       
  4582.      chpt$ = Lot_GetChapterFromKeyWord("SYBASEPRG_SHRCNT") 
  4583.      if Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 then
  4584.     line1$ = |DN="Sybase_System_10" DL="DLODBC32"| 
  4585.     line2$ = |DD="ODBC 32-bit Driver for Sybase System 10" AC=UI,PW| 
  4586.     line3$ = |DC="driver=LOSYB09.DLL";|
  4587.     PRINT #filenum%, 
  4588.     PRINT #filenum%, line1$ 
  4589.     PRINT #filenum%, line2$ 
  4590.     PRINT #filenum%, line3$ 
  4591.       END IF
  4592.  
  4593. 'SQLServer
  4594.      chpt$ = Lot_GetChapterFromKeyWord("SQLPRG_SHRCNT") 
  4595.      if Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 then
  4596.     tmpline$ = |"| + "SQLServer_" + GetSymbolValue(SYM_SQLSERVERNAME) + |"|
  4597.     line1$ = "DN=" + tmpline$ + " DL=""DLODBC32""" 
  4598.     line2$ = |DD="ODBC 32-bit Driver for SQLServer 4.X" AC=UI,PW| 
  4599.     line3$ = |DC="driver=LOSS09.DLL";|
  4600.     PRINT #filenum%, 
  4601.     PRINT #filenum%, line1$ 
  4602.     PRINT #filenum%, line2$ 
  4603.     PRINT #filenum%, line3$ 
  4604. 'SQLServer6
  4605.     line1$ = |DN="SQLServer_6.0" DL="DLODBC32"| 
  4606.     line2$ = |DD="ODBC 32-bit Driver for SQLServer 6.0" AC=UI,PW| 
  4607.     line3$ = |DC="driver=LOSS609.DLL";|
  4608.     PRINT #filenum%, 
  4609.     PRINT #filenum%, line1$ 
  4610.     PRINT #filenum%, line2$ 
  4611.     PRINT #filenum%, line3$ 
  4612.       END IF
  4613.  
  4614. 'Textfile
  4615.      chpt$ = Lot_GetChapterFromKeyWord("ODBCTEXTPRG_SHRCNT") 
  4616.      if Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 then
  4617.     line1$ = |DN="Text_Files" DL="DLODBC32"| 
  4618.     line2$ = |DD="ODBC 32-bit Driver for Text File Tables"| 
  4619.     line3$ = |DC="driver=LOTXT09.DLL";|
  4620.     PRINT #filenum%, 
  4621.     PRINT #filenum%, line1$ 
  4622.     PRINT #filenum%, line2$ 
  4623.     PRINT #filenum%, line3$ 
  4624.       END IF
  4625.  
  4626. 'NotesSQL
  4627.      chpt$ = Lot_GetChapterFromKeyWord("NOTESSQLPRG_SHRCNT") 
  4628.      if Lot_GetChapterValInt(chpt$, F_INOROUT) = 1 then
  4629.     line1$ = |DN="Lotus_Notes_ODBC" DL="DLODBC32"| 
  4630.     line2$ = |DD="ODBC 32-bit Driver for Lotus Notes"| 
  4631.     line3$ = |DC="driver=NSQL32.DLL";|
  4632.     PRINT #filenum%, 
  4633.     PRINT #filenum%, line1$ 
  4634.     PRINT #filenum%, line2$ 
  4635.     PRINT #filenum%, line3$ 
  4636.       END IF
  4637.     CLOSE filenum%
  4638.     End If
  4639.  End If
  4640.  
  4641. END SUB
  4642. '*************************************************************************
  4643. '*********************** Dialog Callback Functions ***********************
  4644. SUB SQLSERVERNAMECB (hDlg&, CtrlId%, Classes$, Inst&)
  4645. '** Purpose:
  4646. '** Author:    
  4647. '** Arguments: hDlg&, CtrlId&, Classes$, Inst&
  4648. '** Returns:
  4649. '*************************************************************************
  4650.   DIM tempbuf$
  4651.  
  4652.   SELECT CASE Classes$
  4653.     case "__DLGINIT"
  4654.       AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  4655.       AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  4656.  
  4657.       tempbuf$ = GetSymbolValue (SYM_SQLSERVERNAME$)
  4658.       SetListItem "IDC_EDIT",1,tempbuf$
  4659.       AddListItem "UPDATELIST","IDC_EDIT1"
  4660.       
  4661.     case "IDC_OK"
  4662.       IF LEN( GetListItem ("IDC_EDIT", 1)) > 0 THEN
  4663.      SetSymbolValue SYM_SQLSERVERNAME$, GetListItem ("IDC_EDIT", 1)
  4664.       END IF
  4665.  
  4666.     END SELECT      
  4667. END SUB
  4668. '*************************************************************************
  4669. '*************************************************************************
  4670. '** Purpose:    gets notes paths
  4671. '** Author:     Hishi
  4672. '** Arguments:  
  4673. '**        npath$: buffer that will receive notes path
  4674. '**        dpath$: buffer that will receive notes data path
  4675. '** Returns:    TRUE if successfull, otherwise FALSE
  4676. '*************************************************************************
  4677. FUNCTION GetNotesPath123(npath$, dpath$) AS INTEGER
  4678.     DIM notespath$, notesdatapath$, notesname$, notesregkey$
  4679.     DIM notused&
  4680.  
  4681.     GetNotesPath123 = FALSE
  4682.     npath$ = ""
  4683.     dpath$ = ""
  4684.  
  4685.     '' Notes v5.0
  4686.     notesregkey$ = gREGLOTUS & "Notes"
  4687.     notused& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4688.                          notesregkey$, "Path", REG_SZ,_
  4689.                          notespath$, 1024)
  4690.     notespath$ = NullTrim(notespath$)
  4691.  
  4692.     '' Notes v4.0, v4.11 and v4.5
  4693.     IF notespath$  = "" THEN
  4694.         notesregkey$ = gREGLOTUS & "Notes\4.0"
  4695.         notused& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4696.                          notesregkey$, "Path", REG_SZ,_
  4697.                          notespath$, 1024)
  4698.         notespath$ = NullTrim(notespath$)
  4699.  
  4700.         '' Notes v4.1
  4701.         IF notespath$  = "" THEN
  4702.             notesregkey$ = gREGLOTUS & "Notes\4.1"
  4703.             notused& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4704.                          notesregkey$, "Path", REG_SZ,_
  4705.                          notespath$, 1024)
  4706.             notespath$ = NullTrim(notespath$)
  4707.  
  4708.             IF notespath$  = "" THEN
  4709.                 EXIT FUNCTION
  4710.             END IF
  4711.         END IF
  4712.     END IF
  4713.  
  4714.     notused& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4715.                          notesregkey$, "DataPath", REG_SZ,_
  4716.                          notesdatapath$, 1024)
  4717.     notesdatapath$ = NullTrim(notesdatapath$)
  4718.     notused& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE,_
  4719.                          notesregkey$, "Name", REG_SZ,_
  4720.                          notesname$, 1024)
  4721.     notesname$ = NullTrim(notesname$)
  4722.     IF notesname$ = "" OR notesdatapath$ = "" THEN
  4723.         EXIT FUNCTION
  4724.     END IF
  4725.     notesname$ = MakePath$(notespath$, notesname$)
  4726.     IF DoesFileExist(notesname$, femExists) THEN
  4727.         npath$ = notespath$
  4728.         dpath$ = notesdatapath$
  4729.         GetNotesPath123 = TRUE
  4730.     END IF
  4731. END FUNCTION
  4732.  
  4733. '*************************************************************************
  4734. '** FUNCTION GetDestinationSymbolValue123 (dirsym$, flang%) AS STRING
  4735. '** Purpose:    gets directory symbol value from CINSTALL.INI
  4736. '**           during node install.
  4737. '** Author:     Hishi
  4738. '** Arguments:  
  4739. '**        dirsym$: directory symbol (e.g. "123DIR")
  4740. '**        flang%:  TRUE if the directory symbol are language dependent,
  4741. '**                 FALSE otherwise
  4742. '** Returns:    directory without tailing backslash
  4743. '*************************************************************************
  4744. FUNCTION GetDestinationSymbolValue123(dirsym$, flang%) AS STRING
  4745.     DIM srcdir$, srcvol$, srcpath$
  4746.     DIM srvdir$, srvvol$, srvpath$
  4747.  
  4748.     GetDestinationSymbolValue123 = ""
  4749.     srcdir$ = GetSymbolValue(SYM_INSTALL_SOURCE$)
  4750.     IF srcdir$ = "" THEN srcdir$ = GetSymbolValue(SYM_STF_SRCDIR$)
  4751.     srvdir$ = GetIniKeyString(_
  4752.                                 MakePath(srcdir$, gINSTALLINI$), _
  4753.                                 "Destination Symbols And Values", _
  4754.                                 dirsym$)
  4755.     IF srvdir$ = "" THEN EXIT FUNCTION
  4756.     Lot_SplitAnyPath srcdir$, srcvol$, srcpath$
  4757.     Lot_SplitAnyPath srvdir$, srvvol$, srvpath$
  4758.     srvdir$ = Lot_TrimEndSlash(srcvol$ & srvpath$)
  4759.     IF flang% and IsServerSecondaryLanguage THEN
  4760.         srvdir$ = srvdir$ & "\" & GetSymbolValue(SYM_LANGUAGE_SUBDIR$)
  4761.     END IF
  4762.     GetDestinationSymbolValue123 = srvdir$
  4763. END FUNCTION
  4764.