home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / Extras / Fastsite / install.dsk / SETUPAPI.LSS < prev    next >
Encoding:
Text File  |  1997-07-08  |  141.0 KB  |  3,965 lines

  1. ''/*********************************************************************
  2. ''
  3. ''   Module Name:   setupapi.lss
  4. ''
  5. ''   Module Code:   TOOLKIT
  6. ''
  7. ''   Author:              
  8. ''
  9. ''   Creation Date:  Aug 31, 1993
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1991
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''     Lotus script file for common install
  17. ''   
  18. ''   
  19. ''   Additional authors:
  20. ''
  21. ''   Change History:
  22. ''   $Log:   //SS_DEV/INSTLOG/CI/cominst/toolkit/setupapi.lss  $
  23. '' 
  24. ''    Rev 1.126   08 Jul 1997 11:36:52   jdonohue
  25. '' Added multi-user support functions: CreateDefault, FCreateDefault, FIsMultiUser
  26. '' 
  27. ''    Rev 1.125   02 Jul 1997 11:23:52   jdonohue
  28. '' CAndo (Japan) changes:
  29. '' FindWindow has LONG return type
  30. '' 
  31. ''    Rev 1.124   01 Jul 1997 14:43:34   jdonohue
  32. '' Added SetInternetProxies declaration
  33. '' 
  34. ''    Rev 1.123   27 Jun 1997 16:36:06   jdonohue
  35. '' Implemented Lot_RegisterREGTemplate registry file processing
  36. '' 
  37. ''    Rev 1.122   19 Jun 1997 14:32:14   cmoy
  38. '' Added MIF creation
  39. '' 
  40. ''    Rev 1.121   19 Jun 1997 13:54:26   jdonohue
  41. '' Changed Lot_RegisterOCX to FLot_RegisterOCX
  42. '' 
  43. ''    Rev 1.120   17 Jun 1997 13:24:36   jdonohue
  44. '' Declared IsAdmin C function
  45. '' Commented out ErrorMsg in Lot_CreateIniKeyValue call (?)
  46. '' 
  47. ''    Rev 1.119   24 Jun 1996 15:53:00   jdonohue
  48. '' Ref SPR:     RWIS36THFG
  49. '' Fixed problem with UNC paths in functions GetWindowsDir and GetWindowsSysDir
  50. '' Added terminal backslash to return value in GetWindowsDir and GetWindowsSysDir
  51. '' 
  52. ''    Rev 1.118   14 Jun 1996 16:42:28   jdonohue
  53. '' Added RebootLater Flag to indicate reboot required but deferred
  54. '' 
  55. ''    Rev 1.117   10 Jun 1996 15:04:20   mhishinu
  56. '' Replaced three LEFT calls with LEFTBP to fix DBCS bug.
  57. '' 
  58. ''    Rev 1.116   10 Jun 1996 11:06:48   jdonohue
  59. '' Ref SPR:     GEM16136
  60. '' Added call to Lot_TrimEndslash in Lot_CreateRegKeyValueEx
  61. '' Moved Lot_TrimEndSlash to setupapi.lss
  62. '' 
  63. ''    Rev 1.115   06 Jun 1996 13:55:38   jdonohue
  64. '' Removed reference to obsolete MS-Setup function FIsDirWritable
  65. '' 
  66. ''    Rev 1.114   30 May 1996 12:15:18   jdonohue
  67. '' Added Lot_ShellExec function
  68. '' 
  69. ''    Rev 1.113   22 May 1996 15:24:56   jdonohue
  70. '' Replaced LEFTBP calls with LEFT
  71. '' 
  72. ''    Rev 1.112   02 May 1996 09:21:00   glutz
  73. '' Added function RemovePriorVersion() for sspawning Uninstall.
  74. '' 
  75. ''    Rev 1.111   25 Apr 1996 13:57:50   schen
  76. '' backed out addition of closedown function
  77. '' 
  78. ''    Rev 1.109   03 Apr 1996 13:39:08   jdonohue
  79. '' Ref SPR: ODMOO335PU6
  80. '' Added function Lot_DeleteFile and wrappers for old MS Setup functions 
  81. '' FValidFATPath and FValidPath that call Lot_ValidPath
  82. '' 
  83. ''    Rev 1.108   29 Mar 1996 12:34:20   jdonohue
  84. '' Moved  Lot_IsNewShell from lcomstf.dll to mscuistf.dll
  85. '' 
  86. ''    Rev 1.107   29 Feb 1996 13:50:44   jdonohue
  87. '' Ref SPR: SSAO334QY4
  88. '' Changed RegCloseKeyA to RegCloseKey in alias 
  89. '' 
  90. ''    Rev 1.106   28 Feb 1996 12:16:44   jdonohue
  91. '' Added declarations of Lot_RegisterOCX and Lot_UnRegisterOCX
  92. '' 
  93. ''    Rev 1.105   24 Jan 1996 16:17:32   jdonohue
  94. '' Ref SPR:      JHOH327JRZ
  95. '' Fixed error in IsNewShell return value
  96. '' 
  97. ''    Rev 1.104   23 Jan 1996 16:15:22   cmoy
  98. '' HISHI: Merged FE changes
  99. '' 
  100. ''    Rev 1.103   18 Jan 1996 16:51:12   jdonohue
  101. '' Changed IsNewShell function to call C routine Lot_IsNewShell
  102. '' 
  103. ''    Rev 1.102   12 Jan 1996 10:01:16   jdonohue
  104. '' Added flag for server install to shared windows location
  105. '' 
  106. ''    Rev 1.101   28 Dec 1995 10:55:34   jdonohue
  107. '' Replaced MS Setup call CbGetEnvVariableValue with WIn API call GetEnvironmentVariable
  108. '' 
  109. ''    Rev 1.100   21 Dec 1995 14:15:52   jdonohue
  110. '' Removed obsolete functions
  111. '' Replaced MS Setup call CbGetIniKeyString with Windows call 
  112. '' GetPrivateProfileString
  113. '' 
  114. ''    Rev 1.99   Oct 24 1995 16:55:02   cmoy
  115. '' removed eof char
  116. '' 
  117. ''    Rev 1.98   24 Oct 1995 11:33:14   glutz
  118. '' IsLonfDirPath checks validity of symbols before manipulating them.
  119. '' Lot_GetRegKeyValueEx passes local buffer size to GetRegKeyValueEx.
  120. '' 
  121. ''    Rev 1.97   23 Oct 1995 18:25:56   tveerapp
  122. '' Fixed spr#???. TV and PDonahue. Modified Lot_GetRegKeyValue. Checks if the
  123. '' GetRegKeyValue call returned error_success and dwType is not REG_NONE.
  124. '' 
  125. ''    Rev 1.96   22 Oct 1995 17:27:34   cmoy
  126. '' HISHI: Added GetDBCSSymbolValue and GetDBCSListItem functions
  127. '' They are valid for double-byte characters.
  128. '' Reg_GetRootFolder, GetGroupName and PROGMANGROUPCB call them.
  129. '' 
  130. ''    Rev 1.95   22 Sep 1995 12:52:56   jdonohue
  131. '' Changed LdString string size limit back to 255 because of RED limitation
  132. '' 
  133. ''    Rev 1.94   22 Sep 1995 12:17:40   amontalv
  134. '' Check for focus before making change to Program Folder entry in tree from edit line.
  135. '' 
  136. ''    Rev 1.93   15 Sep 1995 17:02:38   glutz
  137. '' SetSybolValue will error out if the symbol name string is empty.
  138. '' 
  139. ''    Rev 1.92   13 Sep 1995 17:09:18   amontalv
  140. '' Moved Lot_RegAppPath from setupapi.lss to toolkit.lss and also added a parameter.
  141. '' Lot_RegAppPath now register the registry entry .
  142. '' 
  143. ''    Rev 1.91   06 Sep 1995 14:07:30   amontalv
  144. '' Have NT create App path entries in Windows so that when the new shell comes along
  145. '' this will be already set.
  146. '' 
  147. ''    Rev 1.90   02 Sep 1995 15:30:32   amontalv
  148. '' Added definition of Lot_CheckPrivileges() which lives in regwrap.c of lotussrc.
  149. '' 
  150. ''    Rev 1.89   31 Aug 1995 12:16:18   jdonohue
  151. '' Added GetDriveType prototype
  152. '' 
  153. ''    Rev 1.88   30 Aug 1995 19:10:42   amontalv
  154. '' Added code to create environment key if it is missing.  Also deal with existing
  155. '' path more intelligently.
  156. '' 
  157. ''    Rev 1.87   29 Aug 1995 08:35:42   jdonohue
  158. '' Fix WEDS2VENXL: Reg_AppPath use SYM_NETCOMPONENT for node
  159. '' 
  160. ''    Rev 1.86   24 Aug 1995 10:24:10   glutz
  161. '' Added function IsLongDirPath to check for long directory names.
  162. '' 
  163. ''    Rev 1.85   23 Aug 1995 16:42:08   amontalv
  164. '' Put a wrapper around EnableWindow to prevent trying to enable null window.
  165. '' 
  166. ''    Rev 1.84   22 Aug 1995 14:04:38   glutz
  167. '' IsDirWritable no longer gets the short path name.
  168. '' 
  169. ''    Rev 1.83   21 Aug 1995 15:41:52   amontalv
  170. '' Put name of registry keys into globals.lss
  171. '' 
  172. ''    Rev 1.82   16 Aug 1995 20:33:10   amontalv
  173. '' Added code to do error messages for registry.
  174. '' 
  175. ''    Rev 1.81   14 Aug 1995 16:47:16   mmeth
  176. '' Modified the functions:
  177. '' SetRegKeyValueEx-->SetRegKeyValueExS  and SetRegKeyValueExD
  178. '' and
  179. '' CreateRegKeyValueEx-->CreateRegKeyValueExS and CreateRegKeyValueExD
  180. '' therefroe the two places where these functions are called have been 
  181. '' modified accordingly.
  182. '' 
  183. ''    Rev 1.80   11 Aug 1995 16:47:50   mmeth
  184. '' FindWindows has changed on WIndows 32 to FindWindowsA
  185. '' 
  186. ''    Rev 1.79   11 Aug 1995 15:04:30   glutz
  187. '' DoesFileExist now calls Lot_DoesFileExist.
  188. '' 
  189. ''    Rev 1.78   09 Aug 1995 16:11:12   jdonohue
  190. '' Added GetLastError declaration
  191. '' 
  192. ''    Rev 1.77   09 Aug 1995 14:46:56   glutz
  193. '' DoesDirExist now calls Lot_DoesDirExist.
  194. '' 
  195. ''    Rev 1.76   08 Aug 1995 17:30:32   jdonohue
  196. '' Added declaration of FGetNameForResourceDLL
  197. '' 
  198. ''    Rev 1.75   03 Aug 1995 15:22:36   amontalv
  199. '' Checked in changes for setting system path on NT.
  200. '' 
  201. ''    Rev 1.74   01 Aug 1995 17:10:40   amontalv
  202. '' Added comments
  203. '' 
  204. ''    Rev 1.73   01 Aug 1995 14:21:44   amontalv
  205. '' Added Lot_RegAppPath().
  206. '' 
  207. ''    Rev 1.72   31 Jul 1995 18:28:24   amontalv
  208. '' Added routine to add App Paths to registry.
  209. '' 
  210. ''    Rev 1.71   27 Jul 1995 11:03:48   amontalv
  211. '' Added call Lot_AddLinkIconToFolder so that icon information can be sent
  212. '' when creating a shortcut.
  213. '' 
  214. ''    Rev 1.70   25 Jul 1995 10:32:04   amontalv
  215. '' Moved ShortPath check to inside of GetShortPathName.
  216. '' 
  217. ''    Rev 1.69   25 Jul 1995 10:16:36   amontalv
  218. '' Put in a check to make sure we got back a value from GetShortPath.
  219. '' 
  220. ''    Rev 1.68   20 Jul 1995 12:57:58   jdonohue
  221. '' Changed CopyFile to FCopyFile, which calls Win32 CopyFile instead of MS-Setup
  222. '' FCopyOneFile
  223. '' 
  224. ''    Rev 1.67   20 Jul 1995 10:50:00   glutz
  225. '' GetFreeSpaceForDrive now returns free space in K bytes, also accepts full
  226. '' paths with either drive letter or UNC volume.
  227. '' 
  228. ''    Rev 1.66   17 Jul 1995 12:17:10   jdonohue
  229. '' Removed trailing blanks from FOpen/CloseLogFile declaration
  230. '' 
  231. ''    Rev 1.65   17 Jul 1995 10:24:52   pdonahue
  232. '' changed registry functions to take variant type buffer.
  233. '' 
  234. ''    Rev 1.64   13 Jul 1995 15:50:14   jdonohue
  235. '' Changed Lot_CleanPath MBCS handling
  236. '' 
  237. ''    Rev 1.63   10 Jul 1995 12:03:54   glutz
  238. '' IsDirWritable now calls Lot_IsDirWritable
  239. '' 
  240. ''    Rev 1.62   29 Jun 1995 11:56:34   glutz
  241. '' Added wrappers for Lot_GetShortPath, Lot_regedit, Lot_CreateIniKeyValue
  242. '' 
  243. ''    Rev 1.61   26 Jun 1995 13:29:12   glutz
  244. '' Added wrapper for Lot_createDirectory
  245. '' 
  246. ''    Rev 1.60   23 Jun 1995 14:39:34   jdonohue
  247. '' Added declaration of FGetHandleForResourceDLL
  248. '' 
  249. ''    Rev 1.59   23 Jun 1995 08:22:16   jdonohue
  250. '' ShowWaitCursor and RestoreCursor does nothing
  251. '' 
  252. ''    Rev 1.58   22 Jun 1995 12:41:26   jdonohue
  253. '' Added FindResource Windows call
  254. '' 
  255. ''    Rev 1.57   21 Jun 1995 21:55:20   amontalv
  256. '' Added GetUserName to get network name as a last resort.
  257. '' 
  258. ''    Rev 1.56   19 Jun 1995 11:20:22   tveerapp
  259. '' Fixed InitFrame. When InitializeFrame returns a 0 , the cmd line
  260. '' processing failed on an argument. Quit script whern InitializeFRame returns
  261. '' 0.
  262. '' 
  263. ''    Rev 1.55   19 Jun 1995 10:27:32   amontalv
  264. '' Put in code to add function to New Folder button and Remove Folder button.  Also
  265. '' fixed some of the selection problems in the tree list.
  266. '' 
  267. ''    Rev 1.54   15 Jun 1995 19:40:46   amontalv
  268. '' Checked for and changed integers passed to C functions.  Changed to longs.
  269. '' 
  270. ''    Rev 1.53   14 Jun 1995 16:31:32   amontalv
  271. '' Fixed problem with NT Program Groups.  Look through the registry for
  272. '' program groups and display them for the user.  Most of the code
  273. '' is in C in lotusui.c.  Put calls to registry functions in regwrap.
  274. '' 
  275. ''    Rev 1.52   13 Jun 1995 11:21:30   jdonohue
  276. '' Fixed typos
  277. '' 
  278. ''    Rev 1.51   08 Jun 1995 16:37:08   jdonohue
  279. '' Added IDCANCEL constant
  280. '' 
  281. ''    Rev 1.50   08 Jun 1995 14:28:50   tveerapp
  282. '' Fixed SendlDlgItemMessageLb declaration.
  283. '' 
  284. ''    Rev 1.49   08 Jun 1995 14:20:36   tveerapp
  285. '' Added SendDlgItemMessageLb which is an alias to SendDlgItemMessage
  286. '' to fix spr # TVEN2PXSJ2.
  287. '' 
  288. ''    Rev 1.48   07 Jun 1995 13:03:24   jdonohue
  289. '' Added prototype for WhatPlatform for calling from script
  290. '' 
  291. ''    Rev 1.47   06 Jun 1995 15:59:16   amontalv
  292. '' We are experiencing problems with LotusScript when we fill buffers with
  293. '' nulls and then pass them to C routines.  For the time being, it is suggested
  294. '' that we fill our buffers with spaces.  To this end (and to make it
  295. '' easier to change back later) I have created a small LotusScript routine
  296. '' named CreateBuffer.  You use it any time you ordinarily would use
  297. '' STRING$(num, 0).  CreateBuffer() just needs the num, it decides what to
  298. '' fill the buffer with (sorry about the grammer).  Right now it fill the
  299. '' buffer with spaces.  Later we will change it back to nulls.  Also look
  300. '' at the routine NullTrim().  It will get rid of final nulls and spaces.
  301. '' You can use this when getting a buffer that has been changed or filled
  302. '' in a external C routine.
  303. '' 
  304. ''    Rev 1.46   05 Jun 1995 16:37:06   amontalv
  305. '' Made changes for migrating to LotusScript version 3.0.37.
  306. '' 
  307. ''    Rev 1.45   01 Jun 1995 15:23:12   pdonahue
  308. '' changed createregkeyvalue to check for 1 if the key exist rather than 0.
  309. '' 
  310. ''    Rev 1.44   01 Jun 1995 14:00:28   amontalv
  311. '' Needed to change the size of the passed arguments to correspond to 4 args
  312. '' no that's 5 args instead of 3.
  313. '' 
  314. ''    Rev 1.43   01 Jun 1995 13:13:14   amontalv
  315. '' Added CreateLink to create shortcuts.
  316. '' 
  317. ''    Rev 1.42   01 Jun 1995 12:39:00   jdonohue
  318. '' Added call to FKillNdialogs3 to replace Microsoft function
  319. '' 
  320. ''    Rev 1.41   01 Jun 1995 11:11:34   pdonahue
  321. '' modified Lot_GetRegKeyValue to pass dwtype,lpbuff and cbuf by reference.
  322. '' 
  323. ''    Rev 1.40   31 May 1995 14:55:56   pdonahue
  324. '' Removed invalid byval references in registry functions
  325. '' 
  326. ''    Rev 1.39   30 May 1995 15:24:56   mzgripce
  327. '' add some ByVal to the reg arguments, add headers to the reg functions and
  328. '' add _ in the name of two Reg functions declarations 
  329. '' 
  330. ''    Rev 1.38   30 May 1995 12:56:32   jdonohue
  331. '' Call to FdoDialog3 for multiple DLLs
  332. '' 
  333. ''    Rev 1.37   30 May 1995 09:26:02   amontalv
  334. '' Added back my changes.  Had not made changes to setupapi.lss to declare
  335. '' functions.
  336. '' 
  337. ''    Rev 1.36   26 May 1995 15:07:40   cmoy
  338. '' added A to regsetkey functions
  339. '' 
  340. ''    Rev 1.35   26 May 1995 14:15:42   pdonahue
  341. '' fixed lot_createregkey.
  342. '' 
  343. ''    Rev 1.34   22 May 1995 23:32:12   amontalv
  344. '' Added browse for Win 95 program folder.
  345. '' 
  346. ''    Rev 1.33   19 May 1995 14:43:42   pdonahue
  347. '' fixed registry function api.
  348. '' 
  349. ''    Rev 1.32   15 May 1995 17:33:24   amontalv
  350. '' Fixed SPR JHOH2RWGQX and JMOY2RXNKM.  Had wrong case on 'b' of function
  351. '' declaration of IsDlgButtonChecked().
  352. '' 
  353. ''    Rev 1.31   15 May 1995 11:38:50   jdonohue
  354. '' Added LdStringInit function to initialize SYM_CUIDLL with list of DLLs and
  355. '' make sure libraries loaded
  356. '' 
  357. ''    Rev 1.31   15 May 1995 11:16:10   jdonohue
  358. '' Added LdStringInit function to initialize SYM_CUIDLL with list of DLLs and 
  359. '' make sure libraries loaded
  360. '' 
  361. ''    Rev 1.30   11 May 1995 17:05:26   tveerapp
  362. '' Changed WriteToFile to a sub.
  363. '' 
  364. ''    Rev 1.29   02 May 1995 17:49:22   mzgripce
  365. '' fix syntax errors in the new feature code
  366. '' 
  367. ''    Rev 1.28   02 May 1995 12:53:02   cmoy
  368. '' Merged c2 into cf build
  369. '' 
  370. ''    Rev 1.29   19 Apr 1995 14:54:56   mheerman
  371. '' Changed the prototype for WinHelp to include the new suffix A to indicate
  372. '' the ASCII version of the call.
  373. '' 
  374. ''    Rev 1.27   21 Apr 1995 10:11:52   pdonahue
  375. '' added Registry wrappers
  376. '' 
  377. ''    Rev 1.28   14 Apr 1995 16:04:06   amontalv
  378. '' Delete space from FRestoreCursor name so that LotusScript could find it in the DLL.
  379. '' 
  380. ''    Rev 1.27   10 Apr 1995 17:54:54   amontalv
  381. '' Had to change some function definitions for script to find functions.
  382. '' 
  383. ''    Rev 1.26F  19 Apr 1995 14:56:58   jdonohue
  384. '' Changed LdString to look in a list of DLLs for string SYM_CUIDLL$
  385. '' Moved Lot_GetNthFieldFromIniString from toolkit.lss
  386. '' 
  387. ''    Rev 1.25   06 Apr 1995 21:02:52   amontalv
  388. '' Changed the exported functions parameters to match those of the new
  389. '' 32 bit functions.  I changed as little as I thought possible.
  390. '' 
  391. '' LSS 32 bit port merge changes.
  392. '' 
  393. ''    Rev 1.24   05 Apr 1995 19:52:54   amontalv
  394. '' Porting to 32 bit.
  395. '' 
  396. ''    Rev 1.23   31 Mar 1995 18:47:32   amontalv
  397. '' Had to make Script file names into Unicode before LotusScript would read
  398. '' them.
  399. '' 
  400. ''    Rev 1.22   07 Jan 1995 16:09:58   jplump
  401. '' 
  402. '' In InitFrame, commented out display of error message
  403. '' (SID_ERR_COMMANDLINE). This message is no longer 
  404. '' needed, especially since we now have a usage screen
  405. '' that will be displayed.
  406. '' SPR JHOH2MPJ6X
  407. '' 
  408. ''    Rev 1.21   05 Dec 1994 16:23:18   mzgripce
  409. '' added FWriteToFile() declaration and WriteToFile()wrapper.
  410. '' 
  411. ''    Rev 1.20   18 Nov 1994 16:12:48   amontalv
  412. '' Japan DBCS: Added some resources to
  413. '' 
  414. ''    Rev 1.19   26 Sep 1994 16:30:44   cmoy
  415. '' No change.
  416. '' 
  417. ''    Rev 1.18   10 Jun 1994 15:19:46   ddupre
  418. '' Removed MB_SYSTEMMODAL flag from ErrorMsg.
  419. '' 
  420. ''    Rev 1.17   10 Jun 1994 14:35:06   ddupre
  421. '' 
  422. '' Added MB_SYSTEMMODAL flag to ErrorMsg subroutine.
  423. '' 
  424. ''    Rev 1.16   03 Jun 1994 12:09:46   cmoy
  425. '' Modified CreateProgmanItem to accept accented characters.
  426. '' 
  427. ''    Rev 1.15   26 May 1994 18:35:18   cmoy
  428. '' 
  429. '' Added ProgmanManageGroup declaration.
  430. '' 
  431. ''    Rev 1.14   25 May 1994 17:05:06   mzgripce
  432. '' suppress the remove failed message 
  433. '' 
  434. ''    Rev 1.13   25 May 1994 14:39:38   cmoy
  435. '' 
  436. '' added FindWindow declaration
  437. '' 
  438. ''    Rev 1.12   12 May 1994 11:25:38   mmeth
  439. '' Adding Icons for Lic and Install and using DoMsgBox instead of MessageBox
  440. '' 
  441. ''    Rev 1.11   02 May 1994 16:09:52   ddupre
  442. '' Removed debug comments from PopAll subroutine. -- JGreene
  443. '' 
  444. '' 
  445. ''    Rev 1.10   02 May 1994 13:57:08   mmeth
  446. '' SetFoxu & GetParent are public
  447. '' 
  448. ''    Rev 1.8   24 Apr 1994 14:41:18   cmoy
  449. '' Fixed problem of "vanishing" Error Msg Box.
  450. '' Added MB_SYSTEMMODAL to specification of type of message box
  451. '' to put up in SUB ErrorMsg
  452. '' 
  453. ''    Rev 1.7   13 Apr 1994 09:43:02   cmoy
  454. '' 
  455. '' Added Rebooting return codes and declarations used in 
  456. '' the modification of AUTOEXEC.BAT
  457. '' 
  458. ''    Rev 1.6   08 Apr 1994 11:34:20   mmeth
  459. '' cleanedup error messages
  460. '' 
  461. ''    Rev 1.5   28 Mar 1994 17:03:48   thangv
  462. '' Added the ASSERT statement to LdString function. Removed the if.
  463. '' 
  464. ''    Rev 1.4   26 Mar 1994 16:33:18   p3
  465. '' Datalens Install changes for ODBC driver
  466. '' 
  467. ''    Rev 1.3   22 Mar 1994 12:37:00   mmeth
  468. '' added some more error handling for GetListItem and SetListItem
  469. '' 
  470. ''    Rev 1.2   17 Mar 1994 16:49:08   mmeth
  471. '' added check for LOTUS_DEBUG in shell
  472. '' 
  473. ''    Rev 1.1   16 Mar 1994 17:30:12   mmeth
  474. '' Mariana & Marcel Code Review
  475. '' 
  476. ''    Rev 1.0   11 Feb 1994 10:56:30   jbrodeur
  477. '' Initial Revision
  478. ''----------------------------------------------------------------------
  479. ''   Date     Vers. Pgmr  SPR#  Change
  480. ''----------------------------------------------------------------------
  481. '' 02-06-94   0047  MMETH       Added STFTOGGLE and MsgBox-> MessageB
  482. '' 02-03-94   0046  MMETH       Added logging facilities
  483. ''!
  484. '' 01-26-94   0045  MMETH       changed all string inits to string(...,0)
  485. '' 01-25-94   0044  DND         Move SetRestartDir, RestartListEmpty,
  486. ''                              and ExitExecRestart to toolkit.
  487. '' 01-24-94   0043  TQI              Capture all function returns (lsi36)
  488. '' 01-18-94   0042  MZ          move Lot_CleanPath() from toolkit.lss
  489. '' 01-18-94   0041  DND         Fix any functions that use paths. Also,
  490. ''                              always check for FALSE instead of 0.
  491. '' 01-11-94   0040  TQI         option declare
  492. '' 01-10-94   0039  MZ          Make all symbols Constants and put them
  493. ''                              in GLOBALS.LSS
  494. '' 01-07-94   0038  DND/MZ      Removed lots of functions
  495. '' 12-20-93   0037  tqi         Changes for LSI 34
  496. '' 12-07-93   0036  MZ          replace FRemoveDir() with Dave's function
  497. '' 12-06-93   0035  DND   25705 IsPathWritable Will now look backwards
  498. ''                              for a writable directory. The first directory
  499. ''                              it finds that exists will be the one that
  500. ''                              will be asked to be writable.      
  501. '' 12-05-93   0034  MMETH       Added IDYES & IDNO from windows.h
  502. '' 12-03-93   0033  DND         Fixed the fatal errors. Most all the ERROR
  503. ''                              statements were changed to STFQUIT
  504. '' 12-01-93   0032  DND         Added gStrK and gStrMB. Removed LdStr.
  505. ''                              MakePath returns lower case path. Commented
  506. ''                              out debug error messages in a bunch of
  507. ''                              Lot_ wrappers.
  508. '' 12-01-93   0031  DND         Moved some functions over from new.lss.
  509. ''                              No longer call DoErrMsg. Removed DoErrMsg.
  510. '' 11-24-93   0030  MMETH       Modified GetChapterFromKeyword parm list
  511. '' 11-24-93   0029  MMETH       Removed chptsize% param from Lot_GetChapterFromKeyword
  512. '' 11-22-93   0028  JKEDIA      Defined FIsKeywordInCopyList & FGetChapterFrom
  513. ''                              Keyword and wrote a wrapper for FGetChapterFromKeyWord.
  514. '' 11-19-93   0027  DND         Added the HELP_ constants for WinHelp
  515. '' 11-19-93   0026  MMETH       Replaced LdStrS with LdString
  516. '' 11-19-93   0025  MMETH       Added LdStrS: LdStr will go away soon
  517. '' 11-18-93   0024  JKK         Modified Lot_CheckPath to call FCleanFatPath
  518. ''                              instead of FValidFatPath.
  519. '' 11-17-93   0023  MZ          Added Lot_Dir()
  520. '' 11-15-93   0022  DND         Added F_KEYWORD
  521. '' 11-15-93   0021  JKEDIA      defined NULLSTROK,INVALIDSTROK,NULLSTRERR,INVALIDSTRERR.
  522. ''                              Defined a function called GetAbsPathFromIni.
  523. '' 11-11-93   0020  MMETH       change all Left$ -> RTRIM$ & inited all 
  524. ''                              bufs to 0 insetad of 32s; This fixes Soraya's bug!
  525. '' 11-09-93   0019  Jkedia      took out debugging print statements.
  526. '' 11-09-93   0018  JKEDIA      modified GetWindowsDir & GetWindowsSysdir to
  527. ''                              call FCleanFatPath.
  528. '' 11-08-93   0017  JKEDIA      modified IsWindowsShared to call FcleanFatPath.
  529. '' 11-08-93   0016  JKEDIA      added FCleanFatPath.
  530. '' 11-05-93   0015  MMETH       Uncommented prototype for SetCopyGaugePosition
  531. '' 11-04-93   0014  MMETH       Don't send a help dialog in PopupModelessDialog
  532. '' 11-03-93   0013  DND         Don't send a help dialog in PopupModalDialog
  533. '' 10-25-93   0012  DND         Fixed modeless dialogs. Added UM_PAINTMODELESS
  534. ''                              Added SendMessage prototype.
  535. '' 10-24-93   0011 JKEDIA       changed the value of USERNAME & COMPANYNAME.
  536. '' 10-23-93   0010 Jkedia       Added GetModuleHandle.
  537. '' 10-20-93   0009 Jkedia       Added 3 new prototype for reading and writing
  538. ''                              from .ri file. ReadUserRegistration,WriteUserRegistration,
  539. ''                              ReadSerialNumber. Alse added 2 new Public Const.
  540. ''                              Username & company name.
  541. '' 10-20-93   0010  MMETH      Added Call to FLotusInitialze(LSIRUN(4))
  542. '' 10-20-93   0009  MZ         Add protptype fpr BcfMod()
  543. '' 10-20-93   0009  MMETH       Added Some Window Prototypes
  544. ''                              also added FLotusInitialze LIB "lcomstf.dll"
  545. '' 10-19-93   0008  Jkedia      Added prototype for WinExec and IsdlgButtonChecked.
  546. '' 10-18-93   0007  CHyland     Added SID_ERR.... a whole bunch of them
  547. ''                              All ERrors, now resourced
  548. '' 10-15-93   0006  DND         Changed all the krnl386's to kernel.
  549. ''                              Make sure to only reference the windows
  550. ''                              DLL's by library name - NOT by filename!!!
  551. ''                              If you reference by filename then you will
  552. ''                              not work when krnl386.exe or os2k386.exe
  553. ''                              is loaded.
  554. '' 10-14-93   0005  DND         Added Lot_GetDriveFreeSpaceList
  555. '' 10-11-93   0003    MZ        OpenBookShelfFile,CloseBookShelfFile 
  556. ''                              AddBook
  557. ''  9-17-93   0002   JKK/TV     defined a prototype for LcbGetChapterCost.
  558. ' ' 9-9-93    0001    JKK       changed LSI(4) TO LSI_INFO(4) in RegisterCallBack.
  559. ''  8-12-93   0000              Initial Check-In
  560. ''  9-08-93                     add Lot_SetDateOfFile()
  561. ''
  562. ''----------------------------------------------------------------------
  563. ''
  564. ''*********************************************************************/
  565.  
  566. '**************************************************************************
  567. '*******************************  Windows API's  **************************
  568. '**************************************************************************
  569.  
  570. USE "RESOURCE"
  571. USE "GLOBALS"
  572. OPTION DECLARE
  573.  
  574. '**************************CONSTANTS************************************
  575. 'MS CONSTANTS
  576. '*************
  577. PUBLIC CONST LOGPIXELSY    = 90
  578. PUBLIC CONST SM_CXSCREEN   = 0
  579. PUBLIC CONST SM_CYSCREEN   = 1
  580. PUBLIC CONST WF_80x87      = 1024
  581. PUBLIC CONST PROCESSOR_INTEL_PENTIUM    = 586
  582. PUBLIC CONST PROCESSOR_INTEL_486        = 486
  583. PUBLIC CONST PROCESSOR_INTEL_386        = 386
  584. PUBLIC CONST PROCESSOR_INTEL_860        = 860
  585. PUBLIC CONST WF_STANDARD   = 16
  586. PUBLIC CONST WF_ENHANCED   = 32
  587. PUBLIC CONST USERNAME      = 514
  588. PUBLIC CONST COMPANYNAME   = 515
  589. PUBLIC CONST NULLSTROK     = 0           
  590. PUBLIC CONST INVALIDSTROK  = 0
  591. PUBLIC CONST NULLSTRERR    = 1
  592. PUBLIC CONST INVALIDSTRERR = 1
  593.  
  594. '' TRANSLATED FROM WINDOWS.H for WinHelp
  595. PUBLIC CONST HELP_CONTEXT      = 1
  596. PUBLIC CONST HELP_QUIT         = 2
  597. PUBLIC CONST HELP_INDEX        = 3
  598. PUBLIC CONST HELP_CONTENTS     = 3
  599. PUBLIC CONST HELP_HELPONHELP   = 4
  600. PUBLIC CONST HELP_SETINDEX     = 5
  601. PUBLIC CONST HELP_SETCONTENTS  = 5
  602. PUBLIC CONST HELP_CONTEXTPOPUP = 8
  603. PUBLIC CONST HELP_FORCEFILE    = 9
  604. PUBLIC CONST HELP_KEY          = 257   '0x0101
  605. PUBLIC CONST HELP_COMMAND      = 258   '0x0102
  606. PUBLIC CONST HELP_PARTIALKEY   = 261   '0x0105
  607. PUBLIC CONST HELP_MULTIKEY     = 513   '0x0201
  608. PUBLIC CONST HELP_SETWINPOS    = 515   '0x0203
  609.  
  610. '' DoMsgBox Flags
  611. PUBLIC CONST MB_SYSTEMMODAL      = 4096
  612. PUBLIC CONST MB_TASKMODAL        = 8192
  613. PUBLIC CONST MB_OK                            = &H0000
  614. PUBLIC CONST MB_OKCANCEL                   = &H0001
  615. PUBLIC CONST MB_ABORTRETRYIGNORE = &H0002
  616. PUBLIC CONST MB_YESNOCANCEL             = &H0003
  617. PUBLIC CONST MB_YESNO                      = &H0004
  618. PUBLIC CONST MB_RETRYCANCEL             = &H0005
  619. PUBLIC CONST MB_TYPEMASK                   = &H000F
  620.  
  621. PUBLIC CONST MB_ICONHAND                   = &H0010
  622. PUBLIC CONST MB_ICONQUESTION            = &H0020
  623. PUBLIC CONST MB_ICONEXCLAMATION = &H0030
  624. PUBLIC CONST MB_ICONASTERISK            = &H0040
  625. PUBLIC CONST MB_ICONMASK                   = &H00F0
  626.  
  627. PUBLIC CONST MB_ICONINFORMATION  = MB_ICONASTERISK
  628. PUBLIC CONST MB_ICONSTOP         = MB_ICONHAND
  629.  
  630. PUBLIC CONST IDCANCEL  = 2
  631. PUBLIC CONST IDYES     = 6
  632. PUBLIC CONST IDNO      = 7
  633.  
  634. '************MS Setup Constants 
  635. '
  636. ''Command Option Flags
  637.  
  638. PUBLIC CONST cmoVital       = 1
  639. PUBLIC CONST cmoCopy        = 2
  640. PUBLIC CONST cmoUndo        = 4
  641. PUBLIC CONST cmoRoot        = 8
  642. PUBLIC CONST cmoDecompress  = 16
  643. PUBLIC CONST cmoTimeStamp   = 32
  644. PUBLIC CONST cmoReadOnly    = 64
  645. PUBLIC CONST cmoBackup      = 128
  646. PUBLIC CONST cmoForce       = 256
  647. PUBLIC CONST cmoRemove      = 512
  648. PUBLIC CONST cmoOverwrite   = 1024
  649. PUBLIC CONST cmoAppend      = 2048
  650. PUBLIC CONST cmoPrepend     = 4096
  651. PUBLIC CONST cmoNone        = 0
  652. PUBLIC CONST cmoAll         = 65535
  653.  
  654. ''File Exist Modes
  655.  
  656. PUBLIC CONST femExists     = 0
  657. PUBLIC CONST femRead       = 1
  658. PUBLIC CONST femWrite      = 2
  659. PUBLIC CONST femReadWrite  = 3
  660.  
  661.  
  662. ''Read-Only Return Code
  663.  
  664. PUBLIC CONST ynrcNo         = 0
  665. PUBLIC CONST ynrcYes        = 1
  666. PUBLIC CONST ynrcErr1       = 2
  667. PUBLIC CONST ynrcErr2       = 3
  668. PUBLIC CONST ynrcErr3       = 4
  669. PUBLIC CONST ynrcErr4       = 5
  670. PUBLIC CONST ynrcErr5       = 6
  671. PUBLIC CONST ynrcErr6       = 7
  672. PUBLIC CONST ynrcErr7       = 8
  673. PUBLIC CONST ynrcErr8       = 9
  674. PUBLIC CONST ynrcErr9       = 10
  675.  
  676. ''Rebooting Return Codes
  677. PUBLIC CONST EW_RESTARTWINDOWS = 66 '0x42
  678. PUBLIC CONST EW_REBOOTSYSTEM   = 67 '0x43
  679.  
  680. ''Program Manager Configuration Codes
  681. PUBLIC CONST ADD_GRP = 0
  682.  
  683. ''General Return Codes
  684.  
  685. PUBLIC CONST grcOkay       = 0
  686. PUBLIC CONST grcNotOkay    = 1
  687. PUBLIC CONST grcUserQuit   = 48
  688.  
  689.  
  690. ''Ranges
  691.  
  692. ''CONST cbSymValMax = 8192
  693. PUBLIC CONST cbSymValMax = 512
  694.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  695.     '' but we get Out of String Space wattdrvr error if we alloc
  696.     '' STR$() that big. (See GetSymbolValue and GetListItem)
  697.     '' We should look into using dynamic far alloc instead of
  698.     '' STR$ for large buffers.
  699.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  700.  
  701.  
  702. ''ON ERROR Error Codes
  703. PUBLIC CONST STFERR      = 1024   ''setup system error
  704. PUBLIC CONST STFQUIT     = 1025   ''user quit
  705. PUBLIC CONST STFTOGGLE  = 1026   ''Toggle Error; not fatal at all, just means couldn't toggle
  706.  
  707. PUBLIC CONST scmOff      = 0
  708. PUBLIC CONST scmOnIgnore = 1
  709. PUBLIC CONST scmOnFatal  = 2
  710.  
  711. 'Registration Database Constants
  712. PUBLIC CONST ERROR_SUCCESS        = 0
  713. PUBLIC CONST GRC_API_FAILED       = 104
  714. PUBLIC CONST STILL_ACTIVE         = 259
  715. PUBLIC CONST REG_NONE&                       =    0    '* No value type
  716. PUBLIC CONST REG_SZ&                         =    1     '* Unicode nul terminated string
  717. PUBLIC CONST REG_EXPAND_SZ&                  =    2    '* Unicode nul terminated string
  718.                           '* (with environment variable references)
  719. PUBLIC CONST REG_BINARY&                     =    3     '* Free form binary
  720. PUBLIC CONST REG_DWORD&                      =    4     '* 32-bit number
  721. PUBLIC CONST REG_DWORD_LITTLE_ENDIAN&        =    4     '* 32-bit number (same as REG_DWORD)
  722. PUBLIC CONST REG_DWORD_BIG_ENDIAN&           =    5     '* 32-bit number
  723. PUBLIC CONST REG_LINK&                       =    6     '* Symbolic Link (unicode)
  724. PUBLIC CONST REG_MULTI_SZ&                   =    7     '* Multiple Unicode strings
  725. PUBLIC CONST REG_RESOURCE_LIST&              =   8     '* Resource list in the resource map
  726. PUBLIC CONST REG_FULL_RESOURCE_DESCRIPTOR&   =   9   '* Resource list in the hardware description
  727. PUBLIC CONST REG_RESOURCE_REQUIREMENTS_LIST& =   10 
  728.  
  729. PUBLIC CONST PRIVILEDGE_CHECKFLAG_REGSYSTEMPATH    = 1  '* flag passed to priviledge checking routine
  730.  
  731. PUBLIC CONST HKEY_CLASSES_ROOT&           =    &h80000000
  732. PUBLIC CONST HKEY_CURRENT_USER&           =    &h80000001
  733. PUBLIC CONST HKEY_LOCAL_MACHINE&          =    &h80000002
  734. PUBLIC CONST HKEY_USERS&                  =    &h80000003
  735. PUBLIC CONST HKEY_PERFORMANCE_DATA&       =    &h80000004
  736. PUBLIC CONST HKEY_PERFORMANCE_TEXT&       =    &h80000050
  737. PUBLIC CONST HKEY_PERFORMANCE_NLSTEXT&    =    &h80000060
  738.                                                              
  739.                                                              
  740. '* Registry Specific Access Rights.
  741.  
  742. PUBLIC CONST KEY_QUERY_VALUE         =  &h0001
  743. PUBLIC CONST KEY_SET_VALUE&          =  &h0002
  744. PUBLIC CONST KEY_CREATE_SUB_KEY&     =  &h0004
  745. PUBLIC CONST KEY_ENUMERATE_SUB_KEYS& =  &h0008
  746. PUBLIC CONST KEY_NOTIFY&             =  &h0010
  747. PUBLIC CONST KEY_CREATE_LINK&        =  &h0020
  748. PUBLIC CONST SYNCHRONIZE&            =  &h00100000
  749.  
  750. PUBLIC CONST REG_OPTION_RESERVED&    =      &h00000000  '* Parameter is reserved
  751.  
  752. PUBLIC CONST REG_OPTION_NON_VOLATILE&  =    &h00000000   '* Key is preserved
  753.                              '* when system is rebooted
  754.                                                    
  755. PUBLIC CONST REG_CREATED_NEW_KEY&      =    &h00000001   '* New Registry Key created
  756.  
  757. PUBLIC CONST REG_OPENED_EXISTING_KEY&  =    &h00000002   '* Existing Key opened
  758.  
  759. PUBLIC CONST REG_OPTION_VOLATILE&      =    &h00000001   '* Key is not preserved
  760.                                                                         '* when system is rebooted
  761.                                                   
  762. PUBLIC CONST REG_OPTION_CREATE_LINK&    =    &h00000002     '* Created key is a
  763.                                 '* symbolic link
  764.  
  765. PUBLIC CONST REG_OPTION_BACKUP_RESTORE& =    &h00000004     '* open for backup or restore
  766.                                '* special access rules
  767.                                '* privilege required
  768.  
  769. PUBLIC CONST REG_WHOLE_HIVE_VOLATILE&  =     &h00000001     '* Restore whole hive volatile
  770. PUBLIC CONST REG_REFRESH_HIVE&         =     &h00000002     '* Unwind changes to last flush
  771. PUBLIC CONST REG_NOTIFY_CHANGE_NAME&   =     &h00000001     '* Create or delete (child)
  772. PUBLIC CONST REG_NOTIFY_CHANGE_ATTRIBUTES& =  &h00000002    
  773. PUBLIC CONST REG_NOTIFY_CHANGE_LAST_SET&   =  &h00000004     '* time stamp
  774. PUBLIC CONST REG_NOTIFY_CHANGE_SECURITY&   =  &h00000008 
  775.  
  776. PUBLIC CONST STANDARD_RIGHTS_ALL& = &h001F0000
  777.  
  778.  
  779. PUBLIC CONST KEY_ALL_ACCESS  =   ((STANDARD_RIGHTS_ALL        OR _
  780.                   KEY_QUERY_VALUE            OR _
  781.                   KEY_SET_VALUE              OR _
  782.                   KEY_CREATE_SUB_KEY         OR _
  783.                   KEY_ENUMERATE_SUB_KEYS     OR _
  784.                   KEY_NOTIFY                 OR _
  785.                   KEY_CREATE_LINK)           AND _ 
  786.                  (NOT SYNCHRONIZE))
  787.  
  788.  
  789. ''LOGO
  790. PUBLIC CONST LOGO = 2
  791.  
  792. ''TEMP
  793. PUBLIC CONST SW_HIDE  =  0
  794. PUBLIC CONST SW_SHOW  =  5
  795. PUBLIC CONST SW_SHOWNORMAL = 1
  796. PUBLIC CONST SW_NORMAL = 1
  797. PUBLIC CONST SW_SHOWMINIMIZED= 2
  798. PUBLIC CONST SW_SHOWMAXIMIZED =  3
  799. PUBLIC CONST SW_MAXIMIZE =  3
  800. PUBLIC CONST SW_SHOWNOACTIVATE = 4
  801. PUBLIC CONST SW_MINIMIZE =  6
  802. PUBLIC CONST SW_SHOWMINNOACTIVE = 7
  803. PUBLIC CONST SW_SHOWNA =  8
  804. PUBLIC CONST SW_RESTORE = 9
  805.  
  806.  
  807. '************************GLOBAL VARIABLES*******************************
  808. 'MS GLOBAL VARIABLES
  809.  
  810. DIM     hSetup                  AS INTEGER
  811. %rem
  812. DIM     fFrameInit              AS INTEGER
  813. DIM     fInstallInit    AS INTEGER
  814. %endrem 
  815.  
  816. 'LOTUS GLOBAL VARIABLES
  817. DIM      g_strbuf               AS STRING
  818. PUBLIC gStrK         AS STRING
  819. PUBLIC gStrMB        AS STRING
  820. DIM fLdStringInit       AS INTEGER
  821. PUBLIC gIsSharedWindows%        'Flag is true for server install to shared
  822.                                         'windows environment
  823. PUBLIC RebootLater%    ' Flag that user needs reboot and has selected to do later
  824. PUBLIC gLastErrorMsg$   'last error displayed
  825. PUBLIC gIsMultiUser%        'Flag is true for multi-user install
  826.  
  827. '**************************C STRUCTS *************************
  828.  
  829. TYPE SysInfoType
  830.     dwOemId AS LONG
  831.     dwPageSize AS LONG
  832.     lpMinimumApplicationAddress AS LONG 
  833.     lpMaximumApplicationAddress AS LONG
  834.     dwActiveProcessorMask AS LONG
  835.     dwNumberOfProcessors AS LONG
  836.     dwProcessorType AS LONG
  837.     dwAllocationGranularity AS LONG
  838.     dwReserved AS LONG
  839. END TYPE
  840.  
  841. '**************************C CALLOUT PROTOTYPES*************************
  842.  
  843. '' SHOULD BE IN 123.LSS, but LotusScript BUG Prevented this!
  844. DECLARE PUBLIC FUNCTION OpenBookShelfFile LIB "FIXBOOK.DLL" ALIAS "_OpenBookShelfFile" (ByVal bookshelfname$) AS INTEGER
  845. DECLARE PUBLIC FUNCTION CloseBookShelfFile LIB "FIXBOOK.DLL" ALIAS "_CloseBookShelfFile" () AS INTEGER
  846. DECLARE PUBLIC FUNCTION AddBook LIB "FIXBOOK.DLL" ALIAS "_AddBook" (ByVal bookpath$, ByVal bookcaption$) AS INTEGER
  847.  
  848. ''this is a call into bcfmod.dll
  849. DECLARE PUBLIC FUNCTION BcfMod LIB "BCFMOD.DLL" ALIAS "_BcfMod@24" (ByVal BcfFilepath$, ByVal DNarg$, ByVal DLarg$, ByVal DCarg$, ByVal ACarg$, ByVal DDarg$) AS LONG
  850. '' NEW!! add call to modify ODBC.INI
  851. DECLARE PUBLIC FUNCTION FixODBCiniSources LIB "BCFMOD.DLL" ALIAS "_FixODBCiniSources@28" (ByVal IniFile$, ByVal Sect1$, ByVal Match1$, ByVal Repl1$, ByVal Sect2$, ByVal Match2$, ByVal Repl2$) AS LONG
  852. '' End NEW!!
  853.  
  854. '** Do to a limitation in LotusScript, these Lotus declarations needed
  855. '** to be here.
  856. DECLARE PUBLIC FUNCTION FCleanFATPath LIB "lcomstf.dll" ALIAS "_FCleanFATPath@4" (ByVal szPath$) AS INTEGER
  857. DECLARE PUBLIC FUNCTION FLotusInitialize LIB "lcomstf.dll" ALIAS "_FLotusInitialize@4" (ByVal sess&) AS INTEGER 
  858. DECLARE PUBLIC FUNCTION WhatPlatform LIB "lcomstf.dll" ALIAS "?WhatPlatform@@YGHXZ" () AS INTEGER 
  859. DECLARE PUBLIC FUNCTION Lot_IsDirWritable LIB "lcomstf.dll" ALIAS "_Lot_IsDirWritable@4" (ByVal szDir$) AS LONG
  860. DECLARE PUBLIC FUNCTION Lot_DoesDirExist LIB "lcomstf.dll" ALIAS "_Lot_DoesDirExist@4" (ByVal szDir$) AS LONG
  861. DECLARE PUBLIC FUNCTION Lot_DoesFileExist LIB "lcomstf.dll" ALIAS "_Lot_DoesFileExist@4" (ByVal szDir$) AS LONG
  862. DECLARE PUBLIC FUNCTION Lot_ExecUninstall LIB "lcomstf.dll" ALIAS "_Lot_ExecUninstall@4" (ByVal szCmd$) AS LONG
  863. DECLARE PUBLIC FUNCTION FLot_RegisterOCX LIB "lcomstf.dll" ALIAS "_Lot_RegisterOCX@4" (ByVal OCXpath$) AS LONG
  864. DECLARE PUBLIC FUNCTION Lot_UnRegisterOCX LIB "lcomstf.dll" ALIAS "_Lot_UnRegisterOCX@4" (ByVal OCXpath$) AS LONG
  865. DECLARE PUBLIC FUNCTION Lot_ValidPath LIB "lcomstf.dll" ALIAS "_Lot_ValidPath@4" (ByVal Path$) AS INTEGER
  866. DECLARE PUBLIC FUNCTION Lot_DeleteFile LIB "lcomstf.dll" ALIAS "_Lot_DeleteFile@8" (ByVal Path$, ByVal cmo%) AS INTEGER
  867. DECLARE PUBLIC FUNCTION Lot_ShellExec LIB "lcomstf.dll" ALIAS"_Lot_ShellExec@4" (ByVal File$) AS LONG
  868. DECLARE PUBLIC FUNCTION IsAdmin LIB "lcomstf.dll" ALIAS"?IsAdmin@@YGHXZ" () AS INTEGER
  869. DECLARE PUBLIC FUNCTION FRegisterREGTemplate LIB "lcomstf.dll" ALIAS"_FRegisterREGTemplate@8" (ByVal InFile$, ByVal OutFile$) AS INTEGER
  870. DECLARE PUBLIC FUNCTION FCreateDefault LIB "lcomstf.dll" ALIAS "?CreateDefault@@YAHPBDH@Z" (ByVal ProdNameVer$, ByVal Opt%) AS INTEGER
  871. DECLARE PUBLIC FUNCTION CreateDefault (ByVal ProdName$, ProdVer$) AS INTEGER
  872.  
  873. ''DBCS support partially from Japan
  874. DECLARE PUBLIC FUNCTION IsDBCSFirstAtOffset LIB "lcomstf.dll" ALIAS "_IsDBCSFirstAtOffset@8" (ByVal szStr$, ByVal cnt&) AS LONG
  875. DECLARE PUBLIC FUNCTION FDBCSCharLen LIB "lcomstf.dll" ALIAS "_FDBCSCharLen@8" (ByVal szStr$, ByVal offset&) AS LONG
  876.  
  877. ''Functions to configure AUTOEXEC.BAT
  878. DECLARE PUBLIC FUNCTION IsShareInstalled LIB "lcomstf.dll" ALIAS "_IsShareInstalled@0" () AS INTEGER
  879. DECLARE PUBLIC FUNCTION ExitWindows LIB "user32" ALIAS "ExitWindows" (ByVal dwReturnCode&, ByVal wReserved&) AS LONG
  880. DECLARE PUBLIC FUNCTION FindWindow LIB "user32" ALIAS "FindWindowA" (ByVal lpszClassName$, ByVal lpszWindow$) AS LONG
  881. DECLARE PUBLIC FUNCTION GetUserName LIB "advapi32" ALIAS "GetUserNameA" (ByVal lpszClassName$, wLength&) AS INTEGER
  882.  
  883. ''Functions to configure Program Manager
  884. DECLARE PUBLIC FUNCTION ProgmanManageGroup LIB "mscuistf.dll" ALIAS "_ProgmanManageGroup@8" (ByVal szName$, ByVal fDelete&) AS INTEGER 
  885. DECLARE PUBLIC FUNCTION FAddProgramGroupsToList LIB "mscuistf.dll" ALIAS "_FAddProgramGroupsToList@16" (ByVal hkeyRoot&, ByVal pszKeyName$, ByVal pszListName$, ByVal pszSuppressName$) AS LONG
  886. DECLARE PUBLIC FUNCTION FAddItemToTree LIB "mscuistf.dll" ALIAS "_FAddItemToTree@8" (ByVal hDlg&, ByVal szNewName$) AS INTEGER
  887. DECLARE PUBLIC FUNCTION FDeleteCurrTreeItem LIB "mscuistf.dll" ALIAS "_FDeleteCurrTreeItem@4" (ByVal hDlg&) AS INTEGER
  888. DECLARE PUBLIC FUNCTION FChangeNameCurrTreeItem LIB "mscuistf.dll" ALIAS "_FChangeNameCurrTreeItem@8" (ByVal hDlg&, ByVal NewName$) AS INTEGER
  889. DECLARE PUBLIC FUNCTION FIsMultiUser LIB "mscuistf.dll" ALIAS "_IsMultiUser@0" () AS INTEGER
  890.  
  891. '********************** Microsoft DLL Api ***********************************
  892.  
  893. 'JMD
  894. DECLARE PUBLIC FUNCTION FDoDialog3 LIB "msshlstf.dll" ALIAS "_FDoDialog3@16" (ByVal hwnd&, ByVal szDll$, ByVal Dlg&, ByVal szDlgProc$ ) AS INTEGER
  895. DECLARE PUBLIC FUNCTION FKillNDialogs3 LIB "msshlstf.dll" ALIAS "_FKillNDialogs3@4" (ByVal n&) AS INTEGER
  896. DECLARE PUBLIC FUNCTION FGetHandleForResourceDLL LIB "msshlstf.dll" ALIAS "_FGetHandleForResourceDLL@8" (ByVal id%, ByVal t%) AS LONG
  897. DECLARE PUBLIC FUNCTION FGetNameForResourceDLL LIB "msshlstf.dll" ALIAS "_FGetNameForResourceDLL@16" (ByVal id%, ByVal t%, ByVal buffer$, ByVal bufsize&) AS LONG
  898.  
  899. DECLARE PUBLIC FUNCTION FRemoveIniSection LIB "msinsstf.dll" ALIAS "FRemoveIniSection" (ByVal szFile$, ByVal szSect$, ByVal cmo&) AS LONG
  900. DECLARE PUBLIC FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" ALIAS "FCreateIniKeyValue" (ByVal szFile$, ByVal szSect$, ByVal szKey$, ByVal szValue$, ByVal cmo&) AS LONG
  901. DECLARE PUBLIC FUNCTION FRemoveIniKey LIB "msinsstf.dll" ALIAS "FRemoveIniKey" (ByVal szFile$, ByVal szSect$, ByVal szKey$, ByVal cmo&) AS INTEGER
  902. DECLARE PUBLIC FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" ALIAS "FCreateSysIniKeyValue" (ByVal szFile$, ByVal szSect$, ByVal szKey$, ByVal szValue$, ByVal cmo&) AS LONG
  903. DECLARE PUBLIC FUNCTION FCreateProgManGroup LIB "msinsstf.dll" ALIAS "FCreateProgManGroup" (ByVal szGroup$, ByVal szPath$, ByVal cmo&) AS INTEGER
  904. DECLARE PUBLIC FUNCTION FCreateProgManItem LIB "msinsstf.dll" ALIAS "FCreateProgManItem" (ByVal szGroup$, ByVal szItem$, ByVal szCmd$, ByVal cmo&) AS LONG
  905. DECLARE PUBLIC FUNCTION FShowProgManGroup LIB "msinsstf.dll" ALIAS "FShowProgManGroup" (ByVal szGroup$, ByVal szCmd$, ByVal cmo&) AS LONG
  906. DECLARE PUBLIC FUNCTION FStampResource LIB "msinsstf.dll" ALIAS "FStampResource" (ByVal szSect$, ByVal szKey$, ByVal szDst$,_
  907.     ByVal  wResType&, ByVal wResId&, ByVal szData$, ByVal cbData&) AS LONG
  908. DECLARE PUBLIC FUNCTION FAddDos5Help LIB "msinsstf.dll" ALIAS "FAddDos5Help" (ByVal szProgName$, ByVal szProgHelp$, ByVal cmo&) AS LONG
  909. '*OBSOLETE DECLARE PUBLIC FUNCTION YnrcRemoveFile LIB "msinsstf.dll" ALIAS "YnrcRemoveFile" (ByVal szFullPathSrc$, ByVal cmo&) AS LONG
  910. DECLARE PUBLIC FUNCTION YnrcBackupFile LIB "msinsstf.dll" ALIAS "YnrcBackupFile" (ByVal szFullPath$, ByVal szBackup$, ByVal cmo&) AS LONG
  911. DECLARE PUBLIC FUNCTION FInitializeInstall LIB "msinsstf.dll" ALIAS "FInitializeInstall" ( ByVal hinst&, ByVal hwndFrame&) AS LONG
  912. DECLARE PUBLIC FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" ALIAS "WFindFileUsingFileOpen" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  913. DECLARE PUBLIC FUNCTION FIsFileWritable LIB "msinsstf.dll" ALIAS "FIsFileWritable" (ByVal szFile$) AS LONG
  914. DECLARE PUBLIC FUNCTION SetDecompMode LIB "msinsstf.dll" ALIAS "SetDecompMode" (ByVal fMode&) AS LONG
  915. DECLARE PUBLIC FUNCTION GetDecompMode LIB "msinsstf.dll" ALIAS "GetDecompMode" () AS LONG
  916. DECLARE PUBLIC FUNCTION FPrependToPath LIB "msinsstf.dll" ALIAS "FPrependToPath" (ByVal szSrc$, ByVal szDst$, ByVal szDir$, ByVal cmo&) AS LONG
  917. DECLARE PUBLIC FUNCTION SetTimeValue LIB "msinsstf.dll" ALIAS "SetTimeValue" (ByVal usHours&, ByVal usMinutes&, ByVal usSeconds&) AS LONG
  918.  
  919. DECLARE PUBLIC FUNCTION HShowWaitCursor LIB "msshlstf.dll" ALIAS "HShowWaitCursor" () AS LONG
  920. DECLARE PUBLIC FUNCTION FRestoreCursor  LIB "msshlstf.dll" ALIAS "FRestoreCursor" (ByVal hPrev&) AS LONG
  921. DECLARE PUBLIC FUNCTION FSetBitmap LIB "msshlstf.dll" ALIAS "FSetBitmap" (ByVal szDll$, ByVal Bitmap&) AS LONG
  922. DECLARE PUBLIC FUNCTION FSetAbout LIB "msshlstf.dll" ALIAS "FSetAbout" (ByVal szAbout1$, ByVal szAbout2$) AS LONG
  923. DECLARE PUBLIC FUNCTION FSetSymbolValue LIB "msshlstf.dll" ALIAS "FSetSymbolValue" (ByVal szSymbol$,ByVal szValue$) AS LONG
  924. DECLARE PUBLIC FUNCTION InitializeFrame LIB "msshlstf.dll" ALIAS "InitializeFrame" (ByVal szCmdLine$) AS LONG
  925. DECLARE PUBLIC FUNCTION HwndFrame LIB "msshlstf.dll" ALIAS "HwndFrame" () AS LONG
  926. DECLARE PUBLIC FUNCTION HinstFrame LIB "msshlstf.dll" ALIAS "HinstFrame" () AS LONG
  927. DECLARE PUBLIC FUNCTION FWriteToFile LIB "msshlstf.dll" ALIAS "FWriteToFile" (ByVal szFile$, ByVal sz$) AS INTEGER
  928. DECLARE PUBLIC FUNCTION CreateRegKeyEx LIB "msshlstf.dll" ALIAS "CreateRegKeyEx" (ByVal hKey&, ByVal szKey$) AS LONG
  929. DECLARE PUBLIC FUNCTION CreateRegKeyValueExD LIB "msshlstf.dll"ALIAS "CreateRegKeyValueExD" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$,ByVal dwType&, ByVal dwDataLen&, ByVal dwValueData&) AS LONG
  930. DECLARE PUBLIC FUNCTION CreateRegKeyValueExS LIB "msshlstf.dll"ALIAS "CreateRegKeyValueExS" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$,ByVal dwType&, ByVal dwDataLen&, ByVal szValueData$) AS LONG
  931.  
  932. DECLARE PUBLIC FUNCTION DeleteRegKeyEx LIB "msshlstf.dll" ALIAS "DeleteRegKeyEx" (ByVal hKey&,ByVal szKey$) AS LONG
  933. DECLARE PUBLIC FUNCTION DeleteAllSubKeys LIB "msshlstf.dll" ALIAS "DeleteAllSubKeys" (ByVal hKey&, ByVal szKey$) AS LONG
  934. DECLARE PUBLIC FUNCTION DoesRegKeyExistEx LIB "msshlstf.dll" ALIAS "DoesRegKeyExistEx" (ByVal hKey&, ByVal szKey$) AS LONG
  935. DECLARE PUBLIC FUNCTION GetRegKeyValueEx LIB "msshlstf.dll" ALIAS "GetRegKeyValueEx" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$, dwType&, ByVal cbBuf&, lpdwBuf&, ByVal lpBuf$) AS LONG
  936. DECLARE PUBLIC FUNCTION SetRegKeyValueExD LIB "msshlstf.dll" ALIAS "SetRegKeyValueExD" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$, dwType&, ByVal dwValueData&, ByVal dwDataLen& ) AS LONG
  937. DECLARE PUBLIC FUNCTION SetRegKeyValueExS LIB "msshlstf.dll" ALIAS "SetRegKeyValueExS" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$, dwType&, ByVal szValueData$, ByVal dwDataLen& ) AS LONG
  938.  
  939. DECLARE PUBLIC FUNCTION Lot_CheckPriviledges LIB "msshlstf.dll" ALIAS "Lot_CheckPriviledges" (ByVal checkflags&) AS LONG
  940. DECLARE PUBLIC FUNCTION SetInternetProxies LIB "msshlstf.dll" ALIAS "_SetInternetProxies@8" (ByVal szRegName$, ByVal szRegVer$) AS INTEGER
  941.  
  942. DECLARE PUBLIC FUNCTION EercErrorHandler LIB "mscomstf.dll" ALIAS "EercErrorHandler" (ByVal grc&,ByVal fVital&,ByVal  sz1$,ByVal  sz2$,ByVal  sz3$) AS INTEGER
  943. DECLARE PUBLIC FUNCTION FValidFATPath  (ByVal szPath$) AS INTEGER
  944. DECLARE PUBLIC FUNCTION FValidPath  (ByVal szPath$) AS INTEGER
  945. DECLARE PUBLIC FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" ALIAS "FAddSpecialFileToCopyList" (ByVal szSect$, ByVal szKey$, ByVal szSrc$, ByVal szDest$) AS LONG
  946. DECLARE PUBLIC FUNCTION FRemoveSymbol LIB "mscomstf.dll" ALIAS "FRemoveSymbol" (ByVal szSym$) AS LONG
  947. DECLARE PUBLIC FUNCTION CbGetSymbolValue LIB "mscomstf.dll" ALIAS "CbGetSymbolValue" (ByVal szSymbol$, ByVal szValue$,ByVal Length&) AS LONG
  948. DECLARE PUBLIC FUNCTION UsGetListLength LIB "mscomstf.dll" ALIAS "UsGetListLength" (ByVal szSymbol$) AS INTEGER
  949. DECLARE PUBLIC FUNCTION CbGetListItem LIB "mscomstf.dll" ALIAS "CbGetListItem" (ByVal szListSymbol$, ByVal n&, ByVal szListItem$, ByVal cbMax&) AS LONG
  950. DECLARE PUBLIC FUNCTION FAddListItem LIB "mscomstf.dll" ALIAS "FAddListItem" (ByVal szListSymbol$,ByVal szListItem$) AS LONG
  951. DECLARE PUBLIC FUNCTION FReplaceListItem LIB "mscomstf.dll" ALIAS "FReplaceListItem" (ByVal szListSymbol$, ByVal n&, ByVal szListItem$) AS LONG
  952. DECLARE PUBLIC FUNCTION FOpenLogFile    LIB "mscomstf.dll" ALIAS "FOpenLogFile" (ByVal szFile$, ByVal fAppend&) AS LONG
  953. DECLARE PUBLIC FUNCTION FCloseLogFile   LIB "mscomstf.dll" ALIAS "FCloseLogFile" () AS LONG
  954. DECLARE PUBLIC FUNCTION FWriteToLogFile LIB "mscomstf.dll" ALIAS "FWriteToLogFile" (ByVal sz$, ByVal fRequire&) AS LONG
  955. DECLARE PUBLIC FUNCTION DoMsgBox LIB "lcomstf.dll" ALIAS "_DoMsgBox@12" (ByVal lpText$,ByVal lpCaption$,ByVal wType&) AS LONG
  956. DECLARE PUBLIC FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" ALIAS "FParsePathIntoPieces" (ByVal szPath$, ByVal szVol$, ByVal cbVol&, ByVal szDir$, ByVal cbDir&, ByVal szFile$, ByVal cbFile&) AS INTEGER
  957. DECLARE PUBLIC FUNCTION FParsePathIntoPieces LIB "mscomstf.dll" ALIAS "FParsePathIntoPieces" (ByVal szPath$, ByVal szVol$, ByVal cbVol&, ByVal szDir$, ByVal cbDir&, ByVal szFile$, ByVal cbFile&) AS INTEGER
  958.  
  959. DECLARE PUBLIC FUNCTION CbGetVersionOfFile LIB "msdetstf.dll" ALIAS "CbGetVersionOfFile" (ByVal szFile$,ByVal  szBuf$,ByVal cbBuf&) AS LONG
  960. DECLARE PUBLIC FUNCTION LGetVersionNthField LIB "msdetstf.dll" ALIAS "LGetVersionNthField" (ByVal szVersion$,ByVal nField&) AS LONG
  961. DECLARE PUBLIC FUNCTION LcbGetSizeOfFile LIB "msdetstf.dll" ALIAS "LcbGetSizeOfFile" (ByVal szFile$) AS LONG
  962. DECLARE PUBLIC FUNCTION FGetValidDrivesList LIB "msdetstf.dll" ALIAS "FGetValidDrivesList" (ByVal szSymbol$) AS LONG
  963. DECLARE PUBLIC FUNCTION FGetLocalHardDrivesList LIB "msdetstf.dll" ALIAS "FGetLocalHardDrivesList" (ByVal szSymbol$) AS LONG
  964. DECLARE PUBLIC FUNCTION FGetRemovableDrivesList LIB "msdetstf.dll" ALIAS "FGetRemovableDrivesList" (ByVal szSymbol$) AS LONG
  965. DECLARE PUBLIC FUNCTION FGetNetworkDrivesList LIB "msdetstf.dll" ALIAS "FGetNetworkDrivesList" (ByVal szSymbol$) AS LONG
  966. DECLARE PUBLIC FUNCTION LcbTotalDrive LIB "msdetstf.dll" ALIAS "LcbTotalDrive" (ByVal nDrive&) AS LONG
  967. DECLARE PUBLIC FUNCTION LcbFreeDrive LIB "msdetstf.dll" ALIAS "LcbFreeDrive" (ByVal nDrive&) AS LONG
  968. DECLARE PUBLIC FUNCTION FIsValidDrive LIB "msdetstf.dll" ALIAS "FIsValidDrive" (ByVal nDrive&) AS LONG
  969. DECLARE PUBLIC FUNCTION FIsLocalHardDrive LIB "msdetstf.dll" ALIAS "FIsLocalHardDrive" (ByVal nDrive&) AS LONG
  970. DECLARE PUBLIC FUNCTION FIsRemoveDrive LIB "msdetstf.dll" ALIAS "FIsRemoveDrive" (ByVal nDrive&) AS LONG
  971. DECLARE PUBLIC FUNCTION FIsRemoteDrive LIB "msdetstf.dll" ALIAS "FIsRemoteDrive" (ByVal nDrive&) AS LONG
  972. DECLARE PUBLIC FUNCTION FDirExists LIB "msdetstf.dll" ALIAS "FDirExists" (ByVal szDir$) AS LONG
  973. DECLARE PUBLIC FUNCTION FDoesFileExist LIB "msdetstf.dll" ALIAS "FDoesFileExist" (ByVal szFileName$, ByVal mode&) AS LONG
  974. DECLARE PUBLIC FUNCTION CbGetDateOfFile LIB "msdetstf.dll" ALIAS "CbGetDateOfFile" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  975. DECLARE PUBLIC FUNCTION FDoesIniSectionExist LIB "msdetstf.dll" ALIAS "FDoesIniSectionExist" (ByVal szFile$, ByVal szSect$) AS LONG
  976. DECLARE PUBLIC FUNCTION FDoesIniKeyExist LIB "msdetstf.dll" ALIAS "FDoesIniKeyExist" (ByVal szFile$, ByVal szSect$, ByVal szKey$) AS LONG
  977. DECLARE PUBLIC FUNCTION WGetNumWinApps LIB "msdetstf.dll" ALIAS "WGetNumWinApps" () AS LONG
  978. DECLARE PUBLIC FUNCTION FGetParallelPortsList LIB "msdetstf.dll" ALIAS "FGetParallelPortsList" (ByVal szSymbol$) AS LONG
  979. DECLARE PUBLIC FUNCTION FGetSerialPortsList LIB "msdetstf.dll" ALIAS "FGetSerialPortsList" (ByVal szSymbol$) AS LONG
  980. DECLARE PUBLIC FUNCTION FHas87MathChip LIB "msdetstf.dll" ALIAS "FHas87MathChip" () AS LONG
  981. DECLARE PUBLIC FUNCTION FHasMonochromeDisplay LIB "msdetstf.dll" ALIAS "FHasMonochromeDisplay" () AS LONG
  982. DECLARE PUBLIC FUNCTION FHasMouseInstalled LIB "msdetstf.dll" ALIAS "FHasMouseInstalled" () AS LONG
  983. DECLARE PUBLIC FUNCTION WGetConfigSmartdrvSize LIB "msdetstf.dll" ALIAS "WGetConfigSmartdrvSize" () AS LONG
  984. DECLARE PUBLIC FUNCTION WGetConfigRamdriveSize LIB "msdetstf.dll" ALIAS "WGetConfigRamdriveSize" () AS LONG
  985. DECLARE PUBLIC FUNCTION WGetConfigNumBuffers LIB "msdetstf.dll" ALIAS "WGetConfigNumBuffers" () AS LONG
  986. DECLARE PUBLIC FUNCTION WGetConfigNumFiles LIB "msdetstf.dll" ALIAS "WGetConfigNumFiles" () AS LONG
  987. DECLARE PUBLIC FUNCTION WGetConfigLastDrive LIB "msdetstf.dll" ALIAS "WGetConfigLastDrive" () AS LONG
  988. DECLARE PUBLIC FUNCTION FIsDriverInConfig LIB "msdetstf.dll" ALIAS "FIsDriverInConfig" (ByVal szDrv$) AS LONG
  989. DECLARE PUBLIC FUNCTION CbFindTargetOnEnvVar LIB "msdetstf.dll" ALIAS "CbFindTargetOnEnvVar" (ByVal szFile$, ByVal szEnvVar$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  990. DECLARE PUBLIC FUNCTION CbFindFileInTree LIB "msdetstf.dll" ALIAS "CbFindFileInTree" (ByVal szFile$, ByVal szDir$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  991. DECLARE PUBLIC FUNCTION GetTypeFaceNameFromTTF LIB "msdetstf.dll" ALIAS "GetTypeFaceNameFromTTF" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  992. DECLARE PUBLIC FUNCTION GetExistingFOTFileForTTF LIB "msdetstf.dll" ALIAS "GetExistingFOTFileForTTF" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  993.  
  994. DECLARE PUBLIC FUNCTION HinstCui LIB "mscuistf.dll" ALIAS "_HinstCui@0" () AS LONG
  995. DECLARE PUBLIC FUNCTION LoadCommonCtl LIB "mscuistf.dll" ALIAS "_LoadCommonCtl@0" () AS INTEGER
  996. DECLARE PUBLIC FUNCTION CreateLink LIB "mscuistf.dll" ALIAS "_CreateLink@20" (ByVal szPathObj$, ByVal szPathLink$, ByVal pszDesc$, ByVal szArgument$, ByVal szWorkingDir$) AS LONG
  997. DECLARE PUBLIC FUNCTION CreateLinkIcon LIB "mscuistf.dll" ALIAS "_CreateLinkIcon@28" (ByVal szPathObj$, ByVal szPathLink$, ByVal pszDesc$, ByVal szArgument$, ByVal szWorkingDir$, ByVal szIconPath$, ByVal Icon&) AS LONG
  998. DECLARE PUBLIC FUNCTION Lot_FreeDrive LIB "mscuistf.dll" ALIAS "_Lot_FreeDrive@4" (ByVal szDrive$) AS LONG
  999. DECLARE PUBLIC FUNCTION Lot_IsNewShell LIB "mscuistf.dll" ALIAS "_Lot_IsNewShell@0" () AS INTEGER
  1000.  
  1001. '************ Windows Calls ****************************************
  1002.  
  1003. DECLARE PUBLIC FUNCTION SendDlgItemMessage LIB "user32" ALIAS "SendDlgItemMessage" (ByVal hDlg&,ByVal idCtrl&,ByVal msg&,ByVal w&,ByVal l&) AS LONG
  1004. DECLARE PUBLIC FUNCTION SendDlgItemMessageLb LIB "user32" ALIAS "SendDlgItemMessage" (ByVal hDlg&,ByVal idCtrl&,ByVal msg&,ByVal w&,ByVal lParam$) AS LONG
  1005. DECLARE PUBLIC FUNCTION SendMessage LIB "user32" ALIAS "SendMessageA" (ByVal hWnd&,ByVal msg&,ByVal w&,ByVal l&) AS LONG
  1006. DECLARE PUBLIC FUNCTION GetTickCount LIB "kernel32" ALIAS "GetTickCount" () AS LONG
  1007. DECLARE PUBLIC FUNCTION GetDC LIB "user32" ALIAS "GetDC" (ByVal hWnd&) AS LONG
  1008. DECLARE PUBLIC FUNCTION ReleaseDC LIB "user32" ALIAS "ReleaseDC" (ByVal hWnd&, ByVal hDC&) AS LONG
  1009. DECLARE PUBLIC FUNCTION GetDeviceCaps LIB "GDI32" ALIAS "GetDeviceCaps" (ByVal hDC&, ByVal nIndex&) AS LONG
  1010. DECLARE PUBLIC FUNCTION WinHelp LIB "user32" ALIAS "WinHelpA" (ByVal hwndMain&, ByVal helpfile$, ByVal context&, ByVal ID) AS LONG
  1011. DECLARE PUBLIC FUNCTION WinExec LIB "kernel32" ALIAS "WinExec" (ByVal path$, ByVal data&) AS LONG
  1012. DECLARE PUBLIC FUNCTION IsDlgbuttonChecked LIB "user32" ALIAS "IsDlgButtonChecked" (ByVal hwnd&, ByVal fEnable&) AS LONG
  1013. DECLARE PUBLIC FUNCTION GetWindowsDirectory LIB "kernel32" ALIAS "GetWindowsDirectoryA" (ByVal szBuf$,ByVal cbBuf&) AS LONG
  1014. DECLARE PUBLIC FUNCTION GetSystemDirectory LIB "kernel32" ALIAS "GetSystemDirectoryA" (ByVal szBuf$, ByVal cbBuf&) AS LONG
  1015. DECLARE PUBLIC FUNCTION GetProfileString LIB "kernel32" ALIAS "GetProfileString" (ByVal szSect$,ByVal szKey$,ByVal  szDefault$,ByVal szBuf$,ByVal cbBuf&) AS LONG
  1016. DECLARE PUBLIC FUNCTION GetVersion LIB "kernel32" ALIAS "GetVersion" () AS LONG
  1017. DECLARE PUBLIC FUNCTION GetSystemMetrics LIB "user32" ALIAS "GetSystemMetrics" (ByVal nIndex&) AS LONG
  1018. DECLARE PUBLIC FUNCTION FindResource LIB "kernel32" ALIAS "FindResourceA" (ByVal hDll&, ByVal Id&, ByVal RType& ) AS LONG
  1019. DECLARE PUBLIC FUNCTION Win32CopyFile LIB "kernel32" ALIAS "CopyFileA" (ByVal szSrc$, ByVal szDest$, ByVal cmo%) AS INTEGER
  1020. DECLARE PUBLIC FUNCTION GetLastError LIB "kernel32" ALIAS "GetLastError" () AS LONG
  1021. DECLARE PUBLIC FUNCTION GetDriveType LIB "kernel32" ALIAS "GetDriveTypeA" (ByVal szPath$) AS INTEGER
  1022. DECLARE PUBLIC FUNCTION GetEnvironmentVariable LIB "kernel32" ALIAS "GetEnvironmentVariableA" (ByVal szName$, ByVal szValue$, ByVal Size&) AS LONG
  1023.  
  1024.  
  1025. '*** This functions isn't available on Win32.
  1026. 'DECLARE PUBLIC FUNCTION GetWinFlags LIB "kernel32" () AS LONG
  1027.  
  1028. DECLARE PUBLIC SUB GetSystemInfo LIB "kernel32" ALIAS "GetSystemInfo" ( rSysInf AS SysInfoType )
  1029.  
  1030. DECLARE PUBLIC FUNCTION LoadLibrary LIB "kernel32" ALIAS "LoadLibraryA" (ByVal path$) AS LONG
  1031. DECLARE PUBLIC FUNCTION GetPrivateProfileString LIB "kernel32" ALIAS "GetPrivateProfileStringA" (ByVal szSect$, ByVal szKey$, ByVal szDef$, ByVal szBuf$, ByVal cbBuf&,ByVal szFile$) AS LONG
  1032. DECLARE PUBLIC FUNCTION LoadString LIB "user32" ALIAS "LoadStringA" (ByVal hinst&,ByVal TextID&, ByVal Textbuf$, ByVal BufSize&) AS LONG
  1033. DECLARE PUBLIC FUNCTION GetModuleHandle LIB "kernel32" ALIAS "GetModuleHandleA" (ByVal path$) AS LONG
  1034. DECLARE PUBLIC FUNCTION GetDlgItem LIB "user32" ALIAS "GetDlgItem" (ByVal hwndDlg&, ByVal idControl&) AS LONG
  1035. DECLARE PUBLIC FUNCTION IsWindowVisible LIB "user32" ALIAS "IsWindowVisible" (ByVal hwndDlg&) AS INTEGER
  1036. DECLARE PUBLIC FUNCTION UpdateWindow LIB "user32" ALIAS "UpdateWindow" (ByVal hwndDlg&) AS INTEGER
  1037. DECLARE PUBLIC FUNCTION SetFocus LIB "user32" ALIAS "SetFocus" (ByVal hwndDlg&) AS LONG
  1038. DECLARE PUBLIC FUNCTION GetFocus LIB "user32" ALIAS "GetFocus" () AS LONG
  1039. DECLARE PUBLIC FUNCTION GetParent LIB "user32" ALIAS "GetParent" (ByVal hwndDlg&) AS LONG
  1040.  
  1041. ''shell
  1042. DECLARE PUBLIC FUNCTION SetWindowText LIB "user32" ALIAS "SetWindowTextA" (ByVal hwnd&, ByVal lpString$) AS INTEGER
  1043. DECLARE PUBLIC FUNCTION EnableWindow (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  1044. DECLARE PUBLIC FUNCTION WEnableWindow LIB "user32" ALIAS "EnableWindow" (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  1045. DECLARE PUBLIC FUNCTION ShowWindow LIB "user32" ALIAS "ShowWindow" (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  1046. DECLARE PUBLIC FUNCTION RegSetValue LIB "advapi32" ALIAS "RegSetValueA" (ByVal hKey&, ByVal szSubKey$, ByVal dwType&, ByVal szValue$, ByVal cbValue&) AS LONG
  1047. DECLARE PUBLIC FUNCTION RegCloseKey LIB "advapi32" ALIAS "RegCloseKey" (ByVal hKey&) AS LONG
  1048.  
  1049. '**************************WRAPPRER PROTOTYPES**************************
  1050. 'MS WRAPPER PROTOTYPES
  1051. 'DECLARE PUBLIC SUB      CreateDir (szDir$, cmo%)
  1052. 'DECLARE PUBLIC SUB      RemoveIniSection (szFile$, szSect$, cmo%)
  1053. DECLARE PUBLIC SUB       CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  1054. 'DECLARE PUBLIC SUB      RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  1055. 'DECLARE PUBLIC SUB      CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  1056. DECLARE PUBLIC SUB      CreateProgmanGroup (szGroup$, szPath$, cmo%)
  1057. DECLARE PUBLIC SUB      CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  1058. DECLARE PUBLIC SUB      ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  1059. 'DECLARE PUBLIC SUB      StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  1060. 'DECLARE PUBLIC SUB      AddDos5Help (szProgName$, szProgHelp$, cmo%)
  1061. DECLARE PUBLIC SUB      CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  1062. DECLARE PUBLIC SUB      RemoveFile (szFullPathSrc$, cmo%)
  1063. 'DECLARE PUBLIC SUB      BackupFile (szFullPath$, szBackup$)
  1064. 'DECLARE PUBLIC SUB      RenameFile (szFullPath$, szBackup$)
  1065. DECLARE PUBLIC SUB       InitInstall
  1066. DECLARE PUBLIC SUB      OpenLogFile (szFile$, fAppend%)
  1067. DECLARE PUBLIC SUB      CloseLogFile
  1068. DECLARE PUBLIC SUB      WriteToLogFile (szStr$)
  1069. 'DECLARE PUBLIC FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  1070. DECLARE PUBLIC FUNCTION IsDirWritable (szDir$) AS INTEGER
  1071. DECLARE PUBLIC FUNCTION IsFileWritable (szFile$) AS INTEGER
  1072. 'DECLARE PUBLIC SUB      PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  1073. DECLARE PUBLIC FUNCTION Lot_TrimEndSlash (path$) AS STRING
  1074.  
  1075. '** Lotus Error functions
  1076. DECLARE PUBLIC SUB      ErrorMsg (nMsg%, szErr$)
  1077. DECLARE PUBLIC SUB      FatalErrorMsg (nMsg%, szErr$, nErr%)
  1078. DECLARE PUBLIC SUB      ErrorMsgNoDlgExit (nMsg%, szErr$)
  1079. DECLARE PUBLIC SUB      SetLastErrorMsg (szErr$)
  1080. DECLARE PUBLIC FUNCTION GetLastErrorMsg () AS STRING
  1081. DECLARE PUBLIC SUB      WriteToMIF (szProductAcronym$, bStatus%, szDesc$)
  1082. DECLARE PUBLIC FUNCTION LdString (TextID%) AS STRING
  1083. DECLARE PUBLIC SUB LdStringInit () 
  1084.  
  1085. %rem
  1086. DECLARE PUBLIC SUB       StfApiErr (nMsg%, szApi$, szArgs$)
  1087. DECLARE PUBLIC SUB       BadArgErr (nArg%, szApi$, szArgs$)
  1088.  
  1089. '' chk arg
  1090. 'DECLARE PUBLIC FUNCTION FValidDrive (szDrive$) AS INTEGER
  1091.  
  1092. 'DECLARE PUBLIC FUNCTION FValidInfSect (szSect$) AS INTEGER
  1093. 'DECLARE PUBLIC FUNCTION FValidIniFile (szFile$) AS INTEGER
  1094.  
  1095. %endrem ''DEBUG
  1096. '' Windows system detect
  1097.  
  1098. DECLARE PUBLIC FUNCTION GetWindowsMajorVersion () AS INTEGER
  1099. DECLARE PUBLIC FUNCTION GetWindowsMinorVersion () AS INTEGER
  1100. DECLARE PUBLIC FUNCTION IsNewShell () AS INTEGER
  1101. DECLARE PUBLIC FUNCTION GetWindowsMode () AS INTEGER
  1102. DECLARE PUBLIC FUNCTION GetWindowsDir  () AS STRING
  1103. DECLARE PUBLIC FUNCTION GetWindowsSysDir () AS STRING
  1104. DECLARE PUBLIC FUNCTION IsWindowsShared () AS INTEGER
  1105. DECLARE PUBLIC FUNCTION GetScreenWidth  () AS INTEGER
  1106. DECLARE PUBLIC FUNCTION GetScreenHeight () AS INTEGER
  1107.  
  1108. '' Detect
  1109. DECLARE PUBLIC FUNCTION IsLongDirPath (szDir$)  AS INTEGER
  1110. DECLARE PUBLIC FUNCTION IsDriveValid (szDrive$) AS INTEGER
  1111. DECLARE PUBLIC FUNCTION IsDriveLocalHard (szDrive$) AS INTEGER
  1112. DECLARE PUBLIC FUNCTION IsDriveRemovable (szDrive$) AS INTEGER
  1113. DECLARE PUBLIC FUNCTION IsDriveNetwork (szDrive$) AS INTEGER
  1114. DECLARE PUBLIC SUB      GetValidDrivesList (szSymbol$)
  1115. DECLARE PUBLIC SUB      GetLocalHardDrivesList (szSymbol$)
  1116. DECLARE PUBLIC SUB      GetRemovableDrivesList (szSymbol$)
  1117. DECLARE PUBLIC SUB      GetNetworkDrivesList (szSymbol$)
  1118. DECLARE PUBLIC FUNCTION GetTotalSpaceForDrive (szDrive$) AS LONG
  1119. DECLARE PUBLIC FUNCTION GetFreeSpaceForDrive (szDrive$) AS LONG
  1120.  
  1121. DECLARE PUBLIC FUNCTION GetEnvVariableValue (szEnvVar$) AS STRING
  1122. DECLARE PUBLIC FUNCTION GetNumWinApps () AS INTEGER
  1123.  
  1124. DECLARE PUBLIC FUNCTION DoesFileExist (szFile$, mode%) AS INTEGER
  1125. DECLARE PUBLIC FUNCTION GetDateOfFile (szFile$) AS STRING
  1126. DECLARE PUBLIC FUNCTION GetYearFromDate (szDate$) AS INTEGER
  1127. DECLARE PUBLIC FUNCTION GetMonthFromDate (szDate$) AS INTEGER
  1128. DECLARE PUBLIC FUNCTION GetDayFromDate (szDate$) AS INTEGER
  1129. DECLARE PUBLIC FUNCTION GetHourFromDate (szDate$) AS INTEGER
  1130. DECLARE PUBLIC FUNCTION GetMinuteFromDate (szDate$) AS INTEGER
  1131. DECLARE PUBLIC FUNCTION GetSecondFromDate (szDate$) AS INTEGER
  1132. DECLARE PUBLIC FUNCTION GetVersionOfFile (szFile$) AS STRING
  1133. DECLARE PUBLIC FUNCTION GetVersionNthField (szVersion$, nField%) AS LONG
  1134. DECLARE PUBLIC FUNCTION GetSizeOfFile (szFile$) AS LONG
  1135. DECLARE PUBLIC FUNCTION FindTargetOnEnvVar (szFile$, szEnvVar$) AS STRING
  1136. DECLARE PUBLIC FUNCTION FindFileInTree (szFile$, szDir$) AS STRING
  1137. DECLARE PUBLIC FUNCTION DoesDirExist (szDir$) AS INTEGER
  1138.  
  1139. DECLARE PUBLIC FUNCTION DoesIniSectionExist (szFile$, szSect$) AS INTEGER
  1140. DECLARE PUBLIC FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$) AS INTEGER
  1141. DECLARE PUBLIC FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) AS STRING
  1142.  
  1143. DECLARE PUBLIC FUNCTION GetConfigSmartdrvSize () AS INTEGER
  1144. DECLARE PUBLIC FUNCTION GetConfigRamdriveSize () AS INTEGER
  1145. DECLARE PUBLIC FUNCTION GetConfigNumBuffers () AS INTEGER
  1146. DECLARE PUBLIC FUNCTION GetConfigNumFiles () AS INTEGER
  1147. DECLARE PUBLIC FUNCTION GetConfigLastDrive () AS STRING
  1148. DECLARE PUBLIC FUNCTION IsDriverInConfig (szDrv$) AS INTEGER
  1149.  
  1150. DECLARE PUBLIC FUNCTION GetProcessorType () AS INTEGER
  1151. DECLARE PUBLIC SUB      GetParallelPortsList (szSymbol$)
  1152. DECLARE PUBLIC SUB      GetSerialPortsList (szSymbol$)
  1153. DECLARE PUBLIC FUNCTION Has87MathChip () AS INTEGER
  1154. DECLARE PUBLIC FUNCTION HasMonochromeDisplay () AS INTEGER
  1155. DECLARE PUBLIC FUNCTION HasMouseInstalled () AS INTEGER
  1156. DECLARE PUBLIC SUB      SetBitmap(szDll$, Bitmap%)
  1157. DECLARE PUBLIC SUB      SetAbout(szAbout1$, szAbout2$)
  1158. DECLARE PUBLIC FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  1159. DECLARE PUBLIC SUB      UIPop (n%)
  1160. DECLARE PUBLIC SUB      UIPopAll
  1161. DECLARE PUBLIC SUB      SetTitle (sz$)
  1162. DECLARE PUBLIC SUB      SetSymbolValue (szSymbol$, szValue$)
  1163. DECLARE PUBLIC SUB      RemoveSymbol (szSym$)
  1164. DECLARE PUBLIC FUNCTION GetSymbolValue (szSymbol$) AS STRING
  1165. DECLARE PUBLIC FUNCTION GetListLength(szSymbol$) AS INTEGER
  1166. DECLARE PUBLIC FUNCTION GetListItem(szSymbol$, n%) AS STRING
  1167. DECLARE PUBLIC SUB      AddListItem(szSymbol$, szItem$)
  1168. DECLARE PUBLIC SUB      ReplaceListItem(szSymbol$, n%, szItem$)
  1169. DECLARE PUBLIC FUNCTION InitFrame (szCmdLine$) AS INTEGER
  1170. DECLARE PUBLIC FUNCTION InitSetup (szCmdLine$) AS INTEGER
  1171. DECLARE PUBLIC FUNCTION ShowWaitCursor () AS LONG
  1172. DECLARE PUBLIC SUB      RestoreCursor (hPrev&)
  1173. DECLARE PUBLIC SUB WriteToFile(szFile$,sz$) 
  1174.  
  1175. '** these are some functions to deal with 32 bit type dir names
  1176. DECLARE PUBLIC FUNCTION GetShortPathName(ByVal szLong$, szShort$) AS LONG
  1177. DECLARE PUBLIC FUNCTION Lot_Regedit LIB "lcomstf.dll" ALIAS "_Lot_Regedit@8" (ByVal szFile$,ByVal szFile$) AS LONG
  1178. DECLARE PUBLIC FUNCTION Lot_GetShortPathName LIB "lcomstf.dll" ALIAS "_Lot_GetShortPathName@12" (ByVal szLong$,ByVal szShort$,ByVal cchBuffer&) AS LONG
  1179. DECLARE PUBLIC FUNCTION Lot_CreateIniKeyValue LIB "lcomstf.dll" ALIAS "_Lot_CreateIniKeyValue@20" (ByVal szFile$,ByVal szSect$,ByVal szKey$,ByVal szValue$,ByVal cmo&) AS LONG
  1180.  
  1181.  
  1182. DECLARE PUBLIC FUNCTION Lot_CleanPath (path$) AS INTEGER
  1183. DECLARE PUBLIC FUNCTION Lot_GetNthFieldFromIniString (szLine$, iField%, sp$) AS STRING
  1184.  
  1185. DECLARE PUBLIC FUNCTION Lot_RegCreateKeyEx(   ByVal hKey&, ByVal szKey$) AS LONG
  1186. DECLARE PUBLIC FUNCTION Lot_RegDelAllSubKeys( ByVal hKey&, ByVal szKey$) AS LONG
  1187. DECLARE PUBLIC FUNCTION Lot_DoesRegKeyExistEx(ByVal hKey&, ByVal szKey$) AS LONG
  1188. DECLARE PUBLIC FUNCTION Lot_DeleteRegKeyEx(   ByVal hKey&, ByVal szKey$) AS LONG
  1189. DECLARE PUBLIC FUNCTION Lot_CreateRegKeyValueEx(ByVal hKey&,   ByVal szSubKey$,    ByVal szValueName$,_
  1190.                                                 ByVal dwType&, ByVal lpValueData as variant, ByVal dwDataLen& ) AS LONG
  1191. DECLARE PUBLIC FUNCTION Lot_SetRegKeyValueEx(ByVal hKey&,  ByVal szSubKey$,    ByVal szValueName$,_
  1192.                                               dwType&,ByVal lpValueData, ByVal dwDataLen& ) AS LONG
  1193.  
  1194. DECLARE PUBLIC FUNCTION Lot_GetRegKeyValueEx(ByVal hKey&,  ByVal szSubKey$,ByVal szValueName$,_
  1195.                                              dwType&, lpBuf as variant, cbBuf&) AS LONG
  1196.  
  1197.  
  1198. DECLARE PUBLIC FUNCTION Lot_CreateDirectory LIB "mscuistf.dll" ALIAS "_Lot_CreateDirectory@4" (ByVal szDir$) AS LONG
  1199.  
  1200. DECLARE PUBLIC SUB SetListItem (szSymbol$, n%, szListItem$) 
  1201.  
  1202. DECLARE PUBLIC FUNCTION NullTrim (szString$) AS STRING
  1203. DECLARE PUBLIC FUNCTION CreateBuffer (Length&) AS STRING
  1204.  
  1205. ' called from main to start off everything
  1206. DECLARE PUBLIC SUB SetUpAPI
  1207. DECLARE PUBLIC SUB      ASSERT (assertion%, msg$)
  1208.  
  1209. ''JMD: Replace old MS Setup functions
  1210. PUBLIC FUNCTION FValidFATPath  (ByVal szPath$) AS INTEGER
  1211.     FValidFATPath = Lot_ValidPath (szPath$)
  1212. END FUNCTION
  1213.  
  1214. PUBLIC FUNCTION FValidPath (ByVal szPath$) AS INTEGER
  1215.     FValidPath = Lot_ValidPath (szPath$)
  1216. END FUNCTION
  1217.  
  1218. %rem
  1219. '******************SUPPORT FUNCTIONS ****************************
  1220. PUBLIC FUNCTION LEFTBP(sz$, n%) AS STRING
  1221.    LEFTBP = LEFT$(sz$, n%)
  1222. END FUNCTION
  1223. %endrem
  1224.  
  1225. '*************************************************************************
  1226. '** PUBLIC FUNCTION Lot_TrimEndSlash (path$) AS STRING
  1227. '**
  1228. '** Purpose:   trims 
  1229. '** Author:    MMETH
  1230. '** Arguments: path$
  1231. '** Returns:   the modified path
  1232. '*************************************************************************
  1233.  
  1234. PUBLIC FUNCTION Lot_TrimEndSlash (path$) AS STRING
  1235.  
  1236.    DIM l%
  1237.  
  1238.    l% = LEN(path$)
  1239.    If l% <> 0 THEN
  1240.       If MID$(path$, l%, 1) = "\" Then
  1241.     Lot_TrimEndSlash = LEFT$ (path$, l%-1)
  1242.       Else
  1243.     Lot_TrimEndSlash = path$
  1244.       End If
  1245.    End If
  1246.  
  1247. END FUNCTION
  1248.  
  1249. '****************************************************************
  1250. PUBLIC FUNCTION NullTrim (szString$) AS STRING
  1251.    DIM l%
  1252.  
  1253.    l% = INSTR (szString, CHR$(0))
  1254.    IF l% > 0 THEN
  1255.          NullTrim = RTrim$(LEFT$ (szString, l% - 1))
  1256.    ELSEIF l% = 0 THEN
  1257.          NullTrim = RTrim$(szString)
  1258.    ELSE
  1259.       NullTrim = ""
  1260.    END IF
  1261.  
  1262. END FUNCTION
  1263.  
  1264. '****************************************************************
  1265. ' Need this function to allow us to full buffers with anything
  1266. ' Right now we can't fill them with nulls.
  1267. PUBLIC FUNCTION CreateBuffer (Length&) AS STRING
  1268.  
  1269.     CreateBuffer = STRING$(Length&, " ")
  1270.  
  1271. END FUNCTION
  1272.  
  1273. '***************************WRAPPERS FUNCTIONS AND SUBROUTINES***********
  1274. 'MS WRAPPERS FUNCTIONS AND SUBROUTINES
  1275.  
  1276. PUBLIC FUNCTION InitSetup(szCmdLine$)  AS INTEGER
  1277. '** Purpose: calls InitFrame and InitInstall and sets fFrameInit and 
  1278. '**          fInstallInit flags
  1279. '** Author:
  1280. '** Arguments: szCmdLine$
  1281. '** Returns:   the return of InitFrame call
  1282. '**     
  1283. '*************************************************************************
  1284.     DIM  i%
  1285.  
  1286. %rem
  1287.     fFrameInit = FALSE
  1288.     fInstallInit = FALSE
  1289.  
  1290.     IF hSetup > 0 THEN
  1291.     StfApiErr saeInit, "InitSetup", szCmdLine$
  1292.     END IF
  1293.  
  1294.     i% = InitFrame(szCmdLine$)
  1295.     fFrameInit = 1
  1296.  
  1297.     InitInstall
  1298.     fInstallInit = 1
  1299. %endrem ''DEBUG
  1300.  
  1301.     i% = InitFrame(szCmdLine$)
  1302.     InitInstall
  1303.  
  1304.     InitSetup = i%
  1305. END FUNCTION
  1306. '**************************************************************************
  1307.  
  1308. PUBLIC FUNCTION InitFrame(szCmdLine$)  AS INTEGER
  1309. '** Purpose:    Initialize the frame
  1310. '** Author:
  1311. '** Arguments:  szCmdLine$
  1312. '** Returns:
  1313. '*************************************************************************
  1314.       DIM  i&
  1315.  
  1316.     IF hSetup > 0 THEN
  1317. %rem
  1318.     StfApiErr saeInit, "InitFrame", szCmdLine$
  1319. %endrem ''DEBUG
  1320.     ELSE
  1321.     i& = InitializeFrame(szCmdLine$) 
  1322.     IF i& = -1 THEN
  1323. '           FatalErrorMsg SID_ERR_COMMANDLINE_FORMAT, "", STFQUIT
  1324.         ERROR STFQUIT    
  1325.     ELSEIF i& = 0 THEN
  1326. %rem
  1327.         StfApiErr saeFail, "InitFrame", szCmdLine$
  1328. %endrem ''DEBUG
  1329.         '** TV: return value from cmd line parsing was 0. One of the
  1330.         '** cmd line processing failed. 
  1331.         ERROR STFQUIT    
  1332.         END
  1333.     ELSE
  1334.         InitFrame = CInt(i&)
  1335.     END IF
  1336.     END IF
  1337. END FUNCTION
  1338. '**************************************************************************
  1339.  
  1340. PUBLIC SUB SetBitmap(szDll$, Bitmap%) 
  1341. '** Purpose:
  1342. '** Author:
  1343. '** Arguments: szDll$, Bitmap%
  1344. '*************************************************************************
  1345.     
  1346.     IF FSetBitmap(szDll$, CLng(Bitmap%)) = FALSE THEN
  1347.        ASSERT TRUE, ""
  1348.     END IF
  1349. END SUB
  1350. '**************************************************************************
  1351.  
  1352. PUBLIC SUB SetAbout(szAbout1$, szAbout2$) 
  1353. '** Purpose:
  1354. '** Author:
  1355. '** Arguments: szAbout1$, szAbout2$
  1356. '*************************************************************************
  1357.     IF FSetAbout(szAbout1$, szAbout2$) = FALSE THEN
  1358.     ASSERT TRUE, ""
  1359.     END IF
  1360. END SUB
  1361. '*************************************************************************
  1362.  
  1363. PUBLIC SUB SetTitle(sz$) 
  1364. '** Purpose:
  1365. '** Author:
  1366. '** Arguments: sz$
  1367. '*************************************************************************
  1368.     SetWindowText HwndFrame(), sz$
  1369. END SUB
  1370. '*************************************************************************
  1371.  
  1372. PUBLIC FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$)  AS STRING
  1373. '** Purpose:
  1374. '** Author:
  1375. '** Arguments: szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$
  1376. '** Returns: Value of the symbol for the event, e.g. "ID_OK"
  1377. '**     
  1378. '** NOTE: This version calls FDoDialog3, which allows multiple DLLs    
  1379. '**     
  1380. '*************************************************************************
  1381. %rem
  1382.     if szDll$ = "" then
  1383.     n% = 1
  1384.     elseif szDlgProc$ = "" then
  1385.     n% = 3
  1386.     else
  1387.     n% = 0
  1388.     end if
  1389.     if n% > 0 then
  1390.     BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  1391.     end if
  1392. %endrem ''DEBUG
  1393. '    IF FDoDialog(HwndFrame(), szDll$, CLng(Dlg%), szDlgProc$, CLng(HelpDlg%), szHelpProc$) = FALSE THEN
  1394.     IF FDoDialog3(HwndFrame(), szDll$, CLng(Dlg%), szDlgProc$ ) = FALSE THEN
  1395.     ASSERT TRUE, ""
  1396.     ERROR STFQUIT
  1397.     ELSE
  1398.     UIStartDlg = GetSymbolValue(SYM_DLGEVENT$)
  1399.     END IF
  1400. END FUNCTION
  1401. '*************************************************************************
  1402.  
  1403. PUBLIC SUB UIPop (n%) 
  1404. '** Purpose:
  1405. '** Author:
  1406. '** Arguments: n%
  1407. '*************************************************************************
  1408.     IF FKillNDialogs3(CLng(n%)) = FALSE THEN
  1409.     ASSERT TRUE, ""
  1410.     END IF
  1411. END SUB
  1412. '*************************************************************************
  1413.  
  1414. PUBLIC SUB UIPopAll 
  1415. '** Purpose:
  1416. '** Author:
  1417. '** Arguments: None
  1418. '*************************************************************************
  1419. ' This is not needed if calling FDoDialog3
  1420.     IF FKillNDialogs3(32767) = FALSE THEN
  1421.     ASSERT TRUE, ""
  1422.     END IF
  1423. END SUB
  1424. '*************************************************************************
  1425.  
  1426. PUBLIC FUNCTION GetSymbolValue(szSymbol$)  AS STRING
  1427. '** Purpose:
  1428. '** Author:
  1429. '** Arguments: szSymbol$
  1430. '** Returns:
  1431. '**     
  1432. '*************************************************************************
  1433. %rem
  1434.     if szSymbol$ = "" then
  1435.     BadArgErr 1, "GetSymbolValue", szSymbol$
  1436.     end if
  1437. %endrem ''DEBUG
  1438.  
  1439.     DIM szValue As String : szValue = CreateBuffer(cbSymValMax)
  1440.     DIM Length%
  1441.  
  1442.     Length% = CInt(CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax))
  1443.     IF Length% >= cbSymValMax THEN
  1444.     ErrorMsg SID_ERR_GETSYMBOLVALUE, LSI_INFO(13) & _
  1445.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11)
  1446.     ERROR STFQUIT
  1447.     ELSEIF (Length% = 0) THEN
  1448.     szValue$=""
  1449.     END IF
  1450.  
  1451.     GetSymbolValue = LEFTBP(szValue$, Length%)
  1452.    
  1453. END FUNCTION
  1454. '*************************************************************************
  1455.  
  1456. PUBLIC FUNCTION GetListLength(szSymbol$)  AS INTEGER
  1457. '** Purpose:
  1458. '** Author:
  1459. '** Arguments: szSymbol$
  1460. '** Returns:
  1461. '**     
  1462. '*************************************************************************
  1463. %rem
  1464.     if szSymbol$ = "" then
  1465.     BadArgErr 1, "GetListLength", szSymbol$
  1466.     end if
  1467. %endrem ''DEBUG
  1468.  
  1469.     GetListLength = UsGetListLength(szSymbol$)
  1470.  
  1471.     IF szSymbol$ = "" THEN
  1472.     ErrorMsg SID_ERR_GETLISTLENGTH, LSI_INFO(13) & _
  1473.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11) & CHR(10) &_
  1474.          "GetListLength(" & szSymbol$ & ")"
  1475.     ERROR STFQUIT
  1476.     END IF
  1477. END FUNCTION
  1478. '*************************************************************************
  1479.  
  1480. PUBLIC FUNCTION GetListItem(szListSymbol$, nItem%)  AS STRING
  1481. '** Purpose:
  1482. '** Author:
  1483. '** Arguments: szListSymbol$, nItem%
  1484. '** Returns:
  1485. '**     
  1486. '*************************************************************************
  1487. %rem
  1488.     if szListSymbol$ = "" then
  1489.     BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  1490.     end if
  1491.  
  1492.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  1493.     BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  1494.     end if
  1495. %endrem ''DEBUG
  1496.       DIM szListItem$, Length&
  1497.  
  1498.     szListItem$ = CreateBuffer(cbSymValMax)
  1499.     Length& = CbGetListItem(szListSymbol$, CLng(nItem%), szListItem$, cbSymValMax)
  1500.     GetListItem = szListItem$
  1501.     IF Length& >= cbSymValMax THEN
  1502.     ErrorMsg SID_ERR_GETLISTITEM, LSI_INFO(13) & _
  1503.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11) & CHR(10) &_
  1504.          "GetListItem(" & szListSymbol$ & ", " & CSTR(nItem%) & ")"
  1505.     ERROR STFQUIT
  1506.     ELSEIF Length& <= 0 THEN
  1507.     szListItem$ = ""
  1508.     Length& = 0 
  1509.     END IF
  1510.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  1511.     ErrorMsg SID_ERR_GETLISTITEM2, LSI_INFO(13) & _
  1512.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11) & CHR(10) &_
  1513.          "GetListItem(" & szListSymbol$ & ", " & CSTR(nItem%) & ")"
  1514.     ERROR STFQUIT
  1515.     end if
  1516.     GetListItem = LEFTBP( szListItem$, CInt(Length&) )
  1517. END FUNCTION
  1518. '*************************************************************************
  1519.  
  1520. PUBLIC SUB AddListItem(szSymbol$, szItem$) 
  1521. '** Purpose:
  1522. '** Author:
  1523. '** Arguments: szSymbol$, szItem$
  1524. '*************************************************************************
  1525. %rem
  1526.     if szSymbol$ = "" then
  1527.     BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  1528.     end if
  1529. %endrem ''DEBUG
  1530.     IF FAddListItem(ByVal szSymbol$,ByVal  szItem$) = FALSE THEN
  1531.     ErrorMsg SID_ERR_ADDLISTITEM,_
  1532.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1533.     ERROR STFQUIT
  1534.     END IF
  1535. END SUB
  1536. '*************************************************************************
  1537.  
  1538. PUBLIC SUB ReplaceListItem(szSymbol$, n%, szItem$) 
  1539. '** Purpose:
  1540. '** Author:
  1541. '** Arguments: szSymbol$, n%, szItem$
  1542. '*************************************************************************
  1543. %rem
  1544.     if szSymbol$ = "" then
  1545.     nArg% = 1
  1546.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  1547.     nArg% = 2
  1548.     else
  1549.     nArg% = 0
  1550.     end if
  1551.     if nArg% > 0 then
  1552.     BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  1553.     end if
  1554. %endrem ''DEBUG
  1555.  
  1556.     IF FReplaceListItem(szSymbol$, CLng(n%), szItem$) = FALSE THEN
  1557.     ErrorMsg SID_ERR_REPLACELISTITEM, _
  1558.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1559.     ERROR STFQUIT
  1560.     END IF
  1561. END SUB
  1562. '**************************************************************************
  1563.  
  1564.  
  1565. PUBLIC SUB SetSymbolValue(szSymbol$, szValue$) 
  1566. '** Purpose:
  1567. '** Author:
  1568. '** Arguments: szSymbol$, szValue$
  1569. '*************************************************************************
  1570.     DIM LocalValue$
  1571.     LocalValue$ = TRIM$(szValue$)
  1572. %rem
  1573.     if LocalValue$ = "" then
  1574.     BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  1575.     end if
  1576. %endrem ''DEBUG
  1577.     IF szSymbol$ = "" THEN
  1578.         ErrorMsg SID_ERR_SETSYMBOLVALUE, "Symbol name empty, value is " &  szValue$
  1579.     EXIT SUB
  1580.     END IF
  1581.     IF FSetSymbolValue(szSymbol$, LocalValue$) = FALSE THEN
  1582.     ErrorMsg SID_ERR_SETSYMBOLVALUE, _
  1583.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1584.     ERROR STFQUIT
  1585.     END IF
  1586. END SUB
  1587. '*************************************************************************
  1588.  
  1589. PUBLIC SUB RemoveSymbol(szSym$) 
  1590. '** Purpose:
  1591. '** Author:
  1592. '** Arguments: szSym$
  1593. '*************************************************************************
  1594. %rem
  1595.     if szSym$ = "" then
  1596.     BadArgErr 1, "RemoveSymbol", szSym$
  1597.     end if
  1598. %endrem ''DEBUG
  1599.     IF FRemoveSymbol(szSym$) = FALSE THEN
  1600.     ErrorMsg SID_ERR_REMOVESYMBOL, _
  1601.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1602.     ERROR STFQUIT
  1603.     END IF
  1604. END SUB
  1605. '*************************************************************************
  1606.  
  1607. PUBLIC FUNCTION ShowWaitCursor () AS LONG
  1608. '** Purpose:
  1609. '** Author:
  1610. '** Arguments: None
  1611. '** Returns:
  1612. '**     
  1613. '*************************************************************************
  1614. '    ShowWaitCursor = HShowWaitCursor()
  1615.     ShowWaitCursor = 0
  1616. END FUNCTION
  1617. '*************************************************************************
  1618.  
  1619. PUBLIC SUB RestoreCursor (hPrev&) 
  1620. '** Purpose:
  1621. '** Author:
  1622. '** Arguments: hPrev&
  1623. '*************************************************************************
  1624.     DIM i&
  1625.  
  1626. '  i& = FRestoreCursor(hPrev&)
  1627.   i& = 1
  1628.     IF i& = 0 THEN
  1629.     ErrorMsg SID_ERR_RESTORECURSOR, ""
  1630.     ERROR STFERR
  1631.     END IF
  1632. END SUB
  1633. '*************************************************************************
  1634.  
  1635. PUBLIC SUB InitInstall 
  1636. '** Purpose:
  1637. '** Author:
  1638. '** Arguments: None
  1639. '*************************************************************************
  1640.     IF hSetup > 0 THEN
  1641. %rem
  1642.     StfApiErr saeInit, "InitInstall", ""
  1643. %endrem ''DEBUG
  1644.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = FALSE THEN
  1645. %rem
  1646.     StfApiErr saeFail, "InitInstall", ""
  1647. %endrem ''DEBUG
  1648.     END
  1649.     END IF
  1650. END SUB
  1651. '*************************************************************************
  1652.  
  1653. PUBLIC SUB CreateDir (szDir$, cmo%) 
  1654. '** Purpose:
  1655. '** Author:
  1656. '** Arguments: szDir$, cmo%
  1657. '*************************************************************************
  1658. DIM logfile$
  1659. %rem
  1660.     if FValidFATDir(szDir$) = FALSE then
  1661.     BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  1662.     end if
  1663. %endrem ''DEBUG
  1664.      IF Lot_CreateDirectory(szDir$) <> NO_ERROR THEN
  1665.     ErrorMsg SID_ERR_CREATEDIR, szDir$ & " " & CStr(cmo%) & CHR(10) &_
  1666.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1667.     ERROR STFQUIT
  1668.     END IF
  1669.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1670.     If logfile$ <> "" THEN 
  1671.         OpenLogFile logfile$,1 
  1672.         WriteToLogFile  "** Successfully created " + szDir$+ " ;with cmo% = " + CStr(cmo%)
  1673.         CloseLogFile
  1674.     END IF
  1675.  
  1676. END SUB
  1677. '*************************************************************************
  1678.  
  1679. PUBLIC SUB RemoveIniSection (szFile$, szSect$, cmo%) 
  1680. '** Purpose:
  1681. '** Author:
  1682. '** Arguments: szFile$, szSect$, cmo%
  1683. '*************************************************************************
  1684. DIM logfile$
  1685. %rem
  1686.     if FValidIniFile(szFile$) = FALSE then
  1687.     n% = 1
  1688.     elseif FValidInfSect(szSect$) = FALSE then
  1689.     n% = 2
  1690.     else
  1691.     n% = 0
  1692.     end if
  1693.     if n% > 0 then
  1694.     BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  1695.     end if
  1696. %endrem ''DEBUG
  1697.  
  1698.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1699.     IF FRemoveIniSection(szFile$, szSect$, CLng(cmo%)) = FALSE THEN
  1700.     ErrorMsg SID_ERR_REMOVEINISECTION, "** Failed removing ini entry from " & szFile$ & CHR(10) &_
  1701.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1702.     ERROR STFERR
  1703.     END IF
  1704.     If logfile$ <> "" THEN 
  1705.     OpenLogFile logfile$,1 
  1706.     WriteToLogFile  "** Successfully removed from " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1707.     WriteToLogFile  "[" + szSect$ +"]"
  1708.     CloseLogFile
  1709.     END IF
  1710.  
  1711. END SUB
  1712. '*************************************************************************
  1713.  
  1714. PUBLIC SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) 
  1715. '** Purpose:
  1716. '** Author:
  1717. '** Arguments: szFile$, szSect$, szKey$, szValue$, cmo%
  1718. '*************************************************************************
  1719. DIM logfile$
  1720. %rem
  1721.     if FValidIniFile(szFile$) = FALSE then
  1722.     n% = 1
  1723.     elseif FValidInfSect(szSect$) = FALSE then
  1724.     n% = 2
  1725.     else
  1726.     n% = 0
  1727.     end if
  1728.     if n% > 0 then
  1729.     BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1730.     end if
  1731. %endrem ''DEBUG
  1732.  
  1733.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1734.  
  1735.     IF Lot_CreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, CLng(cmo%)) = FALSE THEN
  1736.  
  1737.     'ErrorMsg SID_ERR_CREATEINIKEYVALUE, "** Failed writing to " & szFile$ & CHR(10) & _
  1738.     '     LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1739.     'ERROR STFQUIT
  1740.     END IF
  1741.     If logfile$ <> "" THEN 
  1742.     OpenLogFile logfile$,1 
  1743.     WriteToLogFile  "** Successfully wrote to " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1744.     WriteToLogFile  "[" + szSect$ +"]"
  1745.     WriteToLogFile  szKey$ +"="+ szValue$
  1746.     CloseLogFile
  1747.     END IF
  1748. END SUB
  1749. '*************************************************************************
  1750.  
  1751. PUBLIC SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) 
  1752. '** Purpose:
  1753. '** Author:
  1754. '** Arguments: szFile$, szSect$, szKey$, cmo%
  1755. '*************************************************************************
  1756. DIM logfile$
  1757. %rem
  1758.     if FValidIniFile(szFile$) = FALSE then
  1759.     n% = 1
  1760.     elseif FValidInfSect(szSect$) = FALSE then
  1761.     n% = 2
  1762.     elseif szKey$ = "" then
  1763.     n% = 3
  1764.     else
  1765.     n% = 0
  1766.     end if
  1767.     if n% > 0 then
  1768.     BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1769.     end if
  1770. %endrem ''DEBUG
  1771.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1772.  
  1773.     IF FRemoveIniKey(szFile$, szSect$, szKey$, CLng(cmo%)) = FALSE THEN
  1774.     ErrorMsg SID_ERR_REMOVEINIKEY, "** Failed removing ini entry from " & szFile$ & CHR(10) &_
  1775.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1776.     ERROR STFERR
  1777.     END IF
  1778.     If logfile$ <> "" THEN 
  1779.     OpenLogFile logfile$,1 
  1780.     WriteToLogFile "** Successfully Removed from " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1781.     WriteToLogFile "[" + szSect$ +"]"
  1782.     WriteToLogFile szKey$ +"="
  1783.     CloseLogFile
  1784.     END IF
  1785.  
  1786. END SUB
  1787. '*************************************************************************
  1788.  
  1789. PUBLIC SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) 
  1790. '** Purpose:
  1791. '** Author:
  1792. '** Arguments: szFile$, szSect$, szKey$, szValue$, cmo%
  1793. '*************************************************************************
  1794. DIM logfile$
  1795. %rem
  1796.     if FValidFATPath(szFile$) = FALSE then
  1797.     n% = 1
  1798.     elseif FValidInfSect(szSect$) = FALSE then
  1799.     n% = 2
  1800.     elseif szKey$ = "" then
  1801.     n% = 3
  1802.     else
  1803.     n% = 0
  1804.     end if
  1805.     if n% > 0 then
  1806.     BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1807.     end if
  1808. %endrem ''DEBUG
  1809.  
  1810.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1811.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, CLng(cmo%)) = FALSE THEN
  1812.     ErrorMsg SID_ERR_CREATESYSINIKEYVALUE,  "** Failed writing to " & szFile$ & CHR(10) & _ 
  1813.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1814.     ERROR STFQUIT
  1815.     END IF
  1816.     If logfile$ <> "" THEN 
  1817.     OpenLogFile logfile$,1 
  1818.     WriteToLogFile "** Successfully did a CreateSysIniKeyValue to " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1819.     WriteToLogFile "[" + szSect$ +"]"
  1820.     WriteToLogFile szKey$ +"="+ szValue$
  1821.     CloseLogFile
  1822.     END IF
  1823.  
  1824.  
  1825. END SUB
  1826. '*************************************************************************
  1827.  
  1828. PUBLIC SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) 
  1829. '** Purpose:
  1830. '** Author:
  1831. '** Arguments: szGroup$, szPath$, cmo%
  1832. '*************************************************************************
  1833. %rem
  1834.     if szGroup$ = "" or len(szGroup$) > 24 then
  1835.     BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1836.     end if
  1837. %endrem ''DEBUG
  1838.     IF FCreateProgManGroup(szGroup$, szPath$, CLng(cmo%)) = FALSE THEN
  1839.     ErrorMsg SID_ERR_CREATEPROGMANGROUP, szGroup$ & CHR(10) & _
  1840.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1841.     END IF
  1842. END SUB
  1843. '*************************************************************************
  1844.  
  1845. PUBLIC SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) 
  1846. '** Purpose:
  1847. '** Author:
  1848. '** Arguments: szGroup$, Cmd%, cmo%
  1849. '*************************************************************************
  1850. %rem
  1851.     if szGroup$ = "" or len(szGroup$) > 24 then
  1852.     BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1853.     end if
  1854. %endrem ''DEBUG
  1855.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), CLng(cmo%)) = FALSE THEN
  1856.     ErrorMsg SID_ERR_SHOWPROGMANGROUP, ""
  1857.     END IF
  1858. END SUB
  1859. '*************************************************************************
  1860.  
  1861. PUBLIC SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) 
  1862. '** Purpose:
  1863. '** Author:
  1864. '** Arguments: szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%
  1865. '*************************************************************************
  1866. %rem
  1867.     if FValidInfSect(szSect$) = FALSE then
  1868.     n% = 1
  1869.     elseif szKey$ = "" then
  1870.     n% = 2
  1871.     elseif FValidFATDir(szDst$) = FALSE then
  1872.     n% = 3
  1873.     else
  1874.     n% = 0
  1875.     end if
  1876.     if n% > 0 then
  1877.     BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1878.     end if
  1879. %endrem ''DEBUG
  1880.  
  1881.     IF FStampResource (szSect$, szKey$, szDst$, CLng(wResType%), CLng(wResId%), szData$, CLng(cbData%)) = FALSE THEN
  1882.     ErrorMsg SID_ERR_STAMPRESOURCE, ""
  1883.     ERROR STFQUIT
  1884.     END IF
  1885. END SUB
  1886. '*************************************************************************
  1887.  
  1888.  
  1889. PUBLIC SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) 
  1890. '** Purpose:
  1891. '** Author:
  1892. '** Arguments: szGroup$, szItem$, szCmd$, szOther$, cmo%
  1893. '*************************************************************************
  1894.     DIM szItemNew$
  1895.  
  1896.     szItemNew$ = szItem$
  1897.     IF szOther$ <> "" THEN
  1898.     szItemNew$ = szItem$ + "," + szOther$
  1899.     END IF
  1900. %rem
  1901.     if szGroup$ = "" or len(szGroup$) > 24 then
  1902.     BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1903.     end if
  1904. %endrem ''DEBUG
  1905.  
  1906.     IF FCreateProgManItem(CHR$(34)+szGroup$+CHR$(34), szItemNew$, szCmd$, CLng(cmo%)) = FALSE THEN
  1907.     ErrorMsg SID_ERR_CREATEPROGMANITEM, szItemNew$ & CHR(10) & _
  1908.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1909.     END IF
  1910.     szItemNew$ = ""
  1911. END SUB
  1912. '*************************************************************************
  1913.  
  1914. PUBLIC SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) 
  1915. '** Purpose:
  1916. '** Author:
  1917. '** Arguments:
  1918. '** Returns:
  1919. '**     
  1920. '*************************************************************************
  1921. %rem
  1922.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1923.     n% = 1
  1924.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1925.     n% = 1
  1926.     elseif szProgHelp$ = "" then
  1927.     n% = 2
  1928.     else
  1929.     n% = 0
  1930.     end if
  1931.     if n% > 0 then
  1932.     BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1933.     end if
  1934. %endrem ''DEBUG
  1935.     IF FAddDos5Help (szProgName$, szProgHelp$, CLng(cmo%)) = FALSE THEN
  1936.     ErrorMsg SID_ERR_ADDDOS5HELP, ""
  1937.     ERROR STFQUIT
  1938.     END IF
  1939. END SUB
  1940. '*************************************************************************
  1941.  
  1942.  
  1943. PUBLIC SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) 
  1944. '** Purpose:
  1945. '** Author:
  1946. '** Arguments:
  1947. '** Returns:
  1948. '**     
  1949. '*************************************************************************
  1950.     dim rc%
  1951. %rem
  1952.     if FValidFATPath(szFullPathSrc$) = FALSE then
  1953.     n% = 1
  1954.     elseif FValidFATPath(szFullPathDst$) = FALSE then
  1955.     n% = 2
  1956.     else
  1957.     n% = 0
  1958.     end if
  1959.     if n% > 0 then
  1960.     BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1961.     end if
  1962. %endrem ''DEBUG
  1963.  
  1964.     rc% = Win32CopyFile(szFullPathSrc$, szFullPathDst$, 0)  
  1965.     IF rc%  = FALSE THEN
  1966.         ErrorMsg SID_ERR_COPYFILE, szFullPathSrc$ & LdString(SID_TO) & szFullPathDst$ & CHR(10) & _
  1967.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1968.         ERROR STFQUIT
  1969.     END IF
  1970. END SUB
  1971. '*************************************************************************
  1972.  
  1973. PUBLIC SUB RemoveFile (szFullPathSrc$, cmo%) 
  1974. '** Purpose:
  1975. '** Author:
  1976. '** Arguments:
  1977. '** Returns:
  1978. '**     
  1979. '*************************************************************************
  1980. %rem
  1981.     if FValidFATPath(szFullPathSrc$) = FALSE then
  1982.     BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1983.     end if
  1984. %endrem ''DEBUG
  1985.      
  1986. '   IF  YnrcRemoveFile(szFullPathSrc$, CLng(cmo%)) = ynrcNo THEN
  1987.     IF  Lot_DeleteFile(szFullPathSrc$, cmo%) = FALSE THEN
  1988.         'ErrorMsg SID_ERR_REMOVEFILE, szFullPathSrc$
  1989.     END IF
  1990. END SUB
  1991. '*************************************************************************
  1992.  
  1993. PUBLIC SUB BackupFile (szFullPath$, szBackup$) 
  1994. '** Purpose:
  1995. '** Author:
  1996. '** Arguments:
  1997. '** Returns:
  1998. '**     
  1999. '*************************************************************************
  2000. %rem
  2001.     if FValidFATPath(szFullPath$) = FALSE then
  2002.     n% = 1
  2003.     elseif szBackup$ = "" then
  2004.     n% = 2
  2005.     else
  2006.     n% = 0
  2007.     end if
  2008.     if n% > 0 then
  2009.     BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  2010.     end if
  2011. %endrem ''DEBUG
  2012.  
  2013.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  2014.     ErrorMsg SID_ERR_BACKUPFILE, szFullPath$ + LdString(SID_TO) + szBackup$
  2015.     ERROR STFQUIT
  2016.     END IF
  2017. END SUB
  2018. '*************************************************************************
  2019.  
  2020. PUBLIC SUB RenameFile (szFullPath$, szBackup$) 
  2021. '** Purpose:
  2022. '** Author:
  2023. '** Arguments:
  2024. '** Returns:
  2025. '**     
  2026. '*************************************************************************
  2027. %rem
  2028.     if FValidFATPath(szFullPath$) = FALSE then
  2029.     n% = 1
  2030.     elseif szBackup$ = "" then
  2031.     n% = 2
  2032.     else
  2033.     n% = 0
  2034.     end if
  2035.     if n% > 0 then
  2036.     BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  2037.     end if
  2038. %endrem ''DEBUG
  2039.  
  2040.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  2041.     ErrorMsg SID_ERR_RENAMEFILE, szFullPath$ + LdString(SID_TO) + szBackup$
  2042.     ERROR STFQUIT
  2043.     END IF
  2044. END SUB
  2045. '*************************************************************************
  2046.  
  2047.  
  2048. %rem
  2049.  
  2050. PUBLIC SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) 
  2051. '** Purpose:
  2052. '** Author:
  2053. '** Arguments:
  2054. '** Returns:
  2055. '**     
  2056. '*************************************************************************
  2057.     if FValidInfSect(szSect$) = FALSE then
  2058.     n% = 1
  2059.     elseif szKey$ = "" then
  2060.     n% = 2
  2061.     elseif FValidFATDir(szSrc$) = FALSE then
  2062.     n% = 3
  2063.     elseif FValidFATPath(szDest$) = FALSE then
  2064.     n% = 4
  2065.     else
  2066.     n% = 0
  2067.     end if
  2068.     if n% > 0 then
  2069.     BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  2070.     end if
  2071.  
  2072.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = FALSE THEN
  2073.     ErrorMsg SID_ERR_ADDSPECIALFILETOCOPYLIST, szSect$ + " , " + szKey$
  2074.     ERROR STFQUIT
  2075.     END IF
  2076. END SUB
  2077.  
  2078. %endrem
  2079.  
  2080. PUBLIC SUB OpenLogFile (szFile$, fAppend%) 
  2081. '** Purpose:
  2082. '** Author:
  2083. '** Arguments:
  2084. '** Returns:
  2085. '**     
  2086. '*************************************************************************
  2087. %rem
  2088.     if FValidFATPath(szFile$) = FALSE then
  2089.     BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  2090.     end if
  2091. %endrem ''DEBUG
  2092.     IF FOpenLogFile(szFile$, CLng(fAppend%)) = FALSE THEN
  2093.     ErrorMsg SID_ERR_OPENLOGFILE, szFile$
  2094.     END IF
  2095. END SUB
  2096. '*************************************************************************
  2097.  
  2098. PUBLIC SUB CloseLogFile 
  2099. '** Purpose:
  2100. '** Author:
  2101. '** Arguments:
  2102. '** Returns:
  2103. '**     
  2104. '*************************************************************************
  2105.     IF FCloseLogFile() = FALSE THEN
  2106.     ErrorMsg SID_ERR_CLOSELOGFILE, ""
  2107.     ERROR STFQUIT
  2108.     END IF
  2109. END SUB
  2110. '*************************************************************************
  2111.  
  2112. PUBLIC SUB WriteToLogFile (szStr$) 
  2113. '** Purpose:
  2114. '** Author:
  2115. '** Arguments:
  2116. '** Returns:
  2117. '**     
  2118. '*************************************************************************
  2119.     IF FWriteToLogFile(szStr$, 1) = FALSE THEN
  2120.     ErrorMsg SID_ERR_WRITETOLOGFILE, szStr$
  2121.     ERROR STFQUIT
  2122.     END IF
  2123. END SUB
  2124. '*************************************************************************
  2125.  
  2126. PUBLIC FUNCTION FindFileUsingFileOpen (szFile$)  AS STRING
  2127. '** Purpose:
  2128. '** Author:
  2129. '** Arguments:
  2130. '** Returns:
  2131. '**     
  2132. '*************************************************************************
  2133.       DIM szBuf$, wRet&
  2134.  
  2135.     szBuf$ = STRING$(512, 32)
  2136.  
  2137.     wRet& = WFindFileUsingFileOpen(szFile$, szBuf$, CLng(len(szBuf$)))
  2138.     IF wRet& = 0 THEN
  2139.     FindFileUsingFileOpen = NullTrim(szBuf$)
  2140.     ELSEIF wRet& = 1 THEN
  2141.     FindFileUsingFileOpen = ""
  2142.     ELSE
  2143.     ErrorMsg SID_ERR_FINDFILEUSINGFILEOPEN, szFile$
  2144.     ERROR STFQUIT
  2145.     END IF
  2146.  
  2147.     szBuf$ = ""
  2148. END FUNCTION
  2149. '*************************************************************************
  2150.  
  2151. PUBLIC FUNCTION IsLongDirPath (szDir$)  AS INTEGER
  2152. '** Purpose:
  2153. '** Author:
  2154. '** Arguments:
  2155. '** Returns:
  2156. '**     
  2157. '*************************************************************************
  2158.     DIM ret&
  2159.  
  2160.     IsLongDirPath = TRUE
  2161.     IF szDir$ <> "" THEN
  2162.       IF GetSymbolValue(szDir$) <> "" THEN
  2163.         RemoveSymbol szDir$
  2164.       END IF
  2165.       SetSymbolValue SYM_NOLONGDIR$, "TRUE"
  2166.       ret&=FCleanFatPath(szDir$)
  2167.       IF ret& <> FALSE THEN
  2168.         IsLongDirPath = FALSE
  2169.       ELSE
  2170.         IsLongDirPath = TRUE
  2171.       END IF
  2172.       RemoveSymbol SYM_NOLONGDIR$
  2173.     END IF
  2174. END FUNCTION
  2175.  
  2176. PUBLIC FUNCTION IsDirWritable (szDir$)  AS INTEGER
  2177. '** Purpose:
  2178. '** Author:
  2179. '** Arguments:
  2180. '** Returns:
  2181. '**     
  2182. '*************************************************************************
  2183. '    DIM szShort$ ,ret&
  2184.  
  2185. '    ret& = GetShortPathName( szDir$, szShort$)
  2186. '    IsDirWritable = CInt(Lot_IsDirWritable(szShort$))
  2187.     IsDirWritable = CInt(Lot_IsDirWritable(szDir$))
  2188. END FUNCTION
  2189. '*************************************************************************
  2190.  
  2191. PUBLIC FUNCTION IsFileWritable (szFile$)  AS INTEGER
  2192. '** Purpose:
  2193. '** Author:
  2194. '** Arguments:
  2195. '** Returns:
  2196. '**     
  2197. '*************************************************************************
  2198. %rem
  2199.     if FValidFATDir(szFile$) = FALSE then
  2200.     BadArgErr 1, "IsFileWritable", szFile$
  2201.     end if
  2202. %endrem ''DEBUG
  2203.     IsFileWritable = CInt(FIsFileWritable(szFile$))
  2204. END FUNCTION
  2205. '*************************************************************************
  2206.  
  2207. PUBLIC FUNCTION GetWindowsMajorVersion  AS INTEGER
  2208. '** Purpose:
  2209. '** Author:
  2210. '** Arguments:
  2211. '** Returns:
  2212. '**     
  2213. '*************************************************************************
  2214.     GetWindowsMajorVersion = CInt(GetVersion()) MOD 256
  2215. END FUNCTION
  2216. '*************************************************************************
  2217.  
  2218. PUBLIC FUNCTION GetWindowsMinorVersion  AS INTEGER
  2219. '** Purpose:
  2220. '** Author:
  2221. '** Arguments:
  2222. '** Returns:
  2223. '**     
  2224. '*************************************************************************
  2225.     GetWindowsMinorVersion = CInt(GetVersion()) / 256
  2226. END FUNCTION
  2227. '*************************************************************************
  2228.  
  2229. PUBLIC FUNCTION IsNewShell AS INTEGER
  2230. '** Purpose:    Determine if new Windows 95 shell in use (SUR)
  2231. '** Author:        JMD
  2232. '** Returns:    TRUE if new Windows 95 shell in use (SUR)
  2233. '**     
  2234. '*************************************************************************
  2235. '   IsNewShell = (GetVersion() < 0)
  2236.     IsNewShell = (Lot_IsNewShell = 1)
  2237. END FUNCTION
  2238. '*************************************************************************
  2239.  
  2240. PUBLIC FUNCTION GetWindowsMode  AS INTEGER
  2241. '** Purpose:
  2242. '** Author:
  2243. '** Arguments:
  2244. '** Returns:
  2245. '**     
  2246. '*************************************************************************
  2247.      GetWindowsMode = 2
  2248. END FUNCTION
  2249. '*************************************************************************
  2250.  
  2251. PUBLIC FUNCTION GetWindowsDir  AS STRING
  2252. '** Purpose:
  2253. '** Author:
  2254. '** Arguments:
  2255. '** Returns:
  2256. '**     
  2257. '*************************************************************************
  2258.    DIM szBufAl$, cbBuf&, szBuf$, rv&
  2259.  
  2260.    szBufAl$ = CreateBuffer(256)  
  2261.    cbBuf&   = GetWindowsDirectory(szBufAl$, 256) 
  2262.  
  2263.    IF cbBuf& = 0 THEN
  2264.       GetWindowsDir = ""
  2265.       ErrorMsg SID_ERR_GETWINDOWSDIR, ""
  2266.       ERROR STFQUIT
  2267.    ELSE
  2268.        IF cbBuf& > 255 THEN
  2269.             ErrorMsg SID_ERR_GETWINDOWSDIR2, ""
  2270.             ERROR STFQUIT
  2271.         END IF
  2272.         szBuf$ = NullTrim(szBufAl$)
  2273.         if Right(szBuf$,1) <> "\" THEN szBuf$ = szBuf$ + "\"
  2274.         GetWindowsDir = szBuf$ 
  2275.    END IF
  2276.  
  2277. END FUNCTION
  2278. '*************************************************************************
  2279.  
  2280. PUBLIC FUNCTION GetWindowsSysDir()  AS STRING
  2281. '** Purpose:
  2282. '** Author:
  2283. '** Arguments:
  2284. '** Returns:
  2285. '**     
  2286. '*************************************************************************
  2287.    DIM szBufAl$, cbBuf&, szBuf$, rv&
  2288.  
  2289.    szBufAl$ = CreateBuffer(256)
  2290.    cbBuf&   = GetSystemDirectory(szBufAl$, 256)
  2291.  
  2292.    IF cbBuf& = 0 THEN
  2293.       ErrorMsg SID_ERR_GETWINDOWSSYSDIR, ""
  2294.       ERROR STFQUIT
  2295.    ELSE
  2296.       IF cbBuf& > 255 THEN
  2297.             ErrorMsg SID_ERR_GETWINDOWSSYSDIR2, ""
  2298.             ERROR STFQUIT
  2299.       END IF
  2300.         szBuf$ = NullTrim(szBufAl$)
  2301.         if Right(szBuf$,1) <> "\" THEN szBuf$ = szBuf$ + "\"
  2302.       GetWindowsSysDir = szBuf$
  2303.     END IF
  2304.  
  2305. END FUNCTION
  2306. '*************************************************************************
  2307.  
  2308. PUBLIC FUNCTION IsWindowsShared  AS INTEGER
  2309. '** Purpose:
  2310. '** Author:
  2311. '** Arguments:
  2312. '** Returns:
  2313. '**     
  2314. '*************************************************************************
  2315.    DIM szWin$, szSys$
  2316.  
  2317.    szWin$ = GetWindowsDir()
  2318.    szSys$ = GetWindowsSysDir()
  2319.  
  2320.    IF LEN(szWin$) = 0 THEN
  2321.       ErrorMsg SID_ERR_ISWINDOWSSHARED, ""
  2322.       ERROR STFQUIT
  2323.    END IF
  2324.  
  2325.    IF LEN(szSys$) <= LEN(szWin$) THEN
  2326.       IsWindowsShared = TRUE
  2327.    ELSE
  2328.       szSys$ = MID$(szSys$, 1, LEN(szWin$))
  2329.       IF szWin$ = szSys$ THEN
  2330.      IsWindowsShared = FALSE
  2331.       ELSE
  2332.      IsWindowsShared = TRUE
  2333.       END IF
  2334.    END IF
  2335.  
  2336. END FUNCTION
  2337. '*************************************************************************
  2338.  
  2339. PUBLIC FUNCTION GetScreenWidth  AS INTEGER
  2340. '** Purpose:
  2341. '** Author:
  2342. '** Arguments:
  2343. '** Returns:
  2344. '**     
  2345. '*************************************************************************
  2346.     GetScreenWidth = CInt(GetSystemMetrics(SM_CXSCREEN))
  2347. END FUNCTION
  2348. '*************************************************************************
  2349.  
  2350. PUBLIC FUNCTION GetScreenHeight  AS INTEGER
  2351. '** Purpose:
  2352. '** Author:
  2353. '** Arguments:
  2354. '** Returns:
  2355. '**     
  2356. '*************************************************************************
  2357.     GetScreenHeight = CInt(GetSystemMetrics(SM_CYSCREEN))
  2358. END FUNCTION
  2359. '*************************************************************************
  2360.  
  2361. PUBLIC SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) 
  2362. '** Purpose:
  2363. '** Author:
  2364. '** Arguments:
  2365. '** Returns:
  2366. '**     
  2367. '*************************************************************************
  2368.  
  2369. %rem
  2370.     if (FValidFATPath(szSrc$) = FALSE) AND (szSrc$ <> "") then
  2371.     n% = 1
  2372.     elseif FValidFATPath(szDst$) = FALSE then
  2373.     n% = 2
  2374.     elseif FValidFATDir(szDir$) = FALSE then
  2375.     n% = 3
  2376.     else
  2377.     n% = 0
  2378.     end if
  2379.     if n% > 0 then
  2380.     BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  2381.     end if
  2382. %endrem ''DEBUG
  2383.  
  2384.     IF FPrependToPath (szSrc$, szDst$, szDir$, CLng(cmo%)) = FALSE THEN
  2385.     ErrorMsg SID_ERR_PREPENDTOPATH, _
  2386.          szSrc$ & " : " & szDst$ & " : " & szDir$
  2387.     ERROR STFQUIT
  2388.     END IF
  2389. END SUB
  2390.  
  2391. '**************************************************************************
  2392. '***************************  Error Handlers  *****************************
  2393. '**************************************************************************
  2394.  
  2395. %rem --------------------------------------------------------
  2396.  
  2397. '**************************************************************************
  2398. PUBLIC SUB StfApiErr (nMsg%, szApi$, szArgs$)       ''DEBUG only
  2399. '** Purpose:
  2400. '** Author:
  2401. '** Arguments:
  2402. '** Returns:
  2403. '**     
  2404. '*************************************************************************
  2405.     select case nMsg%
  2406.     case saeFail
  2407.         lpText$ = "Failed"
  2408.     case saeInit
  2409.         lpText$ = "Already Initialized"
  2410.     case saeNYI
  2411.         lpText$ = "NYI"
  2412.     case else
  2413.         lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  2414.     end select
  2415.  
  2416.     lpText$ = lpText$ + ": "+ szApi$
  2417.     if szArgs$ <> "" then
  2418.     lpText$ = lpText + " (" + szArgs$ + ")"
  2419.     end if
  2420.     lpCaption$ = "MS-Setup Toolkit API Error"
  2421.     res& = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  2422.     print lpText$
  2423.     lpText$ = ""
  2424.     lpCaption$ = ""
  2425. END SUB
  2426. '**************************************************************************
  2427.  
  2428. PUBLIC SUB BadArgErr (nArg%, szApi$, szArgs$)       ''DEBUG only
  2429. '** Purpose:
  2430. '** Author:
  2431. '** Arguments:
  2432. '** Returns:
  2433. '**     
  2434. '*************************************************************************
  2435.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  2436.     ERROR STFQUIT
  2437. END SUB
  2438. '**************************************************************************
  2439.  
  2440. '** REVIEW: Move this function into common lib (we'll need it there too)
  2441. '**************************************************************************
  2442.  
  2443. PUBLIC FUNCTION FValidInfSect (szSect$)  AS INTEGER
  2444. '** Purpose:
  2445. '** Author:
  2446. '** Arguments:
  2447. '** Returns:
  2448. '**     
  2449. '*************************************************************************
  2450.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  2451.     FValidInfSect = FALSE
  2452.     else
  2453.     FValidInfSect = TRUE
  2454.     end if
  2455. END FUNCTION
  2456. '**************************************************************************
  2457.  
  2458. '** REVIEW: Move this function into common lib (we'll need it there too)
  2459. '**************************************************************************
  2460.  
  2461. PUBLIC FUNCTION FValidIniFile (szFile$)  AS INTEGER
  2462. '** Purpose:
  2463. '** Author:
  2464. '** Arguments:
  2465. '** Returns:
  2466. '**     
  2467. '*************************************************************************
  2468.     if (FValidFATPath(szFile$) = FALSE) AND (UCASE$(szFile$) <> gWININI$) then
  2469.     FValidIniFile = FALSE
  2470.     else
  2471.     FValidIniFile = TRUE
  2472.     end if
  2473. END FUNCTION
  2474. '**************************************************************************
  2475.  
  2476. PUBLIC FUNCTION FValidDrive (szDrive$)  AS INTEGER
  2477. '** Purpose:
  2478. '** Author:
  2479. '** Arguments:
  2480. '** Returns:
  2481. '**     
  2482. '*************************************************************************
  2483.  
  2484.     if szDrive$ = "" then
  2485.     FValidDrive = FALSE
  2486.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  2487.     FValidDrive = TRUE
  2488.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  2489.     FValidDrive = FALSE
  2490.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  2491.     FValidDrive = FALSE
  2492.     elseif LEN(szDrive$) = 1 then
  2493.     FValidDrive = TRUE
  2494.     elseif INSTR(2,szDrive$,":\") = 2 then
  2495.     FValidDrive = TRUE
  2496.     elseif INSTR(1,szDrive$,":") = 2 then
  2497.     FValidDrive = TRUE
  2498.     else
  2499.     FValidDrive = FALSE
  2500.     end if
  2501. END FUNCTION
  2502. '**************************************************************************
  2503.  
  2504. %endrem --------------------------------------------------------------
  2505.  
  2506. PUBLIC SUB SetRegKeyValue(szKey$, szValue$) 
  2507. '** Purpose:
  2508. '** Author:
  2509. '** Arguments:
  2510. '** Returns:
  2511. '**     
  2512. '*************************************************************************
  2513.     DIM i%, logfile$
  2514.  
  2515.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  2516.  
  2517.     IF RegSetValue(HKEY_CLASSES_ROOT, szKey$, REG_SZ,  szValue$, CLng(len(szKey$))) > ERROR_SUCCESS THEN
  2518.     i% = EercErrorHandler(GRC_API_FAILED, 1, "SetRegKeyValue", "", "")
  2519.     ErrorMsg SID_ERR_SETREGKEYVALUE, szKey$ + LdString(SID_TO) + szValue$
  2520.     '' Shouldn't be fatal ERROR STFQUIT
  2521.     END IF
  2522.  
  2523.     If logfile$ <> "" THEN 
  2524.     OpenLogFile logfile$,1 
  2525.     WriteToLogFile "** Successfully SetRegKeyValue " + szKey$+ ", "+ szValue$
  2526.     CloseLogFile
  2527.     END IF
  2528.  
  2529. END SUB
  2530. '**************************************************************************
  2531.  
  2532. '*************************************************************************
  2533.  
  2534. PUBLIC FUNCTION IsDriveValid (szDrive$)  AS INTEGER
  2535. '** Purpose:
  2536. '** Author:
  2537. '** Arguments:
  2538. '** Returns:
  2539. '**     
  2540. '*************************************************************************
  2541. %rem 'DEBUG
  2542.     if FValidDrive(szDrive$) = FALSE then
  2543.     BadArgErr 1, "IsDriveValid", szDrive$
  2544.     end if
  2545. %endrem ' ''DEBUG
  2546.     IsDriveValid = CInt(FIsValidDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2547. END FUNCTION
  2548. '*************************************************************************
  2549.  
  2550. PUBLIC FUNCTION IsDriveLocalHard (szDrive$)  AS INTEGER
  2551. '** Purpose:
  2552. '** Author:
  2553. '** Arguments:
  2554. '** Returns:
  2555. '**     
  2556. '*************************************************************************
  2557. %rem 'DEBUG
  2558.     if FValidDrive(szDrive$) = FALSE then
  2559.     BadArgErr 1, "IsDriveLocalHard", szDrive$
  2560.     end if
  2561. %endrem ' ''DEBUG
  2562.     IsDriveLocalHard = CInt(FIsLocalHardDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2563. END FUNCTION
  2564. '*************************************************************************
  2565.  
  2566. PUBLIC FUNCTION IsDriveRemovable (szDrive$)  AS INTEGER
  2567. '** Purpose:
  2568. '** Author:
  2569. '** Arguments:
  2570. '** Returns:
  2571. '**     
  2572. '*************************************************************************
  2573. %rem 'DEBUG
  2574.     if FValidDrive(szDrive$) = FALSE then
  2575.     BadArgErr 1, "IsDriveRemovable", szDrive$
  2576.     end if
  2577. %endrem ' ''DEBUG
  2578.     IsDriveRemovable = CInt(FIsRemoveDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2579. END FUNCTION
  2580. '*************************************************************************
  2581.  
  2582. PUBLIC FUNCTION IsDriveNetwork (szDrive$)  AS INTEGER
  2583. '** Purpose:
  2584. '** Author:
  2585. '** Arguments:
  2586. '** Returns:
  2587. '**     
  2588. '*************************************************************************
  2589. %rem 'DEBUG
  2590.     if FValidDrive(szDrive$) = FALSE then
  2591.     BadArgErr 1, "IsDriveNetwork", szDrive$
  2592.     end if
  2593. %endrem ' ''DEBUG
  2594.     IsDriveNetwork = CInt(FIsRemoteDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2595. END FUNCTION
  2596. '*************************************************************************
  2597.  
  2598. PUBLIC FUNCTION GetTotalSpaceForDrive (szDrive$)  AS LONG
  2599. '** Purpose:
  2600. '** Author:
  2601. '** Arguments:
  2602. '** Returns:
  2603. '**     
  2604. '*************************************************************************
  2605. %rem 'DEBUG
  2606.     if FValidDrive(szDrive$) = FALSE then
  2607.     BadArgErr 1, "GetTotalSpaceForDrive", szDrive$
  2608.     end if
  2609. %endrem ' ''DEBUG
  2610.     GetTotalSpaceForDrive = LcbTotalDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  2611. END FUNCTION
  2612. '*************************************************************************
  2613.  
  2614. PUBLIC FUNCTION GetFreeSpaceForDrive (szDrive$)  AS LONG
  2615. '** Purpose:
  2616. '** Author:
  2617. '** Arguments:
  2618. '** Returns:
  2619. '**     
  2620. '*************************************************************************
  2621. %rem 'DEBUG
  2622.     if FValidDrive(szDrive$) = FALSE then
  2623.     BadArgErr 1, "GetFreeSpaceForDrive", szDrive$
  2624.     end if
  2625. %endrem ' ''DEBUG
  2626.     GetFreeSpaceForDrive = Lot_FreeDrive(szDrive$)
  2627. '    GetFreeSpaceForDrive = LcbFreeDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  2628. END FUNCTION
  2629. '*************************************************************************
  2630.  
  2631. PUBLIC SUB GetValidDrivesList (szSymbol$) 
  2632. '** Purpose:
  2633. '** Author:
  2634. '** Arguments:
  2635. '** Returns:
  2636. '**     
  2637. '*************************************************************************
  2638. %rem 'DEBUG
  2639.     if szSymbol$ = "" then
  2640.     BadArgErr 1, "GetValidDrivesList", szSymbol$
  2641.     end if
  2642. %endrem ' ''DEBUG
  2643.     if FGetValidDrivesList(szSymbol$) = FALSE then
  2644.     ErrorMsg SID_ERR_GETVALIDDRIVESLIST, ""
  2645.     ERROR STFQUIT
  2646.     end if
  2647. END SUB
  2648. '*************************************************************************
  2649.  
  2650. PUBLIC SUB GetLocalHardDrivesList (szSymbol$) 
  2651. '** Purpose:
  2652. '** Author:
  2653. '** Arguments:
  2654. '** Returns:
  2655. '**     
  2656. '*************************************************************************
  2657. %rem 'DEBUG
  2658.     if szSymbol$ = "" then
  2659.     BadArgErr 1, "GetLocalHardDrivesList", szSymbol$
  2660.     end if
  2661. %endrem ' ''DEBUG
  2662.     if FGetLocalHardDrivesList(szSymbol$) = FALSE then
  2663.     ErrorMsg SID_ERR_GETLOCALHARDDRIVESLIST, ""
  2664.     ERROR STFQUIT
  2665.     end if
  2666. END SUB
  2667. '*************************************************************************
  2668.  
  2669. PUBLIC SUB GetRemovableDrivesList (szSymbol$) 
  2670. '** Purpose:
  2671. '** Author:
  2672. '** Arguments:
  2673. '** Returns:
  2674. '**     
  2675. '*************************************************************************
  2676. %rem 'DEBUG
  2677.     if szSymbol$ = "" then
  2678.     BadArgErr 1, "GetRemovableDrivesList", szSymbol$
  2679.     end if
  2680. %endrem ' ''DEBUG
  2681.     if FGetRemovableDrivesList(szSymbol$) = FALSE then
  2682.     ErrorMsg SID_ERR_GETREMOVABLEDRIVESLIST, ""
  2683.     ERROR STFQUIT
  2684.     end if
  2685. END SUB
  2686. '*************************************************************************
  2687.  
  2688. PUBLIC SUB GetNetworkDrivesList (szSymbol$) 
  2689. '** Purpose:
  2690. '** Author:
  2691. '** Arguments:
  2692. '** Returns:
  2693. '**     
  2694. '*************************************************************************
  2695. %rem 'DEBUG
  2696.     if szSymbol$ = "" then
  2697.     BadArgErr 1, "GetNetworkDrivesList", szSymbol$
  2698.     end if
  2699. %endrem ' ''DEBUG
  2700.     if FGetNetworkDrivesList(szSymbol$) = FALSE then
  2701.     ErrorMsg SID_ERR_GETNETWORKDRIVESLIST, ""
  2702.     ERROR STFQUIT
  2703.     end if
  2704. END SUB
  2705. '*************************************************************************
  2706.  
  2707. PUBLIC FUNCTION GetEnvVariableValue (szEnvVar$)  AS STRING
  2708. '** Purpose:
  2709. '** Author:
  2710. '** Arguments:
  2711. '** Returns:
  2712. '**     
  2713. '*************************************************************************
  2714. %rem 'DEBUG
  2715.     if szEnvVar$ = "" then
  2716.     BadArgErr 1, "GetEnvVariableValue", szEnvVar$
  2717.     end if
  2718. %endrem ' ''DEBUG
  2719.     DIM cb%, szBuf$, cbRet%
  2720.  
  2721.     cb% = 1024
  2722.     szBuf$ = STRING$(cb%, 32)
  2723.     cbRet% = CInt(GetEnvironmentVariable(szEnvVar$, szBuf$, CLng(cb%)))
  2724.     GetEnvVariableValue = NullTrim(szBuf$)
  2725. %rem 'DEBUG
  2726.     IF cbRet% >= cb% THEN
  2727.     '' StfApiErr saeOvfl, "GetEnvVariableValue", szEnvVar$
  2728.     ErrorMsg SID_ERR_GETENVVARIABLEVALUE, ""
  2729.     ERROR STFQUIT
  2730.     END IF
  2731. %endrem ' ''DEBUG
  2732.     szBuf$ = ""
  2733. END FUNCTION
  2734. '*************************************************************************
  2735.  
  2736. PUBLIC FUNCTION GetNumWinApps () AS INTEGER
  2737. '** Purpose:
  2738. '** Author:
  2739. '** Arguments:
  2740. '** Returns:
  2741. '**     
  2742. '*************************************************************************
  2743.     GetNumWinApps = CInt(WGetNumWinApps())
  2744. END FUNCTION
  2745. '*************************************************************************
  2746.  
  2747. PUBLIC FUNCTION DoesFileExist (szFileName$, mode%)  AS INTEGER
  2748. '** Purpose:
  2749. '** Author:
  2750. '** Arguments:
  2751. '** Returns:
  2752. '**     
  2753. '*************************************************************************
  2754. %rem 'DEBUG
  2755.     if FValidFATPath(szFileName$) = FALSE then
  2756.     BadArgErr 1, "DoesFileExist", szFileName$+", "+STR$(mode%)
  2757.     end if
  2758. %endrem ' ''DEBUG
  2759. '    DoesFileExist = CInt(Lot_DoesFileExist(szFileName$, CLng(mode%)))
  2760.     DoesFileExist = CInt(Lot_DoesFileExist(szFileName$))
  2761. END FUNCTION
  2762. '*************************************************************************
  2763.  
  2764. PUBLIC FUNCTION GetDateOfFile (szFile$)  AS STRING
  2765. '** Purpose:
  2766. '** Author:
  2767. '** Arguments:
  2768. '** Returns:
  2769. '**     
  2770. '*************************************************************************
  2771. %rem 'DEBUG
  2772.     if FValidFATPath(szFile$) = FALSE then
  2773.     BadArgErr 1, "GetDateOfFile", szFile$
  2774.     end if
  2775. %endrem ' ''DEBUG
  2776.     DIM cb%, szBuf$, cbRet&
  2777.  
  2778.     cb% = 20
  2779.     szBuf$ = STRING$(cb%, 32)
  2780.     cbRet& = CbGetDateOfFile(szFile$, szBuf$, CLng(cb%))
  2781.      GetDateOfFile = NullTrim(szBuf$)
  2782.  
  2783. %rem 'DEBUG
  2784.     IF CInt(cbRet&) >= cb% THEN
  2785.     '' StfApiErr saeOvfl, "GetDateOfFile", szFile$
  2786.     ErrorMsg SID_ERR_GETDATEOFFILE, ""
  2787.     ERROR STFQUIT
  2788.     END IF
  2789. %endrem ' ''DEBUG
  2790.     szBuf$ = ""
  2791. END FUNCTION
  2792. '*************************************************************************
  2793.  
  2794. PUBLIC FUNCTION GetYearFromDate (szDate$)  AS INTEGER
  2795. '** Purpose:
  2796. '** Author:
  2797. '** Arguments:
  2798. '** Returns:
  2799. '**     
  2800. '*************************************************************************
  2801. %rem 'DEBUG
  2802.     if szDate = "" then
  2803.     BadArgErr 1, "GetYearFromDate", szDate$
  2804.     end if
  2805. %endrem ' ''DEBUG
  2806.     GetYearFromDate = VAL(MID$(szDate$, 1, 4))
  2807. END FUNCTION
  2808. '*************************************************************************
  2809.  
  2810. PUBLIC FUNCTION GetMonthFromDate (szDate$)  AS INTEGER
  2811. '** Purpose:
  2812. '** Author:
  2813. '** Arguments:
  2814. '** Returns:
  2815. '**     
  2816. '*************************************************************************
  2817. %rem 'DEBUG
  2818.     if szDate = "" then
  2819.     BadArgErr 1, "GetMonthFromDate", szDate$
  2820.     end if
  2821. %endrem ' ''DEBUG
  2822.     GetMonthFromDate = VAL(MID$(szDate$, 6, 2))
  2823. END FUNCTION
  2824. '*************************************************************************
  2825.  
  2826. PUBLIC FUNCTION GetDayFromDate (szDate$)  AS INTEGER
  2827. '** Purpose:
  2828. '** Author:
  2829. '** Arguments:
  2830. '** Returns:
  2831. '**     
  2832. '*************************************************************************
  2833. %rem 'DEBUG
  2834.     if szDate = "" then
  2835.     BadArgErr 1, "GetDayFromDate", szDate$
  2836.     end if
  2837. %endrem ' ''DEBUG
  2838.     GetDayFromDate = VAL(MID$(szDate$, 9, 2))
  2839. END FUNCTION
  2840. '*************************************************************************
  2841.  
  2842. PUBLIC FUNCTION GetHourFromDate (szDate$)  AS INTEGER
  2843. '** Purpose:
  2844. '** Author:
  2845. '** Arguments:
  2846. '** Returns:
  2847. '**     
  2848. '*************************************************************************
  2849. %rem 'DEBUG
  2850.     if szDate = "" then
  2851.     BadArgErr 1, "GetHourFromDate", szDate$
  2852.     end if
  2853. %endrem ' ''DEBUG
  2854.     GetHourFromDate = VAL(MID$(szDate$, 12, 2))
  2855. END FUNCTION
  2856. '*************************************************************************
  2857.  
  2858. PUBLIC FUNCTION GetMinuteFromDate (szDate$)  AS INTEGER
  2859. '** Purpose:
  2860. '** Author:
  2861. '** Arguments:
  2862. '** Returns:
  2863. '**     
  2864. '*************************************************************************
  2865. %rem 'DEBUG
  2866.     if szDate = "" then
  2867.     BadArgErr 1, "GetMinuteFromDate", szDate$
  2868.     end if
  2869. %endrem ' ''DEBUG
  2870.     GetMinuteFromDate = VAL(MID$(szDate$, 15, 2))
  2871. END FUNCTION
  2872. '*************************************************************************
  2873.  
  2874. PUBLIC FUNCTION GetSecondFromDate (szDate$)  AS INTEGER
  2875. '** Purpose:
  2876. '** Author:
  2877. '** Arguments:
  2878. '** Returns:
  2879. '**     
  2880. '*************************************************************************
  2881. %rem 'DEBUG
  2882.     if szDate = "" then
  2883.     BadArgErr 1, "GetSecondFromDate", szDate$
  2884.     end if
  2885. %endrem ' ''DEBUG
  2886.     GetSecondFromDate = VAL(MID$(szDate$, 18, 2))
  2887. END FUNCTION
  2888. '*************************************************************************
  2889.  
  2890. PUBLIC FUNCTION GetVersionOfFile (szFile$)  AS STRING
  2891. '** Purpose:
  2892. '** Author:
  2893. '** Arguments:
  2894. '** Returns:
  2895. '**     
  2896. '*************************************************************************
  2897. %rem 'DEBUG
  2898.     if FValidFATPath(szFile$) = FALSE then
  2899.     BadArgErr 1, "GetVersionOfFile", szFile$
  2900.     end if
  2901. %endrem ' ''DEBUG
  2902.     DIM cb%, szBuf$, cbRet&
  2903.  
  2904.     cb% = 30
  2905.     szBuf$ = STRING$(cb%, 32) 
  2906.     cbRet& = CbGetVersionOfFile(szFile$, szBuf$, CLng(cb%))
  2907.     GetVersionOfFile = NullTrim(szBuf$)
  2908. %rem 'DEBUG
  2909.     IF CInt(cbRet&) >= cb% THEN
  2910.     '' StfApiErr saeOvfl, "GetVersionOfFile", szFile$
  2911.     ErrorMsg SID_ERR_GETVERSIONOFFILE, ""
  2912.     ERROR STFQUIT
  2913.     END IF
  2914. %endrem ' ''DEBUG
  2915.     szBuf$ = ""
  2916. END FUNCTION
  2917. '*************************************************************************
  2918.  
  2919. PUBLIC FUNCTION GetVersionNthField (szVersion$, nField%)  AS LONG
  2920. '** Purpose:
  2921. '** Author:
  2922. '** Arguments:
  2923. '** Returns:
  2924. '**     
  2925. '*************************************************************************
  2926. %rem 'DEBUG
  2927.     if (nField% < 1) OR (nField% > 4) then
  2928.     BadArgErr 2, "GetVersionNthField", szVersion$+", "+STR$(nField%)
  2929.     end if
  2930. %endrem ' ''DEBUG
  2931.     GetVersionNthField = LGetVersionNthField(szVersion$, CLng(nField%))
  2932. END FUNCTION
  2933. '*************************************************************************
  2934.  
  2935. PUBLIC FUNCTION GetSizeOfFile (szFile$)  AS LONG
  2936. '** Purpose:
  2937. '** Author:
  2938. '** Arguments:
  2939. '** Returns:
  2940. '**     
  2941. '*************************************************************************
  2942. %rem 'DEBUG
  2943.     if FValidFATPath(szFile$) = FALSE then
  2944.     BadArgErr 1, "GetSizeOfFile", szFile$
  2945.     end if
  2946. %endrem ' ''DEBUG
  2947.     GetSizeOfFile = LcbGetSizeOfFile(szFile$)
  2948. END FUNCTION
  2949. '*************************************************************************
  2950.  
  2951. PUBLIC FUNCTION FindTargetOnEnvVar (szFile$, szEnvVar$)  AS STRING
  2952. '** Purpose:
  2953. '** Author:
  2954. '** Arguments:
  2955. '** Returns:
  2956. '**     
  2957. '*************************************************************************
  2958. %rem 'DEBUG
  2959.     if CchlValidFATSubPath(szFile$) = 0 then
  2960.     n% = 1
  2961.     elseif szEnvVar$ = "" then
  2962.     n% = 2
  2963.     else
  2964.     n% = 0
  2965.     end if
  2966.     if n% > 0 then
  2967.     BadArgErr n%, "FindTargetOnEnvVar", szFile$+", "+szEnvVar$
  2968.     end if
  2969. %endrem ' ''DEBUG
  2970.     DIM cb%, szBuf$, cbRet&
  2971.  
  2972.     cb% = 512
  2973.     szBuf$ = STRING$(cb%, 32)   
  2974.     cbRet& = CbFindTargetOnEnvVar(szFile$, szEnvVar$, szBuf$, CLng(cb%))
  2975.     IF CInt(cbRet&) >= cb% THEN
  2976.     ErrorMsg SID_ERR_FINDTARGETONENVVAR, ""
  2977.     ERROR STFQUIT
  2978.     END IF
  2979.     szBuf$ = NullTrim(szBuf$)
  2980.     IF MID$(szBuf$, 1, 1) = "\" THEN
  2981.        szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  2982.     ELSEIF Len(szBuf$) > 0 AND MID$(szBuf$, 2, 1) <> ":" THEN
  2983.        szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  2984.     END IF
  2985.     FindTargetOnEnvVar = szBuf$
  2986.     szBuf$ = ""
  2987. END FUNCTION
  2988. '*************************************************************************
  2989.  
  2990. PUBLIC FUNCTION FindFileInTree (szFile$, szDir$)  AS STRING
  2991. '** Purpose:
  2992. '** Author:
  2993. '** Arguments:
  2994. '** Returns:
  2995. '**     
  2996. '*************************************************************************
  2997. %rem 'DEBUG
  2998.     if CchlValidFATSubPath(szFile$) = 0 then
  2999.     n% = 1
  3000.     elseif FValidFATDir(szDir$) = FALSE then
  3001.     n% = 2
  3002.     else
  3003.     n% = 0
  3004.     end if
  3005.     if n% > 0 then
  3006.     BadArgErr n%, "FindFileInTree", szFile$+", "+szDir$
  3007.     end if
  3008. %endrem ' ''DEBUG
  3009.       DIM cb%, szBuf$, cbRet&
  3010.  
  3011.     cb% = 512
  3012.     szBuf$ = STRING$(cb%, 32)
  3013.     cbRet& = CbFindFileInTree(szFile$, szDir$, szBuf$, CLng(cb%))
  3014.     FindFileInTree = NullTrim(szBuf$)
  3015.  
  3016. %rem 'DEBUG
  3017.     IF CInt(cbRet&) >= cb% THEN
  3018.     '' StfApiErr saeOvfl, "FindFileInTree", szFile$+", "+szDir$
  3019.     ErrorMsg SID_ERR_FINDFILEINTREE, ""
  3020.     ERROR STFQUIT
  3021.     END IF
  3022. %endrem ' ''DEBUG
  3023.     szBuf$ = ""
  3024. END FUNCTION
  3025. '*************************************************************************
  3026.  
  3027. PUBLIC FUNCTION GetConfigSmartdrvSize () AS INTEGER
  3028. '** Purpose:
  3029. '** Author:
  3030. '** Arguments:
  3031. '** Returns:
  3032. '**     
  3033. '*************************************************************************
  3034.     GetConfigSmartdrvSize = CInt(WGetConfigSmartdrvSize())
  3035. END FUNCTION
  3036. '*************************************************************************
  3037.  
  3038. PUBLIC FUNCTION GetConfigRamdriveSize () AS INTEGER
  3039. '** Purpose:
  3040. '** Author:
  3041. '** Arguments:
  3042. '** Returns:
  3043. '**     
  3044. '*************************************************************************
  3045.     GetConfigRamdriveSize = CInt(WGetConfigRamdriveSize ())
  3046. END FUNCTION
  3047. '*************************************************************************
  3048.  
  3049. PUBLIC FUNCTION GetConfigNumBuffers () AS INTEGER
  3050. '** Purpose:
  3051. '** Author:
  3052. '** Arguments:
  3053. '** Returns:
  3054. '**     
  3055. '*************************************************************************
  3056.     GetConfigNumBuffers = CInt(WGetConfigNumBuffers())
  3057. END FUNCTION
  3058. '*************************************************************************
  3059.  
  3060. PUBLIC FUNCTION GetConfigNumFiles () AS INTEGER
  3061. '** Purpose:
  3062. '** Author:
  3063. '** Arguments:
  3064. '** Returns:
  3065. '**     
  3066. '*************************************************************************
  3067.     GetConfigNumFiles = CInt(WGetConfigNumFiles())
  3068. END FUNCTION
  3069. '*************************************************************************
  3070.  
  3071. PUBLIC FUNCTION GetConfigLastDrive () AS STRING
  3072. '** Purpose:
  3073. '** Author:
  3074. '** Arguments:
  3075. '** Returns:
  3076. '**     
  3077. '*************************************************************************
  3078.     DIM chRet&
  3079.  
  3080.     chRet& = WGetConfigLastDrive()
  3081.     if chRet& = 0 then
  3082.     GetConfigLastDrive = ""
  3083.     else
  3084.     GetConfigLastDrive = CHR$(chRet&)
  3085.     end if
  3086. END FUNCTION
  3087. '*************************************************************************
  3088.  
  3089. PUBLIC FUNCTION IsDriverInConfig (szDrv$)  AS INTEGER
  3090. '** Purpose:
  3091. '** Author:
  3092. '** Arguments:
  3093. '** Returns:
  3094. '**     
  3095. '*************************************************************************
  3096. %rem 'DEBUG
  3097.     if szDrv$ = "" then
  3098.     BadArgErr 1, "IsDriverInConfig", szDrv$
  3099.     end if
  3100. %endrem ' ''DEBUG
  3101.     IsDriverInConfig = CInt(FIsDriverInConfig(szDrv$))
  3102. END FUNCTION
  3103. '*************************************************************************
  3104.  
  3105. PUBLIC FUNCTION GetProcessorType () AS INTEGER
  3106. '** Purpose:
  3107. '** Author:
  3108. '** Arguments:
  3109. '** Returns:
  3110. '**     
  3111. '*************************************************************************
  3112.     DIM rSysInf as SysInfoType
  3113.  
  3114.     GetProcessorType = 0
  3115.  
  3116.     GetSystemInfo  rSysInf
  3117.  
  3118.     IF rSysInf.dwProcessorType = PROCESSOR_INTEL_PENTIUM THEN
  3119.     GetProcessorType = 4
  3120.     ELSEIF rSysInf.dwProcessorType = PROCESSOR_INTEL_486 THEN
  3121.     GetProcessorType = 4
  3122.     ELSEIF rSysInf.dwProcessorType = PROCESSOR_INTEL_386 THEN
  3123.     GetProcessorType = 3
  3124.     ELSEIF rSysInf.dwProcessorType = PROCESSOR_INTEL_860 THEN
  3125.     GetProcessorType = 1
  3126.     END IF
  3127.  
  3128. END FUNCTION
  3129. '*************************************************************************
  3130.  
  3131. PUBLIC SUB GetParallelPortsList (szSymbol$) 
  3132. '** Purpose:
  3133. '** Author:
  3134. '** Arguments:
  3135. '** Returns:
  3136. '**     
  3137. '*************************************************************************
  3138. %rem 'DEBUG
  3139.     if szSymbol$ = "" then
  3140.     BadArgErr 1, "GetParallelPortsList", szSymbol$
  3141.     end if
  3142. %endrem ' ''DEBUG
  3143.     if FGetParallelPortsList(szSymbol$) = FALSE then
  3144.     ErrorMsg SID_ERR_GETPARALLELPORTSLIST, ""
  3145.     ERROR STFQUIT
  3146.     end if
  3147. END SUB
  3148. '*************************************************************************
  3149.  
  3150. PUBLIC SUB GetSerialPortsList (szSymbol$) 
  3151. '** Purpose:
  3152. '** Author:
  3153. '** Arguments:
  3154. '** Returns:
  3155. '**     
  3156. '*************************************************************************
  3157. %rem 'DEBUG
  3158.     if szSymbol$ = "" then
  3159.     BadArgErr 1, "GetSerialPortsList", szSymbol$
  3160.     end if
  3161. %endrem ' ''DEBUG
  3162.     if FGetSerialPortsList(szSymbol$) = FALSE then
  3163.     ErrorMsg SID_ERR_GETSERIALPORTSLIST, ""
  3164.     ERROR STFQUIT
  3165.     end if
  3166. END SUB
  3167. '*************************************************************************
  3168.  
  3169. PUBLIC FUNCTION Has87MathChip () AS INTEGER
  3170. '** Purpose:
  3171. '** Author:
  3172. '** Arguments:
  3173. '** Returns:
  3174. '**     
  3175. '*************************************************************************
  3176.     Has87MathChip = CInt(FHas87MathChip())
  3177. END FUNCTION
  3178. '*************************************************************************
  3179.  
  3180. PUBLIC FUNCTION HasMonochromeDisplay () AS INTEGER
  3181. '** Purpose:
  3182. '** Author:
  3183. '** Arguments:
  3184. '** Returns:
  3185. '**     
  3186. '*************************************************************************
  3187.     HasMonochromeDisplay = CInt(FHasMonochromeDisplay())
  3188. END FUNCTION
  3189. '*************************************************************************
  3190.  
  3191. PUBLIC FUNCTION HasMouseInstalled () AS INTEGER
  3192. '** Purpose:
  3193. '** Author:
  3194. '** Arguments:
  3195. '** Returns:
  3196. '**     
  3197. '*************************************************************************
  3198.     HasMouseInstalled = CInt(FHasMouseInstalled())
  3199. END FUNCTION
  3200. '*************************************************************************
  3201.  
  3202. PUBLIC FUNCTION DoesDirExist (szDir$)  AS INTEGER
  3203. '** Purpose:
  3204. '** Author:
  3205. '** Arguments:
  3206. '** Returns:
  3207. '**     
  3208. '*************************************************************************
  3209. %rem 'DEBUG
  3210.     if FValidFATDir(szDir$) = FALSE then
  3211.     BadArgErr 1, "DoesDirExist", szDir$
  3212.     end if
  3213. %endrem ' ''DEBUG
  3214.     DoesDirExist = CInt(Lot_DoesDirExist(szDir$))
  3215. END FUNCTION
  3216. '*************************************************************************
  3217.  
  3218. PUBLIC FUNCTION DoesIniSectionExist (szFile$, szSect$)  AS INTEGER
  3219. '** Purpose:
  3220. '** Author:
  3221. '** Arguments:
  3222. '** Returns:
  3223. '**     
  3224. '*************************************************************************
  3225. %rem 'DEBUG
  3226.     if FValidIniFile(szFile$) = FALSE then
  3227.     BadArgErr 1, "DoesIniSectionExist", szFile$+", "+szSect$
  3228.     end if
  3229. %endrem ' ''DEBUG
  3230.     DoesIniSectionExist = CInt(FDoesIniSectionExist(szFile$, szSect$))
  3231. END FUNCTION
  3232. '*************************************************************************
  3233.  
  3234. PUBLIC FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$)  AS INTEGER
  3235. '** Purpose:
  3236. '** Author:
  3237. '** Arguments:
  3238. '** Returns:
  3239. '**     
  3240. '*************************************************************************
  3241. %rem 'DEBUG
  3242.     if FValidIniFile(szFile$) = FALSE then
  3243.     n% = 1
  3244.     elseif szKey$ = "" then
  3245.     n% = 3
  3246.     else
  3247.     n% = 0
  3248.     end if
  3249.     if n% > 0 then
  3250.     BadArgErr n%, "DoesIniKeyExist", szFile$+", "+szSect$+", "+szKey$
  3251.     end if
  3252. %endrem ' ''DEBUG
  3253.  
  3254.     DoesIniKeyExist = CInt(FDoesIniKeyExist(szFile$, szSect$, szKey$))
  3255. END FUNCTION
  3256. '*************************************************************************
  3257.  
  3258. PUBLIC FUNCTION GetIniKeyString (szFile$, szSect$, szKey$)  AS STRING
  3259. '** Purpose:
  3260. '**     
  3261. '**     
  3262. '** Author:
  3263. '** Arguments:
  3264. '**     
  3265. '**     
  3266. '** Returns:
  3267. '**     
  3268. '*************************************************************************
  3269.  
  3270. %rem 'DEBUG
  3271.     if FValidIniFile(szFile$) = FALSE then
  3272.     n% = 1
  3273.     elseif szKey$ = "" then
  3274.     n% = 3
  3275.     else
  3276.     n% = 0
  3277.     end if
  3278.     if n% > 0 then
  3279.     BadArgErr n%, "GetIniKeyString", szFile$+", "+szSect$+", "+szKey$
  3280.     end if
  3281. %endrem ' ''DEBUG
  3282.       DIM cb&, szBuf$, cbRet&
  3283.  
  3284.     cb& = 512
  3285.     szBuf$ = CreateBuffer(cb&)
  3286.     cbRet& = GetPrivateProfileString (szSect$, szKey$, "", szBuf$, cb&, szFile$)
  3287.  
  3288.     GetIniKeyString = NullTrim(szBuf$)
  3289.  
  3290. %rem 'DEBUG
  3291.     IF CInt(cbRet&) >= cb% THEN
  3292.     '' StfApiErr saeOvfl, "GetIniKeyString", szFile$+", "+szSect$+", "+szKey$
  3293.     ErrorMsg SID_ERR_GETINIKEYSTRING, ""
  3294.     ERROR STFQUIT
  3295.     END IF
  3296. %endrem ' ''DEBUG
  3297.     szBuf$ = ""
  3298. END FUNCTION
  3299. '*************************************************************************
  3300.  
  3301. PUBLIC SUB SetListItem (szSymbol$, n%, szListItem$) 
  3302. '** Purpose:
  3303. '** Author:
  3304. '** Arguments:
  3305. '*************************************************************************
  3306.   DIM ListLen%, i%
  3307.     ListLen% = GetListLength(szSymbol)
  3308.     IF n% < 0 THEN
  3309.        ErrorMsg SID_ERR_GETLISTITEM2, LSI_INFO(13) & _
  3310.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11)
  3311.        ERROR STFQUIT
  3312.     ELSEIF n% <= ListLen% THEN
  3313.         ReplaceListItem szSymbol$, n%, szListItem$
  3314.     ELSE
  3315.         FOR i% = ListLen%+1 TO n%-1 STEP 1
  3316.         AddListItem szSymbol$, ""
  3317.         NEXT
  3318.         AddListItem szSymbol$, szListItem$
  3319.     END IF
  3320. END SUB
  3321.  
  3322. '***********************************************************************
  3323. '**
  3324. '**  SUB ErrorMsg (nMsg%, szErr$)
  3325. '**
  3326. '**  Description:  
  3327. '**      Display an error message
  3328. '**    
  3329. '**  Explicit Parameters:
  3330. '**   nMsg%    The error message number to display. Use 0 if none
  3331. '**   szErr$   An extra error message that is appended after a
  3332. '**            space only the message in nMsg%
  3333. '**    
  3334. '**  Implicit Parameters:
  3335. '**    
  3336. '***********************************************************************
  3337.  
  3338. PUBLIC SUB ErrorMsg (nMsg%, szErr$)
  3339.  
  3340.    DIM sz$, notused&
  3341.  
  3342.    IF nMsg% <> 0 THEN
  3343.       sz$ = LdString(nMsg%)
  3344.       IF szErr$ <> "" THEN sz$ = sz$ + " " + szErr$
  3345.    ELSE
  3346.       sz$ = szErr$
  3347.    END IF
  3348.         
  3349.     SetLastErrorMsg(szErr$)
  3350.  
  3351.     IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  3352.         WriteToFile GetSymbolValue(SYM_LOGGINGPATH$), sz$
  3353.  
  3354.     ELSE
  3355.         'MessageBox sz$, MB_SYSTEMMODAL + MB_OK + MB_ICONEXCLAMATION, LdString(SID_TKT_STD_TITLE)
  3356.         notused = DoMsgBox (sz$, LdString(SID_TKT_STD_TITLE) , MB_OK + MB_ICONEXCLAMATION)
  3357.     END IF
  3358.  
  3359. END SUB
  3360.  
  3361. '***********************************************************************
  3362. '**
  3363. '**  SUB RegErrorMsg (msg&, szKey$, szItem$, szValue$)
  3364. '**
  3365. '**  Description:  
  3366. '**      Display an error message
  3367. '**    
  3368. '**  Explicit Parameters:
  3369. '**    
  3370. '**  Implicit Parameters:
  3371. '**    
  3372. '***********************************************************************
  3373.  
  3374. PUBLIC SUB RegErrorMsg (msg%, szKey$, szItem$, szValue$)
  3375.  
  3376.    DIM sz$, notused&
  3377.  
  3378.     sz$ = LdString(msg%)+szKey$
  3379.     If NOT szItem$ ="" Then
  3380.         sz$ = sz$+"("+szItem$+") "
  3381.     End If
  3382.     If NOT szValue$ ="" Then
  3383.         sz$ = sz$+": "+szValue$
  3384.     End If
  3385.     SetLastErrorMsg(sz$)
  3386.    notused = DoMsgBox (sz$, LdString(SID_TKT_REG_ERR_TITLE) , MB_OK + MB_ICONEXCLAMATION)
  3387.  
  3388. END SUB
  3389.  
  3390.  
  3391.  
  3392. '***********************************************************************
  3393. '**
  3394. '**  Name: FatalErrorMsg 
  3395. '**  Description:  
  3396. '**      Display an error message and exit the script
  3397. '**    
  3398. '**  Explicit Parameters:
  3399. '**   nMsg%    The error message number to display. Use 0 if none
  3400. '**   szErr$   An extra error message that is appended after a
  3401. '**            space only the message in nMsg%
  3402. '**   err%     Number to be passed to ERROR function
  3403. '**    
  3404. '**  Implicit Parameters:
  3405. '**    
  3406. '***********************************************************************
  3407.  
  3408. PUBLIC SUB FatalErrorMsg (nMsg%, szErr$, nErr%)
  3409.  
  3410.    ErrorMsg nMsg%, szErr$
  3411.    ERROR nErr%
  3412.  
  3413. END SUB
  3414.  
  3415. '***********************************************************************
  3416. '**
  3417. '**  Name: ErrorMsgNoDlgExit
  3418. '**  Description:  
  3419. '**      Display an error message and set symbol to no exit dlg
  3420. '**    
  3421. '**  Explicit Parameters:
  3422. '**   nMsg%    The error message number to display. Use 0 if none
  3423. '**   szErr$   An extra error message that is appended after a
  3424. '**            space only the message in nMsg%
  3425. '**
  3426. '**  Out symbols:
  3427. '**   __LASTSTATUS   Set to "Q" to tell script not to quit   
  3428. '**    
  3429. '**  Implicit Parameters:
  3430. '**    
  3431. '***********************************************************************
  3432.  
  3433. PUBLIC SUB ErrorMsgNoDlgExit (nMsg%, szErr$)
  3434.  
  3435.    ErrorMsg nMsg%, szErr$
  3436.    SetListItem "__LASTSTATUS", 1, "Q"
  3437.  
  3438. END SUB
  3439. '***********************************************************************
  3440. '**
  3441. '**  Name: SetLastErrorMsg
  3442. '**  Description:  
  3443. '**      Sets the global variable gLastErrorMsg$ to the last
  3444. '**      error message displayed.
  3445. '**
  3446. '**  Explicit Parameters:
  3447. '**   szErr$    The error message number to set. Use 0 if none
  3448. '**
  3449. '**  Implicit Parameters:
  3450. '**    
  3451. '***********************************************************************
  3452.  
  3453. PUBLIC SUB      SetLastErrorMsg (szErr$)
  3454.  
  3455.     gLastErrorMsg$ = szErr$
  3456.  
  3457. END SUB
  3458.  
  3459. '***********************************************************************
  3460. '**
  3461. '**  Name: GetLastErrorMsg
  3462. '**  Description:  
  3463. '**      Returns the last error message displayed. Returns
  3464. '**      empty string if no messages have been displayed
  3465. '**    
  3466. '**  Arguments: NONE
  3467. '**
  3468. '**  Returns: last error displayed
  3469. '**    
  3470. '***********************************************************************
  3471.  
  3472. PUBLIC FUNCTION GetLastErrorMsg () AS STRING
  3473.  
  3474.     GetLastErrorMsg = gLastErrorMsg$
  3475.  
  3476. END FUNCTION
  3477.  
  3478. '***********************************************************************
  3479. '**
  3480. '**  Name: WriteToMIF
  3481. '**  Description:  
  3482. '**      Writes the MIF(Management Information File) Status File required by the Microsoft Systems
  3483. '**      Managagement Server. Requires ISMIF32.EXE and ISMIF32.DLL
  3484. '**
  3485. '**  Arguments: szProductAcronym$ The product acronym of the first product.
  3486. '**                               This is appended to "lot" to form the name
  3487. '**                               of the .MIF file.
  3488. '**
  3489. '**             bStatus%  1 or 0. 1 indicates a sucessfull install. 
  3490. '**                               0 means failure.
  3491. '**
  3492. '**             szDesc$   The string to be put in the description
  3493. '**                       field of the MIF file.
  3494. '**
  3495. '**  Side Effects: Writes the MIF file in the Windows directory.
  3496. '**    
  3497. '***********************************************************************
  3498.  
  3499. PUBLIC SUB WriteToMIF (szProductAcronym$, bStatus%, szDesc$)
  3500.     DIM szMIFApp$, szFile$, szManufacturer$, szProd$, szVer$, szCommandLine$
  3501.     DIM notused%
  3502.  
  3503.     szMIFApp$ = LdString(SID_SMS_EXE)
  3504.     szFile$ = "lot" + szProductAcronym$
  3505.     szManufacturer$ = LdString(SID_SMS_MANUFACTURER)
  3506.     szProd$ = GetSymbolValue(SYM_REG_PRODUCTNAME$)
  3507.     szVer$ = GetSymbolValue(SYM_REG_PRODUCTVER$)
  3508.     szCommandLine$ = szMIFApp$+" -f """+szFile$+""" -c """+szManufacturer$+""" -p """+szProd$+""" -v """+szVer$+""" -d """+szDesc$+""" -s "+CSTR(bStatus%)+" -q"
  3509.  
  3510.    ''**CM Shell out to ISMIF32 minimized w/o focus
  3511.     notused% = SHELL(szCommandLine$, 6)
  3512.  
  3513. END SUB
  3514.  
  3515. PUBLIC SUB LdStringInit () 
  3516. '** Purpose: Ensure the initialization of SYM_CUIDLL and loading of libraries
  3517. '                                before any LdString calls
  3518. '** Author:             Jack Donohue
  3519. '** Arguments:  None
  3520. '** Returns:    None
  3521. '*************************************************************************
  3522.   DIM cuidll$, t$, i%, s$, hDll&
  3523.   DIM szBuf$, cbBuf&, wRet&
  3524.  
  3525. if fLdStringInit = 0  Then
  3526.     fLdStringInit = 1
  3527.    t$ = GetSymbolValue(SYM_STF_CWDDIR$)
  3528.    cuidll$ = GetIniKeyString(t$+gINSTALLINI$, "TOOLKIT", SYM_CUIDLL$)
  3529.    If cuidll$ = "" Then
  3530.     cuidll$ = "MSCUISTF.DLL"
  3531.    End If
  3532.    SetSymbolValue SYM_CUIDLL$, cuidll$
  3533.     i% = 1
  3534.     s$ = "Start"
  3535.     WHILE (s$ <> "")
  3536.         s$ =  Lot_GetNthFieldFromIniString (GetSymbolValue(SYM_CUIDLL$), i%, "") 
  3537.         if s$ <> "" then
  3538.             hDll& = GetModuleHandle(s$)
  3539.             If hDll& = 0 Then
  3540.                 hDll& = LoadLibrary(s$)
  3541.             End if
  3542.             If hDll& = 0 Then
  3543.                 print "Couldn't get module handle:" s$
  3544.             End If
  3545.         end if
  3546.         i% = i% + 1
  3547.      WEND
  3548. End If
  3549. END SUB
  3550.  
  3551. PUBLIC FUNCTION LdString (TextID%) AS STRING
  3552. '** Purpose:
  3553. '** Author:
  3554. '** Arguments:
  3555. '** Returns:
  3556. '*************************************************************************
  3557.  
  3558.    DIM rc&, s$, i%, hDll&, cb& 
  3559.     ' Maximum string size because of RED limitation
  3560.     cb& = 256
  3561.  
  3562. ' Modify routine to search in other DLLs if string not found
  3563. ' ---------------------------
  3564.     if fLdStringInit = 0 Then
  3565.         LdStringInit
  3566.     End If
  3567.     g_strbuf$ = CreateBuffer(cb&)
  3568.     rc& = LoadString(HinstCui(), CLng(TextID%), g_strbuf$, cb&-1)
  3569.     ' Not found in generic dll
  3570.     If rc& = 0 Then
  3571.         i% = 2
  3572.         WHILE (TRUE)
  3573.             s$ =  Lot_GetNthFieldFromIniString (GetSymbolValue(SYM_CUIDLL$), i%, "") 
  3574.             if s$ <> "" then
  3575.                 hDll& = GetModuleHandle(s$)
  3576.                 If hDll& = 0 Then
  3577.                     hDll& = LoadLibrary(s$)
  3578.                 End if
  3579.                 If hDll& <> 0 Then
  3580.                     g_strbuf$ = CreateBuffer(cb&)
  3581.                     rc& = LoadString(hDll&, CLng(TextID%), g_strbuf$, cb&-1)
  3582.                     If rc& <> 0 Then
  3583.                         goto FoundTheString
  3584.                     End If
  3585.                 End If
  3586.             else
  3587.                 goto label1
  3588.             end if
  3589.             i% = i% + 1
  3590.         WEND
  3591.     End If
  3592. label1:
  3593.     ASSERT rc& <> 0, "String " + STR(TextID%) + " Not Found"
  3594. FoundTheString:
  3595.     LdString = LEFTBP(g_strbuf$, CINT(rc&))
  3596.     g_strbuf$ = ""
  3597.  
  3598. END FUNCTION
  3599.  
  3600. '** FUNCTION Lot_CleanPath (path$) AS INTEGER
  3601. '**
  3602. '** Purpose: Clean a FAT path. Removes .. and . Makes path lower case
  3603. '**          and ensures that the path has a trailing backslash.
  3604. '**            
  3605. '** Author:    DND
  3606. '** Arguments: path$. The path to modify
  3607. '** Returns:   TRUE if path is valid
  3608. '*************************************************************************
  3609.  
  3610. PUBLIC FUNCTION Lot_CleanPath (path$) AS INTEGER
  3611.  
  3612.    DIM rv%, lastchar$
  3613.    rv% = FCleanFatPath(path$)
  3614.    IF rv% <> FALSE THEN
  3615.         path = NullTrim(path$)
  3616.         lastchar$ = RIGHT$(path$, 1)
  3617.       IF lastchar$ <> "\" THEN path$ = path$ + "\"
  3618.       path$ = LCASE$(path$)
  3619.       Lot_CleanPath = TRUE
  3620.    ELSE
  3621.       Lot_CleanPath = FALSE
  3622.    END IF
  3623.  
  3624. END FUNCTION
  3625.  
  3626. 'This was MS API but is modified by Marcel( (takes a delimiter char)
  3627. '*************************************************************************
  3628.  
  3629. PUBLIC FUNCTION Lot_GetNthFieldFromIniString (szLine$, iField%, sp$)  AS STRING
  3630. '** Purpose:
  3631. '** Author:
  3632. '** Arguments:
  3633. '** Returns:
  3634. '**     
  3635. '*************************************************************************
  3636.     DIM szStart$, i%, iNew%
  3637.  
  3638.     IF sp$ = "" THEN
  3639.     sp$ = ","
  3640.     END IF
  3641.     IF iField% < 1 THEN
  3642.     ErrorMsg SID_ERR_LOT_GNFFIS, ""
  3643.     ERROR STFQUIT
  3644.     END IF
  3645.     szStart$ = szLine$
  3646.     IF iField% <> 1 THEN
  3647.     FOR i% = 2 TO iField% STEP 1
  3648.         iNew% = INSTR(szStart$, sp$)
  3649.         IF iNew% = 0 THEN
  3650.         Lot_GetNthFieldFromIniString = ""
  3651.         GOTO GNFFIS_END
  3652.         END IF
  3653.         szStart$ = MID$(szStart$, (iNew% + 1),100)
  3654.     NEXT
  3655.     END IF
  3656.  
  3657.     iNew% = INSTR(szStart$, sp$)
  3658.     IF iNew% <> 0 THEN
  3659.     szStart$ = MID$(szStart$, 1, (iNew% - 1))
  3660.     END IF
  3661.  
  3662.     ' tqi - not sure we want to change this - depends upon what is handed in!
  3663.     ' don't know the delimiters on it.??? - caller responsible for trimming?
  3664.     ' can't find it's use -tqi
  3665.      Lot_GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  3666.  
  3667. GNFFIS_END:
  3668.  
  3669. END FUNCTION
  3670.  
  3671. '*************************************************************************
  3672. '****************  Setup Basic String Functions  *********************
  3673. '*************************************************************************
  3674.  
  3675.  
  3676. '************************************************************************
  3677. DIM gDEBUG%
  3678. PUBLIC SUB SetUpAPI 
  3679.  
  3680. '*******EXECUTABLE CODE******************
  3681. 'This initializes the toolkit. 
  3682. ' This is called from initialize in main, as the very first action
  3683. 'TRAP CleanupTrap From "MSSHLSTF.DLL"
  3684.  
  3685. 'End Trap
  3686.  
  3687.   DIM cuidll$, gCursorSave&, notused%
  3688.  
  3689.   gCursorSave& = ShowWaitCursor()
  3690.   hSetup = InitSetup(COMMAND$)
  3691.  
  3692.   IF ENVIRON$(gLOTUS_DEBUG) <> "" THEN
  3693.       gDEBUG%=TRUE
  3694.   ELSE
  3695.       gDEBUG%=FALSE
  3696.   END IF
  3697.  
  3698.  
  3699. 'ON ERROR GOTO QUIT
  3700.  
  3701. 'JMD
  3702. ' This symbol now returns a list of strings which can be parsed using
  3703. ' Lot_GetNthFieldFromIniString
  3704. ' ----------------------------
  3705.     if fLdStringInit = 0 Then
  3706.         LdStringInit
  3707.     End If
  3708.   cuidll$ =  Lot_GetNthFieldFromIniString (GetSymbolValue(SYM_CUIDLL$), 1, "") 
  3709.   SetBitmap cuidll$, LOGO
  3710.   notused% = FLotusInitialize (LSI_INFO(4))
  3711.  
  3712.   '** DND: Set the K and MB strings
  3713.   gStrK$  = LdString(SID_KBYTE_CHAR)
  3714.   gStrMB$ = LdString(SID_MBYTE_CHAR)
  3715.  
  3716. END SUB
  3717.  
  3718. PUBLIC SUB      ASSERT (assertion%, msg$)
  3719.    DIM notused&
  3720.    If assertion% = FALSE Then
  3721.       If gDEBUG% = TRUE Then
  3722.      notused& = DoMsgBox (LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & _
  3723.           LSI_INFO(11) + CHR(10) + msg$ , _
  3724.           "ASSERT!!", MB_OK + MB_ICONEXCLAMATION )
  3725.  
  3726.      'MessageBox LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & _
  3727.           'LSI_INFO(11) + CHR(10) + msg$ , _
  3728.           'MB_OK + MB_ICONEXCLAMATION, "ASSERT!!"
  3729.      ERROR STFQUIT
  3730.       End If
  3731.    End If
  3732.  
  3733. END SUB
  3734. '*************************************************************************
  3735. PUBLIC SUB WriteToFile(szFile$,sz$) 
  3736. '** Purpose:   Writes the string sz$ to the file szFile$
  3737. '** Author:    MZ,TV
  3738. '** Arguments: szFile$,sz$
  3739. '** Returns: 
  3740. '**     
  3741. '*************************************************************************
  3742.      STATIC bPrevErr%
  3743.         '**CM bPrevErr Detects if FWriteToFile has previously errored.
  3744.         '     This is needed because ErrorMsg calls WriteToFile.
  3745.      
  3746.      IF bPrevErr% = FALSE THEN
  3747.         IF FWriteToFile(szFile$,sz$) = FALSE THEN
  3748.           bPrevErr% = TRUE
  3749.           ErrorMsg SID_ERR_WRITETOLOGFILE, szFile$ + ":" + sz$
  3750.           ERROR STFQUIT
  3751.         END IF
  3752.      END IF
  3753. END SUB
  3754. '**************************************************************************
  3755.  
  3756.  
  3757. PUBLIC FUNCTION Lot_RegCreateKeyEx(ByVal hKey&,ByVal szKey$) AS LONG
  3758. '** Purpose:  
  3759. '** Author:   Pam Donahue
  3760. '** Arguments: 
  3761. '** Returns: 
  3762. '**     
  3763. '*************************************************************************
  3764.     Lot_RegCreateKeyEx = CreateRegKeyEx(hKey&,szKey$)
  3765. END FUNCTION
  3766.  
  3767. '**************************************************************************
  3768.  
  3769.  
  3770. PUBLIC FUNCTION Lot_RegDelAllSubKeys(ByVal hKey&,ByVal szKey$) AS LONG
  3771. '** Purpose:  
  3772. '** Author:   Pam Donahue
  3773. '** Arguments: 
  3774. '** Returns: 
  3775. '**     
  3776. '*************************************************************************
  3777.     Lot_RegDelAllSubKeys = DeleteAllSubKeys(hKey&,szKey$)
  3778. END FUNCTION
  3779.  
  3780.  
  3781. '**************************************************************************
  3782.  
  3783.  
  3784. PUBLIC FUNCTION Lot_DoesRegKeyExistEx(ByVal hKey&,ByVal szKey$) AS LONG
  3785. '** Purpose:  
  3786. '** Author:   Pam Donahue
  3787. '** Arguments: 
  3788. '** Returns: 
  3789. '**     
  3790. '*************************************************************************
  3791.     Lot_DoesRegKeyExistEx = DoesRegKeyExistEx(hKey&,szKey$)
  3792. END FUNCTION
  3793.  
  3794. '**************************************************************************
  3795.  
  3796.  
  3797. PUBLIC FUNCTION Lot_DeleteRegKeyEx(ByVal hKey&,ByVal szKey$) AS LONG
  3798. '** Purpose:  
  3799. '** Author:   Pam Donahue
  3800. '** Arguments: 
  3801. '** Returns: 
  3802. '**     
  3803. '*************************************************************************
  3804.     Lot_DeleteRegKeyEx = DeleteRegKeyEx(hKey&,szKey$)
  3805. END FUNCTION
  3806.  
  3807. '**************************************************************************
  3808.  
  3809.  
  3810. PUBLIC FUNCTION Lot_CreateRegKeyValueEx(ByVal hKey&,        ByVal szSubKey$,_
  3811.                                         ByVal szValueName$, ByVal dwType&,_
  3812.                                         ByVal lpValueData as variant, ByVal dwDataLen& ) AS LONG
  3813. '** Purpose:  
  3814. '** Author:   Pam Donahue
  3815. '** Arguments: 
  3816. '** Returns: 
  3817. '**     
  3818. '*************************************************************************
  3819.  
  3820.     Dim regstatus&, notused&
  3821.     
  3822.     szSubKey$ = Lot_TrimEndSlash (szSubKey$)
  3823.     if DoesRegKeyExistEx(ByVal hKey&, ByVal szSubKey$) <> 1 then
  3824.       regstatus = CreateRegKeyEx(hKey&,szSubKey$)
  3825.     end if
  3826.     
  3827.     SELECT CASE dwType&
  3828.     CASE REG_SZ
  3829.       Lot_CreateRegKeyValueEx = CreateRegKeyValueExS(hKey&,szSubKey$,szValueName$,dwType&,dwDataLen&,lpValueData)
  3830.       
  3831.     CASE REG_EXPAND_SZ
  3832.       Lot_CreateRegKeyValueEx = CreateRegKeyValueExS(hKey&,szSubKey$,szValueName$,dwType&,dwDataLen&,lpValueData)
  3833.       
  3834.     CASE REG_DWORD
  3835.       Lot_CreateRegKeyValueEx = CreateRegKeyValueExD(hKey&,szSubKey$,szValueName$,dwType&,dwDataLen&,lpValueData)
  3836.     
  3837.     CASE ELSE
  3838.        notused& = DoMsgBox("Lot_CreateRegKeyValueEx: ValueData illegal type", "WRONG PARAMTER VALUE" ,MB_TASKMODAL+MB_ICONHAND+MB_OK)
  3839.       
  3840.     END SELECT
  3841.     
  3842. END FUNCTION
  3843. '**************************************************************************
  3844.  
  3845.  
  3846.  
  3847. PUBLIC FUNCTION Lot_SetRegKeyValueEx(ByVal hKey&, ByVal szSubKey$,_
  3848.                                      ByVal szValueName$, dwType&,_
  3849.                                      ByVal lpValueData as variant,ByVal dwDataLen&) AS LONG
  3850. '** Purpose:  
  3851. '** Author:   Pam Donahue
  3852. '** Arguments: 
  3853. '** Returns: 
  3854. '**     
  3855. '*************************************************************************
  3856.     Dim notused&
  3857.  
  3858.     SELECT CASE dwType&
  3859.     CASE REG_SZ
  3860.       Lot_SetRegKeyValueEx = SetRegKeyValueExS(hKey&,szSubKey$,szValueName$,dwType&,lpValueData,dwDataLen&)
  3861.       
  3862.     CASE REG_EXPAND_SZ
  3863.       Lot_SetRegKeyValueEx = SetRegKeyValueExD(hKey&,szSubKey$,szValueName$,dwType&,lpValueData,dwDataLen&)
  3864.       
  3865.     CASE REG_DWORD
  3866.       Lot_SetRegKeyValueEx = SetRegKeyValueExD(hKey&,szSubKey$,szValueName$,dwType&,lpValueData,dwDataLen&)
  3867.     
  3868.     CASE ELSE
  3869.        notused& = DoMsgBox("Lot_SetRegKeyValueEx: ValueData illegal type", "WRONG PARAMTER VALUE" ,MB_TASKMODAL+MB_ICONHAND+MB_OK)
  3870.       
  3871.     END SELECT
  3872.     
  3873. END FUNCTION
  3874. '**************************************************************************
  3875.  
  3876.  
  3877. PUBLIC FUNCTION Lot_GetRegKeyValueEx(ByVal hKey&, ByVal szSubKey$,_
  3878.                                      ByVal szValueName$, dwType&,_
  3879.                                      lpBuf as variant, cbBuf&) AS LONG
  3880. '** Purpose:  
  3881. '** Author:   Pam Donahue
  3882. '** Arguments: 
  3883. '** Returns: 
  3884. '**     
  3885. '*************************************************************************
  3886.    dim dwBuf&, cbStrBuf&
  3887.    dim strBuf AS STRING
  3888.    dim requestType&
  3889.  
  3890.    cbStrBuf& = 1024
  3891.    strBuf$ = CreateBuffer(cbStrBuf&)
  3892.    requestType& = dwType
  3893.    Lot_GetRegKeyValueEx = GetRegKeyValueEx(hKey&,szSubKey$,_
  3894.                           szValueName$,dwType&,cbStrBuf&,dwBuf&,strBuf$)
  3895.   IF Lot_GetRegKeyValueEx = ERROR_SUCCESS AND dwType <> REG_NONE THEN
  3896.      if dwType = REG_DWORD then
  3897.       lpBuf = dwBuf
  3898.      else
  3899.       lpBuf = strBuf
  3900.      end if
  3901.   END IF
  3902. END FUNCTION
  3903. '**************************************************************************
  3904.  
  3905.  
  3906. '** Purpose:  Retrieves the alias for long dir names  
  3907. '** Author:   Greg Lutz
  3908. '** Arguments: 
  3909. '** Returns: 
  3910. '**     
  3911. '*************************************************************************
  3912. PUBLIC FUNCTION GetShortPathName(ByVal szLong$, szShort$) AS LONG
  3913.     DIM fixed$
  3914.  
  3915.     fixed$ = CreateBuffer(256)
  3916.     GetShortPathName = Lot_GetShortPathName(szLong$, fixed$, 256)
  3917. 'Print "fixed " fixed$
  3918.      If GetShortPathName& = FALSE THEN
  3919.         szShort$ = szLong$
  3920.      Else
  3921.         szShort$ = fixed$
  3922.      End If
  3923. END FUNCTION
  3924.  
  3925. '*************************************************************************
  3926. PUBLIC FUNCTION EnableWindow (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  3927. '** Purpose:   Wrapper to prevent trying to enable null windows.
  3928.  
  3929.      If hwnd = 0 then
  3930.         EnableWindow = 0
  3931.     Else
  3932.         EnableWindow = WEnableWindow(hwnd,fEnable)
  3933.     End If
  3934. END FUNCTION
  3935.  
  3936. const NTDEFAULT = 0
  3937. const NTALL = 1
  3938. const WIN95 = 2
  3939.  
  3940.  
  3941. PUBLIC FUNCTION CreateDefault (ByVal ProdName$, ProdVer$) AS INTEGER
  3942. '** Purpose:  Copies the HKEY_CURRENT_USER\Software\Lotus\<ProdName>\<ProdVer> 
  3943. '**           hive to all the other users on a multi-user system
  3944. '** Author:   Jack Donohue
  3945. '**     
  3946. '** Arguments: 
  3947. '**     ProdName        Product name in registry   
  3948. '**   ProdVer$        Product version in registry
  3949. '**     
  3950. '** Returns: FALSE if not successful
  3951. '**     
  3952. '*************************************************************************
  3953.     DIM s$, opt%
  3954.     s$ = ProdName$ + "\" + ProdVer$
  3955.     IF WhatPlatform() = PLATFORM_WINNT THEN
  3956.         opt% = NTALL
  3957.     ELSEIF WhatPlatform() = PLATFORM_WIN95 THEN
  3958.         opt% = WIN95
  3959.     ELSE
  3960.         CreateDefault = FALSE
  3961.         Exit Function
  3962.     END IF
  3963.     CreateDefault = FCreateDefault (s$, opt%)
  3964. END FUNCTION
  3965.