home *** CD-ROM | disk | FTP | other *** search
/ Opening the Theater in our Minds: Visual Thinking / Gatekeeper Multi Media Video Software - Volume 1 Visual Thinking.ISO / runtime / setupapi.in_ / setupapi.in
Encoding:
Text File  |  1993-08-18  |  54.9 KB  |  1,822 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34.  
  35.  
  36.  
  37.  
  38. '**************************************************************************
  39. '****************************** Setup Constants ***************************
  40. '**************************************************************************
  41.  
  42.  
  43. ''Command Option Flags
  44.  
  45. CONST cmoVital       = 1
  46. CONST cmoCopy        = 2
  47. CONST cmoUndo        = 4
  48. CONST cmoRoot        = 8
  49. CONST cmoDecompress  = 16
  50. CONST cmoTimeStamp   = 32
  51. CONST cmoReadOnly    = 64
  52. CONST cmoBackup      = 128
  53. CONST cmoForce       = 256
  54. CONST cmoRemove      = 512
  55. CONST cmoOverwrite   = 1024
  56. CONST cmoAppend      = 2048
  57. CONST cmoPrepend     = 4096
  58. CONST cmoNone        = 0
  59. CONST cmoAll         = 65535
  60.  
  61.  
  62. ''File Exist Modes
  63.  
  64. CONST femExists     = 0
  65. CONST femRead       = 1
  66. CONST femWrite      = 2
  67. CONST femReadWrite  = 3
  68.  
  69.  
  70. ''Read-Only Return Code
  71.  
  72. CONST ynrcNo         = 0
  73. CONST ynrcYes        = 1
  74. CONST ynrcErr1       = 2
  75. CONST ynrcErr2       = 3
  76. CONST ynrcErr3       = 4
  77. CONST ynrcErr4       = 5
  78. CONST ynrcErr5       = 6
  79. CONST ynrcErr6       = 7
  80. CONST ynrcErr7       = 8
  81. CONST ynrcErr8       = 9
  82. CONST ynrcErr9       = 10
  83.  
  84.  
  85. ''General Return Codes
  86.  
  87. CONST grcOkay       = 0
  88. CONST grcNotOkay    = 1
  89. CONST grcUserQuit   = 48
  90.  
  91.  
  92. ''Ranges
  93.  
  94. ''CONST cbSymValMax = 8192
  95. CONST cbSymValMax = 512
  96.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  97.     '' but we get Out of String Space wattdrvr error if we alloc
  98.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  99.     '' We should look into using dynamic far alloc instead of
  100.     '' STRING$ for large buffers.
  101.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  102.  
  103.  
  104. ''ON ERROR Error Codes
  105. CONST STFERR      = 1024   ''setup system error
  106. CONST STFQUIT     = 1025   ''user quit
  107.  
  108. CONST scmOff      = 0
  109. CONST scmOnIgnore = 1
  110. CONST scmOnFatal  = 2
  111.  
  112.  
  113. '**************************************************************************
  114. '********************************  Setup API's  ***************************
  115. '**************************************************************************
  116.  
  117. '' common
  118.  
  119. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  120. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  121. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  122. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  124. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  125. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  126. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  127. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  128. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  129. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  130.  
  131.  
  132. ''shell
  133.  
  134. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  135. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  136. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  137. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  138. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  139. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  140. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  141. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  142. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  143. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  144. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  145. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  152. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  153. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  154.  
  155.  
  156.  
  157. ''install
  158.  
  159. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  160. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  163. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  164. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  165. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  166. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FRemoveProgManGroup LIB "msinsstf.dll" (szGroup$,  cmo%) AS INTEGER
  174. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  175. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  176. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  177. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  178. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  179. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  180. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  181. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  182. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  183. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  184. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  185. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  186. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  187. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  188. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  189. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  190. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  191. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  192. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  193. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  194. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  195. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  196. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  197.  
  198. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  199.  
  200.  
  201.  
  202. '*************************************************************************
  203. '****************  Setup Basic Wrapper Declarations  *********************
  204. '*************************************************************************
  205.  
  206.  
  207. ''shell
  208.  
  209. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  210. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  211. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  212. DECLARE SUB UIPop (n%)
  213. DECLARE SUB UIPopAll
  214. DECLARE SUB SetTitle (sz$)
  215. DECLARE SUB ReadInfFile (szFile$)
  216. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  217. DECLARE SUB RemoveSymbol (szSym$)
  218. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  219. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  220. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  221. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  222. DECLARE SUB AddListItem(szSymbol$, szItem$)
  223. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  224.  
  225. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  226. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  227.  
  228. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  229. DECLARE SUB RestoreCursor (hPrev%)
  230.  
  231. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  232. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  233.  
  234. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  235. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  236. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  237. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  238.  
  239. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  240. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  241. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  242. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  243.  
  244.  
  245. ''install
  246.  
  247.  
  248. DECLARE SUB CreateDir (szDir$, cmo%)
  249. DECLARE SUB RemoveDir (szDir$, cmo%)
  250. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  251. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  252. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  253. DECLARE SUB CopyFilesInCopyList
  254. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  255. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  256. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  257. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  258. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  259. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  260. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  261. DECLARE SUB RemoveProgmanGroup (szGroup$,  cmo%)
  262. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  263. DECLARE SUB DumpCopyList (szFile$)
  264. DECLARE SUB ClearCopyList
  265. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  266. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  267. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  268. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  269. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  270. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  271. DECLARE SUB InitInstall
  272. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  273. DECLARE SUB AddBlankToBillboardList (lTicks&)
  274. DECLARE SUB ClearBillboardList
  275. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  276. DECLARE SUB CloseLogFile
  277. DECLARE SUB WriteToLogFile (szStr$)
  278. DECLARE SUB SetCopyGaugePosition (x%, y%)
  279. DECLARE SUB SetRestartDir(szDir$)
  280. DECLARE FUNCTION RestartListEmpty AS INTEGER
  281. DECLARE FUNCTION ExitExecRestart AS INTEGER
  282. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  283. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  284. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  285. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  286. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  287.  
  288.  
  289. '' Error Handling
  290.  
  291. '$ifdef DEBUG
  292.  
  293. '' Setup API Errors
  294. CONST saeFail   = 0
  295. CONST saeInit   = 1
  296. CONST saeNYI    = 3
  297. CONST saeArg    = 4    ''must be max sae value
  298.  
  299. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  300. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  301.  
  302. '' chk arg
  303. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  304. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  305. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  306. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  307.  
  308. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  309. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  310.  
  311. '$endif ''DEBUG
  312.  
  313.  
  314.  
  315. '' Windows system detect
  316.  
  317. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  318. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  319. DECLARE FUNCTION GetWindowsMode AS INTEGER
  320. DECLARE FUNCTION GetWindowsDir  AS STRING
  321. DECLARE FUNCTION GetWindowsSysDir AS STRING
  322. DECLARE FUNCTION IsWindowsShared AS INTEGER
  323. DECLARE FUNCTION GetScreenWidth AS INTEGER
  324. DECLARE FUNCTION GetScreenHeight AS INTEGER
  325.  
  326.  
  327. '*************************************************************************
  328. '*****************  Setup Basic Wrapper Definitions  *********************
  329. '*************************************************************************
  330. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  331.     fFrameInit = 0
  332.     fInstallInit = 0
  333.  
  334.     IF hSetup > 0 THEN
  335. '$ifdef DEBUG
  336.         StfApiErr saeInit, "InitSetup", szCmdLine$
  337. '$endif ''DEBUG
  338.     END IF
  339.  
  340.     i% = InitFrame(szCmdLine$)
  341.     fFrameInit = 1
  342.  
  343.     InitInstall
  344.     fInstallInit = 1
  345.  
  346.     InitSetup = i%
  347. END FUNCTION
  348.  
  349.  
  350.  
  351. '**************************************************************************
  352. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  353.     IF hSetup > 0 THEN
  354. '$ifdef DEBUG
  355.         StfApiErr saeInit, "InitFrame", szCmdLine$
  356. '$endif ''DEBUG
  357.     ELSE
  358.         i% = InitializeFrame(szCmdLine$)
  359.         IF i% = -1 THEN
  360.             END   '' NOT an error - Usage (/?) or Command line copy operation
  361.         ELSEIF i% = 0 THEN
  362. '$ifdef DEBUG
  363.             StfApiErr saeFail, "InitFrame", szCmdLine$
  364. '$endif ''DEBUG
  365.             END
  366.         ELSE
  367.             InitFrame = i%
  368.         END IF
  369.     END IF
  370. END FUNCTION
  371.  
  372.  
  373. '**************************************************************************
  374. SUB SetBitmap(szDll$, Bitmap%) STATIC
  375.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  376. '$ifdef DEBUG
  377.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  378. '$endif ''DEBUG
  379.         ERROR STFERR
  380.     END IF
  381. END SUB
  382.  
  383.  
  384. '**************************************************************************
  385. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  386.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  387. '$ifdef DEBUG
  388.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  389. '$endif ''DEBUG
  390.         ERROR STFERR
  391.     END IF
  392. END SUB
  393.  
  394.  
  395. '*************************************************************************
  396. SUB SetTitle(sz$) STATIC
  397.     SetWindowText HwndFrame(), sz$
  398. END SUB
  399.  
  400.  
  401. '*************************************************************************
  402. SUB ReadInfFile (szFile$) STATIC
  403. '$ifdef DEBUG
  404.     if FValidFATPath(szFile$) = 0 then
  405.         BadArgErr 1, "ReadInfFile", szFile$
  406.     end if
  407.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  408.         StfApiErr saeFail, "ReadInfFile", szFile$
  409. '$else  ''!DEBUG
  410.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  411. '$endif ''!DEBUG
  412.         ERROR STFERR
  413.     END IF
  414. END SUB
  415.  
  416.  
  417. '*************************************************************************
  418. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  419. '$ifdef DEBUG
  420.     if szDll$ = "" then
  421.         n% = 1
  422.     elseif szDlgProc$ = "" then
  423.         n% = 3
  424.     else
  425.         n% = 0
  426.     end if
  427.     if n% > 0 then
  428.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  429.     end if
  430. '$endif ''DEBUG
  431.  
  432.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  433. '$ifdef DEBUG
  434.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  435. '$endif ''DEBUG
  436.         ERROR STFERR
  437.     ELSE
  438.         UIStartDlg = GetSymbolValue("DLGEVENT")
  439.     END IF
  440. END FUNCTION
  441.  
  442.  
  443. '*************************************************************************
  444. SUB UIPop (n%) STATIC
  445.     IF FKillNDialogs(n%) = 0 THEN
  446. '$ifdef DEBUG
  447.         StfApiErr saeFail, "UIPop", STR$(n%)
  448. '$endif ''DEBUG
  449.         ERROR STFERR
  450.     END IF
  451. END SUB
  452.  
  453.  
  454. '*************************************************************************
  455. SUB UIPopAll STATIC
  456.     IF FKillNDialogs(65535) = 0 THEN
  457. '$ifdef DEBUG
  458.         StfApiErr saeFail, "UIPopAll", ""
  459. '$endif ''DEBUG
  460.         ERROR STFERR
  461.     END IF
  462. END SUB
  463.  
  464.  
  465. '*************************************************************************
  466. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  467. '$ifdef DEBUG
  468.     if szSymbol$ = "" then
  469.         BadArgErr 1, "GetSymbolValue", szSymbol$
  470.     end if
  471. '$endif ''DEBUG
  472.     szValue$ = string$(cbSymValMax,32)
  473.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  474.     GetSymbolValue = szValue$
  475.     IF Length% >= cbSymValMax THEN
  476.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  477.         ERROR STFERR
  478.     END IF
  479.     IF szSymbol$ = "" THEN
  480.         ERROR STFERR
  481.     END IF
  482.     szValue$ = ""
  483. END FUNCTION
  484.  
  485.  
  486. '*************************************************************************
  487. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  488. '$ifdef DEBUG
  489.     if szSymbol$ = "" then
  490.         BadArgErr 1, "GetListLength", szSymbol$
  491.     end if
  492. '$endif ''DEBUG
  493.     GetListLength = UsGetListLength(szSymbol$)
  494.     IF szSymbol$ = "" THEN
  495.         ERROR STFERR
  496.     END IF
  497. END FUNCTION
  498.  
  499.  
  500. '*************************************************************************
  501. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  502. '$ifdef DEBUG
  503.     if szListSymbol$ = "" then
  504.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  505.     end if
  506.  
  507.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  508.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  509.     end if
  510. '$endif ''DEBUG
  511.  
  512.     szListItem$ = string$(cbSymValMax,32)
  513.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  514.     GetListItem = szListItem$
  515.     IF Length% >= cbSymValMax THEN
  516.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  517.         ERROR STFERR
  518.     END IF
  519.     IF szListSymbol$ = "" THEN
  520.         ERROR STFERR
  521.     END IF
  522.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  523.         ERROR STFERR
  524.     end if
  525.     szListItem$ = ""
  526. END FUNCTION
  527.  
  528.  
  529. '*************************************************************************
  530. SUB AddListItem(szSymbol$, szItem$) STATIC
  531. '$ifdef DEBUG
  532.     if szSymbol$ = "" then
  533.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  534.     end if
  535. '$endif ''DEBUG
  536.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  537. '$ifdef DEBUG
  538.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  539. '$endif ''DEBUG
  540.         ERROR STFERR
  541.     END IF
  542. END SUB
  543.  
  544.  
  545. '*************************************************************************
  546. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  547. '$ifdef DEBUG
  548.     if szSymbol$ = "" then
  549.         nArg% = 1
  550.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  551.         nArg% = 2
  552.     else
  553.         nArg% = 0
  554.     end if
  555.     if nArg% > 0 then
  556.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  557.     end if
  558. '$endif ''DEBUG
  559.  
  560.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  561. '$ifdef DEBUG
  562.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  563. '$endif ''DEBUG
  564.         ERROR STFERR
  565.     END IF
  566. END SUB
  567.  
  568.  
  569. '**************************************************************************
  570. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  571. '$ifdef DEBUG
  572.     if szSymbol$ = "" then
  573.         n% = 1
  574.     elseif FValidInfSect(szSect$) = 0 then
  575.         n% = 2
  576.     else
  577.         n% = 0
  578.     end if
  579.     if n% > 0 then
  580.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  581.     end if
  582. '$endif ''DEBUG
  583.  
  584.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  585. '$ifdef DEBUG
  586.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  587. '$endif ''DEBUG
  588.         ERROR STFERR
  589.     END IF
  590. END SUB
  591.  
  592.  
  593. '*************************************************************************
  594. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  595. '$ifdef DEBUG
  596.     if szSymbol$ = "" then
  597.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  598.     end if
  599. '$endif ''DEBUG
  600.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  601. '$ifdef DEBUG
  602.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  603. '$endif ''DEBUG
  604.         ERROR STFERR
  605.     END IF
  606. END SUB
  607.  
  608.  
  609. '*************************************************************************
  610. SUB RemoveSymbol(szSym$) STATIC
  611. '$ifdef DEBUG
  612.     if szSym$ = "" then
  613.         BadArgErr 1, "RemoveSymbol", szSym$
  614.     end if
  615. '$endif ''DEBUG
  616.     IF FRemoveSymbol(szSym$) = 0 THEN
  617. '$ifdef DEBUG
  618.         StfApiErr saeFail, "RemoveSymbol", szSym$
  619. '$endif ''DEBUG
  620.         ERROR STFERR
  621.     END IF
  622. END SUB
  623.  
  624.  
  625. '*************************************************************************
  626. FUNCTION ShowWaitCursor STATIC AS INTEGER
  627.     ShowWaitCursor = HShowWaitCursor
  628. END FUNCTION
  629.  
  630.  
  631. '*************************************************************************
  632. SUB RestoreCursor (hPrev%) STATIC
  633.     i% = FRestoreCursor(hPrev%)
  634.     IF i% = 0 THEN
  635. '$ifdef DEBUG
  636.         StfApiErr saeFail, "RestoreCursor", ""
  637. '$endif ''DEBUG
  638.         ERROR STFERR
  639.     END IF
  640. END SUB
  641.  
  642.  
  643. '*************************************************************************
  644. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  645.     SetBeepingMode = FSetBeepingMode(mode%)
  646. END FUNCTION
  647.  
  648.  
  649. '*************************************************************************
  650. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  651.     SetSilentMode = FSetSilent(mode%)
  652. END FUNCTION
  653.  
  654.  
  655. '*************************************************************************
  656. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  657. '$ifdef DEBUG
  658.     if FValidInfSect(szSect$) = 0 then
  659.         n% = 1
  660.     elseif szKey$ = "" then
  661.         n% = 2
  662.     else
  663.         n% = 0
  664.     end if
  665.     if n% > 0 then
  666.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  667.     end if
  668. '$endif ''DEBUG
  669.  
  670.     szBuf$ = string$(128, 32)
  671.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  672.     IF Length% >= 128 THEN
  673.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  674.         ERROR STFERR
  675.     END IF
  676.  
  677.     IF Length% = -1 THEN
  678. '$ifdef DEBUG
  679.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  680. '$endif ''DEBUG
  681.         ERROR STFERR
  682.     END IF
  683.  
  684.     GetSectionKeyDate = szBuf$
  685.     szBuf$ = ""
  686. END FUNCTION
  687.  
  688.  
  689. '*************************************************************************
  690. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  691. '$ifdef DEBUG
  692.     if FValidInfSect(szSect$) = 0 then
  693.         n% = 1
  694.     elseif szKey$ = "" then
  695.         n% = 2
  696.     else
  697.         n% = 0
  698.     end if
  699.     if n% > 0 then
  700.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  701.     end if
  702. '$endif ''DEBUG
  703.  
  704.     szBuf$ = string$(128, 32)
  705.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  706.     IF Length% >= 128 THEN
  707.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  708.         ERROR STFERR
  709.     END IF
  710.  
  711.     IF Length% = -1 THEN
  712. '$ifdef DEBUG
  713.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  714. '$endif ''DEBUG
  715.         ERROR STFERR
  716.     END IF
  717.  
  718.     GetSectionKeyFilename = szBuf$
  719.     szBuf$ = ""
  720. END FUNCTION
  721.  
  722.  
  723. '*************************************************************************
  724. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  725. '$ifdef DEBUG
  726.     if FValidInfSect(szSect$) = 0 then
  727.         n% = 1
  728.     elseif szKey$ = "" then
  729.         n% = 2
  730.     else
  731.         n% = 0
  732.     end if
  733.     if n% > 0 then
  734.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  735.     end if
  736. '$endif ''DEBUG
  737.  
  738.     szBuf$ = string$(128, 32)
  739.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  740.     IF Length% >= 128 THEN
  741.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  742.         ERROR STFERR
  743.     END IF
  744.  
  745.     IF Length% = -1 THEN
  746. '$ifdef DEBUG
  747.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  748. '$endif ''DEBUG
  749.         ERROR STFERR
  750.     END IF
  751.  
  752.     GetSectionKeySize = VAL(szBuf$)
  753.     szBuf$ = ""
  754. END FUNCTION
  755.  
  756.  
  757. '*************************************************************************
  758. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  759. '$ifdef DEBUG
  760.     if FValidInfSect(szSect$) = 0 then
  761.         n% = 1
  762.     elseif szKey$ = "" then
  763.         n% = 2
  764.     else
  765.         n% = 0
  766.     end if
  767.     if n% > 0 then
  768.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  769.     end if
  770. '$endif ''DEBUG
  771.  
  772.     szBuf$ = string$(128, 32)
  773.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  774.     IF Length% >= 128 THEN
  775.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  776.         ERROR STFERR
  777.     END IF
  778.  
  779.     IF Length% = -1 THEN
  780. '$ifdef DEBUG
  781.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  782. '$endif ''DEBUG
  783.         ERROR STFERR
  784.     END IF
  785.  
  786.     GetSectionKeyVersion = szBuf$
  787.     szBuf$ = ""
  788. END FUNCTION
  789.  
  790.  
  791. '*************************************************************************
  792. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  793. '$ifdef DEBUG
  794.     if szSym$ = "" then
  795.         n% = 1
  796.     elseif FValidInfSect(szSect$) = 0 then
  797.         n% = 2
  798.     else
  799.         n% = 0
  800.     end if
  801.     if n% > 0 then
  802.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  803.     end if
  804. '$endif ''DEBUG
  805.  
  806.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  807. '$ifdef DEBUG
  808.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  809. '$endif ''DEBUG
  810.         ERROR STFERR
  811.     END IF
  812. END SUB
  813.  
  814.  
  815. '*************************************************************************
  816. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  817. '$ifdef DEBUG
  818.     if szSym$ = "" then
  819.         n% = 1
  820.     elseif FValidInfSect(szSect$) = 0 then
  821.         n% = 2
  822.     else
  823.         n% = 0
  824.     end if
  825.     if n% > 0 then
  826.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  827.     end if
  828. '$endif ''DEBUG
  829.  
  830.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  831. '$ifdef DEBUG
  832.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  833. '$endif ''DEBUG
  834.         ERROR STFERR
  835.     END IF
  836. END SUB
  837.  
  838.  
  839. '*************************************************************************
  840. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  841. '$ifdef DEBUG
  842.     if szSym$ = "" then
  843.         n% = 1
  844.     elseif FValidInfSect(szSect$) = 0 then
  845.         n% = 2
  846.     else
  847.         n% = 0
  848.     end if
  849.     if n% > 0 then
  850.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  851.     end if
  852. '$endif ''DEBUG
  853.  
  854.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  855. '$ifdef DEBUG
  856.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  857. '$endif ''DEBUG
  858.         ERROR STFERR
  859.     END IF
  860. END SUB
  861.  
  862.  
  863. '*************************************************************************
  864. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  865. '$ifdef DEBUG
  866.     if szSym$ = "" then
  867.         n% = 1
  868.     elseif FValidInfSect(szSect$) = 0 then
  869.         n% = 2
  870.     else
  871.         n% = 0
  872.     end if
  873.     if n% > 0 then
  874.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  875.     end if
  876. '$endif ''DEBUG
  877.  
  878.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  879. '$ifdef DEBUG
  880.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  881. '$endif ''DEBUG
  882.         ERROR STFERR
  883.     END IF
  884. END SUB
  885.  
  886.  
  887. '*************************************************************************
  888. SUB InitInstall STATIC
  889.     IF hSetup > 0 THEN
  890. '$ifdef DEBUG
  891.         StfApiErr saeInit, "InitInstall", ""
  892. '$endif ''DEBUG
  893.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  894. '$ifdef DEBUG
  895.         StfApiErr saeFail, "InitInstall", ""
  896. '$endif ''DEBUG
  897.         END
  898.     END IF
  899. END SUB
  900.  
  901.  
  902. '*************************************************************************
  903. SUB CreateDir (szDir$, cmo%) STATIC
  904. '$ifdef DEBUG
  905.     if FValidFATDir(szDir$) = 0 then
  906.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  907.     end if
  908. '$endif ''DEBUG
  909.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  910. '$ifdef DEBUG
  911.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  912. '$endif ''DEBUG
  913.         ERROR STFERR
  914.     END IF
  915. END SUB
  916.  
  917.  
  918. '*************************************************************************
  919. SUB RemoveDir (szDir$, cmo%) STATIC
  920. '$ifdef DEBUG
  921.     if FValidFATDir(szDir$) = 0 then
  922.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  923.     end if
  924. '$endif ''DEBUG
  925.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  926. '$ifdef DEBUG
  927.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  928. '$endif ''DEBUG
  929.         ERROR STFERR
  930.     END IF
  931. END SUB
  932.  
  933.  
  934.  
  935. '*************************************************************************
  936. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  937. '$ifdef DEBUG
  938.     if FValidIniFile(szFile$) = 0 then
  939.         n% = 1
  940.     elseif FValidInfSect(szSect$) = 0 then
  941.         n% = 2
  942.     else
  943.         n% = 0
  944.     end if
  945.     if n% > 0 then
  946.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  947.     end if
  948. '$endif ''DEBUG
  949.  
  950.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  951. '$ifdef DEBUG
  952.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  953. '$endif ''DEBUG
  954.         ERROR STFERR
  955.     END IF
  956. END SUB
  957.  
  958.  
  959. '*************************************************************************
  960. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  961. '$ifdef DEBUG
  962.     if FValidIniFile(szFile$) = 0 then
  963.         n% = 1
  964.     elseif FValidInfSect(szSect$) = 0 then
  965.         n% = 2
  966.     else
  967.         n% = 0
  968.     end if
  969.     if n% > 0 then
  970.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  971.     end if
  972. '$endif ''DEBUG
  973.  
  974.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  975. '$ifdef DEBUG
  976.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  977. '$endif ''DEBUG
  978.         ERROR STFERR
  979.     END IF
  980. END SUB
  981.  
  982.  
  983. '*************************************************************************
  984. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  985. '$ifdef DEBUG
  986.     if FValidIniFile(szFile$) = 0 then
  987.         n% = 1
  988.     elseif FValidInfSect(szSect$) = 0 then
  989.         n% = 2
  990.     elseif szKey$ = "" then
  991.         n% = 3
  992.     else
  993.         n% = 0
  994.     end if
  995.     if n% > 0 then
  996.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  997.     end if
  998. '$endif ''DEBUG
  999.  
  1000.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1001. '$ifdef DEBUG
  1002.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1003. '$endif ''DEBUG
  1004.         ERROR STFERR
  1005.     END IF
  1006. END SUB
  1007.  
  1008.  
  1009. '*************************************************************************
  1010. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1011. '$ifdef DEBUG
  1012.     if FValidFATPath(szFile$) = 0 then
  1013.         n% = 1
  1014.     elseif FValidInfSect(szSect$) = 0 then
  1015.         n% = 2
  1016.     elseif szKey$ = "" then
  1017.         n% = 3
  1018.     else
  1019.         n% = 0
  1020.     end if
  1021.     if n% > 0 then
  1022.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1023.     end if
  1024. '$endif ''DEBUG
  1025.  
  1026.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1027. '$ifdef DEBUG
  1028.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1029. '$endif ''DEBUG
  1030.         ERROR STFERR
  1031.     END IF
  1032. END SUB
  1033.  
  1034.  
  1035. '*************************************************************************
  1036. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1037. '$ifdef DEBUG
  1038.     if szGroup$ = "" or len(szGroup$) > 24 then
  1039.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1040.     end if
  1041. '$endif ''DEBUG
  1042.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1043. '$ifdef DEBUG
  1044.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1045. '$endif ''DEBUG
  1046.         ERROR STFERR
  1047.     END IF
  1048. END SUB
  1049.  
  1050.  
  1051. '*************************************************************************
  1052. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1053. '$ifdef DEBUG
  1054.     if szGroup$ = "" or len(szGroup$) > 24 then
  1055.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1056.     end if
  1057. '$endif ''DEBUG
  1058.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1059. '$ifdef DEBUG
  1060.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1061. '$endif ''DEBUG
  1062.         ERROR STFERR
  1063.     END IF
  1064. END SUB
  1065.  
  1066.  
  1067. '*************************************************************************
  1068. SUB RemoveProgmanGroup (szGroup$,  cmo%) STATIC
  1069. '$ifdef DEBUG
  1070.     if szGroup$ = "" or len(szGroup$) > 24 then
  1071.         BadArgErr 1, "RemoveProgmanGroup", szGroup$+",  "+STR$(cmo%)
  1072.     end if
  1073. '$endif ''DEBUG
  1074.     IF FRemoveProgManGroup(szGroup$,  cmo%) = 0 THEN
  1075. '$ifdef DEBUG
  1076.         StfApiErr saeFail, "RemoveProgmanGroup", szGroup$+", "+STR$(cmo%)
  1077. '$endif ''DEBUG
  1078.         ERROR STFERR
  1079.     END IF
  1080. END SUB
  1081.  
  1082.  
  1083. '*************************************************************************
  1084. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1085. '$ifdef DEBUG
  1086.     if FValidInfSect(szSect$) = 0 then
  1087.         n% = 1
  1088.     elseif szKey$ = "" then
  1089.         n% = 2
  1090.     elseif FValidFATDir(szDst$) = 0 then
  1091.         n% = 3
  1092.     else
  1093.         n% = 0
  1094.     end if
  1095.     if n% > 0 then
  1096.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1097.     end if
  1098. '$endif ''DEBUG
  1099.  
  1100.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1101. '$ifdef DEBUG
  1102.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1103. '$endif ''DEBUG
  1104.         ERROR STFERR
  1105.     END IF
  1106. END SUB
  1107.  
  1108.  
  1109. '*************************************************************************
  1110. SUB DumpCopyList (szFile$) STATIC
  1111. '$ifdef DEBUG
  1112.     if szFile$ = "" then
  1113.         BadArgErr 1, "DumpCopyList", szFile$
  1114.     end if
  1115. '$endif ''DEBUG
  1116.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1117. '$ifdef DEBUG
  1118.         StfApiErr saeFail, "DumpCopyList", szFile$
  1119. '$endif ''DEBUG
  1120.         ERROR STFERR
  1121.     END IF
  1122. END SUB
  1123.  
  1124.  
  1125. '*************************************************************************
  1126. SUB ClearCopyList STATIC
  1127.     ResetCopyList
  1128. END SUB
  1129.  
  1130.  
  1131. '*************************************************************************
  1132. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1133.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1134.     IF lNeed& < 0 THEN
  1135. '$ifdef DEBUG
  1136.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1137. '$endif ''DEBUG
  1138.         ERROR STFERR
  1139.     END IF
  1140.     GetCopyListCost = lNeed&
  1141. END FUNCTION
  1142.  
  1143.  
  1144. '*************************************************************************
  1145. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1146.     szItemNew$ = szItem$
  1147.     IF szOther$ <> "" THEN
  1148.         szItemNew$ = szItem$ + "," + szOther$
  1149.     END IF
  1150. '$ifdef DEBUG
  1151.     if szGroup$ = "" or len(szGroup$) > 24 then
  1152.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1153.     end if
  1154. '$endif ''DEBUG
  1155.  
  1156.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1157. '$ifdef DEBUG
  1158.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1159. '$endif ''DEBUG
  1160.         ERROR STFERR
  1161.     END IF
  1162.     szItemNew$ = ""
  1163. END SUB
  1164.  
  1165.  
  1166. '*************************************************************************
  1167. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1168. '$ifdef DEBUG
  1169.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1170.         n% = 1
  1171.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1172.         n% = 1
  1173.     elseif szProgHelp$ = "" then
  1174.         n% = 2
  1175.     else
  1176.         n% = 0
  1177.     end if
  1178.     if n% > 0 then
  1179.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1180.     end if
  1181. '$endif ''DEBUG
  1182.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1183. '$ifdef DEBUG
  1184.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1185. '$endif ''DEBUG
  1186.         ERROR STFERR
  1187.     END IF
  1188. END SUB
  1189.  
  1190.  
  1191. '*************************************************************************
  1192. SUB CopyFilesInCopyList STATIC
  1193.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1194.  
  1195.     IF grc% = grcUserQuit THEN
  1196.         ERROR STFQUIT
  1197.     ELSEIF grc% > 0 THEN
  1198. '$ifdef DEBUG
  1199.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1200. '$endif ''DEBUG
  1201.         ERROR STFERR
  1202.     END IF
  1203. END SUB
  1204.  
  1205.  
  1206. '*************************************************************************
  1207. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1208. '$ifdef DEBUG
  1209.     if FValidFATPath(szFullPathSrc$) = 0 then
  1210.         n% = 1
  1211.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1212.         n% = 2
  1213.     else
  1214.         n% = 0
  1215.     end if
  1216.     if n% > 0 then
  1217.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1218.     end if
  1219. '$endif ''DEBUG
  1220.  
  1221.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1222. '$ifdef DEBUG
  1223.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1224. '$endif ''DEBUG
  1225.         ERROR STFERR
  1226.     END IF
  1227. END SUB
  1228.  
  1229.  
  1230.  
  1231. '*************************************************************************
  1232. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1233. '$ifdef DEBUG
  1234.     if FValidFATPath(szFullPathSrc$) = 0 then
  1235.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1236.     end if
  1237. '$endif ''DEBUG
  1238.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1239. '$ifdef DEBUG
  1240.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1241. '$endif ''DEBUG
  1242.         ERROR STFERR
  1243.     END IF
  1244. END SUB
  1245.  
  1246.  
  1247. '*************************************************************************
  1248. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1249. '$ifdef DEBUG
  1250.     if FValidFATPath(szFullPath$) = 0 then
  1251.         n% = 1
  1252.     elseif szBackup$ = "" then
  1253.         n% = 2
  1254.     else
  1255.         n% = 0
  1256.     end if
  1257.     if n% > 0 then
  1258.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1259.     end if
  1260. '$endif ''DEBUG
  1261.  
  1262.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1263. '$ifdef DEBUG
  1264.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1265. '$endif ''DEBUG
  1266.         ERROR STFERR
  1267.     END IF
  1268. END SUB
  1269.  
  1270.  
  1271. '*************************************************************************
  1272. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1273. '$ifdef DEBUG
  1274.     if FValidFATPath(szFullPath$) = 0 then
  1275.         n% = 1
  1276.     elseif szBackup$ = "" then
  1277.         n% = 2
  1278.     else
  1279.         n% = 0
  1280.     end if
  1281.     if n% > 0 then
  1282.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1283.     end if
  1284. '$endif ''DEBUG
  1285.  
  1286.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1287. '$ifdef DEBUG
  1288.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1289. '$endif ''DEBUG
  1290.         ERROR STFERR
  1291.     END IF
  1292. END SUB
  1293.  
  1294.  
  1295. '*************************************************************************
  1296. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1297. '$ifdef DEBUG
  1298.     if FValidInfSect(szSect$) = 0 then
  1299.         n% = 1
  1300.     elseif FValidFATDir(szSrc$) = 0 then
  1301.         n% = 2
  1302.     elseif FValidFATDir(szDest$) = 0 then
  1303.         n% = 3
  1304.     else
  1305.         n% = 0
  1306.     end if
  1307.     if n% > 0 then
  1308.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1309.     end if
  1310. '$endif ''DEBUG
  1311.  
  1312.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1313. '$ifdef DEBUG
  1314.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1315. '$endif ''DEBUG
  1316.         ERROR STFERR
  1317.     END IF
  1318. END SUB
  1319.  
  1320.  
  1321. '*************************************************************************
  1322. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1323. '$ifdef DEBUG
  1324.     if FValidInfSect(szSect$) = 0 then
  1325.         n% = 1
  1326.     elseif szKey$ = "" then
  1327.         n% = 2
  1328.     elseif FValidFATDir(szSrc$) = 0 then
  1329.         n% = 3
  1330.     elseif FValidFATDir(szDest$) = 0 then
  1331.         n% = 4
  1332.     else
  1333.         n% = 0
  1334.     end if
  1335.     if n% > 0 then
  1336.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1337.     end if
  1338. '$endif ''DEBUG
  1339.  
  1340.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1341. '$ifdef DEBUG
  1342.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1343. '$endif ''DEBUG
  1344.         ERROR STFERR
  1345.     END IF
  1346. END SUB
  1347.  
  1348.  
  1349. '*************************************************************************
  1350. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1351. '$ifdef DEBUG
  1352.     if FValidInfSect(szSect$) = 0 then
  1353.         n% = 1
  1354.     elseif szKey$ = "" then
  1355.         n% = 2
  1356.     elseif FValidFATDir(szSrc$) = 0 then
  1357.         n% = 3
  1358.     elseif FValidFATPath(szDest$) = 0 then
  1359.         n% = 4
  1360.     else
  1361.         n% = 0
  1362.     end if
  1363.     if n% > 0 then
  1364.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1365.     end if
  1366. '$endif ''DEBUG
  1367.  
  1368.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1369. '$ifdef DEBUG
  1370.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1371. '$endif ''DEBUG
  1372.         ERROR STFERR
  1373.     END IF
  1374. END SUB
  1375.  
  1376.  
  1377. '*************************************************************************
  1378. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1379. '$ifdef DEBUG
  1380.     if szDll$ = "" then
  1381.         n% = 1
  1382.     elseif idDlg% = 0 then
  1383.         n% = 2
  1384.     elseif szProc$ = "" then
  1385.         n% = 3
  1386.     elseif lTicks& <= 0 then
  1387.         n% = 4
  1388.     else
  1389.         n% = 0
  1390.     end if
  1391.     if n% > 0 then
  1392.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1393.     end if
  1394. '$endif ''DEBUG
  1395.  
  1396.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1397. '$ifdef DEBUG
  1398.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1399. '$endif ''DEBUG
  1400.         ERROR STFERR
  1401.     END IF
  1402. END SUB
  1403.  
  1404.  
  1405. '*************************************************************************
  1406. SUB AddBlankToBillboardList (lTicks&) STATIC
  1407. '$ifdef DEBUG
  1408.     if lTicks& <= 0 then
  1409.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1410.     end if
  1411. '$endif ''DEBUG
  1412.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1413. '$ifdef DEBUG
  1414.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1415. '$endif ''DEBUG
  1416.         ERROR STFERR
  1417.     END IF
  1418. END SUB
  1419.  
  1420.  
  1421. '*************************************************************************
  1422. SUB ClearBillboardList STATIC
  1423.     IF FClearBillboardList = 0 THEN
  1424. '$ifdef DEBUG
  1425.         StfApiErr saeFail, "ClearBillboardList", ""
  1426. '$endif ''DEBUG
  1427.         ERROR STFERR
  1428.     END IF
  1429. END SUB
  1430.  
  1431.  
  1432. '*************************************************************************
  1433. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1434. '$ifdef DEBUG
  1435.     if FValidFATPath(szFile$) = 0 then
  1436.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1437.     end if
  1438. '$endif ''DEBUG
  1439.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1440. '$ifdef DEBUG
  1441.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1442. '$endif ''DEBUG
  1443.         ERROR STFERR
  1444.     END IF
  1445. END SUB
  1446.  
  1447.  
  1448. '*************************************************************************
  1449. SUB CloseLogFile STATIC
  1450.     IF FCloseLogFile() = 0 THEN
  1451. '$ifdef DEBUG
  1452.         StfApiErr saeFail, "CloseLogFile", ""
  1453. '$endif ''DEBUG
  1454.         ERROR STFERR
  1455.     END IF
  1456. END SUB
  1457.  
  1458.  
  1459. '*************************************************************************
  1460. SUB WriteToLogFile (szStr$) STATIC
  1461.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1462. '$ifdef DEBUG
  1463.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1464. '$endif ''DEBUG
  1465.         ERROR STFERR
  1466.     END IF
  1467. END SUB
  1468.  
  1469.  
  1470. ''' -1 in either parameter will mean 'center in frame client area'
  1471. '*************************************************************************
  1472. SUB SetCopyGaugePosition (x%, y%) STATIC
  1473.     ProSetPos x%, y%
  1474. END SUB
  1475.  
  1476.  
  1477. '*************************************************************************
  1478. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1479.     szBuf$ = STRING$(512, 32)
  1480.  
  1481.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1482.     IF wRet% = 0 THEN
  1483.         FindFileUsingFileOpen = szBuf$
  1484.     ELSEIF wRet% = 1 THEN
  1485.         FindFileUsingFileOpen = ""
  1486.     ELSE
  1487. '$ifdef DEBUG
  1488.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1489. '$endif ''DEBUG
  1490.         ERROR STFERR
  1491.     END IF
  1492.  
  1493.     szBuf$ = ""
  1494. END FUNCTION
  1495.  
  1496.  
  1497. '*************************************************************************
  1498. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1499.     IsDirWritable = FIsDirWritable(szDir$)
  1500. END FUNCTION
  1501.  
  1502.  
  1503. '*************************************************************************
  1504. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1505. '$ifdef DEBUG
  1506.     if FValidFATDir(szFile$) = 0 then
  1507.         BadArgErr 1, "IsFileWritable", szFile$
  1508.     end if
  1509. '$endif ''DEBUG
  1510.     IsFileWritable = FIsFileWritable(szFile$)
  1511. END FUNCTION
  1512.  
  1513.  
  1514. '*************************************************************************
  1515. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1516.     IF iField% < 1 THEN
  1517. '$ifdef DEBUG
  1518.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1519. '$endif ''DEBUG
  1520.         ERROR STFERR
  1521.     END IF
  1522.     szStart$ = szLine$
  1523.     IF iField% <> 1 THEN
  1524.         FOR i% = 2 TO iField% STEP 1
  1525.             iNew% = INSTR(szStart$, ",")
  1526.             IF iNew% = 0 THEN
  1527.                 GetNthFieldFromIniString = ""
  1528.                 GOTO _GNFFIS_END
  1529.             END IF
  1530.             szStart$ = MID$(szStart$, (iNew% + 1))
  1531.         NEXT
  1532.     END IF
  1533.  
  1534.     iNew% = INSTR(szStart$, ",")
  1535.     IF iNew% <> 0 THEN
  1536.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1537.     END IF
  1538.  
  1539.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1540.  
  1541. _GNFFIS_END:
  1542.  
  1543. END FUNCTION
  1544.  
  1545.  
  1546. '*************************************************************************
  1547. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1548.     GetWindowsMajorVersion = GetVersion() MOD 256
  1549. END FUNCTION
  1550.  
  1551.  
  1552. '*************************************************************************
  1553. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1554.     GetWindowsMinorVersion = GetVersion() / 256
  1555. END FUNCTION
  1556.  
  1557.  
  1558. '*************************************************************************
  1559. FUNCTION GetWindowsMode STATIC AS INTEGER
  1560.     GetWindowsMode = 0
  1561.     longTmp& = GetWinFlags()
  1562.     IF longTmp& AND WF_STANDARD THEN
  1563.         GetWindowsMode = 1
  1564.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1565.         GetWindowsMode = 2
  1566.     END IF
  1567. END FUNCTION
  1568.  
  1569.  
  1570. '*************************************************************************
  1571. FUNCTION GetWindowsDir STATIC AS STRING
  1572.     szBuf$ = string$(256, 32)
  1573.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1574.  
  1575.     IF cbBuf% = 0 THEN
  1576.         GetWindowsDir = ""
  1577. '$ifdef DEBUG
  1578.         StfApiErr saeFail, "GetWindowsDir", ""
  1579. '$endif ''DEBUG
  1580.         ERROR STFERR
  1581.     ELSE
  1582.         IF cbBuf% > 255 THEN
  1583.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1584.             ERROR STFERR
  1585.         END IF
  1586.         szBuf$ = RTRIM$(szBuf$)
  1587.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1588.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1589.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1590.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1591.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1592.         END IF
  1593.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1594.             szBuf$ = szBuf$ + "\"
  1595.         END IF
  1596.         GetWindowsDir = szBuf$
  1597.     END IF
  1598.  
  1599.     szBuf$ = ""
  1600. END FUNCTION
  1601.  
  1602.  
  1603. '*************************************************************************
  1604. FUNCTION GetWindowsSysDir STATIC AS STRING
  1605.     szBuf$ = string$(256, 32)
  1606.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1607.  
  1608.     IF cbBuf% = 0 THEN
  1609. '$ifdef DEBUG
  1610.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1611. '$endif ''DEBUG
  1612.         ERROR STFERR
  1613.     ELSE
  1614.         IF cbBuf% > 255 THEN
  1615.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1616.             ERROR STFERR
  1617.         END IF
  1618.         szBuf$ = RTRIM$(szBuf$)
  1619.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1620.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1621.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1622.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1623.         END IF
  1624.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1625.             szBuf$ = szBuf$ + "\"
  1626.         END IF
  1627.         GetWindowsSysDir = szBuf$
  1628.     END IF
  1629.  
  1630.     szBuf$ = ""
  1631. END FUNCTION
  1632.  
  1633.  
  1634. '*************************************************************************
  1635. FUNCTION IsWindowsShared STATIC AS INTEGER
  1636.     szWin$ = UCASE$(GetWindowsDir())
  1637.     szSys$ = UCASE$(GetWindowsSysDir())
  1638.  
  1639.     IF len(szWin$) = 0 THEN
  1640. '$ifdef DEBUG
  1641.         StfApiErr saeFail, "IsWindowsShared", ""
  1642. '$endif ''DEBUG
  1643.         ERROR STFERR
  1644.     END IF
  1645.  
  1646.     IF len(szSys$) <= len(szWin$) THEN
  1647.         IsWindowsShared = 1
  1648.     ELSE
  1649.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1650.         IF szWin$ = szSys$ THEN
  1651.             IsWindowsShared = 0
  1652.         ELSE
  1653.             IsWindowsShared = 1
  1654.         END IF
  1655.     END IF
  1656. END FUNCTION
  1657.  
  1658.  
  1659. '*************************************************************************
  1660. FUNCTION GetScreenWidth STATIC AS INTEGER
  1661.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1662. END FUNCTION
  1663.  
  1664.  
  1665. '*************************************************************************
  1666. FUNCTION GetScreenHeight STATIC AS INTEGER
  1667.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1668. END FUNCTION
  1669.  
  1670.  
  1671. '*************************************************************************
  1672. SUB SetRestartDir (szDir$) STATIC
  1673. '$ifdef DEBUG
  1674.     if FValidFATDir(szDir$) = 0 then
  1675.         BadArgErr 1, "SetRestartDir", szDir$
  1676.     end if
  1677. '$endif ''DEBUG
  1678.     IF FSetRestartDir(szDir$) = 0 THEN
  1679. '$ifdef DEBUG
  1680.         StfApiErr saeFail, "SetRestartDir", szDir$
  1681. '$endif ''DEBUG
  1682.         ERROR STFERR
  1683.     END IF
  1684. END SUB
  1685.  
  1686.  
  1687. '*************************************************************************
  1688. FUNCTION RestartListEmpty STATIC AS INTEGER
  1689.     IF FRestartListEmpty() = 0 THEN
  1690.         RestartListEmpty = 0
  1691.     ELSE
  1692.         RestartListEmpty = 1
  1693.     END IF
  1694. END FUNCTION
  1695.  
  1696.  
  1697. '*************************************************************************
  1698. FUNCTION ExitExecRestart STATIC AS INTEGER
  1699.     ExitExecRestart = FExitExecRestart
  1700. END FUNCTION
  1701.  
  1702.  
  1703. '*************************************************************************
  1704. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1705.  
  1706. '$ifdef DEBUG
  1707.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1708.         n% = 1
  1709.     elseif FValidFATPath(szDst$) = 0 then
  1710.         n% = 2
  1711.     elseif FValidFATDir(szDir$) = 0 then
  1712.         n% = 3
  1713.     else
  1714.         n% = 0
  1715.     end if
  1716.     if n% > 0 then
  1717.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1718.     end if
  1719. '$endif ''DEBUG
  1720.  
  1721.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1722. '$ifdef DEBUG
  1723.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1724. '$endif ''DEBUG
  1725.         ERROR STFERR
  1726.     END IF
  1727. END SUB
  1728.  
  1729.  
  1730.  
  1731. '**************************************************************************
  1732. '***************************  Error Handlers  *****************************
  1733. '**************************************************************************
  1734.  
  1735.  
  1736. '$ifdef DEBUG
  1737. '**************************************************************************
  1738. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1739.     select case nMsg%
  1740.         case saeFail
  1741.             lpText$ = "Failed"
  1742.         case saeInit
  1743.             lpText$ = "Already Initialized"
  1744.         case saeNYI
  1745.             lpText$ = "NYI"
  1746.         case else
  1747.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1748.     end select
  1749.  
  1750.     lpText$ = lpText$ + ": "+ szApi$
  1751.     if szArgs$ <> "" then
  1752.         lpText$ = lpText + " (" + szArgs$ + ")"
  1753.     end if
  1754.     lpCaption$ = "MS-Setup Toolkit API Error"
  1755.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1756.     print lpText$
  1757.     lpText$ = ""
  1758.     lpCaption$ = ""
  1759. END SUB
  1760.  
  1761. '**************************************************************************
  1762. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1763.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1764.     ERROR STFERR
  1765. END SUB
  1766.  
  1767.  
  1768. '** REVIEW: Move this function into common lib (we'll need it there too)
  1769. '**************************************************************************
  1770. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1771.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1772.         FValidInfSect = 0
  1773.     else
  1774.         FValidInfSect = 1
  1775.     end if
  1776. END FUNCTION
  1777.  
  1778.  
  1779. '** REVIEW: Move this function into common lib (we'll need it there too)
  1780. '**************************************************************************
  1781. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1782.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1783.         FValidIniFile = 0
  1784.     else
  1785.         FValidIniFile = 1
  1786.     end if
  1787. END FUNCTION
  1788.  
  1789. '**************************************************************************
  1790. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1791.  
  1792.     if szDrive$ = "" then
  1793.         FValidDrive = 0
  1794.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1795.         FValidDrive = 1
  1796.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1797.         FValidDrive = 0
  1798.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1799.         FValidDrive = 0
  1800.     elseif LEN(szDrive$) = 1 then
  1801.         FValidDrive = 1
  1802.     elseif INSTR(2,szDrive$,":\") = 2 then
  1803.         FValidDrive = 1
  1804.     elseif INSTR(1,szDrive$,":") = 2 then
  1805.         FValidDrive = 1
  1806.     else
  1807.         FValidDrive = 0
  1808.     end if
  1809. END FUNCTION
  1810.  
  1811. '$endif ''DEBUG
  1812.  
  1813.  
  1814. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1815.  
  1816. End Trap
  1817.  
  1818. hSetup = InitSetup(COMMAND$)
  1819.  
  1820. ON ERROR GOTO QUIT
  1821.  
  1822.