;;-
;;- $Id: Zip-Install 1.10 1995/09/25 15:26:17 alex Rel $
;;-
;;- Squirrel Zip Tools install script
;;-
;;- Copyright © 1995 HiSoft. All Rights Reserved.
;;-

;;-
;;- MakeDeepDrawer
;;-		Create a drawer (potentially) deep in directory structure
;;-
;;- Inputs:
;;-		mpdDrawer - the drawer to create
;;- Outputs:
;;-		None
;;-
(procedure MakeDeepDrawer
	(set mpdRoot
		(pathonly
			(pathonly
				(pathonly
					(pathonly
						(pathonly mpdDrawer)
					)
				)
			)
		)
	)
	(set mpd0 (pathonly mpdDrawer))
	(if (<> mpd0 mpdRoot)
		(	(set mpd1	(pathonly mpd0))
			(if (<> mpd1 mpdRoot)
				(	(set mpd2	(pathonly mpd1))
					(if (<> mpd2 mpdRoot)
						(	(set mpd3	(pathonly mpd2))
							(if (<> mpd3 mpdRoot)
								(	(set mpd4	(pathonly mpd3))
									(if (<> mpd4 mpdRoot)
										(makedir mpd4 (infos))
									)
									(makedir mpd3 (infos))
								)
							)
							(makedir mpd2 (infos))
						)
					)
					(makedir mpd1 (infos))
				)
			)
			(makedir mpd0 (infos))
		)
	)
	(makedir mpdDrawer (infos))
)

;;-
;;- StashOldFiles:
;;-		Move old files which should not be overwritten
;;-
;;- Inputs:
;;-		None
;;- Outputs:
;;-		None
;;-
(procedure StashOldFiles
	(procedure SOFBaseName
		(set sofName
			(select sofSelector
				"WBStartup/ZIP0"
				"WBStartup/ZIP1"
				"Devs/DOSDrivers/ZIP0"
				"Devs/DOSDrivers/ZIP1"
				"Devs/DOSDrivers/PZ0C"
				"Devs/DOSDrivers/PZ1C"
				"Devs/DOSDrivers/MZD0"
				"Devs/DOSDrivers/MZD1"
				"Devs/DOSDrivers/MZ0C"
				"Devs/DOSDrivers/MZ0D"
				"Storage/DOSDrivers/ZIP0"
				"Storage/DOSDrivers/ZIP1"
				"Storage/DOSDrivers/PZ0C"
				"Storage/DOSDrivers/PZ1C"
				"Storage/DOSDrivers/MZD0"
				"Storage/DOSDrivers/MZD1"
				"Storage/DOSDrivers/MZ0C"
				"Storage/DOSDrivers/MZ0D"
				""
			)
		)
	)
	(set sofOldFiles "")
	(set sofSelector 0)
	(SOFBaseName)
	(while (strlen sofName)
		(	(set sofPath (cat "SYS:" sofName))
			(if (exists sofPath)
				(set sofOldFiles (cat sofOldFiles sofPath "\n"))
			)
			(set sofSelector (+ sofSelector 1))
			(SOFBaseName)
		)
	)
	(if (strlen sofOldFiles)
		(if
			(askbool
				(prompt	"\n\nShould the following files be moved to the \"SYS:OLD\" drawer?\n\n"
					sofOldFiles)
				(help "Installation of the Squirrel Zip Tools software updates several system "
					"files. If you have made changes to these that might be lost during the "
					"installation process they will be moved to the \"SYS:OLD\" drawer "
					"where you can find them after the installation has completed."
				)
				(choices "Proceed with Move" "Skip This Part")
				(default 1)
			)
			(	(set sofSelector 0)
				(SOFBaseName)
				(while (strlen sofName)
					(	(set sofPath (cat "SYS:" sofName))
						(if (exists sofPath)
							(	(set sofDest (cat "SYS:OLD/" sofName))
								(set mpdDrawer (cat "SYS:OLD/" (pathonly sofName)))
								(MakeDeepDrawer)
								(delete sofDest)
								(delete (cat sofDest ".info"))
								(rename sofPath sofDest)
								(rename (cat sofPath ".info") (cat sofDest".info"))
							)
						)
						(set sofSelector (+ sofSelector 1))
						(SOFBaseName)
					)
				)
			)
		)
	)
)

