home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 November / pcwk_11_98B.iso / Lotus / FRENCH / INSTALL1.DSK / LWP.LSS < prev    next >
Text File  |  1997-06-27  |  155KB  |  4,054 lines

  1. '/*********************************************************************
  2. ''
  3. ''   Module Name:   LWP.lss
  4. ''
  5. ''   Module Code:   COMINST
  6. ''
  7. ''   Author:
  8. ''
  9. ''   Creation Date:       Jan 26, 1994
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1994
  12. ''
  13. ''
  14. ''
  15. ''   Description:
  16. ''
  17. ''
  18. ''   Additional authors:
  19. ''
  20. ''   Change History:
  21. ''   $Log: lwp.lss $
  22. ''
  23. ''   ***
  24. ''   ***  Full list of CIT changes chronicled in xxx.lss ***
  25. ''   ***
  26. ''
  27. ''    Rev 1.0   11 Feb 1994 10:53:40   jbrodeur
  28. '' Initial Revision
  29. ''----------------------------------------------------------------------
  30. ''   Date     Vers. Pgmr  SPR#  Change
  31. ''----------------------------------------------------------------------
  32. '' !
  33. ''  02-07-94   0000             Initial Product Shipment
  34. ''
  35. ''----------------------------------------------------------------------
  36. ''
  37. ''*********************************************************************/
  38. '**   This file contains detailed comments. PLEASE READ THEM! They provide
  39. '**   information that will make writing Install much easier. In some
  40. '**   cases, you will not find this information in any other sources.
  41. ''*********************************************************************/
  42. '**
  43.  
  44. USE "TOOLKIT"
  45. USE "LANGUAGE"
  46. OPTION DECLARE
  47. DIM InstalledLWPVersion$
  48. DIM LWPBackupSmartMasters%, LWPDisableOLE%, LWPRemoveProdFiles%
  49. DIM LWPProductNumber%
  50. DIM notused%
  51. CONST MAX_NO_DRIVECOMBOS = 5
  52.  
  53. CONST gDebugDirs = 0
  54. CONST gDebugMsg1 = 0
  55. CONST gDebugMsg2 = 0
  56.  
  57. '** These Are the Required Functions that Products must provide
  58. '***************************************************************
  59. DECLARE PUBLIC FUNCTION ProductRegLWP (prodno%, network$, direction$) AS STRING
  60. DECLARE PUBLIC FUNCTION DefaultUserRegLWP (prodno%, network$, direction$) AS STRING
  61. DECLARE PUBLIC FUNCTION InitLWP (prodno%, network$, direction$, basedir$) AS STRING
  62. DECLARE PUBLIC FUNCTION PrevVersionsLWP (prodno%, network$, direction$) AS STRING
  63. DECLARE PUBLIC FUNCTION PathChangeLWP (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  64. DECLARE PUBLIC FUNCTION InitCopyListLWP (prodno%, network$, direction$) AS STRING
  65. DECLARE PUBLIC FUNCTION PreCopyConfigLWP (prodno%, network$, direction$, lic%) AS STRING
  66. DECLARE PUBLIC FUNCTION AddTheBillBoardsLWP (prodno%, network$, direction$, nbytes&) AS STRING
  67. DECLARE PUBLIC FUNCTION PostCopyConfigLWP (prodno%, network$, direction$, programgroup$) AS STRING
  68. DECLARE PUBLIC FUNCTION AddIconsLWP (prodno%, network$, direction$, programgroup$) AS STRING
  69. DECLARE PUBLIC FUNCTION UILWP (prodno%, network$, direction$) AS STRING
  70. DECLARE PUBLIC FUNCTION PostSuccessRegLWP (prodno%, network$, direction$) AS STRING
  71. DECLARE PUBLIC SUB AddRegistryKeysLWP (prodno%, network$)
  72. DECLARE PUBLIC FUNCTION InitLanguageLWP (prodno%, network$, direction$) AS STRING
  73. DECLARE FUNCTION DetectPreviousVersion (Productfound$) AS STRING
  74. DECLARE SUB LWPRemoveObsoleteFiles (hDlg&, CtrlId%, Classes$, LInst&)
  75.  
  76. '** Product specific functions
  77. '*****************************
  78. DECLARE SUB LWP_DoFontProcessing()
  79. DECLARE SUB LWP_RegisterOCXs(prodno%)
  80. DECLARE SUB LWP_RegUninstallHTML()
  81. DECLARE SUB LWP_RegBasicUninstReg (key$)
  82. DECLARE SUB LWP_RegCLSID (clsid$)
  83. DECLARE SUB WriteLotusIni(network$, prodno%)
  84. DECLARE SUB WriteLWPIni(network$, prodno%)
  85. DECLARE SUB WriteLWPUserIni(network$, prodno%)
  86.  
  87. DECLARE SUB AddMRUSmartMaster(prodno%, Section$, File$)
  88. DECLARE SUB LWPMOREDIRSCB(hDlg&, CtrlId%, Classes$, LInst&)
  89. DECLARE SUB LWPBACKUPMASTERSCB(hDlg&, CtrlId%, Classes$, LInst&)
  90. DECLARE SUB LWPDISABLEOLECB(hDlg&, CtrlId%, Classes$, LInst&)
  91. DECLARE SUB LWPRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, LInst&)
  92.  
  93. DECLARE FUNCTION GetInstalledLWPVersion(network$) AS STRING
  94. DECLARE FUNCTION GetDefaultPath(DirName$, basedir$) AS STRING
  95. DECLARE FUNCTION LWP_IsSameInstallType(VerNum$)
  96. DECLARE FUNCTION GetPreviousMastersDir() AS STRING
  97. DECLARE FUNCTION GetPreviousWorkDir() AS STRING
  98. DECLARE FUNCTION LWP_WhereIsFeature(prodno%, featureId$, filetolookfor$) AS STRING
  99.  
  100. DECLARE SUB LWP_DoBackupSmartMasters()
  101. DECLARE SUB LWP_RegisterHelpFile(prodno%, Feature$, HelpFile$)
  102. DECLARE SUB LWP_RegShrComponent(Feature$, CompKey$, CompVer$)
  103. DECLARE SUB LWP_AddRegPathKey(key$, path$)
  104. DECLARE SUB LWP_AddInstalledPathKey(dirsym$)
  105. DECLARE SUB LWP_RegeditFile(Path$, RegFile$)
  106. DECLARE SUB LWP_WriteUserPaths(network$)
  107. DECLARE SUB LWP_FixupTourPath(network$, prodno%)
  108. DECLARE SUB LWP_FixupGraphicsPath(network$, prodno%)
  109. DECLARE SUB LWP_FixupBackgroundsPath(network$)
  110. DECLARE SUB LWP_FixupSmastersPath ()
  111. DECLARE SUB LWP_RemoveOldShortcuts()
  112. DECLARE SUB LWP_RemoveFile(fname$)
  113. DECLARE SUB LWP_RegisterGIDFile(ProgDir$, gid$)
  114.  
  115. DECLARE SUB LWP_SavePrevUserSettings(oldkey$, newkey$, flag%)
  116. DECLARE SUB LWP_FinishSavePrevUserSettings()
  117. DECLARE SUB LWP_DispatchRegCopy(hkey$, oldkey$, newkey$, copy$)
  118.  
  119. DECLARE FUNCTION LWPLFN2SFN(FilePath$) AS STRING
  120. DECLARE FUNCTION LWP_IsChapterIn(chapter$)
  121. DECLARE FUNCTION LWP_SetChapterInOut(chapter$, inout%)
  122.  
  123. DECLARE SUB CheckLangForBackgroundSpell()
  124. DECLARE SUB DisableBackgroundSpell()
  125.  
  126. DECLARE SUB DebugMsg1(msg$)
  127. DECLARE SUB DebugMsg2(msg$)
  128. DECLARE SUB DebugDirs()
  129.  
  130. '' Needed while we define Lot_AddFontByID
  131. DECLARE SUB Lot_AddFontByID(Section$, FontFile$, FontNameID%)
  132.  
  133. '** External functions
  134. '*****************************
  135. DECLARE PUBLIC FUNCTION GetInitials LIB "lwpinst.dll" _
  136.     ALIAS "GetInitials" (BYVAL UserName$, BYVAL Initials$) AS INTEGER
  137. DECLARE PUBLIC FUNCTION GetBinType LIB "lwpinst.dll" _
  138.     ALIAS "GetBinType" (BYVAL Executable$) AS INTEGER
  139. DECLARE PUBLIC FUNCTION GetPhysicalMemoryInMB LIB "lwpinst.dll" _
  140.     ALIAS "GetPhysicalMemoryInMB" () AS INTEGER
  141.  
  142. DECLARE PUBLIC FUNCTION KillQuickStart LIB "lwpinst.dll" _
  143.     ALIAS "KillQuickStart" () AS INTEGER
  144. DECLARE PUBLIC FUNCTION FixAppPath LIB "lwpinst.dll" _
  145.     ALIAS "FixAppPath" (BYVAL RegFile$, BYVAL NewPath$)  AS INTEGER
  146. DECLARE PUBLIC FUNCTION SetInternetProxies LIB "lwpinst.dll" _
  147.     ALIAS "SetInternetProxies" ()  AS INTEGER
  148. DECLARE PUBLIC FUNCTION RegCopy LIB "lwpinst.dll" _
  149.     ALIAS "RegCopy" (BYVAL lpBaseKey$, BYVAL lpKey1$, BYVAL lpKey2$)  AS INTEGER
  150.  
  151.  
  152. DECLARE PUBLIC FUNCTION FindWindowA LIB "user32" _
  153.     ALIAS "FindWindowA" _
  154.     (BYVAL lpszClassName AS ANY, BYVAL lpCaption AS ANY) AS LONG
  155. DECLARE PUBLIC FUNCTION Win32GetShortPathName LIB "kernel32" _
  156.     ALIAS "GetShortPathNameA" _
  157.     (BYVAL LFN$, BYVAL SFN$, BYVAL bufSize&) AS LONG
  158. DECLARE PUBLIC FUNCTION RegDeleteValueA LIB "advapi32" _
  159.     ALIAS "RegDeleteValueA" _
  160.     (ByVal hKey&, ByVal szValueName$) AS LONG
  161.  
  162. '' Needed while we define Lot_AddFontByID
  163. DECLARE PUBLIC FUNCTION AddFontResource LIB "gdi32.dll" _
  164.     ALIAS "AddFontResourceA" (BYVAL FontFile$) AS LONG
  165.  
  166. ''
  167. '' Language functions for CheckBackgroundSpell
  168. ''
  169. DECLARE PUBLIC FUNCTION GetSysDefLangID LIB "lwpinst.dll" _
  170.     ALIAS "GetSysDefLangID" ()  AS INTEGER
  171. DECLARE PUBLIC FUNCTION GetPrimLangID LIB "lwpinst.dll" _
  172.     ALIAS "GetPrimLangID" (BYVAL langID)  AS INTEGER
  173. DECLARE PUBLIC FUNCTION GetSubLangID LIB "lwpinst.dll" _
  174.     ALIAS "GetSubLangID" (BYVAL langID)  AS INTEGER
  175. DECLARE PUBLIC FUNCTION GetLangID_English LIB "lwpinst.dll" _
  176.     ALIAS "GetLangID_English" ()  AS INTEGER
  177. DECLARE PUBLIC FUNCTION GetLangID_French LIB "lwpinst.dll" _
  178.     ALIAS "GetLangID_French" ()  AS INTEGER
  179. DECLARE PUBLIC FUNCTION GetLangID_Spanish LIB "lwpinst.dll" _
  180.     ALIAS "GetLangID_Spanish" ()  AS INTEGER
  181. DECLARE PUBLIC FUNCTION GetLangID_Portuguese LIB "lwpinst.dll" _
  182.     ALIAS "GetLangID_Portuguese" ()  AS INTEGER
  183. DECLARE PUBLIC FUNCTION GetSubLangID_Australian LIB "lwpinst.dll" _
  184.     ALIAS "GetSubLangID_Australian" ()  AS INTEGER
  185.  
  186. '*************************************************************************
  187. '**************************** Required Functions *************************
  188. '*************************************************************************
  189.  
  190. '*************************************************************************
  191. '** SUB Initialize
  192. '**
  193. '** Purpose: The only purpose of this routine is to register your product.
  194. '**          This routine assigns your acronym to your product.
  195. '**          Without this function, your product will not install.
  196. '**          All you need to do in this subroutine is:
  197. '**                   modify LWP -> your acronym.
  198. '**
  199. '**          ASSUMPTIONS: Many things in the toolkit key off of your
  200. '**                       acronym. These are the constraints:
  201. '**                       1. Your top level chapter in the INF must
  202. '**                          have a KEYWORD of your acronym +"TOP"
  203. '**                          e.g. acronymTOP
  204. '** Author:  Marcel Meth
  205. '** Arguments: None
  206. '** Returns:   NONE
  207. '*************************************************************************
  208. SUB Initialize
  209.    Reg_RegisterProductNames "LWP", LdString(SID_LWP)
  210. END SUB
  211.  
  212. '*************************************************************************
  213. '** FUNCTION ProductRegLWP (prodno%, network$, direction$) AS INTEGER
  214. '**
  215. '** Purpose: This function allows your product to register itself
  216. '**          in the Install Product Registry.  The toolkit stores
  217. '**          the information provided and will provide you with
  218. '**          various features accordingly.  For example, if you support
  219. '**          shared files, the toolkit will do most of the work
  220. '**          for the LOTUSAPP directory.
  221. '**
  222. '**          For the most part you should use only Reg_Set... Functions.
  223. '**
  224. '**
  225. '**          If you turn on ATM, LICENSING, or SHARED tools, then
  226. '**          you must be sure to add the appropriate lines and files
  227. '**          in your acronym.SCR and acronym.LYT, respectively.
  228. '**          See Cookbook.
  229. '**
  230. '**          If you support server install, (because you need the files
  231. '**          for Licenser), you will have to make sure that you have
  232. '**          the correct **entire** contents of install.lyt and install.scr
  233. '**          for the install files in your acronym.SCR and acronym.LYT
  234. '**
  235. '**
  236. '** Arguments:  All parameters are **read only**.
  237. '**          prodno%: This is your prodno%.  It is assigned to you by the
  238. '**                   toolkit in the order in which you were registered.
  239. '**                   When your product is part of SmartSuite, SmartSuite
  240. '**                   will always be product #1. (prodno% >=1)
  241. '**          network$: UNINITIALIZED
  242. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  243. '**                      then step backwards, i.e start at your last dialog
  244. '**                      first.
  245. '**
  246. '** Errors:    No return code for errors, you must Raise them
  247. '** Author:    MMeth
  248. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  249. '**                             allow the user to step backwards.)
  250. '*************************************************************************
  251.  
  252. PUBLIC FUNCTION ProductRegLWP (prodno%, network$, direction$) AS STRING
  253.    ProductRegLWP = gNEXT
  254.  
  255. 'DebugMsg1 "entering productreglwp"
  256.  
  257.    '** FOR a complete set of things to register
  258.    '** see API doc under Reg_Set...
  259.    Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  260.  
  261.    '** Set the size of the minimum and default installs
  262.    If network$ = gNODE$ Then
  263.         Reg_SetProdSizes prodno%, 0 * 1024, 0 * 1024
  264.    Else
  265.         Reg_SetProdSizes prodno%, 50 * 1048576, 25 * 1048576
  266.    End If
  267.  
  268.    '** If you need Components directory turn this on.
  269.    Reg_SetShare32Flag prodno%, 1
  270.  
  271.    '** Coming soon to an install program near you
  272.    'Reg_SetCDOption prodno%,Inst%,CDOptStr$
  273.    'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection%
  274.  
  275.    Reg_SetNodeOption prodno%,1,"LWP_SMARTMASTERS"
  276.    Reg_SetNodeOptionSelected prodno%,1,1
  277.    Reg_SetNodeOption prodno%,2,"LWP_SAMPLEDOCS"
  278.    Reg_SetNodeOptionSelected prodno%,2,1
  279.    Reg_SetNodeOption prodno%,3,"LWP_TRUETYPEFONTS"
  280.    Reg_SetNodeOptionSelected prodno%,3,1
  281.  
  282.    '** Toolkit default is for no server supprt, turn on if desired.
  283.    Reg_SetSrvSupport prodno%, 1
  284.  
  285.    '** This is the default value the user will see.
  286.    Reg_SetProgManagerGroup prodno%, LdString(SID_LWP_LOTUSSMARTSUITE)
  287.  
  288.     '** Required if you have a work, smartmasters and backup directories
  289.     '** register support with the toolkit to surface the dialog
  290.     Reg_SetMoreDirsData prodno%, "LWPMOREDIRSCB", _
  291.         DBLWP_MOREDIRS3, DBLWP_MOREDIRS3
  292.  
  293.     Reg_SetUIInOrOut prodno%, 1
  294.  
  295. 'DebugMsg1 "leaving productreglwp"
  296.  
  297. END FUNCTION
  298.  
  299. '*************************************************************************
  300. '** FUNCTION DefaultUserRegLWP (prodno%, network$, direction$) AS STRING
  301. '**
  302. '** Purpose: **Only** the first registered product gets called.
  303. '**          For SmartSuite, this will be SmartSuite.
  304. '**          This function allows you to set the default user registration
  305. '**          information that the user will be shown. The toolkit
  306. '**          will provide default values from MS-Windows. If you disagree
  307. '**          with them you should modify them in this function using:
  308. '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  309. '**
  310. '**          It is up to you how you store registration information.
  311. '**          It will not be stored until later in PostCopyConfigLWP.
  312. '**          The CIT provides functions that allow you to access .ri
  313. '**          files: Lot_ReadDefaultsfromRi(ripath$).
  314. '**
  315. '**          If you need to write back to the floppy, do it here.
  316. '**          Most Lotus products will no longer write back to the floppy.
  317. '**          Remeber, you can't write back to a CD or network!
  318. '**
  319. '** In Symbols : SYM_NAME$, SYM_COMPANY$
  320. '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  321. '**
  322. '** Arguments:  All parameters are **read only**.
  323. '**          prodno%: This is your prodno%.  It is assigned to you by the
  324. '**                   toolkit in the order in which you were registered.
  325. '**                   When your product is part of SmartSuite, SmartSuite
  326. '**                   will always be product #1. (prodno% >=1)
  327. '**          network$: UNINITIALIZED
  328. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  329. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  330. '**                      then step backwards
  331. '**
  332. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  333. '**                      then step backwards, i.e start at your last dialog
  334. '**                      first.
  335. '**
  336. '** Errors:    No return code for errors, you must Raise them
  337. '** Author:    MMeth
  338. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  339. '**                             allow the user to step backwards.)
  340. '*************************************************************************
  341.  
  342. PUBLIC FUNCTION DefaultUserRegLWP (prodno%, network$, direction$) AS STRING
  343.     DefaultUserRegLWP = gNEXT
  344.  
  345.     ' Just accept Windows defaults if not previous Word Pro install
  346.     '
  347.     InstalledLWPVersion$ = GetInstalledLWPVersion(network$)
  348.     IF InstalledLWPVersion$ <> "WORDPRO32" AND _
  349.         InstalledLWPVersion$ <> "WORDPRO16" _
  350.     THEN
  351.         EXIT FUNCTION
  352.     END IF
  353.  
  354.     DIM LotusIni$, Executable$, pos%
  355.     LotusIni$ = GetWindowsDir() + "lotus.ini"
  356.     Executable$ = GetIniKeyString(LotusIni$, "Lotus Applications", "WordPro")
  357.     pos% = INSTR(Executable$, " ")
  358.     IF pos% <> 0 THEN
  359.         Executable$ = MID$(Executable$, 1, pos% - 1)
  360.     END IF
  361.     IF DoesFileExist(Executable$, femExists) = FALSE THEN EXIT FUNCTION
  362.  
  363.     pos% = INSTR(UCASE$(Executable$), "WORDPRO.EXE")
  364.     IF pos% = 0 THEN EXIT FUNCTION
  365.  
  366.     DIM riFile$
  367.     riFile$ = MID$(Executable$, 1, pos% - 1) + "wordpro.ri"
  368.     IF DoesFileExist(riFile$, femExists) = FALSE THEN EXIT FUNCTION
  369.  
  370.     '' RETURNS TRUE IF SUCCESSFULLY FOUND RI FILE AND READ INFORMATION
  371.     '' This functions populates: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  372.     DIM rc%
  373.     rc% = Lot_ReadDefaultsfromRi(riFile$)
  374.  
  375.     ' Now that we have something for user name and company, try to do
  376.     ' better by checking the registry
  377.  
  378.     DIM UserName$, Company$
  379.     DIM buff$, LWPKey$, Key$, regStr$, Value$
  380.     buff$ = STRING$(256, 0)
  381.     LWPKey$ = "Software\Lotus\WordPro\97.0\"
  382.  
  383.     Key$ = LWPKey$ + "lwpuser.ini\WordProUser"
  384.     Value = "UserName"
  385.     IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, Key$) THEN
  386.         rc% = Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, Key$, _
  387.             Value$, REG_SZ, buff$, 256)
  388.         IF rc% = 0 THEN
  389.             UserName$ = buff$
  390.         END IF
  391.     END IF
  392.  
  393.     Value = "CompanyName"
  394.     IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, Key$) THEN
  395.         rc% = Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, Key$, _
  396.             Value$, REG_SZ, buff$, 256)
  397.         IF rc% = 0 THEN
  398.             Company$ = buff$
  399.         END IF
  400.     END IF
  401.  
  402.     IF UserName$ <> "" THEN
  403.         SetSymbolValue SYM_NAME$, UserName$
  404.     END IF
  405.     IF (Company$ <> "") AND (network$ = gSTANDARD) THEN
  406.         SetSymbolValue SYM_COMPANY$, Company$
  407.     END IF
  408.  
  409. END FUNCTION
  410.  
  411.  
  412. '*************************************************************************
  413. '** FUNCTION InitLWP (prodno%, network$, direction$, basedir$) AS STRING
  414. '**
  415. '** Purpose: This function will be called after the Welcome dialog has been
  416. '**          filled in by the user. This is the first time you will be
  417. '**          called when the server parameter is valid.
  418. '**          You need to use this function to intialize certain things.
  419. '**          (See the MUST DO below).
  420. '**
  421. '**          This is a good place to put up a LotusScript messagebox warning the user
  422. '**          of a previous version of your product. If there is a previous
  423. '**          version you might want to steer them towards overwriting it,
  424. '**          deleting the old version, or allowing both versions to exist.
  425. '**
  426. '**
  427. '** Must Do: You **MUST** set inital values for all of the destination
  428. '** =======  directories that you refer to in your INF file.  If you do not,
  429. '**          then InitCopylist will fail!  e.g. SetSymbolValue "LWPDIR", basedir$
  430. '**          Of course you may be more intelligent.  You should preface your
  431. '**          directory with basedir$.  The toolkit is finding a good drive
  432. '**          letter and basedirectory.  Also, remeber all paths end in a
  433. '**          \ and are lower case.
  434. '**
  435. '**          You should **NOT** define LOTUSAPPDIR, NETLOTUSAPPDIR, WINDIR,
  436. '**          USERDIR & WINSYSDIR. The toolkit does this for you.
  437. '**
  438. '**          Once you have defined destdir symbols, you need to register
  439. '**          them with the toolkit. (See the code below)
  440. '**
  441. '** In Symbols :
  442. '** Out Symbols:
  443. '**
  444. '** Arguments:  All parameters are **read only**.
  445. '**          prodno%: This is your prodno%.  It is assigned to you by the
  446. '**                   toolkit in the order in which you were registered.
  447. '**                   When your product is part of SmartSuite, SmartSuite
  448. '**                   will always be product #1. (prodno% >=1)
  449. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  450. '**
  451. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  452. '**                      then step backwards, i.e start at your last dialog
  453. '**                      first.
  454. '**
  455. '**          basedir$:   The toolkit has found a good base. for your directory.
  456. '**                      This is it.  You should use it.  This will make Smart
  457. '**                      Suite work, and will pick a good drive letter for you.
  458. '**
  459. '** Errors:    No return code for errors, you must Raise them
  460. '** Author:    MMeth
  461. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  462. '**                             allow the user to step backwards.)
  463. '**
  464. '*************************************************************************
  465.  
  466. PUBLIC FUNCTION InitLWP (prodno%, network$, direction$, basedir$) AS STRING
  467. DIM sym$, symname$, defdir$, position%, proddir$, iniPath$, rv%, LWPversion$
  468. DIM Productfound$,previousprod$,temp%
  469.  
  470. 'DebugMsg1 "entering initlwp"
  471.  
  472.     InitLWP = direction$
  473.  
  474.    '' In the backwards case, keep backing up
  475.    If InitLWP = gBACK Then
  476.       EXIT FUNCTION
  477.    End If
  478.  
  479.     '------------------------------
  480.     '** Set product size for server
  481.    '
  482.    If network$ = gSERVER$ Then
  483.         Reg_SetProdSizes prodno%, 85 * 1048576, 16 * 1048576
  484.     End if
  485.  
  486.     ' Look and see if Word Pro is already running.
  487.     ' ============================================
  488.     DIM hwnd&
  489.     hwnd& = FindWindowA("WordProAppWndNT", 0&)
  490.     WHILE (direction$ = gNEXT$ AND hwnd& <> FALSE)
  491.         direction$ = PopupModalDlg(DBLWP_RUNNING, DBLWP_RUNNING)
  492.         IF direction$ = gBACK$ then
  493.             InitLWP = direction$
  494.             EXIT FUNCTION
  495.         END IF
  496.         hwnd& = FindWindowA("WordProAppWndNT", 0&)
  497.     WEND
  498.  
  499.  
  500.  
  501.    '--------------------------------------------------
  502.    '** Check for previous version.  Put up dialog box.
  503.    '
  504.    ' SDB 8/30/96
  505.    ' Note:
  506.    '       Double check to see if the Word Pro registry entry exists.
  507.    '       This saves us from getting fooled by lotus.ini pointing
  508.    '       to an exe on the server even after the node has been uninstalled.
  509.    '
  510.  
  511.     InstalledLWPVersion$ = GetInstalledLWPVersion(network$)
  512.     IF InstalledLWPVersion$ = "WORDPRO32" AND _
  513.       Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, "Software\Lotus\WordPro\") _
  514.     THEN
  515.       If GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ then
  516.          Reg_SetPreviousVersion prodno%,"1"
  517.       else
  518.          direction$ = PopupModalDlg (DBLWP_EXISTING, DBLWP_EXISTING)
  519.          If direction$ = gBACK Then
  520.             InitLWP= direction$
  521.             EXIT FUNCTION
  522.          End if
  523.       End if
  524.     END IF
  525.  
  526.    '** Set flag to remove obsolete files
  527.    '
  528.     IF InstalledLWPVersion$ = "AMIPRO" OR _
  529.         InstalledLWPVersion$ = "WORDPRO16" _
  530.     THEN
  531.         Reg_SetObsFiles prodno%, 1
  532.     ELSE
  533.         Reg_SetObsFiles prodno%, 0
  534.     END IF
  535.  
  536.     '** Set obsolete directory name
  537.     '
  538.     DIM LotusIni$, ObsProdDir$, ExePath$, pos%
  539.     LotusIni$ = GetWindowsDir() + "LOTUS.INI"
  540.     ExePath$ = GetIniKeyString(LotusIni$, "Lotus Applications", "AmiPro")
  541.     SELECT CASE InstalledLWPVersion$
  542.         CASE "AMIPRO"
  543.             pos% = INSTR(UCASE$(ExePath$), "AMIPRO.EXE")
  544.         CASE "WORDPRO16"
  545.             pos% = INSTR(UCASE$(ExePath$), "WORDPRO.EXE")
  546.         CASE ELSE
  547.             pos% = 0
  548.     END SELECT
  549.     IF pos% <> 0 THEN
  550.         ObsProdDir$ = MID$(ExePath$, 1, pos% - 1)
  551.        IF DoesDirExist(ObsProdDir$) THEN
  552.            SetSymbolValue "LWPOBSDIR1", ObsProdDir$
  553.        END IF
  554.     ELSE
  555.        SetSymbolValue "LWPOBSDIR1", "SOMETHING"   '' ** Must have some value
  556.     END IF
  557.  
  558.  
  559.     LWPBackupSmartMasters% = FALSE
  560.     LWPDisableOLE% = FALSE
  561.     LWPRemoveProdFiles% = FALSE
  562.  
  563.    '' Setup Default directory settings and the associated
  564.    '' text that the user will see
  565.    '' *****************************************************************
  566.    '' *** Register Directory symbols here IFF they are in the .rsp file
  567.    '' *****************************************************************
  568.    ''
  569.    sym$ = Reg_GetDirSymbolList(prodno%)
  570.    symname$ = sym$ + gNAME
  571.    SetListItem sym$, 1, "LWPDIR"
  572.    SetListItem symname$, 1, "LWPDIRNAME"
  573.    SetListItem sym$, 2, "LWPWORKDIR"
  574.    SetListItem symname$, 2, "LWPWORKDIRNAME"
  575.    SetListItem sym$, 3, "LWPSCRIPTSDIR"
  576.    SetListItem symname$, 3, "LWPSCRIPTSDIRNAME"
  577.    SetListItem sym$, 4, "LWPMASTERSDIR"
  578.    SetListItem symname$, 4, "LWPMASTERSDIRNAME"
  579.    SetListItem sym$, 5, "LWPICONDIR"
  580.    SetListItem symname$, 5, "LWPICONDIRNAME"
  581.    SetListItem sym$, 6, "LWPGRAPHICSDIR"
  582.    SetListItem symname$, 6, "LWPGRAPHICSDIRNAME"
  583.    SetListItem sym$, 7, "LWPSAMPLESDIR"
  584.    SetListItem symname$, 7, "LWPSAMPLESDIRNAME"
  585.    SetListItem sym$, 8, "LWPBACKUPDIR"
  586.    SetListItem symname$, 8, "LWPBACKUPDIRNAME"
  587. '   SetListItem sym$, 6, "LWPTOURDIR"
  588. '   SetListItem symname$, 6, "LWPTOURDIRNAME"
  589. ''   SetListItem sym$, 10, "LWPBACKGROUNDSDIR"
  590. ''   SetListItem symname$, 10, "LWPBACKGROUNDSDIRNAME"
  591.  
  592.    '' Special Cases for setting these symbols
  593.    '' Strings should be resourced, but we didn't want to clutter
  594.    '' the LWP string table.
  595.    SELECT CASE network$
  596.        CASE gSERVER$
  597.           SetSymbolValue "LWPNAME", LdString(SID_LWP_SERVER_DIRNAME)
  598.        CASE gDISTRIBUTION$
  599.           SetSymbolValue "LWPNAME", LdString(SID_LWP_DIST_DIRNAME)
  600.        CASE gSTANDARD$
  601.           'Handled below
  602.        CASE gNODE$
  603.           'Handled below
  604.           'SetSymbolValue "LWPDIR", GetDefaultPath("WORDPRO", basedir$)
  605.    END SELECT
  606.  
  607.    SetSymbolValue "LWPDIR",               GetDefaultPath("WORDPRO", basedir$)
  608.     SetSymbolValue "LWPLANGDIR",           GetSymbolValue("LWPDIR")
  609.    SetSymbolValue "LWPDIRNAME",           LdString(SID_LWP_DIRNAME)
  610.    SetSymbolValue "LWPLANGDIRNAME",       LdString(SID_LWP_DIRNAME)
  611.  
  612.    IF GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ THEN
  613.        basedir$ = GetSymbolValue(SYM_BASEDIR$)
  614.  
  615.        '' ???  Why not just use the basedir$ passed in???
  616.    END IF
  617.  
  618.     SetSymbolValue "LWPWORKDIR",           GetDefaultPath("WORK", basedir$)
  619.     SetSymbolValue "LWPBACKUPDIR",         GetDefaultPath("BACKUP", basedir$)
  620.     SetSymbolValue "LWPSCRIPTSDIR",        GetDefaultPath("SCRIPTS", basedir$)
  621.     SetSymbolValue "LWPMASTERSDIR",        GetDefaultPath("MASTERS", basedir$)
  622.     SetSymbolValue "LWPSAMPLESDIR",        GetDefaultPath("SAMPLES", basedir$)
  623.     SetSymbolValue "LWPICONDIR",           GetDefaultPath("ICONS", basedir$)
  624. ''    SetSymbolValue "LWPTOURDIR",           GetDefaultPath("TOUR", basedir$)
  625.     SetSymbolValue "LWPGRAPHICSDIR",       GetDefaultPath("GRAPHICS", basedir$)
  626. ''    SetSymbolValue "LWPBACKGROUNDSDIR",    GetDefaultPath("BACKGROUNDS", basedir$)
  627.  
  628.     SetSymbolValue "LWPWORKDIRNAME",          LdString(SID_LWP_WORK_DIRNAME)
  629.     SetSymbolValue "LWPSAMPLESDIRNAME",       LdString(SID_LWP_SAMPLES_DIRNAME)
  630.     SetSymbolValue "LWPBACKUPDIRNAME",        LdString(SID_LWP_BACKUP_DIRNAME)
  631.     SetSymbolValue "LWPSCRIPTSDIRNAME",       LdString(SID_LWP_SCRIPTS_DIRNAME)
  632.     SetSymbolValue "LWPMASTERSDIRNAME",       LdString(SID_LWP_MASTERS_DIRNAME)
  633.     SetSymbolValue "LWPICONDIRNAME",          LdString(SID_LWP_ICON_DIRNAME)
  634. ''    SetSymbolValue "LWPTOURDIRNAME",          LdString(SID_LWP_TOUR_DIRNAME)
  635.     SetSymbolValue "LWPGRAPHICSDIRNAME",      LdString(SID_LWP_GRAPHICS_DIRNAME)
  636. ''    SetSymbolValue "LWPBACKGROUNDSDIRNAME",   LdString(SID_LWP_BACKGROUNDS_DIRNAME)
  637.  
  638.     '' Mark directory symbols that need source file adjustment
  639.     '' Bare filename in .inf file, symbol will be set to the installed location
  640.     '' on the server obtained by reading the server cinstall.ini file
  641.     '' This is needed for files that are located in a sibling directory to the
  642.     '' product directory, e.g., SmartMasters, which would be installed:
  643.     '' \Lotus\
  644.     '' \Lotus\smasters
  645.     '' \Lotus\XXX
  646.    MarkFixupSourceDirSymbol("LWPWORKDIR")
  647.    MarkFixupSourceDirSymbol("LWPMASTERSDIR")
  648.    MarkFixupSourceDirSymbol("LWPSAMPLESDIR")
  649.  
  650.     '' Mark directory symbols that are LANGUAGE dependent.  CIT will add the
  651.     '' appropriate language subdirectory to the files in the copy list for
  652.     '' destinations for a language install, and source if a server install of a
  653.     '' secondary language on the SERVER
  654.    MarkLanguageSubdir("LWPLANGDIR")
  655.    MarkLanguageSubdir("LWPMASTERSDIR")
  656.    MarkLanguageSubdir("LWPSAMPLESDIR")
  657.    MarkLanguageSubdir("LWPICONDIR")
  658.    MarkLanguageSubdir("LWPGRAPHICSDIR")
  659. ''   MarkLanguageSubdir("LWPBACKGROUNDSDIR")
  660.  
  661.     '' Removed 1/1/97  SDB
  662.     ''
  663.     '' We don't mark these as MLC since they get translated (e.g. "Arbeit")
  664.    ''     MarkLanguageSubdir("LWPWORKDIR")
  665.    ''     MarkLanguageSubdir("LWPBACKUPDIR")
  666.     ''
  667.  
  668. '' ----------------------------------------------------------------
  669. '' Note:  LWPTOURDIR and LWPBACKGROUNDSDIR
  670. ''     Even though we try to keep track of these directories, we
  671. '' never use these symbols to determine where to copy files to.
  672. ''    These symbols are not in lwp.scr!  The tour files always go
  673. '' under LWPDIR, and the background files always go under LWPGRAPHICSDIR.
  674. '' We keep track of them in order to WriteUserPaths.  We need to
  675. '' fix them up when we change the paths they are dependent upon.
  676. ''
  677. '' Because of this, they shouldn't be in the instlwp.rsp file.
  678. ''
  679.  
  680.  
  681. 'DebugDirs
  682. 'DebugMsg1 "leaving initlwp"
  683. END FUNCTION
  684.  
  685. '*************************************************************************
  686. '** FUNCTION PrevVersionsLWP (prodno%, network$, direction$) AS STRING
  687. '**
  688. '** Purpose: This function is called only for SmartSUite.  It is called
  689. '**          immediately after all the other product functions for
  690. '**          InitLWP are called.  It allows SmartSuite to assess whether
  691. '**          there are older versions of products around.
  692. '**
  693. '** In Symbols :
  694. '** Out Symbols:
  695. '**
  696. '** Arguments:  All parameters are **read only**.
  697. '**          prodno%: This is your prodno%.  It is assigned to you by the
  698. '**                   toolkit in the order in which you were registered.
  699. '**                   When your product is part of SmartSuite, SmartSuite
  700. '**                   will always be product #1. (prodno% >=1)
  701. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  702. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  703. '**                      then step backwards
  704. '**
  705. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  706. '**                      then step backwards, i.e start at your last dialog
  707. '**                      first.
  708. '**
  709. '** Errors:    No return code for errors, you must Raise them
  710. '** Author:    MMeth
  711. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  712. '**                             allow the user to step backwards.)
  713. '**
  714. '*************************************************************************
  715.  
  716. PUBLIC FUNCTION PrevVersionsLWP (prodno%, network$, direction$) AS STRING
  717. DIM nProducts%, prodIndex%, i%
  718.  
  719.       nProducts% = Reg_GetNumberOfProducts()
  720.       FOR prodIndex% = 1 to nProducts%
  721.           If Reg_GetPreviousVersion(prodIndex%) <> "" Then
  722.              i% = DoMsgBox("Older Versions Found","", MB_OK)
  723.              GOTO PREVPRODFOUND
  724.           End If
  725.       NEXT
  726.  
  727. PREVPRODFOUND:
  728.  
  729. END FUNCTION
  730.  
  731.  
  732. '*************************************************************************
  733. '** FUNCTION PathChangeLWP (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  734. '**
  735. '** Purpose: This function is called whenever the user proposes changes
  736. '**          to a path for your product.  By the time this function calls
  737. '**          you, the paths have already been checked syntactically, and
  738. '**          the directory has been checked to see that it is writeable.
  739. '**          Your obligation is to verify that the proposed new path is ok
  740. '**          with you.  If not, put up a Lotus Script :"MESSAGEBOX"
  741. '**          telling the user and return gBACK.
  742. '**
  743. '** In Symbols :
  744. '** Out Symbols:
  745. '**
  746. '** Arguments:  All parameters are **read only**.
  747. '**          prodno%: This is your prodno%.  It is assigned to you by the
  748. '**                   toolkit in the order in which you were  registered.
  749. '**                   When your product is part of SmartSuite, SmartSuite
  750. '**                   will always be product #1. (prodno% >=1)
  751. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  752. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  753. '**                      then step backwards
  754. '**      destdirsym$: The destdir symbol that has changed. e.g. "LWPDIR"
  755. '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  756. '**                   your top level product directory should change,
  757. '**                   probably "LWPDIR". When it is false, it means that
  758. '**                   all related directories should change. It is **YOUR
  759. '**                   RESPONSIBILITY**  to implement this functionality.
  760. '**
  761. '** Errors:    No return code for errors, you must Raise them
  762. '** Author:    MMeth
  763. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  764. '**                             allow the user to step backwards.)
  765. '**
  766. '*************************************************************************
  767.  
  768. PUBLIC FUNCTION PathChangeLWP (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  769.     PathChangeLWP = gNEXT
  770. 'DebugMsg1 "Entering Path Change"
  771. 'DebugDirs
  772.     DIM path$
  773.  
  774.     IF destdirsym$ = "LWPDIR" OR destdirsym$ = GetSymbolValue("LWPDIR") THEN
  775.         path$ = GetSymbolValue("LWPDIR")
  776.         SetSymbolValue "LWPLANGDIR", path$
  777.         SetSymbolValue "LWPSCRIPTSDIR", path$ + LdString(SID_LWP_SCRIPTS_DIR)
  778.         SetSymbolValue "LWPICONDIR", path$ + LdString(SID_LWP_ICON_DIR)
  779. ''        SetSymbolValue "LWPTOURDIR", path$ + LdString(SID_LWP_TOUR_DIR)
  780.         SetSymbolValue "LWPGRAPHICSDIR", path$ + LdString(SID_LWP_GRAPHICS_DIR)
  781. ''        SetSymbolValue "LWPBACKGROUNDSDIR", _
  782. ''                GetSymbolValue("LWPGRAPHICSDIR") + LdString(SID_LWP_BACKGROUNDS_DIR)
  783.  
  784.       LWP_FixupSmastersPath
  785.         Lot_RefreshDestination("LWPMASTERSDIR")
  786.  
  787.         Lot_RefreshDestination("LWPLANGDIR")
  788.         Lot_RefreshDestination("LWPSCRIPTSDIR")
  789.         Lot_RefreshDestination("LWPGRAPHICSDIR")
  790. ''        Lot_RefreshDestination("LWPBACKGROUNDSDIR")
  791.         Lot_RefreshDestination("LWPICONDIR")
  792. ''        Lot_RefreshDestination("LWPTOURDIR")
  793.     END IF
  794. 'DebugDirs
  795. 'DebugMsg1 "Leaving Path Change"
  796. END FUNCTION
  797.  
  798.  
  799. '*************************************************************************
  800. '** LWP_FixupSmastersPath
  801. '**
  802. '** Adjust SmastersDir to reflect change in install location
  803. '**
  804. '** i.e.    If    we install to  \lotus\wordpr97\  instead of  \lotus\wordpro\
  805. '**        then install smasters to  ==> \lotus\smasters\wordp97
  806. '**
  807. '** We trim the trailing slash initially to make this work.
  808. '** Then we tack it back on at the end.
  809. '**
  810. '** Author:    SDB
  811. '*************************************************************************
  812. SUB LWP_FixupSmastersPath ()
  813.     DIM osdir$, wpdir$, p, q
  814.  
  815.     osdir$ = Lot_TrimEndSlash(GetSymbolValue("LWPMASTERSDIR"))
  816.       p = 0
  817.     Do
  818.         q = p
  819.        p = Instr(p+1, osdir$, "\")
  820.    Loop While p
  821.    osdir$ = Left(osdir$, q)        ' Sets osdir$ to something like "\lotus\smasters\"
  822.  
  823.    wpdir$ = Lot_TrimEndSlash(GetSymbolValue("LWPDIR"))
  824.       p = 0
  825.     Do
  826.         q = p
  827.        p = Instr(p+1, wpdir$, "\")
  828.    Loop While p
  829.    wpdir$ = Mid(wpdir$, q+1)        ' Sets wpdir$ to something like "wordpr97"
  830.  
  831.    SetSymbolValue "LWPMASTERSDIR", osdir$ + wpdir$ + "\"
  832.  
  833. END SUB
  834.  
  835.  
  836.  
  837. '*************************************************************************
  838. '** FUNCTION InitCopyListLWP (prodno%, network$, direction$) AS STRING
  839. '**
  840. '** Purpose:  Product must Initialize the copylist
  841. '**
  842. '** Must Do: You must initialize the copy list.  However,
  843. '** =======  if you leave the code as is (don't touch it at all),
  844. '**          it will probably work for you. Copy list must be initialized.
  845. '**          CAUTION: Make sure that your toplevel section in the
  846. '**                   acronym.SCR has a keyword of "acronymTOP"
  847. '**
  848. '** In Symbols :
  849. '** Out Symbols:
  850. '**
  851. '** Arguments:  All parameters are **read only**.
  852. '**          prodno%: This is your prodno%.  It is assigned to you by the
  853. '**                   toolkit in the order in which you were registered.
  854. '**                   When your product is part of SmartSuite, SmartSuite
  855. '**                   will always be product #1. (prodno% >=1)
  856. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  857. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  858. '**                      then step backwards
  859. '**
  860. '** Errors:    No return code for errors, you must Raise them
  861. '** Author:    MMeth
  862. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  863. '**                             allow the user to step backwards.)
  864. '**
  865. '*************************************************************************
  866.  
  867. PUBLIC FUNCTION InitCopyListLWP (prodno%, network$, direction$) AS STRING
  868. DIM i%, sym$, chpt$, nextSibling$, nextprod$, notused%, FeatureToFind$
  869.  
  870. ON Error STFQUIT GOTO COPYLISTERROR
  871.  
  872. 'DebugMsg1 "entering initcopylistlwp"
  873.  
  874.    InitCopyListLWP = direction$
  875.    '' In the backwards case, keep backing up
  876.    If direction$ = gBACK Then
  877.       EXIT FUNCTION
  878.    End If
  879.  
  880.    sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  881.    chpt$ = Lot_GetChapterFromKeyWord(sym$)
  882.    If chpt$ = "" Then
  883.       ERROR STFQUIT
  884.    End IF
  885.  
  886.    SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  887.       CASE gCOMPLETE$
  888.          i% = F_COMPLETE
  889.       CASE gLAPTOP$
  890.          i% = F_LAPTOP
  891.       CASE gCUSTOM$
  892.          i% = F_CUSTOM
  893.    END SELECT
  894.  
  895.    Lot_InitializeCopyList chpt$, i%
  896.  
  897.     ''** Make sure to turn off all sections not available on the server.
  898.     IF network$ = gNODE THEN
  899.         nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)
  900.         chpt$ = Lot_GetFirst(chpt$, F_NOTHING)
  901.         WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  902.             FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  903.             IF Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE THEN
  904.                 notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  905.             END IF
  906.             chpt$ = Lot_GetNext()
  907.         WEND
  908.    ELSEIF (network$ = gSERVER) AND _ ''(i% = F_COMPLETE) AND _
  909.            GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$    _
  910.    THEN
  911.       ''** Turn on all sections in Solo WordPro.  ** Suite does it for us.
  912.       sym$ = Reg_GetProductAcronym(prodno%) & "OBSFILES1"
  913.       nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)
  914.       chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)
  915.       WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  916.          IF Lot_GetChapterValStr(chpt$, F_KEYWORD) <> sym$ THEN
  917.             notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
  918.          END IF
  919.          chpt$ = Lot_GetNext()
  920.       WEND
  921.    END IF
  922.  
  923.  
  924. 'DebugMsg1 "leaving initcopylistlwp"
  925.  
  926.    EXIT FUNCTION
  927.  
  928. COPYLISTERROR:
  929.    ERROR STFQUIT
  930.  
  931. END FUNCTION
  932.  
  933.  
  934. '*************************************************************************
  935. '** FUNCTION UILWP (prodno%, network$, direction$) AS STRING
  936. '**
  937. '** Purpose: This is your chance to put up any User Interface
  938. '**          that you want.  Remember, try to keep it short.
  939. '**          In SmartSuite, if every product puts up two extra
  940. '**          dialogs, then the SmartSuite will consist of 16 dialogs!
  941. '**
  942. '**          Pay attention to the value of direction, if you are putting
  943. '**          up more than one dialog.
  944. '**
  945. '**          The toolkit will do an accurate space computation later,
  946. '**          so you can tamper with the copy list. But you shouldn't
  947. '**          write out anything to the disk until PostCopyCofig!
  948. '**
  949. '** In Symbols :
  950. '** Out Symbols:
  951. '**
  952. '** Arguments:  All parameters are **read only**.
  953. '**          prodno%: This is your prodno%.  It is assigned to you by the
  954. '**                   toolkit in the order in which you were registered.
  955. '**                   When your product is oart of SmartSuite, SmartSuite
  956. '**                   will always be product #1. (prodno% >=1)
  957. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  958. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  959. '**                      then step backwards
  960. '**
  961. '** Errors:    No return code for errors, you must Raise them
  962. '** Author:    MMeth
  963. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  964. '**                             allow the user to step backwards.)
  965. '**
  966. '*************************************************************************
  967.  
  968. PUBLIC FUNCTION UILWP (prodno%, network$, direction$) AS STRING
  969. DIM notused%, chpt$, PrevMastersDir$
  970.  
  971.     ' If Custom and NOT part of Suite then surface dialog.
  972.     ' Also check to make sure we aren't automated
  973.     '
  974.     IF Reg_GetProdSelectedInstallType(prodno%) = gCUSTOM$ AND _
  975.         GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  976.         network$ <> gSERVER AND _
  977.         GetSymbolValue(SYM_AUTOMATIONINST$) <> gTRUE$ _
  978.     THEN
  979.         ' Don't allow users to change directories in an MLC install
  980.         '
  981.         IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  982.             notused% = RegisterCallback("LWP", "LWPMOREDIRSCB")
  983.             direction$ = PopupModalDlg (DBLWP_MOREDIRS3, DBLWP_MOREDIRS3)
  984.         END IF
  985.     END IF
  986.  
  987.     ' IF Mem <= 8MB, offer to disable OLE
  988.     '
  989.     IF (network$ = gSTANDARD$ OR network$ = gNODE$) AND _
  990.         direction$ <> gBACK AND GetPhysicalMemoryInMB() <= 8 _
  991.     THEN
  992.         IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  993.             LWPDisableOLE% = Lot_GetKeyValFromResponseFile(_
  994.                 "LWP", "LWPDisableOLE") <> "0"
  995.         ELSE
  996.             notused% = RegisterCallback("LWP", "LWPDISABLEOLECB")
  997.             direction$ = PopupModalDlg(DBLWP_DISABLEOLE, DBLWP_DISABLEOLE)
  998.         END IF
  999.     END IF
  1000.  
  1001.    '*** Remove Obsolete Files dlg for  XXX
  1002.     IF Reg_GetObsFiles(prodno%) <> 0 AND _
  1003.         direction$ <> gBACK AND _
  1004.         network$ = gSTANDARD$ AND _
  1005.         GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ _
  1006.     THEN
  1007.         IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1008.             LWPRemoveProdFiles% = Lot_GetKeyValFromResponseFile(_
  1009.                 "LWP", "LWPRemovePreviousProdFiles") <> "0"
  1010.         ELSE
  1011.             notused% = RegisterCallback("LWP", "LWPRemoveProdFilesCB")
  1012.             direction$ = PopupModalDlg(DBLWP_REMOVEPRODFILES, _
  1013.                 DBLWP_REMOVEPRODFILES)
  1014.             IF direction$ = gBACK THEN
  1015.                 direction$ = gNEXT            'handle NO button
  1016.             END IF
  1017.         END IF
  1018.  
  1019.     END IF
  1020.  
  1021.     ' Give user option to backup currently installed smasters
  1022.     '
  1023.     DIM PrevMasters$
  1024.     IF InstalledLWPVersion$ <> "" AND _
  1025.        network$ = gSTANDARD$ AND _
  1026.         direction$ <> gBACK AND _
  1027.         GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ _
  1028.     THEN
  1029.       PrevMastersDir$ = Lot_TrimEndSlash(GetPreviousMastersDir())
  1030.         IF DoesDirExist(PrevMastersDir$) AND _
  1031.            PrevMastersDir$ = Lot_TrimEndSlash(GetSymbolValue("LWPMASTERSDIR")) _ '??? 10/21/96
  1032.         THEN
  1033.             IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1034.                 LWPBackupSmartMasters% = Lot_GetKeyValFromResponseFile(_
  1035.                     "LWP", "LWPBackupSmartMasters") <> "0"
  1036.             ELSE
  1037.                 chpt$ = Lot_GetChapterFromKeyword("LWP_SMARTMASTERS")
  1038.                 IF (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) THEN
  1039.                     notused% = RegisterCallback("LWP", "LWPBACKUPMASTERSCB")
  1040.                     direction$ = PopupModalDlg(DBLWP_BACKUPMASTERS, _
  1041.                         DBLWP_BACKUPMASTERS)
  1042.                 END IF
  1043.             END IF
  1044.         END IF
  1045.     END IF
  1046.  
  1047.     UILWP = direction$
  1048.    '' ??? Shouldn't this be at the top of the function???
  1049.     '' In the backwards case, keep backing up
  1050.     IF direction$ = gBACK THEN
  1051.         EXIT FUNCTION
  1052.     END IF
  1053. END FUNCTION
  1054.  
  1055.  
  1056. '*************************************************************************
  1057. '** FUNCTION PreCopyConfigLWP (prodno%, network$, direction$, lic%) AS STRING
  1058. '**
  1059. '** Purpose: This is the very last function called before the space is
  1060. '**          accurately computed (to the last byte) and files are copied
  1061. '**          by the toolkit.  If you have any last minute changes to
  1062. '**          do, this is the time to do them.  example:
  1063. '**          Test for monitor resolution, and turn on the chapter
  1064. '**          in the copy list (a memory residident version of the INF file)
  1065. '**          with the appropriate resolution.
  1066. '**
  1067. '** In Symbols :
  1068. '** Out Symbols:
  1069. '**
  1070. '** Arguments:  All parameters are **read only**.
  1071. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1072. '**                   toolkit in the order in which you were registered.
  1073. '**                   When your product is part of SmartSuite, SmartSuite
  1074. '**                   will always be product #1. (prodno% >=1)
  1075. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1076. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1077. '**                      then step backwards
  1078. '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  1079. '**
  1080. '** Errors:    No return code for errors, you must Raise them
  1081. '** Author:    MMeth
  1082. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1083. '**                             allow the user to step backwards.)
  1084. '**
  1085. '*************************************************************************
  1086.  
  1087. PUBLIC FUNCTION PreCopyConfigLWP (prodno%, network$, direction$, lic%) AS STRING
  1088.    PreCopyConfigLWP = gNEXT
  1089.  
  1090.    DIM notused%, chpt$, chptname$, count%, sym$
  1091.  
  1092. 'DebugMsg1 "entering precopyconfiglwp"
  1093.  
  1094. 'DebugDirs
  1095.  
  1096.    DIM ObsProdDir$, installDir$, cbBuf&
  1097.    DIM AppName$, OldVer$, NewVer$, OldKey$, NewKey$, Value$
  1098.    DIM rc%, szProd$, szVer$
  1099.  
  1100.    '*** REMOVE PRIOR VERSION ***  sdb incorporated 5/15/96
  1101.    '*** This is the product name as found in the registry
  1102.     AppName$ = "WordPro"
  1103.    OldVer$ = "96.0"
  1104.    NewVer$ = "97.0"
  1105.  
  1106.    OldKey$ = "Software\Lotus\" + AppName$ + "\" + OldVer$ +"\"
  1107.    NewKey$ = "Software\Lotus\" + AppName$ + "\" + NewVer$ +"\"
  1108.    Value$ = "Path"
  1109.  
  1110.    '***Get the directory for the version to be removed
  1111.    IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, OldKey$) THEN
  1112.       rc% = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, OldKey$, _
  1113.            Value$, REG_DWORD, ObsProdDir$, cbBuf&)
  1114.  
  1115.         '** Never fully implemented.  SDB 1/2/97
  1116.         '**
  1117.         '** Save Previous Registry Entries
  1118.         'LWP_SavePrevUserSettings OldKey$, NewKey$, TRUE
  1119.  
  1120.       '** Prepare the 2 paths for a string compare
  1121.       installDir$ = NullTrim(GetSymbolValue("LWPDIR"))
  1122.       ObsProdDir$ = NullTrim(ObsProdDir$)
  1123.       IF RIGHT$(installDir$,1) <> "\" THEN installDir$ = installDir$ + "\"
  1124.       IF RIGHT$(ObsProdDir$,1) <> "\" THEN ObsProdDir$ = ObsProdDir$ + "\"
  1125.  
  1126.       IF StrCompare(installDir$, ObsProdDir$, 1) = 0 _
  1127.                   AND rc% = ERROR_SUCCESS THEN
  1128.          notused% = RemovePriorVersion(AppName$, OldVer$)
  1129.       END IF
  1130.    END IF
  1131.    '*** DONE REMOVING PRIOR VERSION
  1132.  
  1133.    '-----------------------------------
  1134.    ' Activate Removal of obsolete files
  1135.     '
  1136.     IF GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ THEN
  1137.         FOR count% = 1 TO 1
  1138.             sym$ = "LWPOBSFILES" + LTRIM$(STR$(count%))
  1139.             chpt$ = Lot_GetChapterFromKeyWord(sym$)
  1140.             IF chpt$ <> "" THEN
  1141.                 IF LWPRemoveProdFiles% THEN
  1142.                     notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 1)
  1143.                 ELSE
  1144.                     notused% = Lot_SetChapterFilesInCopyListInOrOut(chpt$, 0)
  1145.                 END IF
  1146.             END IF
  1147.         NEXT
  1148.     END IF
  1149.  
  1150.     '----------------------------------------------
  1151.     ' Remove obsolete shortcuts from 16-bit install
  1152.     '
  1153.     If LWPRemoveProdFiles% AND _
  1154.         (InstalledLWPVersion$ = "AMIPRO" OR _
  1155.         InstalledLWPVersion$ = "WORDPRO16") _
  1156.     Then
  1157.         LWP_RemoveOldShortcuts
  1158.     End if
  1159.  
  1160.  
  1161.    '------------------------------------------------------------
  1162.    ' Only install the stub helpfile if the full one isn't chosen
  1163.    '
  1164.    IF LWP_IsChapterIn("LWP_SCRIPT_HELP") then
  1165.       LWP_SetChapterInOut "LWP_SCRIPT_HELP_STUB", 0
  1166.    END IF
  1167.    IF LWP_IsChapterIn("LWP_HELPFILE") then
  1168.       LWP_SetChapterInOut "LWP_HELPFILE_STUBS", 0
  1169.    END IF
  1170.  
  1171.  
  1172.    '-----------------------------------------------------------------
  1173.    '** Don't install default smasters to node if smasters not checked
  1174.    '
  1175.     If (network$ = gNODE$) THEN
  1176.       If LWP_IsChapterIn("LWP_SMARTMASTERS") = 0 Then
  1177.          LWP_SetChapterInOut "LWP_HPTAG_SMARTMASTER", 0
  1178.          LWP_SetChapterInOut "LWP_HTML_SMARTMASTER", 0
  1179.          LWP_SetChapterInOut "LWP_SMARTMASTERALWAYS", 0
  1180.       End If
  1181.    End If
  1182.  
  1183.  
  1184.    '----------------------------------
  1185.    '** Install Hyphenation if any of the language tools are installed
  1186.    '
  1187.     If LWP_IsChapterIn("WIN32SHRSPELLPRG") OR _
  1188.        LWP_IsChapterIn("LWPTHESAURUSPRG")  OR _
  1189.        LWP_IsChapterIn("LWPGRAMMARPRG")    _
  1190.     Then
  1191.       LWP_SetChapterInOut "LWPHYPHENATIONPRG", 1
  1192.       LWP_SetChapterInOut "LWPHYPHENATIONDATA", 1
  1193.    End if
  1194.  
  1195.  
  1196.    '----------------------------------
  1197.    '** QuickStart:  Kill it before we do anything
  1198.    '
  1199.    notused% = KillQuickStart()
  1200.  
  1201.  
  1202.     IF LWPBackupSmartMasters% THEN LWP_DoBackupSmartMasters
  1203.  
  1204.  
  1205.    ''** Tell the toolkit how many billboards you will have during file copy.
  1206.    ''** This way the toolkit will be avle to calculate how long each billboard
  1207.    ''** should stay up
  1208.    If network$ = gDISTRIBUTION$ Then
  1209.       Reg_SetBillboardNumber prodno%, 13
  1210.    ElseIf network$ <> gNODE Then
  1211.       Reg_SetBillboardNumber prodno%, 12
  1212.    Else
  1213.       '** There's really no time for billboards in a node install
  1214.       Reg_SetBillboardNumber prodno%, 1
  1215.    End If
  1216.  
  1217. 'DebugMsg1 "leaving precopyconfiglwp"
  1218. 'print "DUMPING COPYLIST"
  1219. 'DumpCopyList "c:\MyCopy.Lst"
  1220. 'DebugDirs
  1221.  
  1222. END FUNCTION
  1223.  
  1224.  
  1225. '*************************************************************************
  1226. '** FUNCTION  AddTheBillBoardsLWP (prodno%, network$, direction$, nbytes&)
  1227. '**
  1228. '** Purpose: This is where to add the billboards using the function:
  1229. '**          AddToBillboardList. Use nbytes& as the last parameter to
  1230. '**          the MS-SETUP function AddToBillboardList
  1231. '**
  1232. '** In Symbols :
  1233. '** Out Symbols:
  1234. '**
  1235. '** Arguments:  All parameters are **read only**.
  1236. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1237. '**                   toolkit in the order in which you were registered.
  1238. '**                   When your product is part of SmartSuite, SmartSuite
  1239. '**                   will always be product #1. (prodno% >=1)
  1240. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1241. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1242. '**                      then step backwards
  1243. '**           nbytes: Determines the duration of billboard timing.
  1244. '**             NOTE: Make sure to use billboard Ids that are unique to
  1245. '**                   your product. e.g. IDD_LWPBILLBD1_BMP &
  1246. '**                   DB_LWPBILLBD1_BMP
  1247. '**
  1248. '** Errors:    No return code for errors, you must Raise them
  1249. '** Author:    MMeth
  1250. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1251. '**                             allow the user to step backwards.)
  1252. '**
  1253. '*************************************************************************
  1254.  
  1255. PUBLIC FUNCTION AddTheBillBoardsLWP (prodno%, network$, direction$, nbytes&) AS STRING
  1256.     AddTheBillBoardsLWP = direction$
  1257.     '' In the backwards case, keep backing up
  1258.     If direction$ = gBACK Then
  1259.         EXIT FUNCTION
  1260.     End If
  1261.  
  1262.     IF network$ = gDISTRIBUTION$ THEN
  1263.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1264.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1265.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD1_BMP)
  1266.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD0,_
  1267.             "_FNameOrgDlgProc@16", nbytes&
  1268.     END IF
  1269.  
  1270.     SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1271.     SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1272.     SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1273.     SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD1_BMP)
  1274.     AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD1,_
  1275.         "_FNameOrgDlgProc@16", nbytes&
  1276.  
  1277.    '** There's really no time for billboards in a node install
  1278.     IF network$ <> gNODE$ THEN
  1279.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1280.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1281.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1282.         SetListItem "NORMALFONT",4, STR$(IDC_TEXT5)
  1283.         SetListItem "NORMALFONT",5, STR$(IDC_TEXT6)
  1284.         SetListItem "NORMALFONT",6, STR$(IDC_TEXT7)
  1285.         SetListItem "NORMALFONT",7, STR$(IDC_TEXT8)
  1286.         SetListItem "NORMALFONT",8, STR$(IDC_TEXT9)
  1287.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1288.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD2_BMP)
  1289.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD2,_
  1290.             "_FNameOrgDlgProc@16", nbytes&
  1291.  
  1292.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1293.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1294.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1295.         SetListItem "NORMALFONT",4, STR$(IDC_TEXT5)
  1296.         SetListItem "NORMALFONT",5, STR$(IDC_TEXT6)
  1297.         SetListItem "NORMALFONT",6, STR$(IDC_TEXT7)
  1298.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1299.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD3_BMP)
  1300.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD3,_
  1301.             "_FNameOrgDlgProc@16", nbytes&
  1302.  
  1303.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1304.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1305.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1306.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1307.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD4_BMP)
  1308.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD4,_
  1309.             "_FNameOrgDlgProc@16", nbytes&
  1310.  
  1311.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1312.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1313.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1314.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1315.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD5_BMP)
  1316.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD5,_
  1317.             "_FNameOrgDlgProc@16", nbytes&
  1318.  
  1319.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1320.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1321.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1322.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1323.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD6_BMP)
  1324.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD6,_
  1325.             "_FNameOrgDlgProc@16", nbytes&
  1326.  
  1327.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1328.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1329.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1330.         SetListItem "NORMALFONT",4, STR$(IDC_TEXT5)
  1331.         SetListItem "NORMALFONT",5, STR$(IDC_TEXT6)
  1332.         SetListItem "NORMALFONT",6, STR$(IDC_TEXT7)
  1333.         SetListItem "NORMALFONT",7, STR$(IDC_TEXT8)
  1334.         SetListItem "NORMALFONT",8, STR$(IDC_TEXT9)
  1335.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1336.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD7_BMP)
  1337.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD7,_
  1338.             "_FNameOrgDlgProc@16", nbytes&
  1339.  
  1340.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1341.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1342.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1343.         SetListItem "NORMALFONT",4, STR$(IDC_TEXT5)
  1344.         SetListItem "NORMALFONT",5, STR$(IDC_TEXT6)
  1345.         SetListItem "NORMALFONT",6, STR$(IDC_TEXT7)
  1346.         SetListItem "NORMALFONT",7, STR$(IDC_TEXT8)
  1347.         SetListItem "NORMALFONT",8, STR$(IDC_TEXT9)
  1348.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1349.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD8_BMP)
  1350.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD8,_
  1351.             "_FNameOrgDlgProc@16", nbytes&
  1352.  
  1353.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1354.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1355.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1356.         SetListItem "NORMALFONT",4, STR$(IDC_TEXT5)
  1357.         SetListItem "NORMALFONT",5, STR$(IDC_TEXT6)
  1358.         SetListItem "NORMALFONT",6, STR$(IDC_TEXT7)
  1359.         SetListItem "NORMALFONT",7, STR$(IDC_TEXT8)
  1360.         SetListItem "NORMALFONT",8, STR$(IDC_TEXT9)
  1361.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1362.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD9_BMP)
  1363.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD9,_
  1364.             "_FNameOrgDlgProc@16", nbytes&
  1365.  
  1366.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1367.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1368.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1369.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1370.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD10_BMP)
  1371.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD10,_
  1372.             "_FNameOrgDlgProc@16", nbytes&
  1373.  
  1374.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1375.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1376.         SetListItem "NORMALFONT",3, STR$(IDC_TEXT4)
  1377.         SetListItem "NORMALFONT",4, STR$(IDC_TEXT5)
  1378.         SetListItem "NORMALFONT",5, STR$(IDC_TEXT6)
  1379.         SetListItem "NORMALFONT",6, STR$(IDC_TEXT7)
  1380.         SetListItem "NORMALFONT",7, STR$(IDC_TEXT8)
  1381.         SetListItem "NORMALFONT",8, STR$(IDC_TEXT9)
  1382.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1383.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD11_BMP)
  1384.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD11,_
  1385.             "_FNameOrgDlgProc@16", nbytes&
  1386.  
  1387.         SetListItem "NORMALFONT",1, STR$(IDC_TEXT2)
  1388.         SetListItem "NORMALFONT",2, STR$(IDC_TEXT3)
  1389.         SetListItem "IDC_BMP", 1, STR$(IDD_LWP_BILLBD_TITLE_BMP)
  1390.         SetListItem "IDC_BMP", 2, STR$(IDD_LWP_BILLBD12_BMP)
  1391.         AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LWP_BILLBD12,_
  1392.             "_FNameOrgDlgProc@16", nbytes&
  1393.    END IF
  1394.  
  1395. END FUNCTION
  1396.  
  1397.  
  1398. '*************************************************************************
  1399. '** FUNCTION PostCopyConfigLWP (prodno%, network$, direction$, programgroup$) AS STRING
  1400. '**
  1401. '** Purpose: This is called just after file copy has completed.
  1402. '**          This is your opportunity to do all the configuaration
  1403. '**          you need.  This includes:
  1404. '**
  1405. '**          1. Writing to all your ini files
  1406. '**             Don't worry about ini files related to shared components
  1407. '**          2. Writing to OLE registration database
  1408. '**             Don't worry about OLE registration related to shared 
  1409. '**             components
  1410. '**          3. Writing to any other config files you may support
  1411. '**          4. Writing out user registration information,
  1412. '**             no matter how your product picks up this info
  1413. '**          5. Create any working directories
  1414. '**             A working directory is one that does not contain any
  1415. '**             files, thus the toolkit did not create it for you.
  1416. '**
  1417. '**          NOTE: THERE are many subtleties in here if you are
  1418. '**                dealing with node and CD installs.  In particular,
  1419. '**                you must be ***very*** careful to understand where the
  1420. '**                things are that you are pointing to.  They could
  1421. '**                be on the node, server, or CD!  This, in combination
  1422. '**                with the INF file for Server/Node, is probably the 
  1423. '**                trickiest part of writing a quality install.  When
  1424. '**                configuring, you must be careful to consider what
  1425. '**                happens if there is a pre-existing product on the 
  1426. '**                machine, in the same location or
  1427. '**                another one!  This is very very tricky.  What happens
  1428. '**                if you had a full installation previously in location C:\FOO
  1429. '**                and now the user is installing a minimum installation in loaction
  1430. '**                D:\FOO. 
  1431. '**
  1432. '**                Each and every thing you do for configuartion needs very
  1433. '**                careful thought.
  1434. '**
  1435. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  1436. '**                This currrently tells you the location of a feature
  1437. '**                if the feature appears both in the SERVER.INF and the
  1438. '**                NODE.INF referred to by the same Keyword ID.
  1439. '**                We do not support CDs with this command yet, but we will
  1440. '**                at some time.
  1441. '**
  1442. '**                Also look out for writing to a file when the directory
  1443. '**                doesn't exist.  If the user deselected one of your
  1444. '**                options, your install may still be running, but since
  1445. '**                there were no files to copy into the directory
  1446. '**                it wasn't created by the toolkit!
  1447. '**
  1448. '**                Finally, remember that configuration files generally
  1449. '**                hold the state that the user has customized earlier.
  1450. '**                Sometimes you don't want to overwrite these!
  1451. '**                You will primarily use three MS-SETUP functions
  1452. '**                in here: 
  1453. '**                1. CreateIniKeyValue  (writing to ini files)
  1454. '**                2. SetRegKeyValue     (writing to OLE reg DB)
  1455. '**
  1456. '**                CreateProgmanGroup &  ShowProgmanGroup are
  1457. '**                done for you by the time you reach this
  1458. '**                function.
  1459. '**
  1460. '**                You will not have to do any configuration of LOTUS SHARED
  1461. '**                tools.  The toolkit will do this for you.
  1462. '** In Symbols :
  1463. '** Out Symbols:
  1464. '**            
  1465. '** Arguments:  All parameters are **read only**. 
  1466. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1467. '**                   toolkit in the order in which you were registered.
  1468. '**                   When your product is part of SmartSuite, SmartSuite
  1469. '**                   will always be product #1. (prodno% >=1)
  1470. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1471. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1472. '**                      then step backwards
  1473. '**    programgroup$: The name of the program group where the user chose to
  1474. '**                   install the program manager icons
  1475. '**
  1476. '** Errors:    No return code for errors, you must Raise them
  1477. '** Author:    MMeth
  1478. '** Returns:   return: gNEXT
  1479. '**
  1480. '*************************************************************************
  1481.  
  1482. PUBLIC FUNCTION PostCopyConfigLWP (prodno%, network$, direction$, programgroup$) AS STRING
  1483. DIM ripath$, notused%, unused&
  1484.  
  1485. 'DebugMsg1 "entering postcopyconfiglwp"
  1486.  
  1487. 'DebugDirs
  1488.  
  1489.     PostCopyConfigLWP = direction$
  1490.     '' In the backwards case, keep backing up
  1491.     If direction$ = gBACK Then
  1492.         EXIT FUNCTION
  1493.     End If
  1494.  
  1495.  
  1496.     If network$ <> gNODE$ Then
  1497.         SetSymbolValue SYM_CDDRIVE$, GetSymbolValue(SYM_INSTALL_SOURCE)
  1498.     End If
  1499.  
  1500.     IF Lot_IsTheFeatureInstalled("LWP_BASICS") <> FALSE THEN
  1501.         ' Write to RI file
  1502.         ripath$ = GetSymbolValue("LWPDIR") + "wordpro.ri"
  1503.         IF Lot_WriteToRiFile (ripath$) = FALSE Then
  1504.             ErrorMsg SID_LWP,LdString(SID_LWP_ERR_RI) + ripath$
  1505.         END IF
  1506.     END IF
  1507.  
  1508.    '------------------------------------------------------------------
  1509.    '------------------------------------------------------------------
  1510.     ' Anything after this conditional should only be done for standard
  1511.     ' and node installations
  1512.     '------------------------------------------------------------------
  1513.     '------------------------------------------------------------------
  1514.     IF network$ = gSERVER$ OR network$ = gDISTRIBUTION THEN
  1515.         EXIT FUNCTION
  1516.     END IF
  1517.    '------------------------------------------------------------------
  1518.    '------------------------------------------------------------------
  1519.  
  1520.  
  1521.     '** Write the uninstaller - but only for the primary language
  1522.     '
  1523.     IF GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ THEN
  1524.         DIM InfFile$
  1525.         IF network$ = gSTANDARD$ THEN
  1526.             InfFile$ = GetSymbolValue("INSTDIR") + "LWP.INF"
  1527.         ELSE
  1528.             IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  1529.                 InfFile$ = GetSymbolValue("SUITDIR") + "LWPNODE.INF"
  1530.             ELSE
  1531.                 InfFile$ = GetSymbolValue("LWPDIR") + "LWPNODE.INF"
  1532.             END IF
  1533.         END IF
  1534.         notused%=Lot_RegisterUninstaller(_
  1535.             LdString(SID_LWP_PROD_NAME),_
  1536.             LdString(SID_LWP_PROD_VER),_
  1537.             LdString(SID_LWP_SHORT_NAME),_
  1538.             InfFile$,_
  1539.             TRUE,FALSE, GetSymbolValue(SYM_INSTALL_LANGUAGE$),"","","")
  1540.     END IF
  1541.  
  1542.  
  1543.    '---------------------------------------
  1544.     '
  1545.     AddRegistryKeysLWP prodno%, network$
  1546.    '
  1547.    '---------------------------------------
  1548.  
  1549.  
  1550.    '--------------------------------------------------
  1551.     '** Recreate .GID file for main help on a reinstall
  1552.     '
  1553.     DIM MainHelp$, ExecError%, HelpFileName$
  1554.     IF (GetListItem(SYM_INSTALLKINDS$, prodno%) = gREINSTALL$) AND _
  1555.         (Lot_IsTheFeatureInstalled("LWP_HELPFILE") <> FALSE) _
  1556.     THEN
  1557.         HelpFileName$ = LdString(SID_LWP_WP1N71XX_HLP)
  1558.         MainHelp$ = LWP_WhereIsFeature(prodno%, "LWP_HELPFILE", _
  1559.             HelpFileName$) + HelpFileName$
  1560.         IF DoesFileExist(MainHelp$, femExists) THEN
  1561.             MainHelp$ = LWPLFN2SFN(MainHelp$)
  1562.             ExecError% = WinExec("winhlp32 -g " + MainHelp$, SW_HIDE)
  1563.         END IF
  1564.     END IF
  1565.  
  1566.  
  1567.     '---------------------------------------------------
  1568.     '** Create directories, if they aren't there already
  1569.     '
  1570.     IF Lot_IsTheFeatureInstalled("LWP_BASICS") <> FALSE THEN
  1571.         DIM NewDir$
  1572.         NewDir$ = GetSymbolValue("LWPSCRIPTSDIR")
  1573.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  1574.             CreateDir NewDir$, cmoNone
  1575.             notused%=Lot_RegisterObject("LWP_BASICS", _
  1576.                 UNIN_CLASS_DIRECTORY$, NewDir$)
  1577.         END IF
  1578.  
  1579.         NewDir$ = GetSymbolValue("LWPMASTERSDIR")
  1580.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  1581.             CreateDir NewDir$, cmoNone
  1582.             notused%=Lot_RegisterObject("LWP_BASICS", _
  1583.                 UNIN_CLASS_DIRECTORY$, NewDir$)
  1584.         END IF
  1585.  
  1586.         NewDir$ = GetSymbolValue("LWPWORKDIR")
  1587.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  1588.             CreateDir NewDir$, cmoNone
  1589.             notused%=Lot_RegisterObject("LWP_BASICS", _
  1590.                 UNIN_CLASS_DIRECTORY$, NewDir$)
  1591.         END IF
  1592.  
  1593.         NewDir$ = GetSymbolValue("LWPBACKUPDIR")
  1594.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  1595.             CreateDir NewDir$, cmoNone
  1596.             notused%=Lot_RegisterObject("LWP_BASICS", _
  1597.                 UNIN_CLASS_DIRECTORY$, NewDir$)
  1598.         END IF
  1599.     END IF
  1600.  
  1601.  
  1602.    '-----------------------------------------------------------
  1603.     '** Create Spell directory on Node if it isn't there already
  1604.     '
  1605.     IF Lot_IsTheFeatureInstalled("WIN32SHRSPELLPRG") <> FALSE AND _
  1606.         network$ = gNODE$ _
  1607.     THEN
  1608.         NewDir$ = GetSymbolValue(SYM_COMPONENTSDIR$) + _
  1609.                     LdString(SID_LWP_SPELL_DIR)
  1610.         IF NOT DoesDirExist(Lot_TrimEndSlash(NewDir$)) THEN
  1611.             CreateDir NewDir$, cmoNone
  1612.             notused%=Lot_RegisterObject("LWP_BASICS", _
  1613.                 UNIN_CLASS_DIRECTORY$, NewDir$)
  1614.         END IF
  1615.     END IF
  1616.  
  1617.    '---------------------------------------------------
  1618.     ' Create a link to a previous work directory, if any
  1619.     '
  1620.     DIM PrevWorkDir$, NewWorkDir$, Link$
  1621.     IF InstalledLWPVersion <> "" AND IsNewShell() THEN
  1622.         PrevWorkDir$ = GetPreviousWorkDir()
  1623.         NewWorkDir$ = GetSymbolValue("LWPWORKDIR")
  1624.         Link$ = NewWorkDir$ + LdString(SID_LWP_PREVIOUS_WORK_DIR) + ".lnk"
  1625.         IF DoesDirExist(PrevWorkDir$) AND _
  1626.             DoesFileExist(Link$, femExists) = FALSE AND _
  1627.             Lot_TrimEndSlash(PrevWorkDir$) <> Lot_TrimEndSlash(NewWorkDir$) _
  1628.         THEN
  1629.             unused& = CreateLink(PrevWorkDir$, Link$, "", "", "")
  1630.             notused% = Lot_RegisterObject("LWP_BASICS", _
  1631.                 UNIN_CLASS_SHORTCUT$, Link$)
  1632.         END IF
  1633.     END IF
  1634.  
  1635.  
  1636.    '--------------------------------------------------------------
  1637.     ' Some other files created by the app that should be cleaned up
  1638.     '
  1639.     DIM ProgDir$
  1640.     ProgDir$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", "wordpro.reg")
  1641.     notused% = Lot_RegisterObject("LWP_BASICS", _
  1642.         UNIN_CLASS_FILE$, ProgDir$ + "panose.bin")
  1643.     notused% = Lot_RegisterObject("LWP_BASICS", _
  1644.         UNIN_CLASS_FILE$, ProgDir$ + "userqstn.log")
  1645.     IF network$ = gNODE$ THEN
  1646.         notused% = Lot_RegisterObject("LWP_BASICS", _
  1647.             UNIN_CLASS_FILE$, GetSymbolValue(SYM_COMPONENTSDIR$) + "lisdb.dat")
  1648.     END IF
  1649.  
  1650.    ' SDB  8/29/97
  1651.    ' Register this object so that the uninstaller won't complain
  1652.    ' if we install the stub help file and then overwrite it with
  1653.    ' the real help file which has a different date.
  1654.    '
  1655.     notused% = Lot_RegisterObject("LWP_BASICS", _
  1656.         UNIN_CLASS_FILE$, ProgDir$ + LdString(SID_LWP_WP0N71XX_HLP) )
  1657.     notused% = Lot_RegisterObject("LWP_BASICS", _
  1658.         UNIN_CLASS_FILE$, ProgDir$ + LdString(SID_LWP_WP1N71XX_HLP) )
  1659.     notused% = Lot_RegisterObject("LWP_BASICS", _
  1660.         UNIN_CLASS_FILE$, ProgDir$ + LdString(SID_LWP_WP3N71XX_HLP) )
  1661.     notused% = Lot_RegisterObject("LWP_BASICS", _
  1662.         UNIN_CLASS_FILE$, ProgDir$ + LdString(SID_LWP_WP4N71XX_HLP) )
  1663.  
  1664.     ' SDB 12/18/97
  1665.     ' Register the .gid files created by the help files
  1666.     '
  1667.     LWP_RegisterGIDFile ProgDir$, LdString(SID_LWP_WP0N71XX_HLP)
  1668.     LWP_RegisterGIDFile ProgDir$, LdString(SID_LWP_WP1N71XX_HLP)
  1669.     LWP_RegisterGIDFile ProgDir$, LdString(SID_LWP_WP3N71XX_HLP)
  1670.     LWP_RegisterGIDFile ProgDir$, LdString(SID_LWP_WP4N71XX_HLP)
  1671.  
  1672.  
  1673.    '-----------------------
  1674.    '
  1675.    LWP_DoFontProcessing
  1676.    '
  1677.    '-----------------------
  1678.  
  1679.    '-----------------------
  1680.    '
  1681.    LWP_RegisterOCXs prodno%
  1682.    '
  1683.    '-----------------------
  1684.  
  1685.  
  1686. 'DebugMsg1 "leaving postcopyconfiglwp"
  1687. END FUNCTION
  1688.  
  1689. '*************************************************************************
  1690. '** PUBLIC SUB AddRegistryKeysLWP (prodno%, network$)
  1691. '**
  1692. '** Purpose: This is called just after file copy has completed.
  1693. '**          1. Add product specific Registry Keys.
  1694. '**
  1695. '**           Each and every thing you do for configuartion needs very
  1696. '**           careful thought.
  1697. '**
  1698. '** In Symbols :
  1699. '** Out Symbols:
  1700. '**
  1701. '** Arguments:  All parameters are **read only**.
  1702. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1703. '**                   toolkit in the order in which you were registered.
  1704. '**                   When your product is part of SmartSuite, SmartSuite
  1705. '**                   will always be product #1. (prodno% >=1)
  1706. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1707. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1708. '**                      then step backwards
  1709. '**    programgroup$: The name of the program group where the user chose to
  1710. '**                   install the program manager icons
  1711. '**
  1712. '** Errors:    No return code for errors, you must Raise them
  1713. '** Author:    PMD
  1714. '**
  1715. '*************************************************************************
  1716. PUBLIC SUB AddRegistryKeysLWP (prodno%, network$)
  1717. DIM LocPath$, Filename$, descript$, gbuf$, instvalue&
  1718. DIM szkey$, szkey2$, nsize&, nsize1&, nsize2&, nsize3, Insttype$, szval$
  1719. DIM rc&, keyvalue$, keyvalue1$,keyvalue2$, keyvalue3$, keyvalue4$
  1720. DIM Dll$, Key$, DataPath$, Location&, notused%, Path$
  1721. DIM HelpFile$
  1722. DIM UserName$, CompName$, Initials$, tempkey$
  1723.  
  1724. 'DebugMsg1 "entering addregistrykeyslwp"
  1725.  
  1726. szkey$ = gREGLOTUS + "WordPro\97.0"
  1727. descript$ = LdString(SID_LWP_SHORT_NAME)
  1728. keyvalue$ = "Path"
  1729. keyvalue1$ = "Description"
  1730. keyvalue2$ = "Name"
  1731. Insttype$ = "InstallType"
  1732. Filename$ = "wordpro.exe"
  1733. nsize1 = len(Filename) + 1
  1734. nsize2 = len(descript$) + 1
  1735.  
  1736. UserName$ = GetSymbolValue(SYM_NAME$)
  1737. CompName$ = GetSymbolValue(SYM_COMPANY$)
  1738. Initials$ = STRING$(40, 0)
  1739. rc& = GetInitials(username$, initials$)
  1740.  
  1741.    If network$ = gNODE$ Then
  1742.       instvalue = 1
  1743.    ElseIf network$ = gSTANDARD$ Then
  1744.       instvalue = 0
  1745.     End if
  1746.    nsize3 = 4
  1747.  
  1748.    rc& = ERROR_SUCCESS
  1749.  
  1750.    IF Lot_IsTheFeatureInstalled("LWP_BASICS") <> FALSE THEN
  1751.       locpath$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", Filename$)
  1752.         locpath = Lot_TrimEndSlash (locpath$)
  1753.        nsize = len(LocPath$) + 1
  1754.         rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey)
  1755.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, REG_SZ, LocPath$, nsize)
  1756.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue2$, REG_SZ, Filename, nsize1)
  1757.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue1$, REG_SZ, descript$, nsize2)
  1758.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, Insttype$, REG_DWORD, instvalue, nsize3)
  1759.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, "UserName", REG_SZ,  UserName$, len(UserName$) + 1)
  1760.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, "CompanyName", REG_SZ, CompName$, len(CompName$) + 1)
  1761.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, "UserInitials", REG_SZ, Initials$, len(Initials$) + 1)
  1762.  
  1763.         IF rc& <> ERROR_SUCCESS THEN
  1764.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szkey,"",""
  1765.         END IF
  1766.    END IF
  1767.  
  1768.    '** Write the registry value to add the new language
  1769.    AddRegistryLanguage LdString(SID_LWP_PROD_NAME), _
  1770.                            LdString(SID_LWP_PROD_VER)
  1771.  
  1772.    IF Lot_IsTheFeatureInstalled("LWP_BASICS") <> FALSE THEN
  1773.         DIM ExePath$
  1774.         ExePath$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", Filename$)
  1775.         notused% = Lot_RegAppPath(LdString(SID_LWP_LWPEXE), ExePath$, _
  1776.             "", FALSE, "LWP_BASICS")
  1777.     END IF
  1778.  
  1779.    IF Lot_IsTheFeatureInstalled("LWP_BASICS") <> FALSE THEN
  1780.         szkey$ = "CLSID\{2913FFFE-2EED-1069-BF5D-00DD011186B7}\InProcServer32"
  1781.         rc& = Lot_RegCreateKeyEx(HKEY_CLASSES_ROOT, szkey)
  1782.         rc& = Lot_CreateRegKeyValueEx(HKEY_CLASSES_ROOT, szkey$, _
  1783.              "ThreadingModel", REG_SZ, "Apartment", len("Apartment") + 1)
  1784.  
  1785.         IF rc& <> ERROR_SUCCESS THEN
  1786.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szkey,"",""
  1787.         END IF
  1788.  
  1789.         ' Note for international:  The filename shellnew.lwp does not
  1790.         ' need to be translated.  This isn't exposed in the UI.
  1791.         '
  1792.         DIM shellnew$
  1793.         szkey$ = ".lwp\ShellNew"
  1794.         shellnew$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", "shellnew.lwp")
  1795.         IF shellnew$ <> "" THEN
  1796.             shellnew$ = shellnew$ + "shellnew.lwp"
  1797.             rc& = Lot_RegCreateKeyEx(HKEY_CLASSES_ROOT, szkey)
  1798.             rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_CLASSES_ROOT, szkey$, _
  1799.                 "FileName", REG_SZ, shellnew$, len(shellnew$) + 1)
  1800.  
  1801.             IF rc& <> ERROR_SUCCESS THEN
  1802.                 RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szkey,"",""
  1803.             END IF
  1804.         END IF
  1805.    END IF
  1806.  
  1807.     ' I need to do these registry entries for the language tools because
  1808.     ' CIT doesn't support Thesaurus, Grammar, and Hyphenation
  1809.     '
  1810.    IF Lot_IsTheFeatureInstalled("LWPHYPHENATIONPRG") <> FALSE THEN
  1811.         Key$ = "SOFTWARE\Lotus\Wordpro\97.0\Hyphenation\4.0"
  1812.         DataPath$ = LWP_WhereIsFeature(prodno%, _
  1813.             "LWPHYPHENATIONDATA", LdString(SID_LWP_LOTUSXX2_HYP))
  1814.         DataPath$ = Lot_TrimEndSlash(DataPath$)
  1815.         rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, Key$)
  1816.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, Key$, _
  1817.              "Data Path", REG_SZ, DataPath$, len(DataPath$) + 1)
  1818.  
  1819.         IF rc& <> ERROR_SUCCESS THEN
  1820.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+Key$,"",""
  1821.         END IF
  1822.     END IF
  1823.  
  1824.    IF Lot_IsTheFeatureInstalled("LWPGRAMMARPRG") <> FALSE THEN
  1825.         Key$ = "SOFTWARE\Lotus\Wordpro\97.0\GrammarChecker\3.0"
  1826.         DataPath$ = LWP_WhereIsFeature(prodno%, _
  1827.             "LWPGRAMMARDATA", LdString(SID_LWP_LOTUSXX2_GCS))
  1828.         DataPath$ = Lot_TrimEndSlash(DataPath$)
  1829.         rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, Key$)
  1830.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, Key$, _
  1831.              "Data Path", REG_SZ, DataPath$, len(DataPath$) + 1)
  1832.  
  1833.         IF rc& <> ERROR_SUCCESS THEN
  1834.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+Key$,"",""
  1835.         END IF
  1836.     END IF
  1837.  
  1838.     ' Register any help or related files
  1839.     ' Note: These files are removed from winhelp.ini like the ones below.
  1840.     '
  1841.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP0N71XX_HLP)
  1842.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP0N71XX_CNT)
  1843.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP1N71XX_HLP)
  1844.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP1N71XX_CNT)
  1845.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP3N71XX_HLP)
  1846.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP3N71XX_CNT)
  1847.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP4N71XX_HLP)
  1848.     LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP4N71XX_CNT)
  1849. '
  1850. '***  Don't register this.  wp5n71xx gets renamed as wp0n71xx.
  1851. '    LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP5N71XX_HLP)
  1852. '    LWP_RegisterHelpFile prodno%, "LWP_HELPFILE", LdString(SID_LWP_WP5N71XX_CNT)
  1853. '
  1854.  
  1855.     ' Cleanup winhelp.ini
  1856.     '
  1857.     ' Note for international:  These filenames do not need to be
  1858.     ' translated so I did not resource them.  This is only here
  1859.     ' to cleanup beta sites which only got these English files.
  1860.     ' We must remove them from winhelp.ini so the info there does
  1861.     ' not conflict with what should be in the registry.  Again,
  1862.     ' this is only for beta sites.
  1863.     '
  1864.     DIM WinHelpIni$
  1865.     WinHelpIni$ = GetWindowsDir() + "winhelp.ini"
  1866.     RemoveIniKey WinHelpIni$, "Files", "lthlpn30.dll", cmoNone
  1867.     RemoveIniKey WinHelpIni$, "Files", "lc1n21en.hlp", cmoNone
  1868.     RemoveIniKey WinHelpIni$, "Files", "lc1n21en.cnt", cmoNone
  1869.     RemoveIniKey WinHelpIni$, "Files", "lc2n21en.hlp", cmoNone
  1870.     RemoveIniKey WinHelpIni$, "Files", "lc2n21en.cnt", cmoNone
  1871.     RemoveIniKey WinHelpIni$, "Files", "ltschrt2.hlp", cmoNone
  1872.     RemoveIniKey WinHelpIni$, "Files", "lsen31en.hlp", cmoNone
  1873.     RemoveIniKey WinHelpIni$, "Files", "lsen31en.cnt", cmoNone
  1874.     RemoveIniKey WinHelpIni$, "Files", "lsln31en.hlp", cmoNone
  1875.     RemoveIniKey WinHelpIni$, "Files", "lsln31en.cnt", cmoNone
  1876.     RemoveIniKey WinHelpIni$, "Files", "tm1n10en.hlp", cmoNone
  1877.     RemoveIniKey WinHelpIni$, "Files", "tm1n10en.cnt", cmoNone
  1878.     RemoveIniKey WinHelpIni$, "Files", "ltsmail3.hlp", cmoNone
  1879.     RemoveIniKey WinHelpIni$, "Files", "mb1c10en.hlp", cmoNone
  1880.     RemoveIniKey WinHelpIni$, "Files", "mb1c10en.cnt", cmoNone
  1881.     RemoveIniKey WinHelpIni$, "Files", "as1n10en.hlp", cmoNone
  1882.     RemoveIniKey WinHelpIni$, "Files", "as1n11en.hlp", cmoNone
  1883.     RemoveIniKey WinHelpIni$, "Files", "cs1n10en.hlp", cmoNone
  1884.     RemoveIniKey WinHelpIni$, "Files", "fl2c10en.hlp", cmoNone
  1885.  
  1886.     LWP_RegShrComponent "WIN32SHRQUICKDEMOPRG",      "Animations", "1.1"
  1887.     LWP_RegShrComponent "WIN32SHRASWANPRG",          "Aswan", "1.4"
  1888.     LWP_RegShrComponent "WIN32SHRBENTOPRG",          "Bento", "3.0"
  1889.     LWP_RegShrComponent "WIN32SHRBUBBHELPPRG",       "Bubble Help", "1.2"
  1890.     LWP_RegShrComponent "WIN32SHRCCSTRPRG",          "ccStr", "1.0"
  1891.     LWP_RegShrComponent "WIN32SHRCHARTPRG",          "Chart", "2.1"
  1892.     LWP_RegShrComponent "WIN32SHRCUSTSUPPHELPPRG",   "CustomerSupportHelp", "4.0"
  1893.     LWP_RegShrComponent "WIN32SHRDIALOGDLLPRG",      "Dialog DLL", "3.0"
  1894.     LWP_RegShrComponent "WIN32SHRSHAREDHELPPRG",     "Help", "3.1"
  1895.     LWP_RegShrComponent "WIN32SHRSMARTICONPRG",      "Icon Palette", "7.1"
  1896.     LWP_RegShrComponent "WIN32SHRLISDBPRG",          "LISDB", "1.0"
  1897.     LWP_RegShrComponent "WIN32SHRLOTUSSCRIPTPRG",    "LotusScript", "3.1"
  1898.     LWP_RegShrComponent "WIN32SHRSTDPLAYERPRG",      "Player", "1.1"
  1899.     LWP_RegShrComponent "WIN32SHRSPELLPRG",          "Spell", "4.0"
  1900.    '' ** Thesaurus Data File only!!!
  1901.     LWP_RegShrComponent "LWPTHESAURUSPRG",           "Thesaurus", "3.0"
  1902.     LWP_RegShrComponent "WIN32SHRSTATUSBARPRG",      "Status Bar", "6.1"
  1903.     LWP_RegShrComponent "WIN32TEAMMAILSHRPRG",       "TeamMail", "1.1"
  1904.     LWP_RegShrComponent "WIN32SHRUIMSPRG",           "Infobox", "2.1"
  1905.     LWP_RegShrComponent "WIN32SHRUINST",             "Uninstall", "1.0"
  1906.     LWP_RegShrComponent "WIN32SHRNOTESOPENSAVEPRG",  "NotesOpenSave", "1.0"
  1907.     LWP_RegShrComponent "WIN32SHRINTERNETPRG",       "Internet", "1.0"
  1908.    LWP_RegShrComponent "WIN32SHRFILLSDATA",         "Fills", "1.0"
  1909.  
  1910.     LWP_RegShrComponent "WIN32SHRIMPORTFILTERCDR",    "GraphicFilters", "1.1"
  1911.     LWP_RegShrComponent "WIN32SHRIMPORTFILTERINICDR", "GraphicFilters", "1.1"
  1912.     LWP_RegShrComponent "WIN32SHRIMPORTFILTERPCD"   , "GraphicFilters", "1.1"
  1913.     LWP_RegShrComponent "WIN32SHRIMPORTFILTERINIPCD", "GraphicFilters", "1.1"
  1914.  
  1915.    '-------------------------------------
  1916.    '** User Dictionary for Spell  5/23/96
  1917.    '
  1918.    IF Lot_IsTheFeatureInstalled("WIN32SHRSPELLPRG") <> FALSE THEN
  1919.         Key$ = "SOFTWARE\Lotus\Components\Spell\4.0"
  1920.         DataPath$ = "ltsuser1.udc"
  1921.       rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, Key$, _
  1922.              "UserDictionaryFiles", REG_SZ, DataPath$, len(DataPath$) + 1)
  1923.  
  1924.         IF rc& <> ERROR_SUCCESS THEN
  1925.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+Key$,"",""
  1926.         END IF
  1927.     END IF
  1928.  
  1929.    '-------------------------------------
  1930.    '** QuickStart
  1931.    '
  1932.     IF Lot_IsTheFeatureInstalled("LWP_QUICKSTART") <> FALSE THEN
  1933.       Filename$ = LdString(SID_LWP_QUICKSTART_DLL)
  1934.         Key$ = "SOFTWARE\Lotus\Components\Startup\97.0\Word Pro"
  1935.         DataPath$ = LWP_WhereIsFeature(prodno%, "LWP_QUICKSTART", Filename$) _
  1936.          + Filename$
  1937.       rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, Key$)
  1938.       rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, Key$, _
  1939.            "DLL", REG_SZ, DataPath$, len(DataPath$) + 1)
  1940.  
  1941.         IF rc& <> ERROR_SUCCESS THEN
  1942.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+Key$,"",""
  1943.         ELSE
  1944.          '** Register for Uninstall
  1945.           notused% = Lot_RegisterObject("LWP_BASICS", _
  1946.              UNIN_CLASS_REGISTRY_HIVE$, _
  1947.              "HKEY_LOCAL_MACHINE\Software\Lotus\Components\Startup")
  1948.       END IF
  1949.     END IF
  1950.  
  1951.  
  1952.    '-------------------------------------
  1953.    '** AltComponents
  1954.    '
  1955. '   szkey$ = gREGLOTUS + "WordPro\97.0"
  1956. '   szval$ = "\AltComponents"
  1957. '   rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey$)
  1958. '   rc& = RegDeleteValueA(HKEY_LOCAL_MACHINE, szkey$ + szval$)
  1959. 'print "Alt comp key = " + szkey$ + "    rc& = "   rc&
  1960.  
  1961.     '-------------------------------------
  1962.     ' The remaining used to be in RegisterLWP
  1963.     '
  1964.     IF Lot_IsTheFeatureInstalled("LWP_BASICS") = FALSE THEN EXIT SUB
  1965.  
  1966.     DIM rv%, ExecError%
  1967.  
  1968.     DIM ServerDir$, NodeDir$, WordProReg$, FullPath$
  1969.    WordProReg$ = "wordpro.reg"
  1970.     ServerDir$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", "wordpro.exe")
  1971.     NodeDir$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", WordProReg$)
  1972.  
  1973.    '--------------------------------------
  1974.     '** Write the OLE registration database
  1975.    '
  1976.    ' Process the wordpro.reg file, substituting the user chosen product
  1977.    ' directory for our dummy string (in our case: \app\exe\win32).
  1978.    ' Then run regedit on the newly-formed wordpro.reg.
  1979.    '
  1980.  
  1981.    ' !!!! MAKE SURE .LYT FILE SAYS WE ALWAYS OVERWRITE WORDPRO.REG !!!!
  1982.    '
  1983.     FullPath$ = LWPLFN2SFN(NodeDir$ + WordProReg)
  1984.    notused% = FixAppPath(FullPath$, ServerDir$)
  1985.  
  1986.     LWP_RegeditFile NodeDir$, WordProReg$
  1987. '    IF DoesFileExist(WordProReg$, femExists) THEN
  1988. '        rc& = Lot_Regedit(NodeDir$, "wordpro.reg")
  1989. '    '    rc& = WinExec("regedit /s " + WordProReg$, SW_HIDE)
  1990. '    END IF
  1991.  
  1992.    LWP_RegeditFile ServerDir$,  "ltscorrt.reg"
  1993.    LWP_RegeditFile ServerDir$,  "ltsfills.reg"
  1994.    LWP_RegeditFile ServerDir$,  "lwp.reg"
  1995.    LWP_RegeditFile ServerDir$,  "lwp4wp.reg"        '''
  1996.    LWP_RegeditFile ServerDir$,  "lwp4wpex.reg"
  1997.    LWP_RegeditFile ServerDir$,  "lwpdca.reg"        '''
  1998.    LWP_RegeditFile ServerDir$,  "lwpdcaft.reg"
  1999.    LWP_RegeditFile ServerDir$,  "lwpdcaps.reg"
  2000.    LWP_RegeditFile ServerDir$,  "lwphtml.reg"        '''
  2001.    LWP_RegeditFile ServerDir$,  "lwpimage.reg"    '''
  2002.    LWP_RegeditFile ServerDir$,  "lwplabel.reg"
  2003.    LWP_RegeditFile ServerDir$,  "lwptools.reg"    '''
  2004.    LWP_RegeditFile ServerDir$,  "lwptls.reg"
  2005.    LWP_RegeditFile ServerDir$,  "lwpuser.reg"        '''
  2006.  
  2007.    '-----------------------------
  2008.    ' Set Internet Proxies
  2009.    '
  2010.    If GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ Then
  2011.        If LWP_IsChapterIn("WIN32SHRINTERNETPRG") Then
  2012.           notused% = SetInternetProxies()
  2013.           notused% = Lot_RegisterObject("LWP_BASICS", _
  2014.                UNIN_CLASS_REGISTRY_HIVE$, _
  2015.                "HKEY_CURRENT_USER\Software\Lotus\Components\Internet\1.0\WWW Proxies")
  2016.        End if
  2017.    End if
  2018.  
  2019.  
  2020.    '-----------------------------
  2021.    ' Possibly Disable Background Spell Check
  2022.    '
  2023.     CheckLangForBackgroundSpell
  2024.  
  2025.    '-----------------------------
  2026.    ' Fixup Special Paths
  2027.    '
  2028.    LWP_FixupTourPath network$, prodno%
  2029.    LWP_FixupGraphicsPath network$, prodno%
  2030.    LWP_FixupBackgroundsPath network$  ''Must do after FixupGraphicsPath
  2031.  
  2032.    '-----------------------------
  2033.    ' Register User Paths
  2034.    '
  2035.    LWP_WriteUserPaths network$
  2036.  
  2037.    '-----------------------------
  2038.     ' Update appropriate Ini files  (** includes InstalledPaths key **)
  2039.     '
  2040.     WriteLotusIni network$, prodno%
  2041.     WriteLWPIni network$, prodno%
  2042.     WriteLWPUserIni network$, prodno%
  2043.  
  2044.  
  2045.    ' -------------
  2046.    ' These keys should probably go away.  Duplicates registered under 97.0 above
  2047.     '
  2048.    ' Keep them since they're under HCU as opposed to HLM
  2049.    '
  2050.       tempkey$ = gREGLOTUS +"WordPro\97.0\lwpuser.ini\WordProUser"
  2051.       rc& = ERROR_SUCCESS
  2052.       rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, tempkey, "UserName", REG_SZ,  UserName$, len(UserName$) + 1)
  2053.       rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, tempkey, "CompanyName", REG_SZ, CompName$, len(CompName$) + 1)
  2054.       rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, tempkey, "UserInitials", REG_SZ, Initials$, len(Initials$) + 1)
  2055.         IF rc& <> ERROR_SUCCESS THEN
  2056.             RegErrorMsg SID_ERR_REG_GENERIC, " oops "+"\"+szkey,"",""
  2057.         END IF
  2058.    '-----------------
  2059.  
  2060.  
  2061.     'LWP_FinishSavePrevUserSettings
  2062.  
  2063.  
  2064. '---------------------------------
  2065. '  ** Let uninstall know about all the changes to the registry
  2066. '
  2067. '
  2068. '  ** Uninstall should take care of the Product Key ** sdb 5/16/96
  2069. '  ** But there is some question about how this works in a suite setting
  2070.    notused% = Lot_RegisterObject("LWP_BASICS", _
  2071.         UNIN_CLASS_REGISTRY_HIVE$, _
  2072.         "HKEY_CURRENT_USER\Software\Lotus\WordPro\97.0")
  2073.  
  2074.    '** Uninstall SmartCorrect:  We're the only ones who use this ShrdComp
  2075.    notused% = Lot_RegisterObject("LWP_BASICS", _
  2076.         UNIN_CLASS_REGISTRY_HIVE$, _
  2077.         "HKEY_CURRENT_USER\Software\Lotus\Components\SmartCorrect\2.0")
  2078.  
  2079.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2080.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\AmiProDocument")
  2081.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2082.         UNIN_CLASS_REGISTRY_HIVE$, _
  2083.         "HKEY_CLASSES_ROOT\CLSID\{0003002F-0000-0000-C000-000000000046}")
  2084.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2085.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\WordPro.Document")
  2086.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2087.         UNIN_CLASS_REGISTRY_HIVE$, _
  2088.         "HKEY_CLASSES_ROOT\CLSID\{2913FFFE-2EED-1069-BF5D-00DD011186B7}")
  2089.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2090.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.sam")
  2091.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2092.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.smm")
  2093.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2094.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.lwp")
  2095.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2096.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.mwp")
  2097.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2098.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.sdw")
  2099.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2100.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\.smi")
  2101.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2102.         UNIN_CLASS_REGISTRY_HIVE$, _
  2103.         "HKEY_CLASSES_ROOT\CLSID\{29130400-2EED-1069-BF5D-00DD011186B7}")
  2104.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2105.         UNIN_CLASS_REGISTRY_HIVE$, _
  2106.         "HKEY_CLASSES_ROOT\CLSID\{29130401-2EED-1069-BF5D-00DD011186B7}")
  2107.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2108.         UNIN_CLASS_REGISTRY_HIVE$, _
  2109.         "HKEY_CLASSES_ROOT\CLSID\{29130403-2EED-1069-BF5D-00DD011186B7}")
  2110.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2111.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\wordpro.main")
  2112.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2113.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\Wordpro.Application")
  2114.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2115.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\Wordpro.Application.97")
  2116.     notused% = Lot_RegisterObject("LWP_BASICS", _
  2117.         UNIN_CLASS_REGISTRY_HIVE$, "HKEY_CLASSES_ROOT\Wordpro.SmartMaster")
  2118.  
  2119. 'DebugMsg1 "leaving addregistrykeyslwp"
  2120. END SUB
  2121.  
  2122.  
  2123. '*************************************************************************
  2124. '** FUNCTION AddIconsLWP (prodno%, network$, direction$, programgroup$) AS STRING
  2125. '**
  2126. '** Purpose: This is called just after file copy has completed.
  2127. '**          1. Add program manager icons of those features
  2128. '**             that were installed.
  2129. '**          NOTE: THERE are many subtleties in here if you are
  2130. '**                dealing with node and CD installs.  In particular,
  2131. '**                you must be ***very*** careful to understand where the
  2132. '**                things are that you are pointing to.  They could
  2133. '**                be on the node, server, or CD!  This, in combination
  2134. '**                with the INF file for Server/Node, is probably the
  2135. '**                trickiest part of writing a quality install.  When
  2136. '**                configuring, you must be careful to consider what
  2137. '**                happens if there is a pre-existing product on the
  2138. '**                machine, in the same location or
  2139. '**                another one!  This is very very tricky.  What happens
  2140. '**                if you had a full installation previously in location C:\FOO
  2141. '**                and now the user is installing a minimum installation in loaction
  2142. '**                D:\FOO.
  2143. '**
  2144. '**                Each and every thing you do for configuartion needs very
  2145. '**                careful thought.
  2146. '**
  2147. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  2148. '**                This currrently tells you the location of a feature
  2149. '**                if the feature appears both in the SERVER.INF and the
  2150. '**                NODE.INF referred to by the same Keyword ID.
  2151. '**                We do not support CDs with this command yet, but we will
  2152. '**                at some time.
  2153. '**
  2154. '**                Also look out for writing to a file when the directory
  2155. '**                doesn't exist.  If the user deselected one of your
  2156. '**                options, your install may still be running, but since
  2157. '**                there were no files to copy into the directory
  2158. '**                it wasn't created by the toolkit!
  2159. '**
  2160. '**                Finally, remember that configuration files generally
  2161. '**                hold the state that the user has customized earlier.
  2162. '**                Sometimes you don't want to overwrite these!
  2163. '**                You will primarily use three MS-SETUP functions
  2164. '**                in here:
  2165. '**                1. CreateProgmanItem  (writing to progman)
  2166. '**
  2167. '**                CreateProgmanGroup &  ShowProgmanGroup are
  2168. '**                done for you by the time you reach this
  2169. '**                function.
  2170. '**
  2171. '**                You will not have to do any configuration of LOTUS SHARED
  2172. '**                tools.  The toolkit will do this for you.
  2173. '** In Symbols :
  2174. '** Out Symbols:
  2175. '**
  2176. '** Arguments:  All parameters are **read only**.
  2177. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2178. '**                   toolkit in the order in which you were registered.
  2179. '**                   When your product is part of SmartSuite, SmartSuite
  2180. '**                   will always be product #1. (prodno% >=1)
  2181. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2182. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2183. '**                      then step backwards
  2184. '**    programgroup$: The name of the program group where the user chose to
  2185. '**                   install the program manager icons
  2186. '**
  2187. '** Errors:    No return code for errors, you must Raise them
  2188. '** Author:    MZ
  2189. '** Returns:   return: gNEXT
  2190. '**
  2191. '*************************************************************************
  2192.  
  2193. PUBLIC FUNCTION AddIconsLWP (prodno%, network$, direction$, programgroup$) AS STRING
  2194. DIM ripath$, Path$, qsName$, exename$, szArgument$, rc%
  2195. DIM LanguageQualifier$, LanguageAcronym$
  2196. DIM Link$, Target$, Key$, Value$
  2197.  
  2198.    AddIconsLWP = direction$
  2199.    '' In the backwards case, keep backing up
  2200.    If direction$ = gBACK Then
  2201.       EXIT FUNCTION
  2202.    End If
  2203.  
  2204.     LanguageQualifier$ =  ""
  2205.     LanguageAcronym$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  2206.     szArgument$ = "/L" + LanguageAcronym$
  2207. '** If language install, add qualifier
  2208.     IF GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ THEN
  2209.         LanguageQualifier$ = "-" + LanguageAcronym$
  2210.     END IF
  2211.  
  2212.    '--------------------------------------------
  2213.     ' Remove the Shell Icon Cache file, per Keith
  2214.     '
  2215.     DIM ShellIconCache$
  2216.     ShellIconCache$ = GetWindowsDir() + "shelli~1."
  2217.     IF DoesFileExist(ShellIconCache$, femExists) THEN
  2218.         RemoveFile ShellIconCache$, cmoForce
  2219.     END IF
  2220.  
  2221.    ''------------------------------------------------------------------
  2222.    '' Note: Register Shortcuts for Uninstall using Lot_GetProgFolder(1)
  2223.    ''       so that it works for standalone or suite uninstall
  2224.    ''
  2225.  
  2226.     IF network$ = gSTANDARD OR network$ = gNODE THEN
  2227.         IF Lot_IsTheFeatureInstalled("LWP_BASICS") <> FALSE THEN
  2228.           exename$ = LdString(SID_LWP_LWPEXE)
  2229.             Path$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", exename$)
  2230.             IF IsNewShell() THEN
  2231.                 Link$ = LdString(SID_LWP_SHORT_NAME) + _
  2232.                     LanguageQualifier + ".lnk"
  2233.                 rc% = Lot_AddLinkToFolder(prodno%, Path$ + exename$, _
  2234.                     Link$, "", szArgument$, Path$)
  2235.                 rc% = Lot_RegisterObject("LWP_BASICS", _
  2236.                     UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(1) + Link$)
  2237.             ''
  2238.             '' Note: Register Shortcuts using Lot_GetProgFolder(1)
  2239.             ''       so that it works for standalone or suite uninstall
  2240.             ''
  2241.             ELSE
  2242.                 Link$ = LdString(SID_LWP_SHORT_NAME) + LanguageQualifier
  2243.                 CreateProgmanItem programgroup$, Link$, _
  2244.                     LWPLFN2SFN(Path$ + exename$) + " " + szArgument$, _
  2245.                     "", cmoOverwrite
  2246.                 rc% = Lot_RegisterObject("LWP_BASICS", _
  2247.                     UNIN_CLASS_ICON$, programgroup$ + "\" + Link$)
  2248.             END IF
  2249.         END IF
  2250.  
  2251.         IF Lot_IsTheFeatureInstalled("LWPDLGPRG") <> FALSE THEN
  2252.             Path$ = LWP_WhereIsFeature(prodno%, "LWPDLGPRG", "lwpdlged.exe")
  2253.             IF IsNewShell() THEN
  2254.                 Link$ = LdString(SID_LWP_LOTUS_ACCESSORIES) + _
  2255.                     "\" + LdString(SID_LWP_LOTUS_DIALOG_EDITOR) + _
  2256.                     LanguageQualifier + ".lnk"
  2257.                 rc% = Lot_AddLinkToFolder(prodno%, Path$ + "lwpdlged.exe", _
  2258.                     Link$, "", szArgument$, Path$)
  2259.                 rc% = Lot_RegisterObject("LWP_BASICS", _
  2260.                     UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(1) + Link$)
  2261.             ELSE
  2262.                 Link$ = LdString(SID_LWP_LOTUS_DIALOG_EDITOR) + _
  2263.                     LanguageQualifier
  2264.                 CreateProgmanItem programgroup$, Link$, _
  2265.                     LWPLFN2SFN(Path$ + "lwpdlged.exe") + " " + szArgument$, _
  2266.                     "", cmoOverwrite
  2267.                 rc% = Lot_RegisterObject("LWP_BASICS", _
  2268.                     UNIN_CLASS_ICON$, programgroup$ + "\" + Link$)
  2269.             END IF
  2270.         END IF
  2271.  
  2272.         IF Lot_IsTheFeatureInstalled("LWP_DISK1READMES") <> FALSE THEN
  2273.             Path$ = LWP_WhereIsFeature(prodno%, "LWP_DISK1READMES", _
  2274.                 LdString(SID_LWP_README_TXT))
  2275.             IF IsNewShell() THEN
  2276.                 Link$ = LdString(SID_LWP_LOTUS_USER_ASSISTANCE) + "\" + _
  2277.                     LdString(SID_LWP_WORD_PRO_PRODUCT_UPDATES) + _
  2278.                     LanguageQualifier + ".lnk"
  2279.                 rc% = Lot_AddLinkToFolder(prodno%, Path$ + _
  2280.                     LdString(SID_LWP_README_TXT), Link$, "", "", Path$)
  2281.                 rc% = Lot_RegisterObject("LWP_BASICS", _
  2282.                     UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(1) + Link$)
  2283.             ELSE
  2284.                 Link$ = LdString(SID_LWP_WORD_PRO_PRODUCT_UPDATES) + _
  2285.                     LanguageQualifier
  2286.                 CreateProgmanItem programgroup$, Link$, _
  2287.                     LWPLFN2SFN(Path$ + LdString(SID_LWP_README_TXT)), _
  2288.                     "", cmoOverwrite
  2289.                 rc% = Lot_RegisterObject("LWP_BASICS", _
  2290.                     UNIN_CLASS_ICON$, programgroup$ + "\" + Link$)
  2291.             END IF
  2292.         END IF
  2293.  
  2294.       '---------------------------
  2295.       '** QuickStart App
  2296.         '
  2297.         IF Lot_IsTheFeatureInstalled("LWP_QUICKSTART") <> FALSE THEN
  2298.           qsName$ = LdString(SID_LWP_QUICKSTART_EXE)
  2299.           Path$ = LWP_WhereIsFeature(prodno%, "LWP_QUICKSTART", qsName$)
  2300.             IF IsNewShell() THEN
  2301.             Key$ = "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  2302.              Value$ = "Startup"
  2303.              Target$ = STRING$(256, 0)
  2304.              IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, Key$) THEN
  2305.                  rc% = Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, Key$, _
  2306.                     Value$, REG_SZ, Target$, 256)
  2307.              END IF
  2308.                 Link$ = Left(Target$, Instr(Target$, Chr$(0)) - 1) + "\" _
  2309.                    + LdString(SID_LWP_QUICKSTART_DESC) + ".lnk"
  2310.             Path$ = Path$ + qsName$
  2311.                rc% = CreateLink(Path$, Link$, "", "", "")
  2312.                rc% = Lot_RegisterObject("LWP_BASICS", _
  2313.                     UNIN_CLASS_SHORTCUT$, Link$)
  2314.          ''
  2315.          '' ELSE if not IsNewShell() ??????
  2316.          ''
  2317.          END IF
  2318.         END IF
  2319.    END IF
  2320.  
  2321. SKIPCONFIG:
  2322.  
  2323. END FUNCTION
  2324.  
  2325.  
  2326. '*************************************************************************
  2327. '** FUNCTION PostSuccessRegLWP (prodno%, network$, direction$) AS STRING
  2328. '**
  2329. '** Purpose: If you need to launch something after install runs
  2330. '** In Symbols :
  2331. '** Out Symbols:
  2332. '**
  2333. '** Arguments:  All parameters are **read only**.
  2334. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2335. '**                   toolkit in the order in which you were registered.
  2336. '**                   When your product is part of SmartSuite, SmartSuite
  2337. '**                   will always be product #1. (prodno% >=1)
  2338. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2339. '**       direction$: gNEXT
  2340. '**
  2341. '** Errors:    No return code for errors, you must Raise them
  2342. '** Author:    MMeth
  2343. '** Returns:   return: gNEXT
  2344. '**
  2345. '*************************************************************************
  2346.  
  2347. PUBLIC FUNCTION PostSuccessRegLWP (prodno%, network$, direction$) AS STRING
  2348. DIM Path$, qsName$, rc%
  2349.  
  2350.    PostSuccessRegLWP = direction$
  2351.    '' In the backwards case, keep backing up
  2352.    If direction$ = gBACK Then
  2353.       EXIT FUNCTION
  2354.    End If
  2355.  
  2356. END FUNCTION
  2357.  
  2358.  
  2359. PUBLIC FUNCTION InitLanguageLWP (prodno%, network$, direction$) AS STRING
  2360. '*************************************************************************
  2361. '** Purpose: Finds out the installed languages and determines the nature
  2362. '**  of the install.  If not running automated, displays a message box for
  2363. '**  a language install
  2364. '**
  2365. '** Author: JMDonohue
  2366. '** Arguments:  All parameters are **read only**.
  2367. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2368. '**                   toolkit in the order in which you were registered.
  2369. '**                   When your product is part of SmartSuite, SmartSuite
  2370. '**                   will always be product #1. (prodno% >=1)
  2371. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2372. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2373. '**                      then step backwards
  2374. '**
  2375. '** Returns:  (not used)
  2376. '**
  2377. '**  Implicitly sets the following global symbols for later processing:
  2378. '**   SYM_INSTALLKIND$
  2379. '**   SYM_INSTALLKINDS$ (list)
  2380. '**  Sets the following global symbols (based on product #1) for later
  2381. '**  processing:
  2382. '**   SYM_REG_PRODUCTNAME$
  2383. '**   SYM_REG_PRODUCTVER$
  2384. '*************************************************************************
  2385.    DIM szProductName$, szProductVersion$, szInstallKind$, szLanguageSubdir$
  2386.    szProductName$ =  LdString(SID_LWP_PROD_NAME)
  2387.    szProductVersion$ =  LdString(SID_LWP_PROD_VER)
  2388.    if prodno% = 1 THEN
  2389.       SetSymbolValue SYM_REG_PRODUCTNAME$ , szProductName$
  2390.       SetSymbolValue SYM_REG_PRODUCTVER$ , szProductVersion$
  2391.    END IF
  2392.    InitLanguages szProductName$, szProductVersion$, prodno%
  2393.    LWPProductNumber% = prodno%
  2394.    InitLanguageLWP  = ""
  2395. END FUNCTION
  2396.  
  2397.  
  2398. '********************************
  2399. '********************************
  2400. '** Product Specific Functions **
  2401. '********************************
  2402. '********************************
  2403.  
  2404.  
  2405. '*************************************************************************
  2406. '** SUB LWP_RegisterOCXs(prodno%)
  2407. '**
  2408. '** Purpose:   Register OCX's and Typelib
  2409. '** Author:    SDB
  2410. '** Date:      8/1/96
  2411. '*************************************************************************
  2412. SUB LWP_RegisterOCXs(prodno%)
  2413.    DIM CLSID$, locpath$, ocxpath$
  2414.  
  2415.    '' Script Stuff
  2416.    locpath$ = Lot_WhereIsFeature(prodno%, "LWPMSVC40", "mfc40.dll")
  2417.    ocxpath$ = locpath$ + "mfc40.dll"
  2418.    Lot_RegisterOCX(ocxpath$)
  2419.  
  2420.    locpath$ = Lot_WhereIsFeature(prodno%, "LWPMSVC40", "olepro32.dll")
  2421.    ocxpath$ = locpath$ + "olepro32.dll"
  2422.    Lot_RegisterOCX(ocxpath$)
  2423.  
  2424.    locpath$ = Lot_WhereIsFeature(prodno%, "WIN32SHRLOTUSSCRIPTPRG", "lcsrtn10.dll")
  2425.    ocxpath$ = locpath$ + "lcsrtn10.dll"
  2426.    Lot_RegisterOCX(ocxpath$)
  2427.  
  2428.    locpath$ = Lot_WhereIsFeature(prodno%, "WIN32SHRLOTUSSCRIPTPRG", "ltsctn31.ocx")
  2429.    ocxpath$ = locpath$ + "ltsctn31.ocx"
  2430.    Lot_RegisterOCX(ocxpath$)
  2431.  
  2432.    ''** HTML
  2433.    locpath$ = Lot_WhereIsFeature(prodno%, "LWP_HTML_OCX", "lwphtml.ocx")
  2434.    ocxpath$ = locpath$ + "lwphtml.ocx"
  2435.    Lot_RegisterOCX(ocxpath$)
  2436.  
  2437.    LWP_RegUninstallHTML
  2438.  
  2439.  
  2440.    '--------------------------
  2441.    ' Type Library Registration
  2442.    '
  2443.    DIM Version$, TLDir$, TypeLib$, flags%
  2444.  
  2445.    If Lot_IsTheFeatureInstalled("LWP_SCRIPT_TYPELIB") _
  2446.       OR LWP_IsChapterIn("LWP_SCRIPT_TYPELIB") _
  2447.    Then
  2448.       CLSID$   = "{291307FF-2EED-1069-BF5D-00DD011186B7}"
  2449.       Version$ = "1.0"
  2450.       TypeLib$ = "lwplsntl.tlb"
  2451.       flags%   = LIBFLAG_FRESTRICTED     '' = 1
  2452.       TLDir$   = Lot_WhereIsFeature(prodno%, "LWP_SCRIPT_TYPELIB", TypeLib$)
  2453.  
  2454.         New_RegisterTypeLib TLDir$ + TypeLib$, TLDir$
  2455.  
  2456.         '** New CIT version above.  SDB  11/15/96
  2457.       '** Lot_RegisterTypeLib CLSID$, Version$, "Lotus Word Pro 97 Object Model", TLDir$, TLDir$ + TypeLib$, flags%
  2458.         '
  2459.  
  2460.       Lot_RegisterObject "LWP_BASICS", UNIN_CLASS_REGISTRY_HIVE$, _
  2461.                              "HKEY_CLASSES_ROOT\TypeLib\" + CLSID$
  2462.  
  2463.         ' We don't register this CLSID entry, so no need to Uninstall
  2464.       'Lot_RegisterObject "LWP_BASICS", UNIN_CLASS_REGISTRY_HIVE$, _
  2465.         '                     "HKEY_CLASSES_ROOT\CLSID\" + CLSID$
  2466.    End if
  2467.  
  2468. END SUB
  2469.  
  2470.  
  2471.  
  2472. '*************************************************************************
  2473. '** SUB LWP_RegUninstallHTML()
  2474. '**
  2475. '** Purpose:   Register LWPHTML stuff for uninstall
  2476. '** Author:    SDB
  2477. '** Date:      9/1/96
  2478. '*************************************************************************
  2479. SUB LWP_RegUninstallHTML()
  2480.  
  2481.     LWP_RegCLSID "{530B32E3-81AA-11CF-BCAA-0020AF24D443}"
  2482.    LWP_RegCLSID "{530B32E4-81AA-11CF-BCAA-0020AF24D443}"
  2483.    LWP_RegCLSID "{530B32E7-81AA-11CF-BCAA-0020AF24D443}"
  2484.    LWP_RegCLSID "{530B32E8-81AA-11CF-BCAA-0020AF24D443}"
  2485.    LWP_RegCLSID "{530B32EB-81AA-11CF-BCAA-0020AF24D443}"
  2486.    LWP_RegCLSID "{530B32EC-81AA-11CF-BCAA-0020AF24D443}"
  2487.    LWP_RegCLSID "{530B32EF-81AA-11CF-BCAA-0020AF24D443}"
  2488.    LWP_RegCLSID "{530B32F0-81AA-11CF-BCAA-0020AF24D443}"
  2489.    LWP_RegCLSID "{530B32F3-81AA-11CF-BCAA-0020AF24D443}"
  2490.    LWP_RegCLSID "{530B32F4-81AA-11CF-BCAA-0020AF24D443}"
  2491.    LWP_RegCLSID "{530B32F7-81AA-11CF-BCAA-0020AF24D443}"
  2492.    LWP_RegCLSID "{530B32F8-81AA-11CF-BCAA-0020AF24D443}"
  2493.    LWP_RegCLSID "{530B32FB-81AA-11CF-BCAA-0020AF24D443}"
  2494.    LWP_RegCLSID "{530B32FC-81AA-11CF-BCAA-0020AF24D443}"
  2495.    LWP_RegCLSID "{530B32FF-81AA-11CF-BCAA-0020AF24D443}"
  2496.    LWP_RegCLSID "{530B3300-81AA-11CF-BCAA-0020AF24D443}"
  2497.    LWP_RegCLSID "{530B3303-81AA-11CF-BCAA-0020AF24D443}"
  2498.    LWP_RegCLSID "{530B3304-81AA-11CF-BCAA-0020AF24D443}"
  2499.  
  2500.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.chkCtrl.1"
  2501.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.comCtrl.1"
  2502.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.edtCtrl.1"
  2503.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.lstCtrl.1"
  2504.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.mrkCtrl.1"
  2505.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.radCtrl.1"
  2506.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.resCtrl.1"
  2507.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.subCtrl.1"
  2508.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\" + "LWPHTML.txtCtrl.1"
  2509.  
  2510.     LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\TypeLib\" + _
  2511.                          "{530B32E0-81AA-11CF-BCAA-0020AF24D443}"
  2512. END SUB
  2513.  
  2514.  
  2515. '*************************************************************************
  2516. '**
  2517. SUB LWP_RegCLSID (clsid$)
  2518.    LWP_RegBasicUninstReg "HKEY_CLASSES_ROOT\CLSID\" + clsid$
  2519. END SUB
  2520.  
  2521.  
  2522. '*************************************************************************
  2523. '**
  2524. SUB LWP_RegBasicUninstReg (key$)
  2525.    Lot_RegisterObject "LWP_BASICS", UNIN_CLASS_REGISTRY_HIVE$, key$
  2526. END SUB
  2527.  
  2528.  
  2529. '*************************************************************************
  2530. '** SUB LWP_FixupTourPath(network$, prodno%)
  2531. '**
  2532. '** Purpose:   Special handling for Tour directory to read off CD or Server.
  2533. '**            We only leave it alone if we install the tour to a standalone.
  2534. '**            Node installs never get the tour.
  2535. '**
  2536. '** Author:    SDB
  2537. '*************************************************************************
  2538. SUB LWP_FixupTourPath(network$, prodno%)
  2539.  
  2540.     ' If Node or if Tour not installed
  2541.     ' Then set it to the Server tour directory (x:\lotus\wordpro\tour)
  2542.     ' Else set it to LWPDIR + Tour
  2543.     '
  2544.     '
  2545.     ' ExeDir will be the server in a node install.
  2546.     '
  2547.     DIM ExeDir$
  2548.  
  2549.    If network = gNODE$ _
  2550.    Then
  2551.         ExeDir$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", "wordpro.exe")
  2552.        SetSymbolValue "LWPTOURDIR", ExeDir$ _
  2553.                                                + LdString(SID_LWP_TOUR_DIR)
  2554.     Elseif LWP_IsChapterIn("LWP_TOUR") = 0 _
  2555.     Then
  2556.        '
  2557.        ' SYM_INSTALL_SOURCE for   Suite    = x:...\lotus
  2558.        '                          SuiteNode= x:...\lotus
  2559.        '                          StdAlone = x:...\lotus
  2560.        '                          StdA Node= x:...\lotus\wordpro
  2561.         '
  2562.        SetSymbolValue "LWPTOURDIR", GetSymbolValue(SYM_INSTALL_SOURCE) _
  2563.                                     + LdString(SID_LWP_DIR)           _
  2564.                                     + LdString(SID_LWP_TOUR_DIR)
  2565.     Else
  2566.         SetSymbolValue "LWPTOURDIR", GetSymbolValue("LWPDIR") _
  2567.                                                 + LdString(SID_LWP_TOUR_DIR)
  2568.     End if
  2569.  
  2570.  
  2571. '''OLD CODE pre-1/10/97
  2572. %rem
  2573.    '
  2574.    ' SYM_INSTALL_SOURCE for   Suite    = x:...\lotus
  2575.    '                          SuiteNode= x:...\lotus
  2576.    '                          StdAlone = x:...\lotus
  2577.    '                          StdA Node= x:...\lotus\wordpro
  2578.     '
  2579.     '    Note: In the SuiteNode case, we assume that the server
  2580.     '            has installed wordpro in the wordpro directory!!
  2581.     '            This works for 97 because the user can't change
  2582.     '            the folders.
  2583.     '
  2584.     SetSymbolValue "LWPTOURDIR", GetSymbolValue("LWPDIR") _
  2585.                                             + LdString(SID_LWP_TOUR_DIR)
  2586.  
  2587.    If network = gNODE$ _
  2588.    Then
  2589.        If GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ _
  2590.        Then
  2591.            SetSymbolValue "LWPTOURDIR", GetSymbolValue(SYM_INSTALL_SOURCE) _
  2592.                                         + LdString(SID_LWP_TOUR_DIR)
  2593.         Else
  2594.            SetSymbolValue "LWPTOURDIR", GetSymbolValue(SYM_INSTALL_SOURCE) _
  2595.                                                     + LdString(SID_LWP_DIR)           _
  2596.                                         + LdString(SID_LWP_TOUR_DIR)
  2597.         End if
  2598.    Elseif LWP_IsChapterIn("LWP_TOUR") = 0 _
  2599.    Then
  2600.        SetSymbolValue "LWPTOURDIR", GetSymbolValue(SYM_INSTALL_SOURCE) _
  2601.                                     + LdString(SID_LWP_DIR)           _
  2602.                                     + LdString(SID_LWP_TOUR_DIR)
  2603.     End if
  2604. %endrem
  2605. END SUB
  2606.  
  2607.  
  2608. '*************************************************************************
  2609. '** SUB LWP_FixupGraphicsPath(network$, prodno%)
  2610. '**
  2611. '** Purpose:   Special handling for Graphics directories.
  2612. '**
  2613. '** Author:    SDB
  2614. '*************************************************************************
  2615. SUB LWP_FixupGraphicsPath(network$, prodno%)
  2616.  
  2617.     ' If Node
  2618.     ' Then set it to the Server tour directory (x:\lotus\wordpro\tour)
  2619.     '
  2620.     '
  2621.     ' ExeDir will be the server in a node install.
  2622.     '
  2623.     DIM ExeDir$
  2624.  
  2625.    If network = gNODE$ _
  2626.    Then
  2627.             ExeDir$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", "wordpro.exe")
  2628.            SetSymbolValue "LWPGRAPHICSDIR", ExeDir$ _
  2629.                                            + LdString(SID_LWP_GRAPHICS_DIR)
  2630.     End if
  2631.  
  2632.  
  2633. %rem
  2634.    '
  2635.    ' SYM_INSTALL_SOURCE for   Suite    = x:...\lotus
  2636.    '                          SuiteNode= x:...\lotus
  2637.    '                          StdAlone = x:...\lotus
  2638.    '                          StdA Node= x:...\lotus\wordpro
  2639.     '
  2640.     '    Note: In the SuiteNode case, we assume that the server
  2641.     '            has installed wordpro in the wordpro directory!!
  2642.     '            This works for 97 because the user can't change
  2643.     '            the folders.
  2644.     '
  2645.  
  2646.    If network = gNODE$ _
  2647.    Then
  2648.        If GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ _
  2649.        Then
  2650.            SetSymbolValue "LWPGRAPHICSDIR", GetSymbolValue(SYM_INSTALL_SOURCE) _
  2651.                                            + LdString(SID_LWP_GRAPHICS_DIR)
  2652.         Else
  2653.            SetSymbolValue "LWPGRAPHICSDIR", GetSymbolValue(SYM_INSTALL_SOURCE) _
  2654.                                                         + LdString(SID_LWP_DIR)           _
  2655.                                            + LdString(SID_LWP_GRAPHICS_DIR)
  2656.         End if
  2657.     End if
  2658. %endrem
  2659. END SUB
  2660.  
  2661.  
  2662. '*************************************************************************
  2663. '** SUB LWP_FixupBackgroundsPath(network$)
  2664. '**
  2665. '** Purpose:   Special handling for Graphics and Backgrounds directories.
  2666. '**
  2667. '** Author:    SDB
  2668. '*************************************************************************
  2669. SUB LWP_FixupBackgroundsPath(network$)
  2670.        SetSymbolValue "LWPBACKGROUNDSDIR", GetSymbolValue("LWPGRAPHICSDIR") _
  2671.                                        + LdString(SID_LWP_BACKGROUNDS_DIR)
  2672.  
  2673. END SUB
  2674.  
  2675.  
  2676. '*************************************************************************
  2677. '** SUB LWP_WriteUserPaths(network$)
  2678. '**
  2679. '** Purpose:   Write the configuration entries in lwpuser.ini
  2680. '**                 Adjust some paths for MLC installs
  2681. '** Author:    SDB
  2682. '*************************************************************************
  2683.  
  2684. SUB LWP_WriteUserPaths(network$)
  2685.     IF network$ = gSERVER or network$ = gDISTRIBUTION THEN
  2686.         EXIT SUB
  2687.     END IF
  2688.  
  2689. 'DebugMsg1 "Entering LWP_WriteUserPaths"
  2690. 'DebugDirs
  2691.    DIM szkey$, rc&
  2692.    DIM driveletter$, drivetype%
  2693.     DIM scriptsdir$, mastersdir$, workdir$, iconsdir$, tourdir$
  2694.     DIM backupdir$, graphicsdir$, backgroundsdir$, glossarydir$
  2695.     DIM langsubdir$
  2696.  
  2697.     '' Fixup MLC paths
  2698.     If GetListItem(SYM_INSTALLKINDS$, LWPProductNumber%) = gLANGUAGEINSTALL$ _
  2699.     Then
  2700.         langsubdir$ = lcase(GetSymbolValue(SYM_LANGUAGE_SUBDIR$))    + "\"
  2701.     Else
  2702.         langsubdir$ = ""
  2703.     End if
  2704.  
  2705.     workdir$             = GetSymbolValue("LWPWORKDIR")
  2706.    backupdir$           = GetSymbolValue("LWPBACKUPDIR")
  2707.     scriptsdir$          = GetSymbolValue("LWPSCRIPTSDIR")
  2708.     mastersdir$          = GetSymbolValue("LWPMASTERSDIR")          + langsubdir$
  2709.     iconsdir$            = GetSymbolValue("LWPICONDIR")             + langsubdir$
  2710.     graphicsdir$         = GetSymbolValue("LWPGRAPHICSDIR")         + langsubdir$
  2711.     backgroundsdir$     = GetSymbolValue("LWPBACKGROUNDSDIR")     + langsubdir$
  2712.     glossarydir$         = GetSymbolValue("LWPDIR")
  2713.     tourdir$             = GetSymbolValue("LWPTOURDIR")
  2714.  
  2715.     IF network$ = gNODE THEN
  2716.         IF LWP_IsChapterIn("LWP_SMARTMASTERS") = 0 THEN
  2717.             mastersdir$ = mastersdir$ + ";" + _
  2718.                 Lot_GetDestDirValueFromInstallIni("LWPMASTERSDIR")
  2719.         END IF
  2720.         IF LWP_IsChapterIn("LWP_SAMPLEDOCS") = 0 THEN
  2721.             workdir$ = workdir$ + ";" + _
  2722.                 Lot_GetDestDirValueFromInstallIni("LWPWORKDIR")
  2723.         END IF
  2724.         ' Some scripts are always kept on the server
  2725.         scriptsdir$ = scriptsdir$ + ";" + _
  2726.             Lot_GetDestDirValueFromInstallIni("LWPSCRIPTSDIR")
  2727.         ' Might have a shared glossary on the server
  2728.         glossarydir$ = glossarydir$ + ";" + _
  2729.             Lot_GetDestDirValueFromInstallIni("LWPDIR")
  2730.     END IF
  2731.  
  2732.  
  2733.    '-------------------------
  2734.    ' Register Paths   6/27/96
  2735.    '
  2736.    szkey$ = gREGLOTUS + "WordPro\97.0\Paths"
  2737.    rc& = Lot_RegCreateKeyEx(HKEY_CURRENT_USER, szkey)
  2738.  
  2739.    LWP_AddRegPathKey "Work", workdir$
  2740.    LWP_AddRegPathKey "Backup", backupdir$
  2741.    LWP_AddRegPathKey "Scripts", scriptsdir$
  2742.    LWP_AddRegPathKey "SMasters", mastersdir$
  2743.    LWP_AddRegPathKey "SmartIcons", iconsdir$
  2744.    LWP_AddRegPathKey "Graphics", graphicsdir$
  2745.    LWP_AddRegPathKey "Backgrounds", backgroundsdir$
  2746.    LWP_AddRegPathKey "GlossaryPath", glossarydir$
  2747.    LWP_AddRegPathKey "Tour", tourdir$
  2748.  
  2749. 'DebugDirs
  2750. 'DebugMsg1 "Leaving LWP_WriteUserPaths"
  2751. END SUB
  2752.  
  2753.  
  2754. '*************************************************************************
  2755. '** Author:    SDB
  2756. '*************************************************************************
  2757. SUB LWP_AddRegPathKey(key$, path$)
  2758.    DIM rc&, szkey$, Lang$
  2759.    szkey$ = gREGLOTUS + "WordPro\97.0\Paths\" + key$
  2760.     Lang$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  2761.  
  2762.    rc& = Lot_RegCreateKeyEx(HKEY_CURRENT_USER, szkey$)
  2763.    rc& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, szkey$, _
  2764.       Lang$, REG_SZ, path$, len(path$) + 1)
  2765. END SUB
  2766.  
  2767.  
  2768. '*************************************************************************
  2769. '** SUB WriteLotusIni(network$, prodno%)
  2770. '**
  2771. '** Purpose:   Write the configuration entries in lotus.ini
  2772. '** Author:    TLB
  2773. '*************************************************************************
  2774.  
  2775. SUB WriteLotusIni(network$, prodno%)
  2776.     IF network$ = gSERVER or network$ = gDISTRIBUTION THEN
  2777.         EXIT SUB
  2778.     END IF
  2779.  
  2780.     DIM ProgDir$
  2781.     ProgDir$ = LWP_WhereIsFeature(prodno%, "LWP_BASICS", "wordpro.exe")
  2782.  
  2783.     DIM LotusIni$
  2784.     LotusIni$ = GetWindowsDir() + "lotus.ini"
  2785.  
  2786.     DIM WordProExe$
  2787.     WordProExe$ = ProgDir$ + "wordpro.exe"
  2788.     CreateIniKeyValue LotusIni$, "Lotus Applications", "WordPro",_
  2789.         WordProExe$, cmoOverwrite
  2790.     CreateIniKeyValue LotusIni$, "Lotus Applications", "AmiPro",_
  2791.         WordProExe$, cmoOverwrite
  2792. END SUB
  2793.  
  2794. '*************************************************************************
  2795. '** SUB WriteLWPIni(network$, prodno%)
  2796. '**
  2797. '** Purpose:   Write the configuration entries in lwp.ini
  2798. '** Author:    TLB
  2799. '*************************************************************************
  2800.  
  2801. SUB WriteLWPIni(network$, prodno%)
  2802.     IF network$ = gNODE or network$ = gDISTRIBUTION THEN
  2803.         EXIT SUB
  2804.     END IF
  2805.  
  2806.    DIM serialnum$, szkey$, rc&
  2807.  
  2808.     'Write the Serial Number
  2809.     serialnum$ = GetSymbolValue(SYM_SERIALNUM$)
  2810.    szkey$ = gREGLOTUS + "WordPro\97.0\lwp.ini\WordPro"
  2811.    rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey$)
  2812.    rc& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, _
  2813.       "SerialNumber", REG_SZ, serialnum$, len(serialnum$) + 1)
  2814. END SUB
  2815.  
  2816.  
  2817. '*************************************************************************
  2818. '** SUB WriteLWPUserIni(network$, prodno%)
  2819. '**
  2820. '** Purpose:   Write the configuration entries in lwpuser.ini
  2821. '** Author:    TLB
  2822. '*************************************************************************
  2823.  
  2824. SUB WriteLWPUserIni(network$, prodno%)
  2825.     IF network$ = gSERVER or network$ = gDISTRIBUTION THEN
  2826.         EXIT SUB
  2827.     END IF
  2828.  
  2829.    DIM rc&, szkey$, AppOptNum$
  2830.    szkey$ = gREGLOTUS + "WordPro\97.0\lwpuser.ini\"
  2831.  
  2832.    '-----------------------------------------------------------
  2833.     ' If user indicated to disable OLE, override default setting
  2834.     ' Also Disables Background spell, DDE, (others?)
  2835.    '
  2836.     IF LWPDisableOLE% THEN
  2837.       AppOptNum$ = "637"
  2838.        rc& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, szkey$ + "WordProUser", _
  2839.           "AppOptions", REG_SZ, AppOptNum$, len(AppOptNum$) + 1)
  2840.     END IF
  2841.  
  2842.    '-----------------------------------------------------------
  2843.     ' Write out initial installed locations so we can default to
  2844.     ' them in the future.
  2845.     '
  2846.     IF GetListItem(SYM_INSTALLKINDS$, LWPProductNumber%) <> gLANGUAGEINSTALL$ _
  2847.     THEN
  2848.             LWP_AddInstalledPathKey("LWPDIR")
  2849.             LWP_AddInstalledPathKey("LWPWORKDIR")
  2850.             LWP_AddInstalledPathKey("LWPMASTERSDIR")
  2851.             LWP_AddInstalledPathKey("LWPSAMPLESDIR")
  2852.             LWP_AddInstalledPathKey("LWPBACKUPDIR")
  2853.             LWP_AddInstalledPathKey("LWPSCRIPTSDIR")
  2854.             LWP_AddInstalledPathKey("LWPICONDIR")
  2855.             LWP_AddInstalledPathKey("LWPTOURDIR")
  2856.             LWP_AddInstalledPathKey("LWPGRAPHICSDIR")
  2857.             LWP_AddInstalledPathKey("LWPBACKGROUNDSDIR")
  2858.     END IF
  2859.  
  2860.    '---------------------------------------
  2861.     'Add the most recently used SmartMasters
  2862.    '
  2863.     AddMRUSmartMaster prodno%, "LWPSMARTMASTERSALWAYS", _
  2864.         LdString(SID_LWP_DEFAULT_MWP)
  2865.     AddMRUSmartMaster prodno%, "MASTERSLETTERS", _
  2866.         LdString(SID_LWP_LETTER1_MWP)
  2867.     AddMRUSmartMaster prodno%, "MASTERSLETTERS", _
  2868.         LdString(SID_LWP_LETTER2_MWP)
  2869.     AddMRUSmartMaster prodno%, "MASTERSMEMOS", _
  2870.         LdString(SID_LWP_MEMO1_MWP)
  2871.     AddMRUSmartMaster prodno%, "MASTERSMEMOS", _
  2872.         LdString(SID_LWP_MEMO2_MWP)
  2873.     AddMRUSmartMaster prodno%, "MASTERSFAXES", _
  2874.         LdString(SID_LWP_FAX1_MWP)
  2875.     AddMRUSmartMaster prodno%, "MASTERSFAXES", _
  2876.         LdString(SID_LWP_FAX2_MWP)
  2877.     AddMRUSmartMaster prodno%, "MASTERSLETTERS", _
  2878.         LdString(SID_LWP_PERLETTR_MWP)
  2879.     AddMRUSmartMaster prodno%, "MASTERSNEWS", _
  2880.         LdString(SID_LWP_NEWS1_MWP)
  2881.     AddMRUSmartMaster prodno%, "MASTERSCALENDARS", _
  2882.        LdString(SID_LWP_MONTHCAL_MWP)
  2883. END SUB
  2884.  
  2885. '*************************************************************************
  2886. '** Author:    SDB
  2887. '*************************************************************************
  2888. SUB LWP_AddInstalledPathKey(dirsym$)
  2889.       DIM path$, rc&
  2890.       path$ = GetSymbolValue(dirsym$)
  2891.         rc& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, _
  2892.          gREGLOTUS + "WordPro\97.0\lwpuser.ini\InstalledPaths", _
  2893.             dirsym$, REG_SZ, path$, len(path$) + 1)
  2894. END SUB
  2895.  
  2896. '*************************************************************************
  2897. SUB AddMRUSmartMaster(prodno%, Section$, File$)
  2898. '** Purpose: Adds a SmartMaster to the MRU list in LWPUSER.ini
  2899. '** Author:    TLB
  2900. '*************************************************************************
  2901.     STATIC LastIndex%
  2902.  
  2903.     DIM rc&, MasterPath$, szkey$
  2904.    szkey$ = gREGLOTUS + "WordPro\97.0\lwpuser.ini\WordProUser"
  2905.  
  2906.     LastIndex% = LastIndex% + 1
  2907.     IF Lot_IsTheFeatureInstalled(Section$) <> FALSE THEN
  2908.         MasterPath$ = LWP_WhereIsFeature(prodno%, Section$, File$)
  2909.         IF MasterPath$ <> "" THEN
  2910.          MasterPath$ = MasterPath$ + File$
  2911.             rc& = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, _
  2912.                szkey$, "LastSmartMaster" + LTrim$(Str$(LastIndex%)), _
  2913.                REG_SZ, MasterPath$, len(MasterPath$) + 1)
  2914.         END IF
  2915.     END IF
  2916. END SUB
  2917.  
  2918.  
  2919. '*************************************************************************
  2920. '** FUNCTION GetInstalledLWPVersion(network$)
  2921. '**
  2922. '** Purpose: Determines if a version of LWP is already installed
  2923. '** Author: TLB
  2924. '** Arguments:
  2925. '** Returns:  STRING indicating which version was found
  2926. '*************************************************************************
  2927. FUNCTION GetInstalledLWPVersion(network$) AS STRING
  2928.     DIM pos%, BinType%, LotusIni$, Executable$, Version$
  2929.  
  2930.     Version$ = ""
  2931.     LotusIni$ = GetWindowsDir() + "lotus.ini"
  2932.     Executable$ = GetIniKeyString(LotusIni$, "Lotus Applications", "AmiPro")
  2933.     pos% = INSTR(Executable$, " ")
  2934.     IF pos% <> 0 THEN
  2935.         Executable$ = MID$(Executable$, 1, pos% - 1)
  2936.     END IF
  2937.  
  2938.  
  2939.     IF DoesFileExist(Executable$, femExists) THEN
  2940.         pos% = INSTR(UCASE$(Executable$), "AMIPRO.EXE")
  2941.         IF pos% <> 0 THEN
  2942.             Version$ = "AMIPRO"
  2943.         ELSE
  2944.             pos% = INSTR(UCASE$(Executable$), "WORDPRO.EXE")
  2945.             IF pos% <> 0 THEN
  2946.                 BinType% = GetBinType(Executable$)
  2947.                 IF BinType% = 1 THEN
  2948.                     Version$ = "WORDPRO16"
  2949.                ELSEIF BinType% = 2 THEN
  2950.                     Version$ = "WORDPRO32"
  2951.                 END IF
  2952.             END IF
  2953.         END IF
  2954.     END IF
  2955.  
  2956.     GetInstalledLWPVersion = Version$
  2957. END FUNCTION
  2958.  
  2959. '*************************************************************************
  2960. '** FUNCTION GetPreviousMastersDir()
  2961. '**
  2962. '** Purpose: Determines existing path to SmartMasters or Styles
  2963. '** Author: TLB
  2964. '** Arguments:
  2965. '** Returns:  The directory as a string
  2966. '*************************************************************************
  2967. FUNCTION GetPreviousMastersDir() AS STRING
  2968.     DIM PrevMasters$, LWPUserIni$, AmiproIni$, idx%
  2969.  
  2970.     SELECT CASE InstalledLWPVersion$
  2971.         CASE "WORDPRO32"
  2972.             PrevMasters$ = GetDefaultPath("MASTERS", "")
  2973.         CASE "WORDPRO16"
  2974.             LWPUserIni$ = GetWindowsDir() + "lwpuser.ini"
  2975.             PrevMasters$ = GetIniKeyString(LWPUserIni$, "WordProUser", _
  2976.                 "StylePath")
  2977.         CASE "AMIPRO"
  2978.             AmiproIni$ = GetWindowsDir() + "amipro.ini"
  2979.             PrevMasters$ = GetIniKeyString(AmiproIni$, "Amipro", "StyPath")
  2980.         CASE ELSE
  2981.             PrevMasters$ = ""
  2982.     END SELECT
  2983.  
  2984.     ' Only take first path if more than one
  2985.     '
  2986.     idx% = INSTR(PrevMasters$, ";")
  2987.     IF idx% <> 0 THEN
  2988.         PrevMasters$ = LEFT$(PrevMasters$, idx% - 1)
  2989.     END IF
  2990.  
  2991.     GetPreviousMastersDir = Lot_TrimEndSlash(PrevMasters$)
  2992. END FUNCTION
  2993.  
  2994. '*************************************************************************
  2995. '** FUNCTION GetPreviousWorkDir()
  2996. '**
  2997. '** Purpose: Determines existing path to Work
  2998. '** Author: TLB
  2999. '** Arguments:
  3000. '** Returns:  The directory as a string
  3001. '*************************************************************************
  3002. FUNCTION GetPreviousWorkDir() AS STRING
  3003.     DIM PrevWorkDir$, LWPUserIni$, AmiproIni$, idx%
  3004.  
  3005.     SELECT CASE InstalledLWPVersion$
  3006.         CASE "WORDPRO32"
  3007.             PrevWorkDir$ = GetDefaultPath("WORK", "")
  3008.         CASE "WORDPRO16"
  3009.             LWPUserIni$ = GetWindowsDir() + "lwpuser.ini"
  3010.             PrevWorkDir$ = GetIniKeyString(LWPUserIni$, "WordProUser", _
  3011.                 "DocPath")
  3012.         CASE "AMIPRO"
  3013.             AmiproIni$ = GetWindowsDir() + "amipro.ini"
  3014.             PrevWorkDir$ = GetIniKeyString(AmiproIni$, "Amipro", "DocPath")
  3015.         CASE ELSE
  3016.             PrevWorkDir$ = ""
  3017.     END SELECT
  3018.  
  3019.     ' Only take first path if more than one
  3020.     '
  3021.     idx% = INSTR(PrevWorkDir$, ";")
  3022.     IF idx% <> 0 THEN
  3023.         PrevWorkDir$ = LEFT$(PrevWorkDir$, idx% - 1)
  3024.     END IF
  3025.  
  3026.     GetPreviousWorkDir = Lot_TrimEndSlash(PrevWorkDir$)
  3027. END FUNCTION
  3028.  
  3029. '*************************************************************************
  3030. '** FUNCTION LWP_WhereIsFeature(prodno%, featureId$, filetolookfor$) AS STRING
  3031. '**
  3032. '** Purpose: Lot_WhereIsFeature fails if the feature to find is not
  3033. '**     being copied in this particular session.  In a reinstallation
  3034. '**     situation, this is bad since some features will already be
  3035. '**     installed and we'd like to know where, even if we aren't installing
  3036. '**        them this time around.  This function give CIT a chance, and if
  3037. '**     it fails then it tries to find the location itself.
  3038. '** Author: TLB
  3039. '** Arguments:  As in Lot_WhereIsFeature
  3040. '** Returns:  The directory path
  3041. '*************************************************************************
  3042.  
  3043. FUNCTION LWP_WhereIsFeature(prodno%, featureId$, filetolookfor$) AS STRING
  3044.     DIM WhereIs$, chpt$, DestDir$, DestDirSym$
  3045.     WhereIs$ = Lot_WhereIsFeature(prodno%, featureId$, filetolookfor$)
  3046.     IF WhereIs$ = "" THEN
  3047.         chpt$ = Lot_GetChapterFromKeyWord(featureId$)
  3048.         DestDirSym$ = Lot_GetChapterValStr(chpt$, F_DESTDIRSYM)
  3049.         DestDir$ = Lot_GetDestDirValueFromInstallIni(DestDirSym$)
  3050.         IF DoesFileExist(DestDir$ + filetolookfor$, femExists) THEN
  3051.             WhereIs$ = DestDir$
  3052.         END IF
  3053.     END IF
  3054.  
  3055.     LWP_WhereIsFeature = WhereIs$
  3056. END FUNCTION
  3057.  
  3058. '*************************************************************************
  3059. '** FUNCTION GetDefaultPath(DirName$, basedir$)
  3060. '**
  3061. '** Purpose: Checks the registry for an existing directory
  3062. '** Author: TLB
  3063. '** Arguments:  Which directory, as in the select below
  3064. '** Returns:  The directory path from the registry
  3065. '*************************************************************************
  3066. FUNCTION GetDefaultPath(DirName$, basedir$) AS STRING
  3067. DIM Path$, ProdDir$, PrevPath$, LWPDir$
  3068.  
  3069.     '------------------------------------------------------------------
  3070.     ' Establish default based on Win '95 directory structure guidelines
  3071.     '
  3072.     LWPDir$ = LdString(SID_LWP_DIR)
  3073.     ProdDir$ = basedir$ + LWPDir$
  3074.     SELECT CASE DirName$
  3075.         CASE "WORDPRO"
  3076.             Path$ = ProdDir$
  3077.         CASE "WORK"
  3078.             Path$ = basedir$ + LdString(SID_LWP_WORK_DIR) + LWPDir$
  3079.         CASE "MASTERS"
  3080.             Path$ = basedir$ + LdString(SID_LWP_MASTERS_DIR) + LWPDir$
  3081.         CASE "SAMPLES"
  3082.             Path$ = basedir$ + LdString(SID_LWP_SAMPLES_DIR) + LWPDir$
  3083.         CASE "BACKUP"
  3084.             Path$ = basedir$ + LdString(SID_LWP_BACKUP_DIR) + LWPDir$
  3085.         CASE "SCRIPTS"
  3086.             Path$ = ProdDir$ + LdString(SID_LWP_SCRIPTS_DIR)
  3087.         CASE "ICONS"
  3088.             Path$ = ProdDir$ + LdString(SID_LWP_ICON_DIR)
  3089.         CASE "TOUR"
  3090.             Path$ = ProdDir$ + LdString(SID_LWP_TOUR_DIR)
  3091.         CASE "GRAPHICS"
  3092.             Path$ = ProdDir$ + LdString(SID_LWP_GRAPHICS_DIR)
  3093. '        CASE "BACKGROUNDS"
  3094. '            Path$ = ProdDir$ + LdString(SID_LWP_GRAPHICS_DIR) +  LdString(SID_LWP_BACKGROUNDS_DIR)
  3095.     END SELECT
  3096.  
  3097.     '----------------------------------------------------------------
  3098.     ' Override default if previous 97 or 96 installation of same type
  3099.     '
  3100.     IF InstalledLWPVersion$ = "WORDPRO32" THEN
  3101.  
  3102.        DIM Key$, Key96$, Key97$, VerNum$
  3103.         DIM Value$, Value2$, rc%, buff$
  3104.        buff$ = STRING$(256, 0)
  3105.        Key96$ = "96.0"
  3106.        Key97$ = "97.0"
  3107.  
  3108.         VerNum$ = ""
  3109.  
  3110.         If LWP_IsSameInstallType(Key97$) Then
  3111.             VerNum$ = Key97$
  3112.         Elseif LWP_IsSameInstallType(Key96$) Then
  3113.             VerNum$ = Key96$
  3114.         End if
  3115.  
  3116.        '**
  3117.        '** SDB 1/8/97        Added check for MLC for Work and Backup Dirs
  3118.        '**
  3119.        IF VerNum$ <> "" THEN
  3120.            SELECT CASE DirName$
  3121.                CASE "WORDPRO"
  3122.                    Value = "LWPDIR"
  3123.                    Value2 = "LWPDIR"
  3124.                CASE "WORK"
  3125.                    If GetListItem(SYM_INSTALLKINDS$, LWPProductNumber%) _
  3126.                            <> gLANGUAGEINSTALL$ Then
  3127.                        Value = "LWPWORKDIR"
  3128.                        Value2 = "LWPWORKDIR"
  3129.                    End If
  3130.                CASE "BACKUP"
  3131.                    If GetListItem(SYM_INSTALLKINDS$, LWPProductNumber%) _
  3132.                            <> gLANGUAGEINSTALL$ Then
  3133.                        Value = "LWPBACKUPDIR"
  3134.                        Value2 = "LWPBACKUPDIR"
  3135.                    End If
  3136.                CASE "SCRIPTS"
  3137.                    Value = "LWPSCRIPTSDIR"
  3138.                    Value2 = "LWPSCRIPTSDIR"
  3139.                CASE "MASTERS"
  3140.                    Value = "LWPMASTERSDIR"
  3141.                    Value2 = "LWPMASTERSLANGDIR"
  3142.                CASE "SAMPLES"
  3143.                    Value = "LWPSAMPLESDIR"
  3144.                    Value2 = "LWPSAMPLESLANGDIR"
  3145.                CASE "ICONS"
  3146.                    Value = "LWPICONDIR"
  3147.                    Value2 = "LWPICONLANGDIR"
  3148.    ''            CASE "TOUR"
  3149.    ''                Value = "LWPTOURDIR"
  3150.    ''                Value2 = "LWPTOURLANGDIR"
  3151.                CASE "GRAPHICS"
  3152.                    Value = "LWPGRAPHICSDIR"
  3153.                    Value2 = "LWPGRAPHICSLANGDIR"
  3154.  
  3155.                     '' Special treatment for 96 graphics
  3156.                     '' since old name is under LWPDRAWSYMDIR
  3157.                     ''    Default to 96LwpDir + Graphics
  3158.                     '' and exit
  3159.                     If VerNum$ = Key96$ Then
  3160.                    GetDefaultPath = GetDefaultPath("WORDPRO", basedir$) _
  3161.                                                + LdString(SID_LWP_GRAPHICS_DIR)
  3162.                    EXIT FUNCTION
  3163.                     End if
  3164.    '            CASE "BACKGROUNDS"
  3165.    '                Value = "LWPBACKGROUNDSDIR"
  3166.    '                Value2 = "LWPBACKGROUNDSLANGDIR"
  3167.            END SELECT
  3168.            Key$ = "Software\Lotus\WordPro\" + VerNum$ _
  3169.                        + "\lwpuser.ini\InstalledPaths"
  3170.            IF Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, Key$) THEN
  3171.                rc% = Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, Key$, _
  3172.                       Value$, REG_SZ, buff$, 256)
  3173.             '
  3174.             '** SDB 8/22/96        Value2$ Stuff:
  3175.             '**
  3176.             '** The beta-2 release of 97 wrote langdirs out, so do this check
  3177.             '** in Gold 97 to catch those.  After Gold 97, this code can be yanked.
  3178.             '
  3179.             IF rc% <> ERROR_SUCCESS THEN
  3180.                   rc% = Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, Key$, _
  3181.                          Value2$, REG_SZ, buff$, 256)
  3182.             END IF
  3183.             '**
  3184.             '**
  3185.             '
  3186.                PrevPath$ = buff$
  3187.              IF PrevPath$ <> "" AND Lot_CheckPath(PrevPath$) THEN
  3188.                  Path$ = PrevPath$
  3189.               END IF
  3190.           END IF
  3191.        END IF
  3192.     END IF
  3193.     GetDefaultPath = Path$
  3194. END FUNCTION
  3195.  
  3196.  
  3197.  
  3198. '*************************************************************************
  3199. '** SUB LWP_IsSameInstallType(VerNum$)
  3200. '**
  3201. '** Purpose: Registers a help file with Windows.  Souped up version of Lot_RegisterHelpFile
  3202. '** Author: TLB
  3203. '** Arguments:
  3204. '*************************************************************************
  3205. FUNCTION LWP_IsSameInstallType(VerNum$)
  3206.    DIM InstallType&, Network$, LWPKey$, Value$, rc%
  3207.  
  3208.    Network$ = GetSymbolValue(SYM_NETWORK$)
  3209.     LWPKey$ = "Software\Lotus\WordPro\" + VerNum$ + "\"
  3210.    Value$ = "InstallType"
  3211.  
  3212.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, LWPKey$) THEN
  3213.         rc% = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, LWPKey$, _
  3214.             Value$, REG_DWORD, InstallType&, 4&)
  3215.         IF rc% = 0 THEN
  3216.             IF (((InstallType& = 1) AND (Network$ = gNODE$)) OR _
  3217.                 ((InstallType& = 0) AND (Network$ = gSTANDARD$))) _
  3218.             THEN
  3219.                 LWP_IsSameInstallType = TRUE
  3220.             ELSE
  3221.                 LWP_IsSameInstallType = FALSE
  3222.             END IF
  3223.         END IF
  3224.     END IF
  3225. END FUNCTION
  3226.  
  3227.  
  3228. '*************************************************************************
  3229. '** SUB LWP_RegisterHelpFile
  3230. '**
  3231. '** Purpose: Registers a help file with Windows.  Souped up version of Lot_RegisterHelpFile
  3232. '** Author: TLB
  3233. '** Arguments:
  3234. '*************************************************************************
  3235. SUB LWP_RegisterHelpFile(prodno%, Feature$, HelpFile$)
  3236.     DIM rc&, Key$, Path$, notused%, WinHelpIni$
  3237.     IF Lot_IsTheFeatureInstalled(Feature$) <> FALSE THEN
  3238.         Key$ = "SOFTWARE\Microsoft\Windows\Help"
  3239.         Path$ = LWP_WhereIsFeature(prodno%, Feature$, HelpFile$)
  3240.         rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, Key$)
  3241.         rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, Key$, _
  3242.              UCASE$(HelpFile$), REG_SZ, Path$, len(Path$) + 1)
  3243.         notused% = Lot_RegisterObject("LWP_BASICS", _
  3244.             UNIN_CLASS_REGISTRY_VALUE$, gHLM$ + "\" + Key$ + _
  3245.             "\" + UCASE$(HelpFile$))
  3246.  
  3247.         IF rc& <> ERROR_SUCCESS THEN
  3248.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+Key$,"",""
  3249.         END IF
  3250.  
  3251.       '' Fixes some abstruse upgrade bugs
  3252.         WinHelpIni$ = GetWindowsDir() + "winhelp.ini"
  3253.         RemoveIniKey WinHelpIni$, "Files", HelpFile$, cmoNone
  3254.     END IF
  3255. END SUB
  3256.  
  3257.  
  3258. '*************************************************************************
  3259. '** SUB LWP_RegisterGIDFile
  3260. '**
  3261. '** Purpose: Registers a gid file.  I.e.  wp0n71en.hlp => wp0n71en.gid
  3262. '** Author: SDB
  3263. '** Arguments:
  3264. '*************************************************************************
  3265. SUB LWP_RegisterGIDFile(ProgDir$, gid$)
  3266.     gid$ = Left(gid$, Instr(gid$, "."))    + "gid"
  3267.     notused% = Lot_RegisterObject("LWP_BASICS", _
  3268.         UNIN_CLASS_FILE$, ProgDir$ + gid$ )
  3269. END SUB
  3270.  
  3271.  
  3272. '*************************************************************************
  3273. '** LWPMOREDIRSCB
  3274. '** Purpose:  This SUB handles the processing for the MORE DIRECTORIES
  3275. '**           dialog.
  3276. '**
  3277. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  3278. '**
  3279. '** Author: Michael Natsis
  3280. '** Arguments:
  3281. '**
  3282. '**
  3283. '** Returns:
  3284. '**
  3285. '*************************************************************************
  3286. SUB LWPMOREDIRSCB (hDlg&, CtrlId%, Classes$, LInst&)
  3287.    DIM dirChanged1%, dirChanged2%, dirChanged3%, i%, notused%
  3288.    DIM drvSel%,Inst%, dirToChange1$, dirToChange2$,dirToChange3$
  3289.    STATIC drvIndex%(1 to MAX_NO_DRIVECOMBOS)
  3290.  
  3291.    '** unc start
  3292.    DIM    uncPath$, fullPath$, dirPath$, drvPath$, n%, hCombo&  '** MZ
  3293.    DIM    curCombo$, uncOff&, unusedPath$, NumDirs%
  3294.    DIM    comboBox$, editBox$,dirToChange$
  3295.    '** unc end
  3296.  
  3297.    Inst% = CINT(LInst&)
  3298.  
  3299. '** unc start
  3300. '** Handle all the combo boxes here (if any)
  3301.    IF INSTR(Classes$, "IDC_COMBO") THEN
  3302.       i% = VAL(MID$(Classes$, 10, LEN(Classes$) - 9))
  3303.       comboBox = "IDC_COMBO"+Right$(Str$(i%),1)
  3304.       editBox = "IDC_EDIT"+Right$(Str$(i%),1)
  3305.       drvIndex%(i%) = Inst%
  3306.       curCombo$ = GetListItem(comboBox, Inst%)
  3307.       fullPath$ = GetListItem("IDC_EDIT",i)
  3308.       Lot_SplitUNCPath fullPath$, uncPath$, dirPath$
  3309.       uncOff& = INSTR(1, curCombo$, "\\")
  3310.       IF uncOff > 0 THEN
  3311.     Lot_SplitUNCPath MID$(curCombo$, uncOff&), uncPath$, unusedPath$
  3312.       ELSE
  3313.     uncPath$ = ""
  3314.       END IF
  3315.       SetListItem "IDC_EDIT", i, uncPath$ + dirPath$
  3316.       AddListItem SYM_UPDATELIST$, editBox
  3317.       EXIT SUB
  3318.    END IF
  3319. '** unc end
  3320.  
  3321.  
  3322.  
  3323.    SELECT CASE Classes$
  3324.  
  3325.       CASE "__DLGINIT"
  3326.  
  3327.     '** This is the directory for the Work Files
  3328.         Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  3329.         SetListItem "IDC_EDIT", 1, GetSymbolValue("LWPWORKDIR")
  3330.         drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  3331.         AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3332.  
  3333.  
  3334.      '** This is the directory for the Smart Master Files
  3335.         Lot_GetDriveFreeSpaceList "IDC_COMBO2"
  3336.         SetListItem "IDC_EDIT", 2, GetSymbolValue("LWPMASTERSDIR")
  3337.         drvIndex%(1) = ValidateEditBox(hDlg& , 2)
  3338.         AddListItem SYM_UPDATELIST$, "IDC_EDIT2"
  3339.  
  3340.      '** This is the directory for the Backup Files
  3341.         Lot_GetDriveFreeSpaceList "IDC_COMBO3"
  3342.         SetListItem "IDC_EDIT", 3, GetSymbolValue("LWPBACKUPDIR")
  3343.         drvIndex%(1) = ValidateEditBox(hDlg& , 3)
  3344.         AddListItem SYM_UPDATELIST$, "IDC_EDIT3"
  3345.  
  3346.         IF GetListItem(SYM_INSTALLKINDS$, LWPProductNumber%) = gLANGUAGEINSTALL$ THEN
  3347.             notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_EDIT2), FALSE))
  3348.             notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_EDIT4), FALSE))
  3349.             notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_COMBO2), FALSE))
  3350.             notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_COMBO4), FALSE))
  3351.            notused% = CINT(ShowWindow (GetDlgItem(hDlg&, IDC_BRWSDIR2), SW_HIDE))
  3352.             notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_BRWSDIR2), FALSE))
  3353.               notused% = CINT(ShowWindow (GetDlgItem(hDlg&, IDC_BRWSDIR4), SW_HIDE))
  3354.             notused% = CINT(EnableWindow (GetDlgItem(hDlg&, IDC_BRWSDIR4), FALSE))
  3355.     End If
  3356.  
  3357.       CASE "IDC_COMBO"
  3358.          SELECT CASE Inst%
  3359.              CASE 1
  3360.                 dirChanged1% = TRUE
  3361.  
  3362.              CASE 2
  3363.                 dirChanged2% = TRUE
  3364.  
  3365.              CASE 3
  3366.                 dirChanged3% = TRUE
  3367.  
  3368.          END SELECT
  3369.  
  3370.       CASE "IDC_BRWSDIR"
  3371.            drvSel% = ValidateBrowse(hDlg&,Inst%)
  3372.            SELECT CASE Inst%
  3373.  
  3374.              CASE 1
  3375.                 dirChanged1% = TRUE
  3376.  
  3377.              CASE 2
  3378.                 dirChanged2% = TRUE
  3379.  
  3380.              CASE 3
  3381.                 dirChanged3% = TRUE
  3382.  
  3383.          END SELECT
  3384.  
  3385.       CASE "IDC_EDIT"
  3386.           SELECT CASE Inst%
  3387.              CASE 1
  3388.                 dirChanged1% = TRUE
  3389.  
  3390.              CASE 2
  3391.                 dirChanged2% = TRUE
  3392.  
  3393.              CASE 3
  3394.                dirChanged3% = TRUE
  3395.  
  3396.           END SELECT
  3397.  
  3398.       CASE "IDC_OK"
  3399.          '** Validate Paths always: to check for a file with the same name
  3400.  
  3401.         '** WorkDir
  3402.         '** unc start 1
  3403.             drvSel% = ValidateEditBox(hDlg& , 1)
  3404.             IF drvSel% = 0 THEN
  3405.                 SetListItem "__LASTSTATUS", 1, "Q"
  3406.                 EXIT SUB
  3407.             ELSE
  3408.                 drvIndex%(1) = drvSel%
  3409.             END IF
  3410.             Lot_SplitUNCPath GetListItem("IDC_EDIT",1), uncPath$, dirPath$
  3411.             IF uncPath$ = "" THEN
  3412.                 drvPath = LEFT$(GetListItem("IDC_COMBO1",drvIndex%(1)), 2)
  3413.             ELSE
  3414.                 drvPath = ""
  3415.             END IF
  3416.             dirToChange1$ = drvPath$ + uncPath + dirPath$
  3417.         '** unc end
  3418.  
  3419.              IF ValidatePath(dirToChange1$) = FALSE THEN
  3420.                  SetListItem "__LASTSTATUS",1,"Q"
  3421.                  'SetListItem "_LASTSTATUS",1,"Q"
  3422.                  EXIT SUB
  3423.              ELSE
  3424.                    SetSymbolValue "LWPWORKDIR", dirToChange1$
  3425.              END IF
  3426.  
  3427.  
  3428.         '** SMasters
  3429.         '** unc start 2
  3430.             drvSel% = ValidateEditBox(hDlg& , 2)
  3431.             IF drvSel% = 0 THEN
  3432.                SetListItem "__LASTSTATUS", 1, "Q"
  3433.                EXIT SUB
  3434.             ELSE
  3435.                drvIndex%(2) = drvSel%
  3436.             END IF
  3437.             Lot_SplitUNCPath GetListItem("IDC_EDIT",2), uncPath$, dirPath$
  3438.             IF uncPath$ = "" THEN
  3439.                drvPath = LEFT$(GetListItem("IDC_COMBO2",drvIndex%(2)), 2)
  3440.             ELSE
  3441.                drvPath = ""
  3442.             END IF
  3443.             dirToChange2$ = drvPath$ + uncPath + dirPath$
  3444.         '** unc end
  3445.  
  3446.              IF ValidatePath(dirToChange2$) = FALSE THEN
  3447.                  SetListItem "__LASTSTATUS",1,"Q"
  3448.                  'SetListItem "_LASTSTATUS",1,"Q"
  3449.                EXIT SUB
  3450.              ELSE
  3451.                    SetSymbolValue "LWPMASTERSDIR", dirToChange2$
  3452.               END IF
  3453.  
  3454.  
  3455.         '** Backup
  3456.         '** unc start 3
  3457.             drvSel% = ValidateEditBox(hDlg& , 3)
  3458.             IF drvSel% = 0 THEN
  3459.                SetListItem "__LASTSTATUS", 1, "Q"
  3460.                EXIT SUB
  3461.             ELSE
  3462.                drvIndex%(3) = drvSel%
  3463.             END IF
  3464.                Lot_SplitUNCPath GetListItem("IDC_EDIT",3), uncPath$, dirPath$
  3465.             IF uncPath$ = "" THEN
  3466.                drvPath = LEFT$(GetListItem("IDC_COMBO3",drvIndex%(3)), 2)
  3467.             ELSE
  3468.                drvPath = ""
  3469.             END IF
  3470.             dirToChange3$ = drvPath$ + uncPath + dirPath$
  3471.         '** unc end
  3472.  
  3473.             IF ValidatePath(dirToChange3$) = FALSE THEN
  3474.                  SetListItem "__LASTSTATUS",1,"Q"
  3475.                  'SetListItem "_LASTSTATUS",1,"Q"
  3476.                EXIT SUB
  3477.               ELSE
  3478.                    SetSymbolValue "LWPBACKUPDIR", dirToChange3$
  3479.               END IF
  3480.  
  3481.  
  3482.       '** Refresh destination
  3483.             Lot_RefreshDestination("LWPWORKDIR")
  3484.             Lot_RefreshDestination("LWPMASTERSDIR")
  3485.             Lot_RefreshDestination("LWPBACKUPDIR")
  3486.  
  3487. END SELECT   'Classes
  3488.  
  3489. END SUB
  3490.  
  3491. '*************************************************************************
  3492. '** SUB LWPBACKUPMASTERSCB(hDlg&, CtrlId%, Classes$, LInst&)
  3493. '**
  3494. '** Purpose: Backs up currently installed masters
  3495. '**
  3496. '** Author:    Troy Bartlett
  3497. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3498. '** Returns:   NONE
  3499. '*************************************************************************
  3500.  
  3501. SUB LWPBACKUPMASTERSCB(hDlg&, CtrlId%, Classes$, LInst&)
  3502.     SELECT CASE Classes$
  3503.         CASE "IDC_OK"
  3504.             LWPBackupSmartMasters% = TRUE
  3505.         CASE "IDC_CONTINUE"
  3506.             LWPBackupSmartMasters% = FALSE
  3507.         CASE "IDC_EXIT"
  3508.             LWPBackupSmartMasters% = FALSE
  3509.     END SELECT
  3510. END SUB
  3511.  
  3512. '*************************************************************************
  3513. '** SUB LWPDISABLEOLECB(hDlg&, CtrlId%, Classes$, LInst&)
  3514. '**
  3515. '** Purpose: Callback for disable OLE dialog
  3516. '**
  3517. '** Author:    Troy Bartlett
  3518. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3519. '** Returns:   NONE
  3520. '*************************************************************************
  3521.  
  3522. SUB LWPDISABLEOLECB(hDlg&, CtrlId%, Classes$, LInst&)
  3523.     SELECT CASE Classes$
  3524.         CASE "IDC_OK"
  3525.             LWPDisableOLE% = TRUE
  3526.         CASE "IDC_CONTINUE"
  3527.             LWPDisableOLE% = FALSE
  3528.         CASE "IDC_EXIT"
  3529.             LWPDisableOLE% = FALSE
  3530.     END SELECT
  3531. END SUB
  3532.  
  3533. '*************************************************************************
  3534. '** SUB LWP_DoBackupSmartMasters()
  3535. '**
  3536. '** Purpose: Does the work of backing up currently installed masters
  3537. '**
  3538. '** Author:    Troy Bartlett
  3539. '** Arguments: NONE
  3540. '** Returns:   NONE
  3541. '*************************************************************************
  3542.  
  3543. SUB LWP_DoBackupSmartMasters()
  3544. DIM PrevMasters$, NewMasters$, idx%, Master$, OrigMaster$, BackupMaster$
  3545.  
  3546.     PrevMasters$ = GetPreviousMastersDir()
  3547.     NewMasters$ = GetSymbolValue("LWPMASTERSDIR") + _
  3548.         Lot_TrimEndSlash(LdString(SID_LWP_BACKUP_DIR))
  3549.  
  3550.     IF DoesDirExist(NewMasters$) THEN
  3551.         FOR idx% = 1 TO 99
  3552.             IF DoesDirExist(NewMasters$ + LTRIM$(STR$(idx%))) = FALSE THEN
  3553.                 NewMasters$ = NewMasters$ + LTRIM$(STR$(idx%))
  3554.                 EXIT FOR
  3555.             END IF
  3556.         NEXT
  3557.     END IF
  3558.  
  3559.     IF DoesDirExist(PrevMasters$) AND _
  3560.         NOT DoesDirExist(NewMasters$) _
  3561.     THEN
  3562.         CreateDir NewMasters$, cmoNone
  3563.         Master$ = DIR$(PrevMasters$ + "\*.*")
  3564.         WHILE Master$ <> ""
  3565.             OrigMaster$ = PrevMasters$ + "\" + Master$
  3566.             BackupMaster$ = NewMasters$ + "\" + Master$
  3567.             ' Per Paul: Just copy, don't remove original
  3568.             CopyFile OrigMaster$, BackupMaster$, cmoNone, 0
  3569.             Master$ = DIR$()
  3570.         WEND
  3571.     END IF
  3572. END SUB
  3573.  
  3574. '****************************************************************************
  3575. '** SUB LWPRemoveProdFilesCB(hDlg&, CtrlId%, Classes%, Inst&)
  3576. '**
  3577. '** Purpose: callback to handle Remove Files dialog.
  3578. '**
  3579. '** Author:  BMK 7/18/95 (significantly modified by TLB)
  3580. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3581. '** Returns:   NONE
  3582. '****************************************************************************
  3583. SUB LWPRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, LInst&)
  3584.  
  3585.     SELECT CASE Classes$
  3586.         case "__DLGINIT"
  3587.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3588.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3589.             AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3590.  
  3591.         case "IDC_OK"
  3592.             LWPRemoveProdFiles% = TRUE
  3593.  
  3594.         case "IDC_BACK"
  3595.             LWPRemoveProdFiles% = FALSE
  3596.  
  3597.         case "IDC_EXIT"
  3598.             LWPRemoveProdFiles% = FALSE
  3599.     END SELECT
  3600. END SUB
  3601.  
  3602. '****************************************************************************
  3603. '** SUB LWP_RegShrComponent(Feature$, CompKey$, CompVer$)
  3604. '**
  3605. '** Purpose: Register shared component under the HLM\...\Product\Ver
  3606. '**
  3607. '** Author:  TLB
  3608. '** Arguments: Feature name from .SCR and registry keys (name and version)
  3609. '** Returns:   NONE
  3610. '****************************************************************************
  3611. SUB LWP_RegShrComponent(Feature$, CompKey$, CompVer$)
  3612.     DIM Key$, rc&
  3613.     IF Lot_IsTheFeatureInstalled(Feature$) <> FALSE THEN
  3614.         Key$ = "SOFTWARE\Lotus\WordPro\97.0\Components\" + _
  3615.             CompKey$ + "\" + CompVer$
  3616.         rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, Key$)
  3617.         IF rc& <> ERROR_SUCCESS THEN
  3618.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$ + "\" + Key$,"",""
  3619.         END IF
  3620.     END IF
  3621. END SUB
  3622.  
  3623. '****************************************************************************
  3624. '** FUNCTION LWPLFN2SFN(FilePath$)
  3625. '**
  3626. '** Purpose: Converts the long file name to a short file name.
  3627. '**
  3628. '** Author:  TLB
  3629. '** Arguments: The file path to check
  3630. '** Returns:   The short file name version of the long file name
  3631. '****************************************************************************
  3632. FUNCTION LWPLFN2SFN(FilePath$) AS STRING
  3633.     DIM SFN$, bufSize&, rc&
  3634.     bufSize& = 200
  3635.     DO
  3636.         SFN$ = STRING$(bufSize&, " ")
  3637.         rc& = Win32GetShortPathName(FilePath$, SFN$, bufsize&)
  3638.         IF rc& = 0 THEN
  3639.             LWPLFN2SFN = FilePath$
  3640.             EXIT DO
  3641.         ELSEIF rc& > bufSize& THEN
  3642.             bufSize& = rc&
  3643.         ELSE
  3644.             LWPLFN2SFN = SFN$
  3645.             EXIT DO
  3646.         END IF
  3647.     LOOP
  3648. END FUNCTION
  3649.  
  3650.  
  3651. '*************************************************************************
  3652. '** SUB LWP_DoFontProcessing
  3653. '**
  3654. '** Purpose: Adds a font to the system
  3655. '** Author: SDB
  3656. '** Arguments:
  3657. '*************************************************************************
  3658. SUB LWP_DoFontProcessing()
  3659.    DIM sect$
  3660.  
  3661.     sect$ = "LWPFONTS"
  3662.     IF Lot_IsTheFeatureInstalled(sect$) <> FALSE THEN
  3663.         Lot_AddFontByID sect$, "TT0011A_.TTF", SID_LWP_TTF_LOTUSWPINTA
  3664.         Lot_AddFontByID sect$, "TT0011B_.TTF", SID_LWP_TTF_LOTUSWPINTB
  3665.         Lot_AddFontByID sect$, "TT0011C_.TTF", SID_LWP_TTF_LOTUSWPBOX
  3666.         Lot_AddFontByID sect$, "TT0011D_.TTF", SID_LWP_TTF_LOTUSWPTYPE
  3667.         Lot_AddFontByID sect$, "TT0011E_.TTF", SID_LWP_TTF_LOTUSWPICON
  3668.         Lot_AddFontByID sect$, "MATHA___.TTF", SID_LWP_EQNTTF_MATHA
  3669.         Lot_AddFontByID sect$, "MATHB___.TTF", SID_LWP_EQNTTF_MATHB
  3670.         Lot_AddFontByID sect$, "MATHC___.TTF", SID_LWP_EQNTTF_MATHC
  3671.         Lot_AddFontByID sect$, "WPPOST1.TTF",  SID_LWP_ENVTTF_POST1
  3672.     END IF
  3673.  
  3674.     sect$ = "LWP_TRUETYPEFONTS"
  3675.     IF Lot_IsTheFeatureInstalled(sect$) <> FALSE THEN
  3676.         Lot_AddFontByID sect$, "ANBI____.TTF", SID_LWP_TTF_ANBI
  3677.         Lot_AddFontByID sect$, "ANB_____.TTF", SID_LWP_TTF_ANB
  3678.         Lot_AddFontByID sect$, "ANI_____.TTF", SID_LWP_TTF_ANI
  3679.         Lot_AddFontByID sect$, "AN______.TTF", SID_LWP_TTF_AN
  3680.         Lot_AddFontByID sect$, "ARBL____.TTF", SID_LWP_TTF_ARBL
  3681.         Lot_AddFontByID sect$, "BASBI___.TTF", SID_LWP_TTF_BASBI
  3682.         Lot_AddFontByID sect$, "BASB____.TTF", SID_LWP_TTF_BASB
  3683.         Lot_AddFontByID sect$, "BASI____.TTF", SID_LWP_TTF_BASI
  3684.         Lot_AddFontByID sect$, "BAS_____.TTF", SID_LWP_TTF_BAS
  3685.         Lot_AddFontByID sect$, "BASBI___.TTF", SID_LWP_TTF_BASBI
  3686.         Lot_AddFontByID sect$, "BG______.TTF", SID_LWP_TTF_BG
  3687.         Lot_AddFontByID sect$, "CTRI____.TTF", SID_LWP_TTF_CTRI
  3688.         Lot_AddFontByID sect$, "CTR_____.TTF", SID_LWP_TTF_CTR
  3689.         Lot_AddFontByID sect$, "GARBI___.TTF", SID_LWP_TTF_GARBI
  3690.         Lot_AddFontByID sect$, "GARB____.TTF", SID_LWP_TTF_GARB
  3691.         Lot_AddFontByID sect$, "GARIT___.TTF", SID_LWP_TTF_GARIT
  3692.         Lot_AddFontByID sect$, "GAR_____.TTF", SID_LWP_TTF_GAR
  3693.         Lot_AddFontByID sect$, "GILBI___.TTF", SID_LWP_TTF_GILBI
  3694.         Lot_AddFontByID sect$, "GILB____.TTF", SID_LWP_TTF_GILB
  3695.         Lot_AddFontByID sect$, "GILCB___.TTF", SID_LWP_TTF_GILCB
  3696.         Lot_AddFontByID sect$, "GILC____.TTF", SID_LWP_TTF_GILC
  3697.         Lot_AddFontByID sect$, "GILI____.TTF", SID_LWP_TTF_GILI
  3698.         Lot_AddFontByID sect$, "GILU____.TTF", SID_LWP_TTF_GILU
  3699.         Lot_AddFontByID sect$, "GIL_____.TTF", SID_LWP_TTF_GIL
  3700. ''        Lot_AddFontByID sect$, "GNBI____.TTF", SID_LWP_TTF_GNBI
  3701. ''        Lot_AddFontByID sect$, "GNB_____.TTF", SID_LWP_TTF_GNB
  3702. ''        Lot_AddFontByID sect$, "GNI_____.TTF", SID_LWP_TTF_GNI
  3703. ''        Lot_AddFontByID sect$, "GN______.TTF", SID_LWP_TTF_GN
  3704.         Lot_AddFontByID sect$, "IMPACT__.TTF", SID_LWP_TTF_IMPACT
  3705.         Lot_AddFontByID sect$, "LC______.TTF", SID_LWP_TTF_LC
  3706.         Lot_AddFontByID sect$, "MTSORTS_.TTF", SID_LWP_TTF_MTSORTS
  3707.         Lot_AddFontByID sect$, "NGOB____.TTF", SID_LWP_TTF_NGOB
  3708.         Lot_AddFontByID sect$, "NGOI____.TTF", SID_LWP_TTF_NGOI
  3709.         Lot_AddFontByID sect$, "NGO_____.TTF", SID_LWP_TTF_NGO
  3710.         Lot_AddFontByID sect$, "NIMBI___.TTF", SID_LWP_TTF_NIMBI
  3711.         Lot_AddFontByID sect$, "NIMB____.TTF", SID_LWP_TTF_NIMB
  3712.         Lot_AddFontByID sect$, "NIMI____.TTF", SID_LWP_TTF_NIMI
  3713.         Lot_AddFontByID sect$, "ONY_____.TTF", SID_LWP_TTF_ONY
  3714.         Lot_AddFontByID sect$, "PIB_____.TTF", SID_LWP_TTF_PIB
  3715.         Lot_AddFontByID sect$, "ROCBI___.TTF", SID_LWP_TTF_ROCBI
  3716.         Lot_AddFontByID sect$, "ROCB____.TTF", SID_LWP_TTF_ROCB
  3717.         Lot_AddFontByID sect$, "ROCCB___.TTF", SID_LWP_TTF_ROCCB
  3718.         Lot_AddFontByID sect$, "ROCLI___.TTF", SID_LWP_TTF_ROCLI
  3719.         Lot_AddFontByID sect$, "ROCL____.TTF", SID_LWP_TTF_ROCL
  3720.     END IF
  3721. END SUB
  3722.  
  3723. '*************************************************************************
  3724. '** SUB Used to be AddFont...this is here until CIT provides there version
  3725. '**
  3726. '** Purpose: Adds a font to the system
  3727. '** Author: TLB
  3728. '** Arguments:
  3729. '*************************************************************************
  3730. SUB Lot_AddFontByID (Section$, FontFile$, FontNameID%)
  3731.     DIM rc&, Key$, FontDir$, FontPath$, notused%, FontName$, WinKey$, prodno%
  3732.     IF WhatPlatform() = PLATFORM_WIN95 THEN
  3733.         WinKey$ = "Windows\"
  3734.     ELSE
  3735.         WinKey$ = "Windows NT\"
  3736.     END IF
  3737.  
  3738.  prodno% = LWPProductNumber%
  3739.  
  3740.     rc& = ERROR_SUCCESS
  3741.     IF Lot_IsTheFeatureInstalled(Section$) <> FALSE THEN
  3742.         FontDir$ = LWP_WhereIsFeature(prodno%, Section$, FontFile$)
  3743.         IF FontDir$ <> "" THEN
  3744.             FontPath$ = FontDir$ + FontFile$
  3745.             FontName$ = LdString(FontNameID%)
  3746.             Key$ = "SOFTWARE\Microsoft\" + WinKey$ + "CurrentVersion\Fonts"
  3747.             rc& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, Key$)
  3748.             rc& = rc& + Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, Key$, _
  3749.                 FontName$, REG_SZ, FontPath$, len(FontPath$) + 1)
  3750.  
  3751.             IF rc& <> ERROR_SUCCESS THEN
  3752.                 RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+Key$,"",""
  3753.             END IF
  3754.  
  3755.             AddFontResource(FontPath$)
  3756.         END IF
  3757.     END IF
  3758. END SUB
  3759.  
  3760.  
  3761. '****************************************************************************
  3762. '** SUB LWPRemoveObsoleteFiles(hDlg&, CtrlId%, Classes%, Inst&)
  3763. '**
  3764. '** Purpose: callback to handle Remove Files dialog.
  3765. '**
  3766. '** Author:  BMK 7/18/95 (significantly modified by TLB, and then jshaw)
  3767. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3768. '** Returns:   NONE
  3769. '****************************************************************************
  3770.  
  3771. SUB LWPRemoveObsoleteFiles(hDlg&, CtrlId%, Classes$, LInst&)
  3772. DIM nSections%, count%, chpt$, sym$, notused%
  3773.  
  3774.     nSections% = 2
  3775.  
  3776.     SELECT CASE Classes$
  3777.         case "__DLGINIT"
  3778.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3779.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3780.             AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3781.         case "IDC_OK"
  3782.             for count% = 1 to nSections%
  3783.                 sym$ = "LWPOBSFILES" + LTRIM$(STR$(count%))
  3784.                 chpt$ = Lot_GetChapterFromKeyWord (sym$)
  3785.                 if chpt$ <> "" then
  3786.                      notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  3787.                 end if
  3788.             next
  3789.         case "IDC_BACK"
  3790.             ' reset INF sections to OFF in case user changes his/her mind
  3791.             for count% = 1 TO nSections%
  3792.                 sym$ = "LWPOBSFILES" + LTRIM$(STR$(count%))
  3793.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3794.                 if chpt$ <> "" then
  3795.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3796.                 end if
  3797.             next
  3798.         case "IDC_EXIT"
  3799.             ' reset INF sections to OFF in case user changes his/her mind
  3800.             for count% = 1 TO nSections%
  3801.                 sym$ = "LWPOBSFILES" + LTRIM$(STR$(count%))
  3802.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3803.                 if chpt$ <> "" then
  3804.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3805.                 end if
  3806.             next
  3807.     END SELECT
  3808. END SUB
  3809.  
  3810.  
  3811. '****************************************************************************
  3812. '** SUB LWP_RemoveOldShortcuts()
  3813. '** Author:  SDB
  3814. '** Returns:   NONE
  3815. '****************************************************************************
  3816. SUB LWP_RemoveOldShortcuts()
  3817.     DIM dirname$, fname$
  3818.     dirname$ = GetWindowsDir() + "\start menu\programs\lotus applications\"
  3819.     fname$ =    dirname$ + "Lotus Word Pro.lnk"
  3820.     LWP_RemoveFile fname$
  3821.     fname$ =    dirname$ + "Lotus Word Pro Dialog Editor.lnk"
  3822.     LWP_RemoveFile fname$
  3823.     fname$ =    dirname$ + "Word Pro Read Me.lnk"
  3824.     LWP_RemoveFile fname$
  3825.  
  3826.     dirname$ = GetWindowsDir() + "\start menu\programs\smartsuite doconline\"
  3827.     fname$ =    dirname$ + "Exploring Word Pro.lnk"
  3828.     LWP_RemoveFile fname$
  3829. END SUB
  3830.  
  3831. '****************************************************************************
  3832. '** SUB LWP_RemoveFile(fname$)
  3833. '** Author:  SDB
  3834. '** Returns:   NONE
  3835. '****************************************************************************
  3836. SUB LWP_RemoveFile(fname$)
  3837.     IF DoesFileExist(fname$, femExists) THEN
  3838.         RemoveFile fname$, cmoForce
  3839.     END IF
  3840. END SUB
  3841.  
  3842. '****************************************************************************
  3843. '** SUB LWP_FinishSavePrevUserSettings(oldkey$, newkey$)
  3844. '** Author:  SDB
  3845. '** Returns:   NONE
  3846. '****************************************************************************
  3847. SUB LWP_FinishSavePrevUserSettings()
  3848.     DIM AppName$, TempVer$, NewVer$, TempKey$, NewKey$
  3849.     DIM notused%
  3850.  
  3851.     AppName$ = "WordPro"
  3852.    TempVer$ = "97.temp"
  3853.    NewVer$ = "97.0"
  3854.  
  3855.    TempKey$ = "Software\Lotus\" + AppName$ + "\" + TempVer$
  3856.    NewKey$ = "Software\Lotus\" + AppName$ + "\" + NewVer$
  3857.  
  3858.     notused% = Lot_RegDelAllSubKeys(HKEY_CURRENT_USER, TempKey$ + "\lwpuser.ini\InstalledPaths")
  3859.     notused% = Lot_RegDelAllSubKeys(HKEY_CURRENT_USER, TempKey$ + "\lwpuser.ini\Script Glossary")
  3860. 'print "1:  " notused%
  3861. '    notused% = Lot_RegDelAllSubKeys(HKEY_CURRENT_USER, TempKey$ + "\lwpuser.ini\WordProUser\BackupPath")
  3862. '    notused% = Lot_RegDelAllSubKeys(HKEY_CURRENT_USER, TempKey$ + "\lwpuser.ini\WordProUser\DocPath")
  3863. '    notused% = Lot_RegDelAllSubKeys(HKEY_CURRENT_USER, TempKey$ + "\lwpuser.ini\WordProUser\GraphicPath")
  3864. 'print "2:  " notused%
  3865.  
  3866.     'LWP_SavePrevUserSettings TempKey$ + "\", NewKey$ + "\", FALSE
  3867.  
  3868.     notused% = Lot_RegDelAllSubKeys(HKEY_CURRENT_USER, TempKey$)
  3869. 'print "3:  " notused%
  3870. END SUB
  3871.  
  3872.  
  3873. '****************************************************************************
  3874. '** SUB LWP_SavePrevUserSettings(oldkey$, newkey$)
  3875. '** Author:  SDB
  3876. '** Returns:   NONE
  3877. '****************************************************************************
  3878. SUB LWP_SavePrevUserSettings(oldkey$, newkey$, infoboxflag%)
  3879.  
  3880.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwp4wp.ini"
  3881.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwpdca.ini"
  3882.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwpeqn.ini"
  3883.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwphtml.ini"
  3884.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwpimage.ini"
  3885.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwptools.ini"
  3886.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwpuser.ini\ClickHere"
  3887.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwpuser.ini\SmartIcons"
  3888.     LWP_DispatchRegCopy "HCU", oldkey$, newkey$, "lwpuser.ini\WordProUser"
  3889.  
  3890.     If infoboxflag Then
  3891.         notused% = RegCopy("HCU", oldkey$ + "InfoBox", newkey$ + "lwpuser.ini\InfoBox")
  3892.     End if
  3893.  
  3894. END SUB
  3895.  
  3896. '****************************************************************************
  3897. '** SUB LWP_DispatchRegCopy
  3898. '** Author:  SDB
  3899. '** Returns:   NONE
  3900. '****************************************************************************
  3901. SUB LWP_DispatchRegCopy(hkey$, oldkey$, newkey$, copy$)
  3902.     notused% = RegCopy(hkey$, oldkey$ + copy$, newkey$ + copy$)
  3903. END SUB
  3904.  
  3905. '****************************************************************************
  3906. '** SUB LWP_RegeditFile(RegFile$)
  3907. '**
  3908. '** Purpose: Regedit -s a .reg file
  3909. '**
  3910. '** Author:  SDB
  3911. '** Arguments: .reg filename
  3912. '** Returns:   NONE
  3913. '****************************************************************************
  3914. SUB LWP_RegeditFile(Path$, RegFile$)
  3915.    DIM FullPath$, rc%
  3916.    FullPath$ = LWPLFN2SFN(Path$ + RegFile$)
  3917.     IF DoesFileExist(FullPath$, femExists) THEN
  3918.         rc% = Lot_Regedit(Path$, RegFile$)
  3919.     '    rc% = WinExec("regedit /s " + FullPath$, SW_HIDE)
  3920.     END IF
  3921. END SUB
  3922.  
  3923. '*************************************************************************
  3924. '** LWP_IsChapterIn(chapter$)
  3925. '** Author:       SDB
  3926. '** Returns:   0 or 1    or -1 if chapter not valid?
  3927. '*************************************************************************
  3928. FUNCTION LWP_IsChapterIn(chapter$)
  3929.    DIM chptname$
  3930.     chptname$ = Lot_GetChapterFromKeyword(chapter$)
  3931.     LWP_IsChapterIn = Lot_GetChapterValInt(chptname$, F_INOROUT)
  3932. END FUNCTION
  3933.  
  3934. '*************************************************************************
  3935. '** LWP_SetChapterInOut(chapter$, inout%)
  3936. '**
  3937. '**      inout% = 0 or 1
  3938. '**
  3939. '** Author:       SDB
  3940. '*************************************************************************
  3941. FUNCTION LWP_SetChapterInOut(chapter$, inout%)
  3942.    DIM chptname$, notused%
  3943.     chptname$ = Lot_GetChapterFromKeyword(chapter$)
  3944.     notused% = Lot_SetChapterFilesInCopyListInOrOut(chptname$, inout%)
  3945. END FUNCTION
  3946.  
  3947.  
  3948. '*************************************************************************
  3949. '** CheckLangForBackgroundSpell()
  3950. '** Author:       SDB
  3951. '*************************************************************************
  3952. SUB CheckLangForBackgroundSpell()
  3953.     DIM langID, dict$
  3954.  
  3955.     If GetListItem(SYM_INSTALLKINDS$, LWPProductNumber%) _
  3956.                                                 <> gLANGUAGEINSTALL$ Then
  3957.        langID = GetSysDefLangID()
  3958.  
  3959.         Select CASE GetPrimLangID(langID)
  3960.             CASE GetLangID_English()
  3961.                 If GetSubLangID(langID)    = GetSubLangID_Australian Then
  3962.                     dict$ = "WIN32SHRSPELLDICLANGAU"
  3963.                 Else
  3964.                     dict$ = "WIN32SHRSPELLDICLANGEN"
  3965.                 End if
  3966.             CASE GetLangID_French()
  3967.                 dict$ = "WIN32SHRSPELLDICLANGFR"
  3968.             CASE GetLangID_Spanish()
  3969.                 dict$ = "WIN32SHRSPELLDICLANGES"
  3970.             CASE GetLangID_Portuguese()
  3971.                 dict$ = "WIN32SHRSPELLDICLANGPT"
  3972.             CASE Else
  3973.                 dict$ = ""
  3974.         End Select
  3975. 'print "langID = " langID
  3976. 'print "Dict = " dict$
  3977. 'print "LWP_IsChapterIn( " LWP_IsChapterIn(dict$)
  3978. 'print "Lot_IsTheFeatureInstalled(dict$) = " Lot_IsTheFeatureInstalled(dict$)
  3979.  
  3980. ''        If (dict$ = "") OR (LWP_IsChapterIn(dict$) <> 1) Then
  3981.         If Lot_IsTheFeatureInstalled(dict$) = FALSE Then
  3982. 'print "disabling back spell"
  3983.             DisableBackgroundSpell
  3984.         End if
  3985.     End if
  3986. END SUB
  3987.  
  3988.  
  3989. '*************************************************************************
  3990. '** DisableBackgroundSpell()
  3991. '** Author:       SDB
  3992. '*************************************************************************
  3993. SUB DisableBackgroundSpell()
  3994.     const BackSpellOff = &H80
  3995.     const AppOptDefault = &H7D
  3996.  
  3997.     DIM rc%, szkey$, Value$, buff$, AppOptNum$
  3998.  
  3999.     buff$ = STRING$(256, 0)
  4000.    szkey$ = gREGLOTUS + "WordPro\97.0\lwpuser.ini\WordProUser"
  4001.     Value$ = "AppOptions"
  4002.     AppOptNum$ = CStr(AppOptDefault OR BackSpellOff)
  4003.  
  4004.     If Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, szkey$) THEN
  4005.         rc% = Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, szkey$, _
  4006.                Value$, REG_SZ, buff$, 256)
  4007.         If rc% = 0 Then
  4008.             buff$ = Left(buff$, Instr(buff$, Chr$(0)) - 1)
  4009.             AppOptNum$ = CStr(CInt(buff$) OR BackSpellOff)
  4010.         End if
  4011.     End if
  4012.  
  4013.    rc% = Lot_CreateRegKeyValueEx(HKEY_CURRENT_USER, szkey$, _
  4014.                Value$, REG_SZ, AppOptNum$, len(AppOptNum$) + 1)
  4015. END SUB
  4016.  
  4017. '*************************************************************************
  4018. '** DebugMsg1(msg$)
  4019. '** Author:       SDB
  4020. '*************************************************************************
  4021. SUB DebugMsg1(msg$)
  4022.    if gDebugMsg1 then
  4023.       print msg$
  4024.    end if
  4025. END SUB
  4026.  
  4027. '*************************************************************************
  4028. '** DebugMsg2(msg$)
  4029. '** Author:       SDB
  4030. '*************************************************************************
  4031. SUB DebugMsg2(msg$)
  4032.    if gDebugMsg2 then
  4033.       print msg$
  4034.    end if
  4035. END SUB
  4036.  
  4037. '*************************************************************************
  4038. '** DebugDirs()
  4039. '** Author:       SDB
  4040. '*************************************************************************
  4041. SUB DebugDirs()
  4042.    if gDebugDirs then
  4043.        print |
  4044. LWPDIR            |,,   GetSymbolValue("LWPDIR")               |
  4045. LWPLANGDIR        |,,   GetSymbolValue("LWPLANGDIR")           |
  4046. LWPICONDIR        |,,   GetSymbolValue("LWPICONDIR")           |
  4047. LWPTOURDIR        |,,   GetSymbolValue("LWPTOURDIR")           |
  4048. LWPGRAPHICSDIR    |,,   GetSymbolValue("LWPGRAPHICSDIR")       |
  4049. LWPBACKGROUNDSDIR |,,   GetSymbolValue("LWPBACKGROUNDSDIR")    |
  4050. LWPMASTERSDIR     |,,   GetSymbolValue("LWPMASTERSDIR")        |
  4051. LWPSAMPLESDIR     |,,   GetSymbolValue("LWPSAMPLESDIR")
  4052.    end if
  4053. END SUB
  4054.