home *** CD-ROM | disk | FTP | other *** search
/ Select a Pet / Select_a_Pet.iso / mac / SETUP.MST < prev    next >
Text File  |  1994-08-23  |  19KB  |  557 lines

  1. rem rem $$Begin$$
  2.  
  3. rem Copyright:    (c) 1994 ICFX Corporation. All Rights Reserved.
  4. rem
  5. rem Project:      Pet CD 1
  6. rem
  7. rem Component:    Installer
  8. rem
  9. rem Description:  Setup script
  10. rem
  11. rem ---------------------------------------------------------------------
  12. rem
  13. rem rem   $Author:   NSJ  $
  14. rem
  15. rem rem     $Date:   23 Aug 1994 10:40:58  $
  16. rem
  17. rem rem     $Log:   S:/minnie.vcs/image/setup.msv  $
  18. rem 
  19. rem    Rev 1.5   23 Aug 1994 10:40:58   NSJ
  20. rem
  21. rem    Rev 1.5   28 Jul 1994 17:39:40   NSJ
  22. rem No change.
  23. rem
  24. rem    Rev 1.4   28 Jul 1994 17:30:26   NSJ
  25. rem Fixed small bug
  26. rem
  27. rem    Rev 1.3   28 Jul 1994 16:50:48   NSJ
  28. rem Added new help and screen3\arrows dirs
  29. rem
  30. rem    Rev 1.2   15 Jul 1994 21:02:32   NSJ
  31. rem No change.
  32. rem
  33. rem    Rev 1.1   07 Jul 1994 18:12:46   NSJ
  34. rem No change.
  35. rem
  36. rem    Rev 1.0   07 Jul 1994 17:21:20   NSJ
  37. rem Initial revision.
  38. rem
  39. rem    Rev 1.4   01 Jul 1994 18:59:44   NSJ
  40. rem Initial revision
  41. rem
  42. rem rem  $Logfile:   S:/minnie.vcs/image/setup.msv  $
  43. rem
  44. rem rem  $Workfile:   setup.mst  $
  45. rem
  46. rem ---------------------------------------------------------------------
  47.  
  48. rem rem $$End$$
  49.  
  50. rem Required to interface with MSSETUP DLL's
  51. rem -------------------------------------------------
  52. '$INCLUDE 'setupapi.inc'
  53. '$INCLUDE 'msdetect.inc'
  54.  
  55.  
  56. rem Dialog box id's
  57. rem ---------------
  58.     CONST DESTPATH      = 300          ''Gets destination path
  59.     CONST EXITQUIT      = 600          ''Exits on user request
  60.     CONST EXITSUCCESS   = 700          ''Exits when install is done
  61.     CONST EXITDEINSTOK  = 6601         ''Exits when uninstall is done
  62.     CONST ASKSETUPTYPE  = 6603         ''Gets setup options
  63.     CONST TOOBIG        = 6300         ''Not enough space on target disk error
  64.     CONST BADPATH       = 6400         ''Bad destination path error
  65.     CONST BADWINDOWS    = 6500         ''Wrong Windows release
  66.     CONST BADCOLORS     = 6550         ''Not in 256 colors
  67.     CONST EXITFAILURE   = 6600         ''Exits on error
  68.     CONST COPYINGFILES  = 6602         ''Displays message "Copying Files..."
  69.  
  70.  
  71. rem String id's
  72. rem -----------
  73.     CONST STR_UTILITY   = 1024         ''Utility
  74.     CONST STR_GROUP     = 1025         ''Program Manager group
  75.     CONST STR_TITLE     = 1026         ''Installer Title
  76.     CONST STR_MSG1      = 1027         ''Version error message part 1
  77.     CONST STR_MSG2      = 1028         ''Version error message part 2
  78.     CONST STR_WARNING   = 1029         ''Warning
  79.     CONST STR_README    = 1030         ''Read Me
  80.     CONST STR_PROGRAM   = 1031         ''Program Manager program (for group)
  81.  
  82.  
  83. rem Miscellaneous Constants
  84. rem -----------------------
  85.     CONST NOLOGO = 1                   ''Dummy NULL bitmap (must be 1)
  86.     CONST LOGO = 2                     ''Background bitmap
  87.     CONST NOSPACE = 1                  ''No space to complete install
  88.     CONST INSTALLOK = 2                ''Install completed OK
  89.     CONST INSTALLFAILED = 3            ''Install failed for some reason
  90.     CONST UNINSTALLOK = 4              ''Uninstall completed OK
  91.  
  92.  
  93. rem Global Variables
  94. rem ----------------
  95.     GLOBAL SOURCE$                     ''Source directory
  96.     GLOBAL DEST$                       ''Default destination directory
  97.     GLOBAL SETUPTYPE$                  ''Setup type (Local, Client, Server)
  98.     GLOBAL LEANINST$                   ''Setup type (Local, Client, Server)
  99.     GLOBAL PREFINST$                   ''Setup type (Local, Client, Server)
  100.     GLOBAL FULLINST$                   ''Setup type (Local, Client, Server)
  101.     GLOBAL QTWDIR$                     ''QTW directory
  102.     GLOBAL CUIDLL$                     ''User interface DLL
  103.     GLOBAL SETUPPATH$                  ''Setup destination path
  104.     GLOBAL HELPPROC$                   ''Help dialog procedure
  105.     GLOBAL EXTRACOSTS$                 ''List of extra costs to add per drive
  106.     GLOBAL APPNEEDS$                   ''Disk space costs per drive
  107.     GLOBAL SECTIONKEY$                 ''INF file section key
  108.     GLOBAL SUCCESS%                    ''Installation completion code
  109.  
  110.  
  111. rem Initialize global vriables
  112. rem --------------------------
  113.     LEANINST$       = "1"
  114.     PREFINST$       = "2"
  115.     FULLINST$       = "3"
  116.     SETUPPATH$      = "C:\PETCD1"
  117.     SOURCE$         = GetSymbolValue("STF_SRCDIR")
  118.  
  119. REM FOR TESTING ONLY
  120. REM SOURCE$ = "D:\"
  121.  
  122.     DEST$           = SETUPPATH$
  123.     SUCCESS%        = INSTALLFAILED
  124.     EXTRACOSTS$     = "ExtraCosts"
  125.     APPNEEDS$       = "AppNeeds"
  126.     SECTIONKEY$     = "SectionKey"
  127.  
  128.     FOR i% = 1 TO 26 STEP 1
  129.         AddListItem EXTRACOSTS$, "16384"
  130.     NEXT i%
  131.  
  132.  
  133. rem Get name of localized user interface dialogs
  134. rem --------------------------------------------
  135.     CUIDLL$ = "setup.DLL"
  136.  
  137.  
  138. rem Subroutines and Functions
  139. rem -------------------------
  140.     DECLARE FUNCTION Install AS INTEGER
  141.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  142.     DECLARE FUNCTION GetDLLVersion LIB "setup.dll" (szDLL$) AS INTEGER
  143.     DECLARE FUNCTION HideCriticalDirectory LIB "setup.dll" (szDir$) AS INTEGER
  144.     DECLARE FUNCTION Has256Colors LIB "setup.dll" (hinst%) AS INTEGER
  145.     DECLARE FUNCTION GetResourceString LIB "setup.dll" (szResource$, idString%) AS INTEGER
  146.     DECLARE FUNCTION StartCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  147.     DECLARE FUNCTION StopCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  148.     DECLARE FUNCTION MyDeleteGroup LIB "setup.dll" (hwnd%) AS INTEGER
  149.     DECLARE FUNCTION MyRemoveDir LIB "setup.dll" (szDir$) AS INTEGER
  150.     DECLARE FUNCTION BlastFilesToTarget LIB "setup.dll" (szSource$, szDest$, sMode%) AS INTEGER
  151.     DECLARE FUNCTION MyMessageBox LIB "setup.dll" (hinst%, hwnd%, sMode%, pszStatus as POINTER TO INTEGER) AS INTEGER
  152.  
  153.  
  154. rem Initialize custom setup logic
  155. rem -----------------------------
  156.     i% = GetResourceString (CUIDLL$, STR_TITLE)
  157.     SetTitle GetSymbolValue ("ResourceString")
  158.     i% = StartCustomSetup (HinstFrame(), HwndFrame ())
  159.     i% = SetBeepingMode(1)
  160.  
  161.  
  162. rem Make sure that we are running on Windows 3.1 or better
  163. rem ------------------------------------------------------
  164.     IF GetWindowsMajorVersion() < 3 THEN
  165.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  166.        UIPop 1
  167.        GOTO CLEANUP
  168.     END IF
  169.  
  170.     IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() < 10) THEN
  171.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  172.        UIPop 1
  173.        GOTO CLEANUP
  174.     END IF
  175.  
  176.  
  177. rem Make sure that we are running on a 386 or better
  178. rem ------------------------------------------------
  179.     IF GetWinFlags() AND 2 THEN
  180.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  181.        UIPop 1
  182.        GOTO CLEANUP
  183.     END IF
  184.  
  185.  
  186. rem Find and read the .INF file
  187. rem ---------------------------
  188.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  189.  
  190.     IF szInf$ = "" THEN
  191.        szTemp$ = GetSymbolValue("STF_SRCDIR")
  192.        szInf$ = szTemp$ + "PETCD1.INF"
  193.     END IF
  194.  
  195.     ReadInfFile szInf$
  196.  
  197.  
  198. rem Estimate the cost of the install
  199. rem --------------------------------
  200.     ListSym$ = APPNEEDS$
  201.     drive$ = MID$("C:\", 1, 1)
  202.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  203.  
  204.     AddSectionFilesToCopyList "PetCD1", SOURCE$, "C:\"
  205.  
  206.     AddSectionFilesToCopyList "QTIM", SOURCE$, "C:\"
  207.  
  208.     AddSectionFilesToCopyList "FromCDLean", SOURCE$, "C:\"
  209.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  210.     LeanCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  211.     SetSymbolValue "QuickCost", STR$(LeanCost& / 100000)
  212.  
  213.     AddSectionFilesToCopyList "FromCDPref", SOURCE$, "C:\"
  214.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  215.     PrefCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  216.     SetSymbolValue "PartialCost", STR$(PrefCost& / 100000)
  217.  
  218.     AddSectionFilesToCopyList "FromCDFull", SOURCE$, "C:\"
  219.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  220.     FullCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  221.     SetSymbolValue "FullCost", STR$(FullCost& / 100000)
  222.  
  223.     ClearCopyList
  224.  
  225. rem Get the setup type: Install or uninstall
  226. rem ----------------------------------------
  227. ITYPE:
  228.     SetSymbolValue "RadioDefault", SETUPTYPE$
  229.  
  230. ITYPEL1:
  231.     sz$ = UIStartDlg(CUIDLL$, ASKSETUPTYPE, "FRadioDlgProc", 0, "")
  232.  
  233.     SETUPTYPE$ = GetSymbolValue("ButtonChecked")
  234.  
  235.     IF sz$ = "CONTINUE" THEN
  236.        UIPop 1
  237.  
  238. rem Uninstall option selected
  239. rem -------------------------
  240.     ELSEIF sz$ = "BACK" THEN
  241.        UIPop 1
  242.        GOSUB KILLFILES
  243.        RemoveIniSection "WIN.INI", "PetCD1", cmoNone
  244.        i% = MyDeleteGroup (HwndFrame ())
  245.        SUCCESS% = UNINSTALLOK
  246.        GOTO UNINSTALLED
  247.  
  248.     ELSEIF sz$ = "REACTIVATE" THEN
  249.        GOTO ITYPEL1
  250.  
  251.     ELSE
  252.        GOSUB ASKQUIT
  253.        GOTO ITYPE
  254.  
  255.     END IF
  256.  
  257.  
  258. rem Get the destination path; if it's bad, display an error
  259. rem ----------------------------------------------------------------
  260. GETPATH:
  261.     SetSymbolValue "EditTextIn", DEST$
  262.     SetSymbolValue "EditFocus", "END"
  263.  
  264. GETPATHL1:
  265.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  266.  
  267.     DEST$ = GetSymbolValue("EditTextOut")
  268.  
  269.     IF sz$ = "CONTINUE" THEN
  270.        IF IsDirWritable(DEST$) = 0 THEN
  271.           GOSUB BADPATH
  272.           GOTO GETPATHL1
  273.        END IF
  274.  
  275.        UIPop 1
  276.  
  277.     ELSEIF sz$ = "REACTIVATE" THEN
  278.        GOTO GETPATHL1
  279.  
  280.     ELSE
  281.        GOSUB ASKQUIT
  282.        GOTO GETPATH
  283.  
  284.     END IF
  285.  
  286. rem Perform actual installation
  287. rem ---------------------------
  288. INSTALL:
  289.     SUCCESS% = Install
  290.  
  291.     IF SUCCESS% = NOSPACE THEN
  292.        GOSUB TOOBIG
  293.        GOTO GETPATH
  294.     END IF
  295.  
  296. rem De-installation completed
  297. rem -------------------------
  298. UNINSTALLED:
  299.  
  300. rem When done, issue dialog
  301. rem -----------------------
  302. QUIT:
  303.     IF SUCCESS% = INSTALLOK THEN
  304.  
  305.     rem Put pointers to key data in Private Profile file
  306.     rem ------------------------------------------------
  307.        RemoveIniKey MakePath(DEST$,"BIN\PetCD1.INI"), "DIRECTORIES", "HDRoot", cmoNone
  308.        CreateIniKeyValue MakePath(DEST$,"BIN\PetCD1.INI"), "DIRECTORIES", "HDRoot", DEST$, cmoNone
  309.        RemoveIniKey MakePath(DEST$,"BIN\PetCD1.INI"), "DIRECTORIES", "CDDrive", cmoNone
  310.        CDDRIVE$ = MID$(SOURCE$, 1, 2)
  311.        CreateIniKeyValue MakePath(DEST$,"BIN\PetCD1.INI"), "DIRECTORIES", "CDDrive", CDDRIVE$, cmoNone
  312.  
  313.        sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FInfo0DlgProc", 0, "")
  314.     ELSEIF SUCCESS% = UNINSTALLOK THEN
  315.        sz$ = UIStartDlg(CUIDLL$, EXITDEINSTOK, "FInfo0DlgProc", 0, "")
  316.     ELSE
  317.        sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  318.     END IF
  319.     UIPop 1
  320.  
  321. rem Clean up all processing
  322. rem -----------------------
  323. CLEANUP:
  324.  
  325.     i% = StopCustomSetup (HinstFrame(), HwndFrame ())
  326.  
  327.     END
  328.  
  329.  
  330. rem ASKQUIT: The user requested quit; does (s)he really want to?
  331. rem ------------------------------------------------------------
  332. ASKQUIT:
  333.     sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  334.     UIPop 1
  335.     IF sz$ = "CONTINUE" THEN
  336.        RETURN
  337.     END IF
  338.     GOTO CLEANUP
  339.  
  340.  
  341. rem BADPATH: The user entered an invalid destination directory
  342. rem ----------------------------------------------------------
  343. BADPATH:
  344.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  345.     IF sz$ = "REACTIVATE" THEN
  346.        GOTO BADPATH
  347.     END IF
  348.     UIPop 1
  349.  
  350.     RETURN
  351.  
  352.  
  353. rem TOOBIG: The source files won't fit on the requested destination disk
  354. rem --------------------------------------------------------------------
  355. TOOBIG:
  356.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  357.     IF sz$ = "REACTIVATE" THEN
  358.        GOTO TOOBIG
  359.     END IF
  360.     UIPop 1
  361.  
  362.     RETURN
  363.  
  364. rem KILLFILES: Remove PetCD files from the host system
  365. rem ------------------------------------------------------
  366. KILLFILES:
  367.  
  368.     LOCATION$ = GetIniKeyString("WIN.INI", "PetCD1", "PetCD1Dir")
  369.  
  370.     MOVDEST$ = LOCATION$ + "\" + "MOVIES"
  371.     SNGDEST$ = LOCATION$ + "\" + "SONGS"
  372.     BINDEST$ = LOCATION$ + "\" + "BIN"
  373.  
  374.     PICDEST$ = LOCATION$ + "\" + "PICTURES"
  375.  
  376.     PICDIR_COMMON$ = PICDEST$ + "\" + "COMMON"
  377.     PICDIR_COMMON_BUTTONS$ = PICDEST$ + "\" + "COMMON" + "\" + "BUTTONS"
  378.     PICDIR_HELPS$ = PICDEST$ + "\" + "HELPS"
  379.     PICDIR_HELPS_ARROWS$ = PICDEST$ + "\" + "HELPS" + "\" + "ARROWS"
  380.     PICDIR_QUERYSAV$ = PICDEST$ + "\" + "QUERYSAV"
  381.     PICDIR_QUERYSAV_BUTTONS$ = PICDEST$ + "\" + "QUERYSAV" + "\" + "BUTTONS"
  382.     PICDIR_SCNSAVER$ = PICDEST$ + "\" + "SCNSAVER"
  383.  
  384.     PICDIR_SCREEN0$ = PICDEST$ + "\" + "SCREEN0"
  385.     PICDIR_SCREEN0_BUTTONS$ = PICDEST$ + "\" + "SCREEN0" + "\" + "BUTTONS"
  386.  
  387.     PICDIR_SCREEN1$ = PICDEST$ + "\" + "SCREEN1"
  388.     PICDIR_SCREEN1_BUTTONS$ = PICDEST$ + "\" + "SCREEN1" + "\" + "BUTTONS"
  389.     PICDIR_SCREEN1_LIPS$ = PICDEST$ + "\" + "SCREEN1" + "\" + "LIPS"
  390.     PICDIR_SCREEN1_SLIDERS$ = PICDEST$ + "\" + "SCREEN1" + "\" + "SLIDERS"
  391.  
  392.     PICDIR_SCREEN2$ = PICDEST$ + "\" + "SCREEN2"
  393.     PICDIR_SCREEN2_BUTTONS$ = PICDEST$ + "\" + "SCREEN2" + "\" + "BUTTONS"
  394.     PICDIR_SCREEN2_ARROWS$ = PICDEST$ + "\" + "SCREEN2" + "\" + "ARROWS"
  395.     PICDIR_SCREEN2_SLIDERS$ = PICDEST$ + "\" + "SCREEN2" + "\" + "SLIDERS"
  396.  
  397.     PICDIR_SCREEN3$ = PICDEST$ + "\" + "SCREEN3"
  398.     PICDIR_SCREEN3_BUTTONS$ = PICDEST$ + "\" + "SCREEN3" + "\" + "BUTTONS"
  399.     PICDIR_SCREEN3_ARROWS$ = PICDEST$ + "\" + "SCREEN3" + "\" + "ARROWS"
  400.  
  401.     rem Note: Calling BlastFilesToTarget with 2 kills files
  402.     i% = BlastFilesToTarget (MOVDEST$, MOVDEST$, 2)
  403.     i% = BlastFilesToTarget (SNGDEST$, SNGDEST$, 2)
  404.     i% = BlastFilesToTarget (BINDEST$, BINDEST$, 2)
  405.  
  406.     i% = BlastFilesToTarget (PICDIR_COMMON_BUTTONS$, PICDIR_COMMON_BUTTONS$, 2)
  407.     i% = BlastFilesToTarget (PICDIR_HELPS$, PICDIR_HELPS$, 2)
  408.     i% = BlastFilesToTarget (PICDIR_HELPS_ARROWS$, PICDIR_HELPS_ARROWS$, 2)
  409.     i% = BlastFilesToTarget (PICDIR_QUERYSAV$, PICDIR_QUERYSAV$, 2)
  410.     i% = BlastFilesToTarget (PICDIR_QUERYSAV_BUTTONS$, PICDIR_QUERYSAV_BUTTONS$, 2)
  411.     i% = BlastFilesToTarget (PICDIR_SCNSAVER$, PICDIR_SCNSAVER$, 2)
  412.  
  413.     i% = BlastFilesToTarget (PICDIR_SCREEN0$, PICDIR_SCREEN0$, 2)
  414.     i% = BlastFilesToTarget (PICDIR_SCREEN0_BUTTONS$, PICDIR_SCREEN0_BUTTONS$, 2)
  415.  
  416.     i% = BlastFilesToTarget (PICDIR_SCREEN1$, PICDIR_SCREEN1$, 2)
  417.     i% = BlastFilesToTarget (PICDIR_SCREEN1_BUTTONS$, PICDIR_SCREEN1_BUTTONS$, 2)
  418.     i% = BlastFilesToTarget (PICDIR_SCREEN1_LIPS$, PICDIR_SCREEN1_LIPS$, 2)
  419.     i% = BlastFilesToTarget (PICDIR_SCREEN1_SLIDERS$, PICDIR_SCREEN1_SLIDERS$, 2)
  420.  
  421.     i% = BlastFilesToTarget (PICDIR_SCREEN2$, PICDIR_SCREEN2$, 2)
  422.     i% = BlastFilesToTarget (PICDIR_SCREEN2_BUTTONS$, PICDIR_SCREEN2_BUTTONS$, 2)
  423.     i% = BlastFilesToTarget (PICDIR_SCREEN2_ARROWS$, PICDIR_SCREEN2_ARROWS$, 2)
  424.     i% = BlastFilesToTarget (PICDIR_SCREEN2_SLIDERS$, PICDIR_SCREEN2_SLIDERS$, 2)
  425.  
  426.     i% = BlastFilesToTarget (PICDIR_SCREEN3$, PICDIR_SCREEN3$, 2)
  427.     i% = BlastFilesToTarget (PICDIR_SCREEN3_BUTTONS$, PICDIR_SCREEN3_BUTTONS$, 2)
  428.     i% = BlastFilesToTarget (PICDIR_SCREEN3_ARROWS$, PICDIR_SCREEN3_ARROWS$, 2)
  429.  
  430.     rem Note: RemoveDir doesn't seem to work, so we use our own function
  431.     rem RemoveDir LOCATION$ + "\", cmoForce
  432.     i% = MyRemoveDir (MOVDEST$)
  433.     i% = MyRemoveDir (SNGDEST$)
  434.     i% = MyRemoveDir (BINDEST$)
  435.  
  436.     i% = MyRemoveDir (PICDIR_COMMON_BUTTONS$)
  437.     i% = MyRemoveDir (PICDIR_COMMON$)
  438.     i% = MyRemoveDir (PICDIR_HELPS_ARROWS$)
  439.     i% = MyRemoveDir (PICDIR_HELPS$)
  440.     i% = MyRemoveDir (PICDIR_QUERYSAV_BUTTONS$)
  441.     i% = MyRemoveDir (PICDIR_QUERYSAV$)
  442.     i% = MyRemoveDir (PICDIR_SCNSAVER$)
  443.  
  444.     i% = MyRemoveDir (PICDIR_SCREEN0_BUTTONS$)
  445.     i% = MyRemoveDir (PICDIR_SCREEN0$)
  446.  
  447.     i% = MyRemoveDir (PICDIR_SCREEN1_BUTTONS$)
  448.     i% = MyRemoveDir (PICDIR_SCREEN1_LIPS$)
  449.     i% = MyRemoveDir (PICDIR_SCREEN1_SLIDERS$)
  450.     i% = MyRemoveDir (PICDIR_SCREEN1$)
  451.  
  452.     i% = MyRemoveDir (PICDIR_SCREEN2_BUTTONS$)
  453.     i% = MyRemoveDir (PICDIR_SCREEN2_ARROWS$)
  454.     i% = MyRemoveDir (PICDIR_SCREEN2_SLIDERS$)
  455.     i% = MyRemoveDir (PICDIR_SCREEN2$)
  456.  
  457.     i% = MyRemoveDir (PICDIR_SCREEN3_BUTTONS$)
  458.     i% = MyRemoveDir (PICDIR_SCREEN3_ARROWS$)
  459.     i% = MyRemoveDir (PICDIR_SCREEN3$)
  460.  
  461.     i% = MyRemoveDir (PICDEST$)
  462.     i% = MyRemoveDir (LOCATION$)
  463.  
  464.     RETURN
  465.  
  466. rem Install: Perform actual installation
  467. rem ------------------------------------
  468. FUNCTION Install STATIC AS INTEGER
  469.  
  470.     DIM Status as INTEGER
  471.  
  472.     rem Create the destination directory
  473.     rem --------------------------------
  474.         CreateDir DEST$, cmoNone
  475.  
  476.     rem Build the copy list
  477.     rem -------------------
  478.         AddSectionFilesToCopyList "PetCD1", SOURCE$, DEST$
  479.  
  480. rem     USE NEXT LINE IF OVERLAYING EXISTING QTW
  481. rem     AddSectionFilesToCopyList "QTIM", SOURCE$, QTWDIR$
  482.  
  483.         AddSectionFilesToCopyList "QTIM", SOURCE$, DEST$
  484.  
  485.         IF SETUPTYPE$ = LEANINST$ THEN
  486.            AddSectionFilesToCopyList "FromCDLean", SOURCE$, DEST$
  487.         ELSEIF SETUPTYPE$ = PREFINST$ THEN
  488.            AddSectionFilesToCopyList "FromCDLean", SOURCE$, DEST$
  489.            AddSectionFilesToCopyList "FromCDPref", SOURCE$, DEST$
  490.         ELSEIF SETUPTYPE$ = FULLINST$ THEN
  491.            AddSectionFilesToCopyList "FromCDLean", SOURCE$, DEST$
  492.            AddSectionFilesToCopyList "FromCDPref", SOURCE$, DEST$
  493.            AddSectionFilesToCopyList "FromCDFull", SOURCE$, DEST$
  494.         END IF
  495.  
  496.     rem Check that we have enough free space to perform the install
  497.     rem -----------------------------------------------------------
  498.         ListSym$ = APPNEEDS$
  499.         StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  500.  
  501.         drive$ = MID$(DEST$, 1, 1)
  502.         ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  503.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  504.         free& = GetFreeSpaceForDrive(drive$)
  505.  
  506.         IF cost& >= free& THEN
  507.            Install = NOSPACE
  508.            EXIT FUNCTION
  509.         END IF
  510.  
  511.     rem Copy all the files from the source to the destination
  512.     rem -----------------------------------------------------
  513.         CopyFilesInCopyList
  514.  
  515.     rem Create a Program Manager group and items
  516.     rem ----------------------------------------
  517.         i% = GetResourceString (CUIDLL$, STR_GROUP)
  518.         GROUP$ = GetSymbolValue ("ResourceString")
  519.         CreateProgmanGroup GROUP$, "", cmoNone
  520.  
  521.         i% = GetResourceString (CUIDLL$, STR_PROGRAM)
  522.         CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"BIN\PETCD1.EXE"), "", cmoOverwrite
  523.  
  524.         i% = GetResourceString (CUIDLL$, STR_README)
  525.         CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), "write " + MakePath(DEST$,"BIN\README.WRI"), "", cmoOverwrite
  526.  
  527.     rem Put a pointer to Pet CD files in WIN.INI (for uninstall)
  528.     rem -----------------------------------------------------------
  529.         CreateIniKeyValue "WIN.INI", "PetCD1", "PetCD1Dir", DEST$, cmoNone
  530.  
  531.     rem Indicate install completed OK
  532.     rem -----------------------------
  533.         Install = INSTALLOK
  534.  
  535. END FUNCTION
  536.  
  537. rem MakePath: Builds path from directory and file
  538. rem ---------------------------------------------
  539. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  540.  
  541.     IF szDir$ = "" THEN
  542.        MakePath = szFile$
  543.  
  544.     ELSEIF szFile$ = "" THEN
  545.        MakePath = szDir$
  546.  
  547.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  548.        MakePath = szDir$ + szFile$
  549.  
  550.     ELSE
  551.        MakePath = szDir$ + "\" + szFile$
  552.  
  553.     END IF
  554.  
  555. END FUNCTION
  556.  
  557.