;;-
;;- DetermineSCSIDriver
;;-		Find out what the SCSI driver is called
;;-
;;- Inputs:
;;-		None
;;- Outputs:
;;-		gDevice
;;-
(procedure DetermineSCSIDriver
	(run "BindDrivers" (safe))
	(set gDevice "")
	(user 2)
	(while (= gDevice "")
		(	(run "GuessSCSIDevices" (safe))
			(set dev0 "Enter device manually")
			(if (exists ("ENV:install-scsi-1")) (set dev1 (getenv "install-scsi-1")))
			(if (exists ("ENV:install-scsi-2")) (set dev2 (getenv "install-scsi-2")))
			(if (exists ("ENV:install-scsi-3")) (set dev3 (getenv "install-scsi-3")))
			(if (exists ("ENV:install-scsi-4")) (set dev4 (getenv "install-scsi-4")))
			(if (exists ("ENV:install-scsi-5")) (set dev5 (getenv "install-scsi-5")))
			(if (exists ("ENV:install-scsi-6")) (set dev6 (getenv "install-scsi-6")))
			(if (exists ("ENV:install-scsi-7")) (set dev7 (getenv "install-scsi-7")))
			(if (exists ("ENV:install-scsi-8")) (set dev8 (getenv "install-scsi-8")))
			(if (exists ("ENV:install-scsi-9")) (set dev9 (getenv "install-scsi-9")))
			(if (exists ("ENV:install-scsi-10")) (set dev10 (getenv "install-scsi-10")))
			(if (exists ("ENV:install-scsi-11")) (set dev11 (getenv "install-scsi-11")))
			(if (exists ("ENV:install-scsi-12")) (set dev12 (getenv "install-scsi-12")))
			(if (exists ("ENV:install-scsi-13")) (set dev13 (getenv "install-scsi-13")))
			(if (exists ("ENV:install-scsi-14")) (set dev14 (getenv "install-scsi-14")))
			(if (exists ("ENV:install-scsi-15")) (set dev15 (getenv "install-scsi-15")))
			(if (exists ("ENV:install-scsi-16")) (set dev16 (getenv "install-scsi-16")))
			(if (exists ("ENV:install-scsi-17")) (set dev17 (getenv "install-scsi-17")))
			(if (exists ("ENV:install-scsi-18")) (set dev18 (getenv "install-scsi-18")))
			(if (exists ("ENV:install-scsi-19")) (set dev19 (getenv "install-scsi-19")))
			(if (exists ("ENV:install-scsi-20")) (set dev20 (getenv "install-scsi-20")))
			(if (exists ("ENV:install-scsi-21")) (set dev21 (getenv "install-scsi-21")))
			(run "Delete \"ENV:install-scsi-#?\" QUIET FORCE" (safe))
			(if dev1
				(	(set ask-device
						(askchoice
							(if dev18
								(prompt "Choose your SCSI device:")
								(prompt "\nChoose your SCSI device:\n")
							)
							(help
								"\n"
								"Please choose your SCSI device driver from the available options; "
								"if it is not shown, choose \"Enter device manually\", to allow "
								"you to type it in."
							)
							(if dev1 (choices dev0 dev1))
							(if dev2 (choices dev0 dev1 dev2))
							(if dev3 (choices dev0 dev1 dev2 dev3))
							(if dev4 (choices dev0 dev1 dev2 dev3 dev4))
							(if dev5 (choices dev0 dev1 dev2 dev3 dev4 dev5))
							(if dev6 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6))
							(if dev7 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7))
							(if dev8 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8))
							(if dev9 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9))
							(if dev10 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10))
							(if dev11 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11))
							(if dev12 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12))
							(if dev13 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13))
							(if dev14 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14))
							(if dev15 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14 dev15))
							(if dev16 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14 dev15 dev16))
							(if dev17 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14 dev15 dev16 dev17))
							(if dev18 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14 dev15 dev16 dev17 dev18))
							(if dev19 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14 dev15 dev16 dev17 dev18 dev19))
							(if dev20 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14 dev15 dev16 dev17 dev18 dev19 dev20))
							(if dev21 (choices dev0 dev1 dev2 dev3 dev4 dev5 dev6 dev7 dev8 dev9 dev10 dev11 dev12 dev13 dev14 dev15 dev16 dev17 dev18 dev19 dev20 dev21))
							(default 0)
						)
					)
					(user default-user)
				)
			)

			(if ask-device
				(	(if (= 1 ask-device) (set gDevice dev1))
					(if (= 2 ask-device) (set gDevice dev2))
					(if (= 3 ask-device) (set gDevice dev3))
					(if (= 4 ask-device) (set gDevice dev4))
					(if (= 5 ask-device) (set gDevice dev5))
					(if (= 6 ask-device) (set gDevice dev6))
					(if (= 7 ask-device) (set gDevice dev7))
					(if (= 8 ask-device) (set gDevice dev8))
					(if (= 9 ask-device) (set gDevice dev9))
					(if (= 10 ask-device) (set gDevice dev10))
					(if (= 11 ask-device) (set gDevice dev11))
					(if (= 12 ask-device) (set gDevice dev12))
					(if (= 13 ask-device) (set gDevice dev13))
					(if (= 14 ask-device) (set gDevice dev14))
					(if (= 15 ask-device) (set gDevice dev15))
					(if (= 16 ask-device) (set gDevice dev16))
					(if (= 17 ask-device) (set gDevice dev17))
					(if (= 18 ask-device) (set gDevice dev18))
					(if (= 19 ask-device) (set gDevice dev19))
					(if (= 20 ask-device) (set gDevice dev20))
					(if (= 21 ask-device) (set gDevice dev21))
				)
				(	(user 2)
					(set gDevice
						(askstring
							(prompt "\nEnter the name of your SCSI device:\n")
							(help
								"\n"
								"You should type in the name of your SCSI device driver, if you are "
								"unsure of this refer to your SCSI controller manual. Some common device "
								"names are squirrelscsi.device (Squirrel SCSI Interfaces), scsi.device "
								"(Commodore supplied SCSI), gvpscsi.device (GVP SCSI Interfaces) etc."
							)
							(default "")
						)
					)
				)
			)
			(if (= gDevice "")
				(message
					"\nYou MUST enter your SCSI device driver name!"
				)
			)
		)
	)
	(user default-user)
)

