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