home *** CD-ROM | disk | FTP | other *** search
/ CICA 1993 August / CICA.cdr / win_nt / odbc_sdk / odbc.exe / ODBCSDK.MST / ODBCSDK.MST
Encoding:
Text File  |  1992-09-14  |  16.2 KB  |  544 lines

  1. '**************************************************************************
  2. '**                   Microsoft ODBC SDK 1.0 Setup                       **
  3. '**************************************************************************
  4.  
  5. '$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '-- Includes ---------------------------------------------------------------
  8. '$INCLUDE 'setupapi.inc'
  9. '$INCLUDE 'msdetect.inc'
  10.  
  11. '$INCLUDE 'odbcsdk.inc'
  12.  
  13. '-- Constants --------------------------------------------------------------
  14. CONST szGroupName$= "ODBC SDK 1.0"
  15. CONST szInfName$  = "ODBCSDK.INF"
  16. CONST szDefDir$   = "C:\ODBCSDK"
  17. CONST fTRUE%      = 1
  18. CONST fFALSE%     = 0
  19. CONST szON$       = "ON"
  20. CONST szOFF$      = "OFF"
  21.  
  22. ''Dialog ID's (must match those in SDKDLG.H)
  23. CONST WELCOME     = 1100
  24. CONST ASKINSTALL  = 1200
  25. CONST ASKQUIT     = 1300
  26. CONST NOINSTALL   = 1400
  27. CONST GETPATH     = 1500
  28. CONST BADDIR      = 1600
  29. CONST CREATEPATH  = 1700
  30. CONST DETERSIZE   = 1800
  31. CONST EXITSUCCESS = 1900
  32. CONST EXITQUIT    = 2000
  33. CONST HELPINSTALL = 2100
  34. CONST HELPPATH    = 2200
  35. CONST NOSPACE     = 2300
  36. CONST EXITFAILURE = 2400
  37.  
  38. ''Bitmap ID (must match those in SDKDLG.RC)
  39. CONST LOGO = 1
  40.  
  41. '-- Globals ----------------------------------------------------------------
  42. GLOBAL szDir$                ''Destination directory
  43. GLOBAL    szDrive$            ''Destination drive
  44. GLOBAL    cbDrive&            ''Space available on destination drive
  45. GLOBAL szSrcDir$           ''Source directory
  46. GLOBAL fInstallODBCTools%    ''Install ODBC tools flag
  47. GLOBAL    fInstallODBCHelp%    ''Install ODBC help flag
  48. GLOBAL    cbODBCTools&         ''KBytes required for ODBC SDK tools
  49. GLOBAL    cbODBCHelp&            ''KBytes required for ODBC SDK help
  50. GLOBAL    CUIDLL$                ''Dialog/Images DLL
  51. GLOBAL    HELPPROC$            ''Help dialog procedure
  52.  
  53.  
  54. '-- Prototypes -------------------------------------------------------------
  55. DECLARE SUB BadPath
  56. DECLARE SUB CalcPathSpace
  57. DECLARE FUNCTION CreateInstallPath(szDir$) AS STRING
  58. DECLARE SUB DetermineSizes
  59. DECLARE SUB GetInstallPath
  60. DECLARE SUB Install
  61. DECLARE SUB InsufficientSpace
  62. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  63.  
  64.  
  65. '---------------------------------------------------------------------------
  66. ' INIT:  Load globals and read .INF file
  67. '---------------------------------------------------------------------------
  68. INIT:
  69.     CUIDLL$   = "mscuistf.dll"          ''Custom user interface dll
  70.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  71.  
  72.     SetBitmap CUIDLL$, LOGO
  73.     SetTitle szTitle$
  74.  
  75.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  76.     IF szInf$ = "" THEN
  77.         szInf$ = GetSymbolValue("STF_CWDDIR") + szInfName$
  78.     END IF
  79.     ReadInfFile szInf$
  80.  
  81. '$IFDEF DEBUG
  82.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  83.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  84.     IF IsDriveValid(WinDrive$) = 0 THEN
  85.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  86.         GOTO QUIT
  87.     END IF
  88. '$ENDIF ''DEBUG
  89.  
  90.  
  91. '---------------------------------------------------------------------------
  92. ' WELCOME:  Display Welcome dialog
  93. '---------------------------------------------------------------------------
  94. WELCOME:
  95.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", 0, "")
  96.     IF sz$ = "CONTINUE" THEN
  97.         UIPop 1
  98.     ELSE
  99.         GOSUB ASKQUIT
  100.         GOTO WELCOME
  101.     END IF
  102.  
  103.  
  104. '---------------------------------------------------------------------------
  105. ' DETERSIZES:  Determine space required for install
  106. '---------------------------------------------------------------------------
  107. DETERSIZES:
  108.     sz$ = UIStartDlg(CUIDLL$, DETERSIZE, "FModelessDlgProc", 0, "")
  109.     szDir$ = szDefDir$
  110.     DetermineSizes
  111.     CalcPathSpace
  112.     UIPop 1
  113.  
  114.  
  115. '---------------------------------------------------------------------------
  116. ' ASKINSTALL:  Get users installation selections
  117. '---------------------------------------------------------------------------
  118. ASKINSTALL:
  119.     CHECKSTATES$ = "CheckItemsState"
  120.     STATUSTEXT$  = "StatusItemsText"
  121.     DRIVETEXT$   = "DriveStatusText"
  122.     FOR i% = 1 TO 2 STEP 1
  123.         AddListItem CHECKSTATES$, "ON"
  124.     NEXT i%
  125.     FOR i% = 1 TO 2 STEP 1
  126.         AddListItem STATUSTEXT$, "0"+szKB
  127.     NEXT i%
  128.     FOR i% = 1 to 7 STEP 1
  129.         AddListItem DRIVETEXT$, ""
  130.     NEXT i%
  131.  
  132.     fInstallODBCTools% = fTRUE%
  133.     fInstallODBCHelp%  = fTRUE%
  134.  
  135. ASKI1:
  136.     ReplaceListItem STATUSTEXT$, 1, Str$(cbODBCTools&)+szKB
  137.     ReplaceListItem STATUSTEXT$, 2, Str$(cbODBCHelp&)+szKB
  138.  
  139.     cbTotal& = 0
  140.     IF fInstallODBCTools% = fTRUE% THEN
  141.         cbTotal& = cbTotal& + cbODBCTools&
  142.     END IF
  143.     IF fInstallODBCHelp% = fTRUE% THEN
  144.         cbTotal& = cbTotal& + cbODBCHelp&
  145.     END IF
  146.  
  147.     ReplaceListItem DRIVETEXT$, 1, szDrive$
  148.     ReplaceListItem DRIVETEXT$, 2, Str$(cbTotal&)+szKB
  149.     ReplaceListItem DRIVETEXT$, 3, Str$(cbDrive&)+szKB
  150.     ReplaceListItem DRIVETEXT$, 7, szDir$
  151.  
  152.     sz$ = UIStartDlg(CUIDLL$, ASKINSTALL, "FCustInstDlgProc", HELPINSTALL, HELPPROC$)
  153.  
  154.     IF sz$ = "CONTINUE" THEN
  155.         IF fInstallODBCTools% = fFALSE% AND fInstallODBCHelp% = fFALSE% THEN
  156.             GOSUB NOSELECTIONS
  157.             GOTO  ASKI1
  158.         END IF
  159.         IF cbTotal& > cbDrive& THEN
  160.             InsufficientSpace
  161.             GOTO ASKI1
  162.         END IF
  163.         UIPop 1
  164.     ELSEIF sz$ = "PATH" THEN
  165.         GetInstallPath
  166.         GOTO ASKI1
  167.     ELSEIF sz$ = "REACTIVATE" THEN
  168.         GOTO ASKI1
  169.     ELSEIF sz$ = "EXIT" THEN
  170.         GOSUB ASKQUIT
  171.         GOTO ASKI1
  172.     ELSEIF sz$ = "CHK1" THEN
  173.         IF fInstallODBCTools% = fTRUE% THEN
  174.             fInstallODBCTools% = fFALSE%
  175.         ELSE
  176.             fInstallODBCTools% = fTRUE%
  177.         END IF
  178.         GOTO ASKI1
  179.     ELSEIF sz$ = "CHK2" THEN
  180.         IF fInstallODBCHelp% = fTRUE% THEN
  181.             fInstallODBCHelp% = fFALSE%
  182.         ELSE
  183.             fInstallODBCHelp% = fTRUE%
  184.         END IF
  185.         GOTO ASKI1
  186.     ELSE
  187.         GOTO ASKI1
  188.     END IF
  189.     UIPop 1
  190.  
  191.     Install
  192.  
  193.  
  194.  
  195. '---------------------------------------------------------------------------
  196. ' QUIT:  Exit setup
  197. '---------------------------------------------------------------------------
  198. QUIT:
  199.     ON ERROR GOTO ERRQUIT
  200.  
  201.     IF ERR = 0 THEN
  202.         dlg% = EXITSUCCESS
  203.     ELSEIF ERR = STFQUIT THEN
  204.         dlg% = EXITQUIT
  205.     ELSE
  206.         dlg% = EXITFAILURE
  207.     END IF
  208. QUITL1:
  209.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  210.     IF sz$ = "REACTIVATE" THEN
  211.         GOTO QUITL1
  212.     END IF
  213.     UIPop 1
  214.  
  215.     END
  216.  
  217. ERRQUIT:
  218.     i% = DoMsgBox(szBadDisks$, szTitle$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  219.     END
  220.  
  221.  
  222. '---------------------------------------------------------------------------
  223. ' ASKQUIT:  Ensure the user really wants to quit
  224. '---------------------------------------------------------------------------
  225. ASKQUIT:
  226.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  227.  
  228.     IF sz$ = "EXIT" THEN
  229.         UIPopAll
  230.         ERROR STFQUIT
  231.     ELSEIF sz$ = "REACTIVATE" THEN
  232.         GOTO ASKQUIT
  233.     ELSE
  234.         UIPop 1
  235.     END IF
  236.     RETURN
  237.  
  238.  
  239. '---------------------------------------------------------------------------
  240. ' NOSELECTIONS:  Warn the user that nothing was selected
  241. '---------------------------------------------------------------------------
  242. NOSELECTIONS:
  243.     sz$ = UIStartDlg(CUIDLL$, NOINSTALL, "FInfoDlgProc", 0, "")
  244.     UIPop 1
  245.  
  246.     IF sz$ = "EXIT" THEN
  247.         GOSUB ASKQUIT
  248.     END IF
  249.     RETURN
  250.  
  251. '*************************************************************************
  252. '                    S  U  B  R  O  U  T  I  N  E  S
  253. '*************************************************************************
  254.  
  255. '*************************************************************************
  256. '** Routine: BadPath
  257. '** Purpose:
  258. '**     Display BADDIR dialog
  259. '** Arguments:
  260. '**     none.
  261. '** Returns:
  262. '**     none.
  263. '*************************************************************************
  264. SUB BadPath STATIC
  265. BADPATH1:
  266.     sz$ = UIStartDlg(CUIDLL$, BADDIR, "FInfo0DlgProc", 0, "")
  267.     IF sz$ = "REACTIVATE" THEN
  268.         GOTO BADPATH1
  269.     END IF
  270.     UIPop 1
  271. END SUB
  272.  
  273. '*************************************************************************
  274. '** Routine: CalcPathSpace
  275. '** Purpose:
  276. '**     Determine free space on path drive.
  277. '** Arguments:
  278. '**     szDir
  279. '** Returns:
  280. '**     cbDrive
  281. '**     szDrive
  282. '*************************************************************************
  283. SUB CalcPathSpace STATIC
  284.     szDrive$ = Mid$(szDir$, 1, 1)
  285.    cbDrive& = GetFreeSpaceForDrive(Mid$(szDrive$,1, 1))
  286.    cbDrive& = (cbDrive& + 1023) / 1024
  287. END SUB
  288.  
  289. '*************************************************************************
  290. '** Routine: CreateInstallPath
  291. '** Purpose:
  292. '**     Create destination directories
  293. '** Arguments:
  294. '**     none.
  295. '** Returns:
  296. '**     none.
  297. '*************************************************************************
  298. FUNCTION CreateInstallPath (szDir$) STATIC AS STRING
  299.     sz$ = "CONTINUE"
  300.     IF DoesDirExist(szDir$) <> 1 THEN
  301. CREATEPATH1:
  302.         sz$ = UIStartDlg(CUIDLL$, CREATEPATH, "FInfo0DlgProc", 0, "")
  303.         IF sz$ = "REACTIVATE" THEN
  304.             GOTO CREATEPATH1
  305.         ELSEIF sz$ = "CONTINUE" THEN
  306.             CreateDir szDir$, cmoVital
  307.         END IF
  308.         UIPop 1
  309.     END IF
  310.     CreateInstallPath = sz$
  311. END FUNCTION
  312.  
  313. '*************************************************************************
  314. '** Routine: DetermineSizes
  315. '** Purpose:
  316. '**     Determine space required for each option.
  317. '** Arguments:
  318. '**     none.
  319. '** Returns:
  320. '**     cbODBCTools
  321. '**     cbODBCHelp
  322. '*************************************************************************
  323. SUB DetermineSizes STATIC
  324.     szSrcDir$ = GetSymbolValue("STF_SRCDIR")
  325.  
  326.      ClearCopyList
  327.     AddSectionFilesToCopyList "Root", szSrcDir$, szDir$
  328.     AddSectionFilesToCopyList "Gator", szSrcDir$, szDir$
  329.     AddSectionFilesToCopyList "GatorObjects", szSrcDir$, szDir$
  330.     AddSectionFilesToCopyList "Include", szSrcDir$, szDir$
  331.     AddSectionFilesToCopyList "Lib", szSrcDir$, szDir$
  332.     AddSectionFilesToCopyList "SampleDriver", szSrcDir$, szDir$
  333.     AddSectionFilesToCopyList "SampleSetup", szSrcDir$, szDir$
  334.     AddSectionFilesToCopyList "VBDemo", szSrcDir$, szDir$
  335.     AddSectionFilesToCopyList "ODBC", szSrcDir$, szDir$
  336.  
  337.     ListSym$ = "ToolNeeds"
  338.     cbODBCTools& = GetCopyListCost ("", ListSym$, "")
  339.     cbODBCTools& = 0
  340.     FOR i% = 1 TO 26 STEP 1
  341.         cbODBCTools&  = cbODBCTools& + VAL(GetListItem(ListSym$, i%))
  342.     NEXT i%
  343.     cbODBCTools& = (cbODBCTools& + 1023) / 1024
  344.  
  345.     ClearCopyList
  346.     AddSectionFilesToCopyList "ODBCHelp", szSrcDir$, szDir$
  347.  
  348.     ListSym$ = "HelpNeeds"
  349.     cbODBCHelp& = GetCopyListCost ("", ListSym$, "")
  350.     cbODBCHelp& = 0
  351.     FOR i% = 1 TO 26 STEP 1
  352.         cbODBCHelp&  = cbODBCHelp& + VAL(GetListItem(ListSym$, i%))
  353.     NEXT i%
  354.     cbODBCHelp& = (cbODBCHelp& + 1023) / 1024
  355.  
  356.     ClearCopyList
  357.     ListSym$ = ""
  358. END SUB
  359.  
  360. '*************************************************************************
  361. '** Routine: GetInstallPath
  362. '** Purpose:
  363. '**     Query user for installation path.
  364. '** Arguments:
  365. '**     none.
  366. '** Returns:
  367. '**     szDir$
  368. '*************************************************************************
  369. SUB GetInstallPath STATIC
  370. GETPATH:
  371.     SetSymbolValue "EditTextIn", szDir$
  372.     SetSymbolValue "EditFocus", "END"
  373. GETPATHL1:
  374.     fError% = fFALSE%
  375.     sz$ = UIStartDlg(CUIDLL$, GETPATH, "FEditDlgProc", HELPPATH, HELPPROC$)
  376.  
  377.     IF sz$ = "CONTINUE" THEN
  378.         szTDir$ = GetSymbolValue("EditTextOut")
  379.         szTDir$ = LTRIM$(szTDir$)
  380.         szTDir$ = RTRIM$(szTDir$)
  381.  
  382.         IF InStr(1, szTDir$, ":") = 0 THEN
  383.             szTDir$ = Mid$(GetSymbolValue("STF_CWDDIR"), 1, 1) + ":" + szTDir$
  384.         END IF
  385.  
  386.         IF MID$(szTDir$, LEN(szTDir$), 1) = "\" THEN
  387.             fError% = fTRUE%
  388.         END IF
  389.  
  390.         IF fError% <> fTRUE% AND IsDirWritable(szTDir$) = 0 THEN
  391.             fError% = fTRUE%
  392.         END IF
  393.  
  394.         IF fError% <> fTRUE% AND Exists(szTDir$) THEN
  395.             fError% = fTRUE%
  396.         END IF
  397.  
  398.         IF fError% <> fTRUE% THEN
  399.             i% = 0
  400. GETPATHL2:
  401.             iLastDir% = i%
  402.             i% = INSTR(iLastDir%+1, szTDir$, "\")
  403.             IF i% <> 0 THEN
  404.                 GOTO GETPATHL2
  405.             END IF
  406.             IF MID$(szTDir$, iLastDir%, 1) = "\" THEN
  407.                 iLastDir% = iLastDir% + 1
  408.             END IF
  409.  
  410.             szLastDir$ = UCASE$(MID$(szTDir$, iLastDir%))
  411.  
  412.             IF szLastDir$ = "PRN" OR szLastDir$ = "AUX" OR szLastDir$ = "CON" THEN
  413.                 fError% = fTRUE%
  414.             END IF
  415.  
  416.             IF LEN(szLastDir$) = 4 THEN
  417.                 iNum = VAL(MID$(szLastDir$, 4, 1))
  418.                 IF iNum >= 1 AND iNum <= 9 THEN
  419.                     IF MID$(szLastDir$, 1, 3) = "COM" OR MID$(szLastDir$, 1, 3) = "LPT" THEN
  420.                         fError% = fTRUE%
  421.                     END IF
  422.                 END IF
  423.             END IF
  424.         END IF
  425.  
  426.         IF fError% = fTRUE% THEN
  427.             BadPath
  428.             GOTO GETPATHL1
  429.         END IF
  430.  
  431.         sz$ = CreateInstallPath(szTDir$)
  432.         IF sz$ <> "CONTINUE" THEN
  433.             GOTO GETPATHL1
  434.         END IF
  435.  
  436.         sz$ = UIStartDlg(CUIDLL$, DETERSIZE, "FModelessDlgProc", 0, "")
  437.         szDir$ = szTDir$
  438.         DetermineSizes
  439.         CalcPathSpace
  440.         UIPop 1
  441.  
  442.     END IF
  443.     UIPop 1
  444. END SUB
  445.  
  446. '*************************************************************************
  447. '** Routine: Install
  448. '** Purpose:
  449. '**     Builds the copy list and performs all installation operations.
  450. '** Arguments:
  451. '**     none.
  452. '** Returns:
  453. '**     none.
  454. '*************************************************************************
  455. SUB Install STATIC
  456.     CreateDir szDir$, cmoVital
  457.     IF fInstallODBCTools% THEN
  458.         AddSectionFilesToCopyList "Root", szSrcDir$, szDir$
  459.         SubDir$ = MakePath (szDir$, "Gator")
  460.         CreateDir SubDir$, cmoVital
  461.         AddSectionFilesToCopyList "Gator", szSrcDir$, SubDir$
  462.         SubDir$ = MakePath (SubDir$, "OBJ")
  463.         CreateDir SubDir$, cmoVital
  464.         AddSectionFilesToCopyList "GatorObjects", szSrcDir$, SubDir$
  465.         SubDir$ = MakePath (szDir$, "Include")
  466.         CreateDir SubDir$, cmoVital
  467.         AddSectionFilesToCopyList "Include", szSrcDir$, SubDir$
  468.         SubDir$ = MakePath (szDir$, "Lib")
  469.         CreateDir SubDir$, cmoVital
  470.         AddSectionFilesToCopyList "Lib", szSrcDir$, SubDir$
  471.         SubDir$ = MakePath (szDir$, "Sample")
  472.         CreateDir SubDir$, cmoVital
  473.         SubDir$ = MakePath (SubDir$, "Driver")
  474.         CreateDir SubDir$, cmoVital
  475.         AddSectionFilesToCopyList "SampleDriver", szSrcDir$, SubDir$
  476.         SubDir$ = MakePath (szDir$, "Sample\Setup")
  477.         CreateDir SubDir$, cmoVital
  478.         AddSectionFilesToCopyList "SampleSetup", szSrcDir$, SubDir$
  479.         SubDir$ = MakePath (szDir$, "VBDemo")
  480.         CreateDir SubDir$, cmoVital
  481.         AddSectionFilesToCopyList "VBDemo", szSrcDir$, SubDir$
  482.         SubDir$ = MakePath (szDir$, "ODBC")
  483.         CreateDir SubDir$, cmoVital
  484.         AddSectionFilesToCopyList "ODBC", szSrcDir$, SubDir$
  485.     END IF
  486.     IF fInstallODBCHelp% THEN
  487.         AddSectionFilesToCopyList "ODBCHelp", szSrcDir$, szDir$
  488.     END IF
  489.     CopyFilesInCopyList
  490.  
  491.     CreateProgmanGroup szGroupName$, "", cmoNone
  492.     IF fInstallODBCTools% THEN
  493.         CreateProgmanItem szGroupName$, "Readme", "Notepad.exe " + MakePath (szDir$, "README.TXT"), "", cmoOverwrite
  494.         CreateProgmanItem szGroupName$, "ODBC Test", MakePath (szDir$, "Gator.exe"), "", cmoOverwrite
  495.         CreateProgmanItem szGroupName$, "ODBC Setup", MakePath (szDir$, "ODBC\Setup.exe"), "", cmoOverwrite
  496.         CreateProgmanItem szGroupName$, "VB Demo", MakePath (szDir$, "VBDemo\VBDemo.exe"), "", cmoOverwrite
  497.     END IF
  498.     IF fInstallODBCHelp% THEN
  499.         CreateProgmanItem szGroupName$, "ODBC API Reference", "WinHelp.exe " + MakePath(szDir$, "ODBCAPI.hlp"), "", cmoOverwrite
  500.     END IF
  501. END SUB
  502.  
  503. '*************************************************************************
  504. '** Routine: InsufficientSpace
  505. '** Purpose:
  506. '**     Display NOSPACE dialog
  507. '** Arguments:
  508. '**     none.
  509. '** Returns:
  510. '**     none.
  511. '*************************************************************************
  512. SUB InsufficientSpace STATIC
  513. BADPATH1:
  514.     sz$ = UIStartDlg(CUIDLL$, NOSPACE, "FInfo0DlgProc", 0, "")
  515.     IF sz$ = "REACTIVATE" THEN
  516.         GOTO BADPATH1
  517.     END IF
  518.     UIPop 1
  519. END SUB
  520.  
  521.  
  522. '*************************************************************************
  523. '** Routine: MakePath
  524. '** Purpose:
  525. '**     Appends a file name to the end of a directory path,
  526. '**     inserting a backslash character as needed.
  527. '** Arguments:
  528. '**     szDir$  - full directory path (with optional ending "\")
  529. '**     szFile$ - filename to append to directory
  530. '** Returns:
  531. '**     Resulting fully qualified path name.
  532. '*************************************************************************
  533. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  534.     IF szDir$ = "" THEN
  535.         MakePath = szFile$
  536.     ELSEIF szFile$ = "" THEN
  537.         MakePath = szDir$
  538.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  539.         MakePath = szDir$ + szFile$
  540.     ELSE
  541.         MakePath = szDir$ + "\" + szFile$
  542.     END IF
  543. END FUNCTION
  544.