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