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