;;-
;;- $Id: Jaz-Install 1.3 1997/03/19 15:10:31 alex Exp $
;;-
;;- Squirrel Jaz/Zip Tools install script
;;-
;;- Copyright © 1995,1996 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/SquirrelZipTools"
				""
			)
		)
	)
	(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 Jaz/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)
					)
				)
			)
		)
	)
)

;;-
;;- ForgetDevs
;;-		Zap devXX variables
;;-
;;- Inputs:
;;-		None
;;- Outputs:
;;-		None
;;-
(procedure ForgetDevs
	(set dev0 0)
	(set dev1 0)
	(set dev2 0)
	(set dev3 0)
	(set dev4 0)
	(set dev5 0)
	(set dev6 0)
	(set dev7 0)
	(set dev8 0)
	(set dev9 0)
	(set dev10 0)
	(set dev11 0)
	(set dev12 0)
	(set dev13 0)
	(set dev14 0)
	(set dev15 0)
	(set dev16 0)
	(set dev17 0)
	(set dev18 0)
	(set dev19 0)
	(set dev20 0)
	(set dev21 0)
)

;;-
;;- DetermineSCSIDriver
;;-		Find out what the SCSI driver is called
;;-
;;- Inputs:
;;-		None
;;- Outputs:
;;-		gDevice
;;-
(procedure DetermineSCSIDriver
	(run "BindDrivers" (safe))
	(ForgetDevs)
	(set gDevice "")
	(user 2)
	(while (= gDevice "")
		(	(run "Delete \"ENV:install-scsi-#?\" QUIET FORCE" (safe))
			(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)
)

;;-
;;- SetID
;;-		Set which unit the drive is connected to
;;-
;;- Inputs:
;;-		None
;;- Outputs:
;;-		gUnit
;;-
(procedure SetID
	(ForgetDevs)
	(run "Delete \"ENV:install-scsi-device-#?\" QUIET FORCE" (safe))
	(run ("DoSCSIInquiry \"%s\"" gDevice) (safe))
	(if (exists ("ENV:install-scsi-device-0")) (set dev0 (getenv "install-scsi-device-0")))
	(if (exists ("ENV:install-scsi-device-1")) (set dev1 (getenv "install-scsi-device-1")))
	(if (exists ("ENV:install-scsi-device-2")) (set dev2 (getenv "install-scsi-device-2")))
	(if (exists ("ENV:install-scsi-device-3")) (set dev3 (getenv "install-scsi-device-3")))
	(if (exists ("ENV:install-scsi-device-4")) (set dev4 (getenv "install-scsi-device-4")))
	(if (exists ("ENV:install-scsi-device-5")) (set dev5 (getenv "install-scsi-device-5")))
	(if (exists ("ENV:install-scsi-device-6")) (set dev6 (getenv "install-scsi-device-6")))
	(if (exists ("ENV:install-scsi-device-7")) (set dev7 (getenv "install-scsi-device-7")))
	(run "Delete \"ENV:install-scsi-device-#?\" QUIET FORCE" (safe))
	(if dev1
		(user 2)
	)
	(if dev0
		(	(set ask-unit
				(select
					(askchoice
						(prompt "\nChoose your SCSI device:\n")
						(help
							"\n"
							"Please choose the Jaz or Zip drive which you wish to install"
							" a driver for."
						)
						(if dev0 (choices dev0))
						(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))
					)
					dev0
					dev1
					dev2
					dev3
					dev4
					dev5
					dev6
					dev7
				)
			)
			(set gUnit (substr ask-unit 0 1))
			(if (= (substr ask-unit 2 10) "iomega jaz")
				(set gDosDriver (cat "JAZ" gUnit))
				(set gDosDriver
					(if (= gUnit "5")
						("ZIP0")
						("ZIP1")
					)
				)
			)
			(set gDosUnit (substr gDosDriver 3 1))
			(set gUnitType (substr gDosDriver 0 1))
			(user default-user)
		)
		(	(user 2)
			(message
				(	"\nI can't find any Jaz or Zip drives connected to the interface \"%s\"." gDevice
				)
			)
			(set gUnit "")
		)
	)
	(user default-user)
)

;;-
;;- 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 Tools & mount files across
;;-
;;- Inputs:
;;-		gUnit
;;- Outputs:
;;-		None
;;-
(procedure CopyToolsAndMounts
	(set fileSelector 0)
	(while
		(set curFileName
			(select fileSelector
				"SquirrelJazTools"
				(cat (substr gDosDriver 0 3) "0")
				(cat "P" gUnitType "0C")
				(cat "M" gUnitType "0C")
				""
			)
		)
		(	(set destDrawer
				(select fileSelector
					"SYS:WBStartup"
					(if (>= (/ (getversion "LIBS:version.library") 65535) 38)
						("SYS:Devs/DOSDrivers")
						("SYS:WBStartup")
					)
					"SYS:Storage/DOSDrivers"
					"SYS:Storage/DOSDrivers"
				)
			)
			(set newFileName
				(select fileSelector
					"SquirrelJazTools"
					gDosDriver
					(cat "P" gUnitType gDosUnit "C")
					(cat "M" gUnitType gDosUnit "C")
					""
				)
			)	
			(set mpdDrawer destDrawer)
			(MakeDeepDrawer)
			(copyfiles
				(source (cat "Install/" curFileName))
				(dest destDrawer)
				(newname newFileName)
				(infos)
			)
			(tooltype
				(dest (tackon destDrawer newFileName))
			)
			(if (= fileSelector 0)
				(tooltype
					(dest (tackon destDrawer newFileName))
					(settooltype "DEVICE"
						(if (patmatch gDevice gDevList)
							(gDevList)
							(if (= gDevList "")
								(gDevice)
								(cat gDevList "|" gDevice)
							)
						)
					)
				)
				(tooltype
					(dest (tackon destDrawer newFileName))
					(settooltype "DEVICE" gDevice)
					(settooltype "UNIT" gUnit)
				)
			)
			(set fileSelector (+ fileSelector 1))
		)
	)
)

;;-
;;- ReformatCartridge
;;-		Reformat the cartridge as FFS
;;-
;;- Inputs:
;;-		gUnit
;;- Outputs:
;;-		None
;;-
(procedure ReformatCartridge
	(user 2)
	(if
		(askbool
			(prompt
				"\n"
				"The Jaz/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\" %s PASSWORD=\"APlaceForYourStuff\" UNPROTECT" gDevice gUnit)
			)
			(if
				(askbool
					(prompt
						"\n"
						"The Jaz/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 "
						"JazTools/ZipTools without buying another JazTools/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 JazTools/ZipTools, you should do this before "
						"reformatting the disk for the Amiga."
					)
				)
				(run (cat "Format DRIVE " gDosDriver ": NAME " gDosDriver " QUICK FFS"))
			)
		)
	)
	(user default-user)
)

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

(set gDevice "")
(set gUnit "")

(while
	(or
		(= gDevice "")
		(= gUnit "")
	)
	(	(DetermineSCSIDriver)
		(SetID)
	)
)

(set gDevList "")
(run "FindToolType >ENV:install-current-devices FILE=SYS:WBStartup/SquirrelJazTools TOOLTYPE=DEVICE")
(set gDevList (getenv "install-current-devices"))
(if (= gDevList "")
	(	(run "FindToolType >ENV:install-current-devices FILE=SYS:WBStartup/SquirrelZipTools TOOLTYPE=DEVICE")
		(set gDevList (getenv "install-current-devices"))
	)
)
(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)
)
(run
	(cat
		"Install/Mount "
		(tackon 
			(if (>= (/ (getversion "LIBS:version.library") 65535) 38)
				("SYS:Devs/DOSDrivers")
				("SYS:WBStartup")
			)
			gDosDriver
		)
	)
)
(ReformatCartridge)

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