home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 January / pcwk_01_1999_B.iso / Lotus123 / GERMAN / INSTALL.DSK / LANGUAGE.LSS < prev    next >
Text File  |  1996-10-09  |  30KB  |  777 lines

  1.  
  2. ''/*********************************************************************
  3. ''
  4. ''   Module Name:   language.lss
  5. ''
  6. ''   Module Code:   TOOLKIT
  7. ''
  8. ''   Author:              JMDonohue
  9. ''   Creation Date:  May 15, 1995
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1995
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''     Lotus script file for language processing in common install
  17. ''   
  18. ''   
  19. ''   Additional authors:
  20. ''
  21. ''   Change History:
  22. ''   $Log:   //CIT/VOL1/CFLOG/logfiles/cominst/toolkit/language.l@s  $
  23. '' 
  24. ''    Rev 1.45   17 Jul 1996 13:19:50   jdonohue
  25. '' Removed underscore from Chinese directory names
  26. '' 
  27. ''    Rev 1.44   16 Jul 1996 11:02:48   jdonohue
  28. '' Chinese split into Simplified (CH) and Traditional (ZH) per CKT
  29. '' 
  30. ''    Rev 1.43   04 Jun 1996 13:53:16   jdonohue
  31. '' Ref SPR:     BODN35QEPV
  32. '' Changed acronym for Pseudo builds from "PB" to "PD"
  33. '' 
  34. ''    Rev 1.42   24 Apr 1996 15:33:14   jdonohue
  35. '' Added phony "PB" language acronym, "Pseudo" directory for pseudo-language install
  36. '' 
  37. ''    Rev 1.41   17 Apr 1996 15:46:10   jdonohue
  38. '' Clean up comments
  39. '' 
  40. ''    Rev 1.40   01 Apr 1996 09:04:52   jdonohue
  41. '' Added functions  MarkLanguageSubdir and Lot_FixupLanguageDirectories to support
  42. '' new method of MLC handling wih revised C function FRefreshLanguageSource
  43. '' 
  44. ''    Rev 1.39   01 Mar 1996 09:25:32   jdonohue
  45. '' Don't use version major/minor and call C function AddLanguageToRegistry in
  46. '' AddRegistryLanguage.  This should eliminate delimiter problem in German, etc
  47. '' 
  48. ''    Rev 1.38   01 Feb 1996 15:23:44   cmoy
  49. '' HISHI: Merged FE changes
  50. '' 
  51. ''    Rev 1.37   11 Dec 1995 13:59:32   jdonohue
  52. '' Obsoleted functions RefreshLanguageSourceDirectories and
  53. '' MarkSourceLanguageSubdir
  54. '' 
  55. ''    Rev 1.36   27 Oct 1995 15:10:56   jdonohue
  56. '' Popup Language Install Message only for first product (suite or single prod)
  57. '' 
  58. ''    Rev 1.35   Oct 24 1995 16:56:32   cmoy
  59. '' removed eof char
  60. '' 
  61. ''    Rev 1.34   16 Oct 1995 10:54:30   jdonohue
  62. '' Removed high-bit (non ASCII) characters
  63. '' 
  64. ''    Rev 1.33   26 Sep 1995 16:35:46   jdonohue
  65. '' Removed extraneous line
  66. '' 
  67. ''    Rev 1.32   26 Sep 1995 16:14:56   jdonohue
  68. '' Replace C function FindRegistryLanguage with script function
  69. '' Local function IsLanguageInstalled has product name, version arguments
  70. '' PopupLanguageInstallMessage has product name as argument, not language acrony
  71. '' Added sub InitLanguages that records install kind for global and products
  72. '' Obsolete symbol SYM_INSTALLED_LANGUAGES$
  73. '' 
  74. ''    Rev 1.31   21 Sep 1995 15:11:08   jdonohue
  75. '' 
  76. '' Changed 0 to FALSE
  77. '' 
  78. ''    Rev 1.30   13 Sep 1995 08:01:46   jdonohue
  79. '' Removed error case from AddRegistryLanguage
  80. '' 
  81. ''    Rev 1.29   12 Sep 1995 11:55:32   jdonohue
  82. '' Added PopupLanguageInstallMessage for language install message
  83. '' 
  84. ''    Rev 1.28   11 Sep 1995 17:00:04   jdonohue
  85. '' No language install for distribution case
  86. '' 
  87. ''    Rev 1.27   24 Aug 1995 16:21:50   jdonohue
  88. '' Use string literal for language name in language install message
  89. '' 
  90. ''    Rev 1.26   21 Aug 1995 15:41:30   amontalv
  91. '' Put name of registry keys into globals.lss
  92. '' 
  93. ''    Rev 1.25   17 Aug 1995 15:02:54   jdonohue
  94. '' Added functions to handle node install of server secondary language
  95. '' 
  96. ''    Rev 1.24   15 Aug 1995 10:33:26   jdonohue
  97. '' Create registry language keys for language install if necessary
  98. '' 
  99. ''    Rev 1.23   14 Aug 1995 13:55:34   jdonohue
  100. '' Don't set language install for server install from registry values
  101. '' 
  102. ''    Rev 1.22   11 Aug 1995 12:58:50   jdonohue
  103. '' Language install if not primary language
  104. '' Added function IsLanguageInstalled
  105. '' 
  106. ''    Rev 1.21   10 Aug 1995 10:54:58   jdonohue
  107. '' Changed language install message box handling
  108. '' 
  109. ''    Rev 1.20   10 Aug 1995 07:50:52   jdonohue
  110. '' Switched arguments for language install message
  111. '' 
  112. ''    Rev 1.19   04 Aug 1995 15:17:48   jdonohue
  113. '' Made Lot_SetLanguageDirectory PUBLIC
  114. '' 
  115. ''    Rev 1.18   04 Aug 1995 11:57:08   jdonohue
  116. '' Fixed bug rewriting registry languages on reinstall
  117. '' 
  118. ''    Rev 1.17   25 Jul 1995 13:38:46   jdonohue
  119. '' Allow user to exit language install
  120. '' 
  121. ''    Rev 1.16   21 Jul 1995 08:13:38   jdonohue
  122. '' Added language acronyms from ccstr header
  123. '' 
  124. ''    Rev 1.15   20 Jul 1995 15:00:14   jdonohue
  125. '' Only pop up message box for language install
  126. '' 
  127. ''    Rev 1.14   18 Jul 1995 12:39:02   jdonohue
  128. '' Use standard Lotus Install title for language/reinstall message box
  129. '' 
  130. ''    Rev 1.13   12 Jul 1995 16:58:12   jdonohue
  131. '' Made Lot_SetLanguageDirectory more robust
  132. '' 
  133. ''    Rev 1.12   21 Jun 1995 14:02:00   jdonohue
  134. '' Creates installed and default language keys/values if necessary
  135. '' 
  136. ''    Rev 1.11   09 Jun 1995 16:45:58   jdonohue
  137. '' Lot_SetLanguageDirectory returns blank if language acronym blank
  138. '' 
  139. ''    Rev 1.10   05 Jun 1995 16:37:28   amontalv
  140. '' Made changes for migrating to LotusScript version 3.0.37.
  141. '' 
  142. ''    Rev 1.9   26 May 1995 15:33:22   jdonohue
  143. '' Exits initlanguage of product name or version not supplied
  144. '' 
  145. ''    Rev 1.8   24 May 1995 12:26:56   jdonohue
  146. '' Fixed chapter finding logic
  147. '' 
  148. ''    Rev 1.7   22 May 1995 11:03:50   jdonohue
  149. '' Made IsInstallLanguageSection local function
  150. '' 
  151. ''    Rev 1.6   19 May 1995 15:16:00   jdonohue
  152. '' Added product number argument to SetLanguageSectionsOn
  153. '' 
  154. ''    Rev 1.5   19 May 1995 14:56:26   jdonohue
  155. '' Added functions to turn language sections on, and to retrieve language subdir
  156. '' 
  157. ''    Rev 1.4   18 May 1995 15:37:06   jdonohue
  158. '' Added function to update registry installed languages
  159. '' 
  160. ''    Rev 1.3   18 May 1995 13:32:54   jdonohue
  161. '' Added function to generate language subdirectory
  162. '' 
  163. ''    Rev 1.2   18 May 1995 10:51:38   jdonohue
  164. '' Changed InitLanguage to be called by clients in XXX.LSS, e.g.
  165. '' 
  166. ''    Rev 1.1   17 May 1995 08:27:48   jdonohue
  167. '' Changed upgrade logic -- no message
  168. '' 
  169. ''    Rev 1.0   16 May 1995 17:12:46   jdonohue
  170. '' Initial Revision
  171. '' 
  172. ''----------------------------------------------------------------------
  173. ''   Date     Vers. Pgmr  SPR#  Change
  174. ''----------------------------------------------------------------------
  175. '' 05-15-95   0001  JMD         Initial
  176. ''
  177. ''----------------------------------------------------------------------
  178. ''
  179. ''*********************************************************************/
  180.  
  181. '**************************************************************************
  182. '*******************************  Windows API's  **************************
  183. '**************************************************************************
  184.  
  185. USE "RESOURCE"
  186. USE "GLOBALS"
  187. USE "SHARE"
  188. OPTION DECLARE
  189.  
  190. CONST LANGKEYWORD$="LANG"                
  191. DIM LanguagesInit AS INTEGER
  192. DIM LanguageDirectorySymbolList LIST AS STRING
  193. PUBLIC SrcDirResetFlag AS INTEGER    'Lets us know we've reset SYM_STF_BASEDIR
  194.                                             'for a node install in a secondary server
  195.                                             'language (!)
  196.  
  197. '**************************C CALLOUT PROTOTYPES*************************
  198.  
  199. 'OBSOLETE: !!SYM_INSTALLED_LANGUAGES$ symbol not used JMD@
  200. 'OBSOLETE: !! Should delete from bldcui C function JMD@
  201. 'DECLARE PUBLIC FUNCTION FindRegistryLanguages LIB "msshlstf.dll" _
  202. '         ALIAS "_FindRegistryLanguages@20" (ByVal szAppName$, ByVal VerMajor%, _
  203. '         ByVal VerMinor%, ByVal szInstalled$, ByVal nInstalled&) AS INTEGER
  204. DECLARE PUBLIC FUNCTION AddLanguageToRegistry LIB "msshlstf.dll" _
  205.          ALIAS "_AddLanguageToRegistry@16" (ByVal szAppName$, ByVal VerMajor%, _
  206.          ByVal VerMinor%, ByVal szLangKW$ ) AS LONG
  207. DECLARE PUBLIC FUNCTION FRefreshLanguageSource LIB "lcomstf.dll" _
  208.          ALIAS "_FRefreshLanguageSource@12" (ByVal szSymbol$, ByVal szLangKW$, ByVal Flag% ) AS INTEGER
  209.  
  210. DECLARE PUBLIC SUB InitLanguages(szProductName$, szProductVersion$, prodno%) 
  211. DECLARE PUBLIC SUB InitLanguage(szProductName$, szProductVersion$, _
  212.                         szInstallKind$, szLanguageSubdir$) 
  213. DECLARE PUBLIC SUB SetLanguageSubdir( szTarget$, szSource$ ) 
  214. DECLARE PUBLIC SUB AddRegistryLanguage(szProductName$, szProductVersion$) 
  215. DECLARE PUBLIC SUB Lot_SetLanguageSectionsOn (ProdNo%) 
  216. DECLARE PUBLIC FUNCTION Lot_SetLanguageDirectory(szLanguageAcronym$) AS STRING
  217. DECLARE PUBLIC SUB MarkLanguageSubdir(szSubdirSymbol$)
  218. DECLARE PUBLIC SUB Lot_FixupLanguageDirectories
  219. DECLARE PUBLIC FUNCTION IsServerSecondaryLanguage AS INTEGER
  220. DECLARE PUBLIC SUB PopupLanguageInstallMessage( lang$)
  221.  
  222. '** Private functions
  223. DECLARE FUNCTION IsInstallLanguageSection( szSectionKeyword$) AS INTEGER 
  224. DECLARE FUNCTION IsLanguageInstalled(szProductName$, szProductVersion$) AS INTEGER
  225. DECLARE FUNCTION FindRegistryLanguages(szProductName$, szProductVersion$) AS STRING
  226.  
  227. PUBLIC SUB InitLanguages(szProductName$, szProductVersion$, prodno%) 
  228. '*************************************************************************
  229. '** Purpose: Finds out the installed languages and determines the nature
  230. '**  of the install.  If not running automated, displays a message box for
  231. '**  language install; for an upgrade or a reinstall, just continues
  232. '**  Sets symbols for install kind for install and for individual products in 
  233. '**  Suite
  234. '**  
  235. '** Author: JMDonohue
  236. '** Arguments: 
  237. '**   szProductName$    Product name for registry, e.g., "Approach"
  238. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  239. '**   prodno%                 Product number from toolkit
  240. '**   
  241. '**  Obtains values for the following global symbols:
  242. '**   SYM_INSTALL_LANGUAGE$
  243. '**  Sets values for the following global symbols:
  244. '**   SYM_INSTALL_KIND$
  245. '**   SYM_INSTALL_KINDS$ (list)
  246. '**   
  247. '*************************************************************************
  248.     DIM szInstallKind$, szDummy$ 
  249.    DIM network$
  250.     network$ =  GetSymbolValue(SYM_NETWORK$) 
  251.     InitLanguage szProductName$, szProductVersion$, szInstallKind$, szDummy$  
  252.     '' No language install for server or distribution
  253.     IF network$ <> gSTANDARD AND network$ <> gNODE THEN 
  254.         szInstallKind$ = "SERVER"
  255.     END IF
  256.     ' Set the overall install kind based on first product (suite case)
  257.     IF prodno% = 1 THEN SetSymbolValue SYM_INSTALLKIND$, szInstallKind$
  258.     ' Set the product install kinds for client use in scripts
  259.     SetListItem SYM_INSTALLKINDS$, prodno%, szInstallKind$
  260. '** Inform the user what's happening (only for product 1 (suite or single))
  261.     IF prodno% <> 1 THEN EXIT SUB
  262.    IF szInstallKind$ =  gLANGUAGEINSTALL$ THEN _
  263.         PopupLanguageInstallMessage(LdString(SID_123)) '** GEMINI
  264. END SUB
  265.  
  266.  
  267. PUBLIC SUB InitLanguage(szProductName$, szProductVersion$, _
  268.                         szInstallKind$, szLanguageSubdir$) 
  269. '*************************************************************************
  270. '** Purpose: Finds out the installed languages and determines the nature
  271. '**  of the install.  If not running automated, displays a message box for
  272. '**  language install; for an upgrade or a reinstall, just continues
  273. '**  
  274. '** Author: JMDonohue
  275. '** Arguments: 
  276. '**   szProductName$    Product name for registry, e.g., "Approach"
  277. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  278. '**   Returns:
  279. '**   szInstallKind$    One of:  gUPGRADE
  280. '**                              gREINSTALL
  281. '**                              gLANGUAGEINSTALL
  282. '**   szLanguageSubdir$ Subdirectory name for other than primary language 
  283. '**                     files, e.g., "Francais"
  284. '**   
  285. '**  Obtains values for the following global symbols from resources:
  286. '**   SYM_INSTALL_LANGUAGE$
  287. '**   
  288. '**  Sets the following global symbols:
  289. '**   SYM_LANGUAGE_SUBDIR$     
  290. '*************************************************************************
  291.    DIM  i%, dbl#, s$, lang$, network$
  292.    DIM szInstalled$, nInstalled& 
  293.    nInstalled = 128        'Size of installed languages string
  294.     
  295.     szInstallKind$ = gUPGRADE$        'Default
  296. '** Set language of install and its subdirectory (once only)
  297.    if LanguagesInit  = 0 Then
  298.       s$ = LdString(SID_LANGUAGE)
  299.       SetSymbolValue SYM_INSTALL_LANGUAGE$, s$
  300.       s$ = Lot_SetLanguageDirectory(s$) 
  301.       SetSymbolValue SYM_LANGUAGE_SUBDIR$, s$
  302.       LanguagesInit  = 1
  303.    End if
  304.  
  305.    IF szProductName$ = "" THEN EXIT SUB
  306.    IF szProductVersion$ = "" THEN EXIT SUB
  307.     network$ =  GetSymbolValue(SYM_NETWORK$) 
  308.     ' MLC Does not apply to distribution, and server determines it from
  309.     ' cinstall.ini
  310.     IF network$ = gSERVER$ THEN EXIT SUB
  311.     IF network$ = gDISTRIBUTION$ THEN EXIT SUB
  312.    szInstalled$ = STRING$(nInstalled&, 0) 
  313. '** Find the list of installed languages for product/version
  314.    szInstalled$ = FindRegistryLanguages(szProductName$, szProductVersion$)
  315.    szInstalled$ = NullTrim(szInstalled$)
  316.    if szInstalled$ = "" Then
  317. '** Product/version not installed == Upgrade
  318.       SetSymbolValue SYM_INSTALLKIND$, gUPGRADE$
  319.       szInstallKind$ = gUPGRADE$
  320.       szLanguageSubdir$ = ""  '** Goes in with content
  321.       EXIT Sub
  322.    end if
  323. '** Find out if our language is primmary
  324.    lang$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  325.    s$ = Lot_GetNthFieldFromIniString(szInstalled$, 1, "") 
  326.     s$ = LEFT(s$, 2)    ' Paranoia
  327.    if s$ = lang$ then
  328.    '** Found the primary language and the version, must be reinstall
  329.       szInstallKind$ =  gREINSTALL$
  330.       szLanguageSubdir$ = ""     '** Goes in with content
  331.       EXIT Sub
  332.    end if
  333. '** Got this far, we must be language install, set the directory and kind
  334.    szLanguageSubdir$ = GetSymbolValue (SYM_LANGUAGE_SUBDIR$)
  335.    szInstallKind$ =  gLANGUAGEINSTALL$
  336.    
  337. END SUB
  338.  
  339. '**************************************************************************
  340. '** SUB PopupLanguageInstallMessage( szProductName$)
  341. '** Purpose: Displays a dialog telling the user a language install is
  342. '** occurring and requesting confirmation; if answered no, exits install
  343. '**  
  344. '** Author: JMDonohue
  345. '** Arguments: szProductName$    Product Name
  346. '**   
  347. '*************************************************************************
  348. PUBLIC SUB PopupLanguageInstallMessage( szProductName$)
  349.     DIM msg$, i%, s$, title$, rc&
  350.     
  351. '** Set the standard title for install messages
  352.    title$ = LdString(SID_TKT_STD_TITLE)
  353.     msg$  = LdString(SID_LANGUAGEINSTALL_MSG)
  354.    i% = instr(msg$,"%s")
  355.    s$ = mid$(msg$, 1, i%-1) + szProductName$ + mid$(msg$, i%+2)
  356.    if GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN EXIT SUB
  357.     DO
  358.       rc& = DoMsgBox(s$, title$, MB_YESNO)
  359.         if CINT(rc&) = IDYES  THEN 
  360.             EXIT SUB
  361.         ELSE
  362.             QUIT
  363.         END IF
  364.     LOOP 
  365. END SUB
  366.  
  367. '**************************************************************************
  368. '** FUNCTION IsInstallLanguageSection( szSectionKeyword$) AS INTEGER
  369. '** Purpose: Determines if section is part of a language pack for the language
  370. '** currently being installed by matching the ending of the name with the
  371. '** keyword "LANG??" where "??" is a two character acronym for the language
  372. '**  
  373. '** Author: JMDonohue
  374. '** Arguments: szSectionKeyword$    keyword for section from .inf file
  375. '** Returns:   TRUE if a section for the language we are installing
  376. '**  Uses the following global symbols: 
  377. '**   SYM_INSTALL_LANGUAGE$
  378. '**   
  379. '*************************************************************************
  380. FUNCTION IsInstallLanguageSection( szSectionKeyword$) AS INTEGER
  381.    DIM LangKey$, LangAcronym$, InstallLanguage$, s$, leng%
  382.    s$ = szSectionKeyword$
  383.    leng% = Len(s$)
  384.    if leng% < 6 Then
  385.       IsInstallLanguageSection = FALSE
  386.    Else
  387.    LangKey$ = UCase$(Right$(s$,6))
  388.    LangAcronym$ = Right$(LangKey$,2)
  389.    InstallLanguage$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  390.  
  391.    LangKey$ = Left$(LangKey$,4)
  392.    If LangKey$ = LANGKEYWORD$ Then
  393.       If LangAcronym$ = InstallLanguage$ Then
  394.          IsInstallLanguageSection = TRUE
  395.       Else
  396.          IsInstallLanguageSection = FALSE
  397.       End if
  398.    Else
  399.       IsInstallLanguageSection = FALSE
  400.    End if
  401.    End if
  402. END FUNCTION
  403.  
  404.  
  405. FUNCTION IsLanguageInstalled(szProductName$, szProductVersion$) AS INTEGER
  406. '**************************************************************************
  407. '** Purpose: Determines if the current language is already installed by 
  408. '** examining the registry entries for product/version
  409. '**  
  410. '** Author: JMDonohue
  411. '** Arguments: 
  412. '**   szProductName$    Product name for registry, e.g., "Approach"
  413. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  414. '** 
  415. '** Returns:   Index of language, or 0 if not installed
  416. '**  Uses the following global symbols: 
  417. '**   SYM_INSTALL_LANGUAGE$
  418. '**   
  419. '*************************************************************************
  420.    DIM lang$, installed$, s$, i%
  421.  
  422.     IsLanguageInstalled = 0
  423.     i% = 1
  424.     lang$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  425.    installed$ = FindRegistryLanguages(szProductName$, szProductVersion$)
  426.     if installed$ = "" THEN EXIT FUNCTION
  427.     DO
  428.         s$ = Lot_GetNthFieldFromIniString(installed$ , i%, "") 
  429.         s$ = LEFT(s$, 2)        ' Paranoia
  430.         if s$ = lang$ then
  431.             IsLanguageInstalled = i%
  432.             EXIT FUNCTION
  433.         end if
  434.         i% = i% + 1
  435.     LOOP WHILE (s$<>"")
  436. END FUNCTION
  437.  
  438.  
  439. '**************************************************************************
  440. '** SUB SetLanguageSubdir( szTarget$, szSource$ ) 
  441. '** Purpose: For a language install, sets the value of target symbol to the
  442. '**   value of source symbol with the language subdirectory appended
  443. '**  
  444. '** Author: JMDonohue
  445. '** Arguments: szTarget$   Target symbol for language subdirectory
  446. '**            szSource$   Symbol for base component directory
  447. '** Returns:   
  448. '**  Uses the following global symbols: 
  449. '**   SYM_LANGUAGE_SUBDIR$
  450. '**   
  451. '*************************************************************************
  452. PUBLIC SUB SetLanguageSubdir( szTarget$, szSource$ ) 
  453.     DIM s$
  454.     s$ = GetSymbolValue(SYM_LANGUAGE_SUBDIR$) + "\"
  455.     s$ = MakePath(GetSymbolValue(szSource$), s$) 
  456.    SetSymbolValue szTarget$, s$ 
  457. END SUB
  458.  
  459.  
  460. '*************************************************************************
  461. '** SUB AddRegistryLanguage(szProductName$, szProductVersion$)
  462. '** Purpose: When a language install completes, updates the list of 
  463. '** installed languages for the product/version; for a first time install,
  464. '** create the appropriate key and value
  465. '**  
  466. '** Author: JMDonohue
  467. '** Arguments: 
  468. '**   szProductName$    Product name for registry, e.g., "Approach"
  469. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  470. '**   Returns: TRUE if successful
  471. '** 
  472. '**************************************************************************
  473. PUBLIC SUB AddRegistryLanguage(szProductName$, szProductVersion$)
  474.    DIM szLangKW$, Ret&
  475.    DIM VerMajor%, VerMinor%, dbl#
  476.     DIM szkey$, keyvalue$, s$
  477.  
  478.     IF szProductName$ = "" THEN EXIT SUB
  479.     IF szProductVersion$ = "" THEN EXIT SUB
  480.    szkey$ = gREGLOTUS + szProductName$ + "\" + szProductVersion$ + "\Languages"
  481.    szLangKW$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  482.  
  483. '** Create the key if it doesn't exist or add to existing value
  484.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$) = FALSE THEN
  485.         Ret& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey$)
  486.         'if Ret& <> 0 then print "Could not create registry key " szkey$
  487. '** New product/version, create language registry values
  488.         keyvalue$ = "Installed"
  489.         Ret& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, _
  490.             REG_SZ, szLangKW$, lenbp(szLangKW$)+1)
  491.         'if Ret& <> 0 then print "Could not create registry value " szkey$
  492.         keyvalue$ = "Default"
  493.         Ret& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, _
  494.             REG_SZ, szLangKW$, lenbp(szLangKW$)+1)
  495.         'if Ret& <> 0 then print "Could not create registry value " szkey$
  496.     ELSE
  497. '** Add the current language to the "Installed" key in registry if not already
  498. '** there
  499.  
  500.         IF IsLanguageInstalled(szProductName$, szProductVersion$) <> 0 THEN EXIT SUB
  501.  
  502.         s$ = FindRegistryLanguages(szProductName$, szProductVersion$) 
  503.         s$ = s$ + "," + szLangKW$ 
  504.         keyvalue$ = "Installed"
  505.         Ret& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, _
  506.             REG_SZ, s$, lenbp(s$)+1)
  507.     END IF
  508.    
  509. END SUB
  510.  
  511.  
  512. '*************************************************************************
  513. '** SUB Lot_SetLanguageSectionsOn (ProdNo%)
  514. '**
  515. '** Purpose:   Sets language sections for copying (off by default)
  516. '** Author:    Jack Donohue
  517. '** Arguments: ProdNo%    Product number 
  518. '** Returns:   
  519. '*************************************************************************
  520. PUBLIC SUB Lot_SetLanguageSectionsOn (ProdNo%) 
  521. DIM rc%, keyword$, chapter$, feature$, sym$, Sib$
  522.  
  523.    Sib$ = Lot_GetNextSibling(Str$(ProdNo%), F_NOTHING )
  524.    chapter$ = Lot_GetFirstChild(Str$(ProdNo%), F_NOTHING )
  525.                
  526. %rem     
  527.     If (chapter$ = "") then
  528.          ERROR STFQUIT
  529.     End if   
  530. %endrem     
  531.          
  532.     WHILE (chapter$ <> Sib$ )
  533.       '** Traverse all chapters, looking for sections with the language
  534.       '** keyword; if they belong to an installed feature, turn them on
  535.  
  536.       keyword$ = Lot_GetChapterValStr (chapter$, F_KEYWORD)
  537.       If IsInstallLanguageSection(keyword$) = TRUE Then
  538.          feature$ = Left(keyword$, Len(keyword$)-6)
  539.          feature$ = Lot_GetChapterFromKeyword (feature$)
  540.          rc% = Lot_GetChapterValInt (feature$, F_INOROUT)   
  541.          If rc% = 1 Then
  542.             rc% = Lot_SetChapterFilesInCopyListInOrOut (chapter$, 1)
  543.          End If
  544.       End If
  545.       '*** Goto next chapter
  546.       chapter$ = Lot_GetNext()  
  547.     WEND
  548. END SUB
  549.  
  550.  
  551. DIM LANGUAGEDIR LIST AS STRING
  552.  
  553. '*************************************************************************
  554. '** PUBLIC FUNCTION Lot_SetLanguageDirectory(szLanguageAcronym$) AS STRING
  555. '** Purpose: Looks up the directory name corresponding to the two letter
  556. '**   language acronym in internal table
  557. '**  
  558. '**  The acronyms are from the ccstr header file; language directory names
  559. '**  other than those commented need to be supplied
  560. '**  
  561. '** Author: JMDonohue
  562. '** Arguments: 
  563. '**   szLanguageAcronym$    Language acronym, e.g., "FR"
  564. '**   Returns: Subdirectory string, e.g., "Francais"
  565. '**************************************************************************
  566. PUBLIC FUNCTION Lot_SetLanguageDirectory(szLanguageAcronym$) AS STRING
  567.    if LanguagesInit  = 0 Then
  568. '**NOTE: Need to complete this sections, and/or resource it    
  569. '?? Catala: 6 characters [Catala]
  570.         LANGUAGEDIR("AM") = "Amharic"
  571.         LANGUAGEDIR("AR") = "Arabi"            'Arabic
  572.         LANGUAGEDIR("AS") = "Assamese"
  573.         LANGUAGEDIR("AY") = "Aymara"
  574.         LANGUAGEDIR("AZ") = "Azerbaijani"
  575.         LANGUAGEDIR("BE") = "Byelorussian"
  576.         LANGUAGEDIR("BG") = "Bulgarian"
  577.         LANGUAGEDIR("BN") = "Bengali"
  578.         LANGUAGEDIR("BO") = "Tibetan"
  579.         LANGUAGEDIR("CA") = "Catalan"
  580.         'CKT
  581.         LANGUAGEDIR("CH") = "ChineseS"            'Simplified Chinese
  582.         LANGUAGEDIR("CS") = "Ceska"            'Czech
  583.         LANGUAGEDIR("CY") = "Welsh"
  584.         LANGUAGEDIR("DA") = "Dansk"            'Danish
  585.         LANGUAGEDIR("DE") = "Deutsch"            'German
  586.         LANGUAGEDIR("EL") = "Hellenic"        'Greek
  587.         LANGUAGEDIR("EN") = "English"            'English
  588.         LANGUAGEDIR("EO") = "Esperanto"
  589.         LANGUAGEDIR("ES") = "Espanol"            'Spanish
  590.         LANGUAGEDIR("ET") = "Estonian"
  591.         LANGUAGEDIR("EU") = "Basque"
  592.         LANGUAGEDIR("FA") = "Farsi"            'Farsi
  593.         'LANGUAGEDIR("FA") = "Persian"
  594.         LANGUAGEDIR("FI") = "Suomi"            'Finnish
  595.         LANGUAGEDIR("FO") = "Faeroese"
  596.         LANGUAGEDIR("FR") = "Francais"        'French
  597.         LANGUAGEDIR("GN") = "Guarani"
  598.         LANGUAGEDIR("GU") = "Gujarati"
  599.         LANGUAGEDIR("HI") = "Hindi"
  600.         LANGUAGEDIR("HR") = "Croatian"
  601.         LANGUAGEDIR("HU") = "Magyar"            'Hungarian
  602.         LANGUAGEDIR("HY") = "Armenian"
  603.         LANGUAGEDIR("IN") = "Indonesian"
  604.         LANGUAGEDIR("IS") = "Icelandic"
  605.         LANGUAGEDIR("IT") = "Italian"            'Italian
  606.         LANGUAGEDIR("IW") = "Hebrew"            'Hebrew
  607.         LANGUAGEDIR("JA") = "Japanese"        'Japanese
  608.         LANGUAGEDIR("JI") = "Yiddish"
  609.         LANGUAGEDIR("KA") = "Georgian"
  610.         LANGUAGEDIR("KK") = "Kazakh"
  611.         LANGUAGEDIR("KM") = "Khmer"
  612.         LANGUAGEDIR("KN") = "Kannada"
  613.         LANGUAGEDIR("KO") = "Korean"            'Korean
  614.         LANGUAGEDIR("KS") = "Kashmiri"
  615.         LANGUAGEDIR("KU") = "Kurdish"
  616.         LANGUAGEDIR("KY") = "Kirghiz"
  617.         LANGUAGEDIR("LA") = "Latin"
  618.         LANGUAGEDIR("LO") = "Lao"
  619.         LANGUAGEDIR("LT") = "Lithuanian"
  620.         LANGUAGEDIR("LV") = "Latvian"
  621.         LANGUAGEDIR("LV") = "Lettish"
  622.         LANGUAGEDIR("MG") = "Malagasy"
  623.         LANGUAGEDIR("MK") = "Macedonian"
  624.         LANGUAGEDIR("ML") = "Malayalam"
  625.         LANGUAGEDIR("MN") = "Mongolian"
  626.         LANGUAGEDIR("MO") = "Moldavian"
  627.         LANGUAGEDIR("MR") = "Marathi"
  628.         LANGUAGEDIR("MY") = "Burmese"
  629.         LANGUAGEDIR("NE") = "Nepali"
  630.         LANGUAGEDIR("NL") = "Nederlan"        'Dutch
  631.         LANGUAGEDIR("NO") = "Norsk"            'Norwegian
  632.         LANGUAGEDIR("OR") = "Oriya"
  633.         LANGUAGEDIR("PA") = "Punjabi"
  634.         LANGUAGEDIR("PL") = "Polski"            'Polish
  635.         LANGUAGEDIR("PS") = "Pashto"
  636.         LANGUAGEDIR("PT") = "Portugue"        'Portuguese
  637.         LANGUAGEDIR("QU") = "Quechua"
  638.         LANGUAGEDIR("RM") = "RhaetoRomanic"
  639.         LANGUAGEDIR("RO") = "Romanian"
  640.         LANGUAGEDIR("RU") = "Russkiy"            'Russian
  641.         LANGUAGEDIR("SA") = "Sanskrit"
  642.         LANGUAGEDIR("SD") = "Sindhi"
  643.         LANGUAGEDIR("SH") = "Serbocroatian"
  644.         LANGUAGEDIR("SI") = "Sinhalese"
  645.         LANGUAGEDIR("SK") = "Slovenci"        'Slovak
  646.         LANGUAGEDIR("SL") = "Slovenian"
  647.         LANGUAGEDIR("SO") = "Somali"
  648.         LANGUAGEDIR("SQ") = "Albanian"
  649.         LANGUAGEDIR("SR") = "Serbian"
  650.         LANGUAGEDIR("SV") = "Svenska"            'Swedish
  651.         LANGUAGEDIR("SW") = "Swahili"
  652.         LANGUAGEDIR("TA") = "Tamil"
  653.         LANGUAGEDIR("TE") = "Telugu"
  654.         LANGUAGEDIR("TG") = "Tajiki"
  655.         LANGUAGEDIR("TH") = "Thai"                'Thai
  656.         LANGUAGEDIR("TI") = "Tigrinya"
  657.         LANGUAGEDIR("TK") = "Turkmen"
  658.         LANGUAGEDIR("TL") = "Tagalog"
  659.         LANGUAGEDIR("TR") = "Turkce"            'Turkish
  660.         LANGUAGEDIR("TT") = "Tatar"
  661.         LANGUAGEDIR("UK") = "Ukrainian"
  662.         LANGUAGEDIR("UR") = "Urdu"
  663.         LANGUAGEDIR("UZ") = "Uzbek"
  664.         LANGUAGEDIR("VI") = "Vietnamese"
  665.         'CKT
  666.         LANGUAGEDIR("ZH") = "ChineseT"            'Traditional Chinese
  667.         LANGUAGEDIR("PD") = "Pseudo"            'Special for pseudo-language testing
  668.    End if
  669.     if szLanguageAcronym$ = "" then
  670.         Lot_SetLanguageDirectory = ""
  671.         exit function
  672.     end if    
  673.     if (ISELEMENT(LANGUAGEDIR(szLanguageAcronym$)) <> 0 ) then
  674.         Lot_SetLanguageDirectory = LANGUAGEDIR(szLanguageAcronym$) 
  675.     Else
  676.         Lot_SetLanguageDirectory = ""
  677.     End if
  678. END FUNCTION 
  679.  
  680.  
  681. CONST    FIXUPSOURCE = 1
  682. CONST FIXUPDEST    = 2
  683. CONST FIXUPBOTH    = 3
  684.  
  685. PUBLIC SUB Lot_FixupLanguageDirectories
  686. '*************************************************************************
  687. '** Purpose: Changes the source filepath to include the language subdirectory
  688. '**   This is only required for node install from a server in a secondary
  689. '**    language, since the content files have been installed in subdirectories
  690. '**    Traverses the list of destination path symbols that have been made by
  691. '**    MarkLanguageSubdir and inserts the language subdirectory as the
  692. '**    last path element in the filename
  693. '**      Required fixup:
  694. '**    Standard    MLC Install    Destination
  695. '**    Server    MLC Install    Destination
  696. '**    Node        MLC Install    Destination
  697. '**    Server    Secondary Server Language    Source
  698. '**  
  699. '**  NOTE: Language install based on FIRST product (or suite)
  700. '**  
  701. '** Author: JMDonohue
  702. '**************************************************************************
  703.     DIM Flag%, network$, ret%
  704.     network$ = GetSymbolValue(SYM_NETWORK$)
  705.     IF network$ = gDISTRIBUTION$ THEN EXIT SUB
  706.  
  707.     Flag% = 0
  708.    IF GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$ THEN _
  709.         Flag% = Flag% + FIXUPDEST
  710.     IF IsServerSecondaryLanguage THEN Flag% = Flag% + FIXUPSOURCE
  711.     FORALL sym IN LanguageDirectorySymbolList 
  712.         ret% = FRefreshLanguageSource(ListTag(sym), sym, Flag)
  713.     END FORALL
  714. END SUB
  715.  
  716. PUBLIC SUB MarkLanguageSubdir(szSubdirSymbol$)
  717. '*************************************************************************
  718. '** Purpose: Adds the symbol to a list of subdirectory symbols that must
  719. '**    have a language subdirectory added to the source and/or destination
  720. '**  
  721. '** Author: JMDonohue
  722. '** Arguments: szSubdirSymbol$    Language dependent destination directory symbol
  723. '**************************************************************************
  724.     DIM s$
  725.     s$ = GetSymbolValue(SYM_LANGUAGE_SUBDIR$) + "\"
  726.     if (ISELEMENT(LanguageDirectorySymbolList(szSubdirSymbol$)) = 0 ) then _
  727.         LanguageDirectorySymbolList(szSubdirSymbol$) = s$ 
  728. END SUB
  729.  
  730.  
  731. PUBLIC FUNCTION IsServerSecondaryLanguage AS INTEGER
  732. '*************************************************************************
  733. '**  FUNCTION IsServerSecondaryLanguage AS INTEGER
  734. '** Purpose: Determines is the current language is a secondary language on
  735. '**    the server, in which case clients must mark language symbols for 
  736. '**    resetting source file locations
  737. '**  
  738. '** Author: JMDonohue
  739. '** Arguments: 
  740. '** Returns:   TRUE if language is server secondary
  741. '**************************************************************************
  742.     DIM s$, installini$, proddir$
  743.  
  744.     IsServerSecondaryLanguage  = FALSE
  745. ' If the install directory is not the same as the base product directo
  746. ' install must be in a language subdirectory
  747.     s$ = GetSymbolValue(SYM_STF_CWDDIR$)
  748.     installini$ = s$ + gINSTALLINI$
  749.     s$ = GetIniKeyString(installini$, "Critical Directories", "INSTDIR")
  750.     proddir$ = GetIniKeyString(installini$, "Critical Directories",_
  751.         Reg_GetProductAcronym(1) + "DIR")
  752.     IF s$ <> proddir$ THEN IsServerSecondaryLanguage  = TRUE
  753.  
  754. END FUNCTION
  755.  
  756. FUNCTION FindRegistryLanguages(szProductName$, szProductVersion$) AS STRING
  757. '*************************************************************************
  758. '** Purpose: Find out what languages have been installed for the product
  759. '**  
  760. '** Author: JMDonohue
  761. '** Arguments: szProductName$        Product name in registry
  762. '**                szProductVersion$    Product version in registry
  763. '** 
  764. '** Returns:   List of installed languages
  765. '**************************************************************************
  766.    DIM szkey$, ret&, nsize&, gbuf$ 
  767.     FindRegistryLanguages = ""
  768.    szkey$ = gREGLOTUS + szProductName$ + "\" + szProductVersion$ + "\Languages"
  769.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$) = FALSE THEN EXIT FUNCTION
  770.     gbuf$=CreateBuffer(256)
  771.     nsize& = Len(gbuf$)
  772.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, "Installed", 0, gbuf$, nsize&) 
  773.     FindRegistryLanguages = NullTrim(gbuf$)
  774.     gbuf$=""
  775.  
  776. END FUNCTION
  777.