;;-
;;- SetZipID
;;-		Set which unit the Zip drive is connected to
;;-
;;- Inputs:
;;-		None
;;- Outputs:
;;-		gUnit
;;-
(procedure SetZipID
	(set gUnit
		(+ 5
			(askchoice
					(prompt "\nWhich SCSI ID is your Zip drive on?")
				(help
					"\n"
					"Select the SCSI ID your Zip drive is connected to, by default this is 5"
				)
				(choices
					"ID 5"
					"ID 6"
				)
				(default 0)
			)
		)
	)
)

;;-
;;- UpdateWorkbench
;;-		Update Workbench files to the minimum spec we need
;;-
;;- Inputs:
;;-		None
;;- Outputs:
;;-		None
;;-
(procedure UpdateWorkbench
	(copylib
		(source "Install/Mount")
		(dest "C:")
		(optional "askuser" "force")
		(prompt "Update Workbench File \"C:Mount\"?")
		(help @copylib-help)
		(confirm)
	)

	(copylib
		(source "Install/FastFileSystem")
		(dest "L:")
		(optional "askuser" "force")
		(prompt "Update Workbench File \"L:FastFileSystem\"?")
		(help @copylib-help)
		(confirm)
	)

	(copylib
		(source "Install/commodities.library")
		(dest "LIBS:")
		(optional "askuser" "force")
		(prompt "Update Workbench File \"LIBS:commodities.library\"?")
		(help @copylib-help)
		(confirm)
	)
)

;;-
;;- CopyToolsAndMounts
;;-		Copy Zip Tools & mount files across
;;-
;;- Inputs:
;;-		gUnit
;;- Outputs:
;;-		None
;;-
(procedure CopyToolsAndMounts
	(set fileSelector 0)
	(while
		(set curFileName
			(select fileSelector
				"SquirrelZipTools"
				"ZIP0"
				"ZIP1"
				"PZ0C"
				"PZ1C"
				"MZ0C"
				"MZ1C"
				""
			)
		)
		(	(set destDrawer
				(select fileSelector
					"SYS:WBStartup"
					(if (= gUnit 5)
						(if (>= (/ (getversion "LIBS:version.library") 65535) 38)
							("SYS:Devs/DOSDrivers")
							("SYS:WBStartup")
						)
						("SYS:Storage/DOSDrivers")
					)
					(if (= gUnit 6)
						(if (>= (/ (getversion "LIBS:version.library") 65535) 38)
							("SYS:Devs/DOSDrivers")
							("SYS:WBStartup")
						)
						("SYS:Storage/DOSDrivers")
					)
					"SYS:Storage/DOSDrivers"
					"SYS:Storage/DOSDrivers"
					"SYS:Storage/DOSDrivers"
					"SYS:Storage/DOSDrivers"
				)
			)
			(set mpdDrawer destDrawer)
			(MakeDeepDrawer)
			(copyfiles
				(source (cat "Install/" curFileName))
				(dest destDrawer)
				(infos)
			)
			(tooltype
				(dest (tackon destDrawer curFileName))
				(settooltype "DEVICE" gDevice)
			)
			(set fileSelector (+ fileSelector 1))
		)
	)
)

;;-
;;- UpdateSquirrelDriver
;;-		Update Squirrel driver if needed
;;-
;;- Inputs:
;;-		gDevice
;;- Outputs:
;;-		None
;;-
(procedure UpdateSquirrelDriver
	(user 2)
	(if (or (= (database "cpu") "68000") (= (database "cpu") "68010"))
		(copyfiles
			(source "Install/squirrelscsi.device.68000")
			(newname "squirrelscsi.device")
			(dest "RAM:")
		)
		(copyfiles
			(source "Install/squirrelscsi.device.68020")
			(newname "squirrelscsi.device")
			(dest "RAM:")
		)
	)
	(if
		(askbool
			(prompt
				"\n"
				"The Squirrel SCSI device driver may need to be upgraded to work correctly "
				"with the Zip drive."
				"\n\n"
				"Do you boot your machine using a Squirrel SCSI boot floppy ?"
			)
			(help
				"\n"
				"The driver update must be performed on the \"real\" boot disk, in order "
				"to determine which disk this is, you must indicate whether your machine "
				"has an internal autobooting hard drive, or is instead booted via a "
				"floppy."
			)
			(default 0)
		)
		(	(askdisk
				(prompt "Please insert your boot floppy in any drive")
				(help
					"\n"
					"The driver update must be performed on the \"real\" boot disk, named "
					"\"HDBoot\"; please insert this disk in any drive so that it may "
					"be updated"
				)
				(dest "HDBoot")
			)
			(set gDevPath "HDBoot:Devs/")
		)
		(set gDevPath "DEVS:")
	)
	(user default-user)
	(copylib
		(source "RAM:squirrelscsi.device")
		(dest gDevPath)
		(confirm)
		(prompt ("Update \"%ssquirrelscsi.device\"" gDevPath))
		(help "")
	)
	(askdisk
		(prompt "Please replace the Squirrel Zip Tools Install disk")
		(help @askdisk-help)
		(dest "ZipInstall")
	)
	(user 2)
	(message
		"\n"
		"The Squirrel SCSI driver has been updated; after this installation procedure "
		"completes, you should reboot your computer to use the new driver."
	)
	(user default-user)
)

;;-
;;- ReformatZipCartridge
;;-		Reformat the Zip cartridge as FFS
;;-
;;- Inputs:
;;-		gUnit
;;- Outputs:
;;-		None
;;-
(procedure ReformatZipCartridge
	(user 2)
	(if
		(askbool
			(prompt
				"\n"
				"The Zip cartridge supplied with your drive is password write protected. "
				"Please insert the cartridge into the drive now so that the protection can "
				"be removed."
			)
			(help "")
			(choices "Proceed with Unprotect" "Skip This Part")
			(default 1)
		)
		(	(run
				("Install/ZipProtect \"%s\" %ld PASSWORD=\"APlaceForYourStuff\" UNPROTECT" gDevice gUnit)
			)
			(if (= "squirrelscsi.device" gDevice)
				(	(message
						"\n"
						"Please eject the Zip cartridge..."
					)
					(message
						"\n"
						"Please re-insert the Zip cartridge..."
					)
				)
			)
			(if
				(askbool
					(prompt
						"\n"
						"The Zip cartridge supplied is dual-formatted for PC & Mac; would you like "
						"to reformat it for use on the Amiga (if you do not perform this step, the "
						"disk will not be usable on the Amiga)?"
						"\n\n"
						"NOTE: After this procedure you will not be able to install the PC or Mac "
						"ZipTools without buying another ZipTools disk."
					)
					(help
						"\n"
						"The Iomega supplied cartridge uses a dual format which allows their "
						"software to be installed either for PC or Mac (neither of which can be "
						"directly used on the Amiga). After installing for one of these platforms "
						"the disk becomes single format (for whichever platform it is first "
						"installed on to)."
						"\n\n"
						"If you wish to install PC or Mac ZipTools, you should do this before "
						"reformatting the disk for the Amiga."
					)
				)
				(if (= gUnit 5)
					(run "Format DRIVE ZIP0: NAME Zip100 QUICK FFS")
					(run "Format DRIVE ZIP1: NAME Zip100 QUICK FFS")
				)
			)
		)
	)
	(user default-user)
)

(set default-user @user-level)
(set install-path (expandpath (pathonly @icon)))
(set @execute-dir install-path)

(DetermineSCSIDriver)
(SetZipID)
(StashOldFiles)
(UpdateWorkbench)
(CopyToolsAndMounts)

(copyfiles
	(source "Install/ZipProtect")
	(dest "C:")
	(prompt "\nCopy ZipProtect to \"C:\"?")
	(help
		"\n"
		"ZipProtect allows Shell access to Zip control functions. To see the options "
		"for ZipProtect type \"ZipProtect ?\" from a Shell window."
	)
	(confirm)
)
(if (= "squirrelscsi.device" gDevice)
	(UpdateSquirrelDriver)
)
(if (>= (/ (getversion "LIBS:version.library") 65535) 38)
	(if (= gUnit 5)
		(run "Install/Mount SYS:Devs/DOSDrivers/ZIP0")
		(run "Install/Mount SYS:Devs/DOSDrivers/ZIP1")
	)
	(if (= gUnit 5)
		(run "Install/Mount SYS:WBStartup/ZIP0")
		(run "Install/Mount SYS:WBStartup/ZIP1")
	)
)
(ReformatZipCartridge)

(run
	("Run Install/SquirrelZipTools DEVICE=\"%s\" CX_POPUP=YES" gDevice)
)
