; ************************************************
; *
; * $VER: Install-Backup (06 Oct 1996 20:42:22)
; *
; * Installations-Script fr Backup und Restore
; *
; * Copyright @ Jrgen Lachmann 1993-1996
; *
; ************************************************


; ****************************
; * Set up some global variables.
; ****************************
;
(set #ProductName		"Backup")	; product name

(set #BackupName		"Backup")
(set #RestoreName		"Restore")

(set #BackupVersionNum		"3.20")		; Backup version number
(set #RestoreVersionNum		"3.20")		; Restore version number

(set #OSVersion			(/ (getversion) 65536))
(set #WBVersion			(/ (getversion "c:LoadWB") 65536))

(set #TotalFiles		0)
(set #AccumFiles		0)
(set #PctDone			0)

; (set #Disk1Name			"Backup&Restore:")	; actual name of disk 1
(set #Disk1Name			"")			; actual name of disk 1

(set #DiskInstall		#Disk1Name)		; installation (main) disk
(set #DiskLHA			#Disk1Name)		; Lhx program disk
(set #DiskBackup		#Disk1Name)		; Backup program disk
(set #DiskRestore		#Disk1Name)		; Restore program disk
(set #DiskSamples		#Disk1Name)		; Samples default files
(set #DiskSource		#Disk1Name)		; Source default files


; die FileCount-Werte sind nur Anhaltswerte fr die Fortschritts-Anzeige
(set #BackupFileCount		2)			; Backup + Icon
(set #RestoreFileCount		2)			; Restore + Icon
(set #BackupHelpFileCount	24)			; Backup/Guide/#?
(set #RestoreHelpFileCount	18)			; Restore/Guide/#?
(set #SampleFileCount		22)			; BackupScripts/#?
(set #BackupSourceFileCount	77)
(set #RestoreSourceFileCount	62)

(set #LHAName			(TACKON #DiskLHA "lhx -I"))
(set #BackupBinLHA		(TACKON #DiskBackup (cat "Backup_Bin_V" #BackupVersionNum ".lha")))
(set #BackupSrcLHA		(TACKON #DiskBackup (cat "Backup_Src_V" #BackupVersionNum ".lha")))
(set #RestoreBinLHA		(TACKON #DiskRestore (cat "Restore_Bin_V" #RestoreVersionNum ".lha")))
(set #RestoreSrcLHA		(TACKON #DiskRestore (cat "Restore_Src_V" #RestoreVersionNum ".lha")))

(set #BackupExecFiles		"Backup Backup.info")
(set #RestoreExecFiles		"Restore Restore.info")
(set #BackupHelpFiles		"Guide/#?")
(set #RestoreHelpFiles		"Guide/#?")
(set #BackupSampleFiles		"#?TAP#? BackupScripts/#?" )
(set #BackupSourceFiles		"#?")
(set #RestoreSourceFiles	"#?")

(set #DefaultDestination	"SYS:Backup")

(set #BackupDir 		(TACKON #DefaultDestination " "))
(set #RestoreDir		(TACKON #DefaultDestination " "))
(set #BackupHelpDir		(TACKON #DefaultDestination "Guide"))
(set #RestoreHelpDir		(TACKON #DefaultDestination "Guide"))
(set #BackupScriptDir		(TACKON #DefaultDestination "BackupScripts"))
(set #BackupSourceDir		(TACKON #DefaultDestination "BackupSource"))
(set #RestoreSourceDir		(TACKON #DefaultDestination "RestoreSource"))
(set #BackupCatalogDir		(TACKON #DefaultDestination "BackupCatalogs"))

(set #BackupGuide		(cat #BackupName ".guide"))
(set #RestoreGuide		(cat #RestoreName ".guide"))

(set #BackupDiskSave		"T:Backup_DiskSave")
(set #TapeDriveDataBase		"S:Backup.TapeDriveData")
(set #BackupAppIconName		(TACKON #DefaultDestination "Backup_AppIcon"))


; bei einem Installer >= 42.x wird hiermit Proportionalschrift bei "askoptions" eingeschaltet
(if (>= @installer-version 42)
	(set #AskPrefix "\x1b[2p")
	(set #AskPrefix "")
)


(procedure P_setPkgOpts
;
; ****************************
; * Ask the user which parts of the package should be installed.
; ****************************
;
	(
	(set #setPkgHelp
		(cat ("Dieser Teil der Installationsprozedur ermglicht Ihnen die Auswahl der Teile des %s Pakets," #ProductName
		"die Sie jetzt installieren mchten.\n" #ProductName)
		"\n\n"
		("*** %s\n" #BackupName)
		("Diese Option ermglicht Ihnen die Installation des Datensicherungsprogrammes %s." #BackupName)
		"\n\n"
		("*** %s\n" #RestoreName)
		("Diese Option ermglicht Ihnen die Installation des Programmes zur ")
		("Datenrcksicherung %s." #RestoreName)
		"\n\n"
		("*** Hilfe-Dateien\n")
		("Diese Option ermglicht Ihnen die Installation der Hilfedateien fr %s und %s." #ProductName #RestoreName)
		"\n\n"
		("*** Beispiel-BackupScripts\n")
		("Diese Option ermglicht Ihnen die Installation von Beispielen fr Backup-SkriptDateien.")
		"\n\n"
		("*** Backup-Quellcode\n")
		("Diese Option ermglicht Ihnen die Installation des C-Quellcodes fr Backup.")
		"\n\n"
		("*** Restore-Quellcode\n")
		("Diese Option ermglicht Ihnen die Installation des C-Quellcodes fr Restore.")
		"\n"
		@askoptions-help
		)
	)
	(select (exists #BackupSrcLHA (noreq))
		(set #PkgOptBackupSrcChoice  "")
		(set #PkgOptBackupSrcChoice "Quellcode zu Backup")
	)
	(select (exists #RestoreSrcLHA (noreq))
		(set #PkgOptRestoreSrcChoice  "")
		(set #PkgOptRestoreSrcChoice "Quellcode zu Restore")
	)
	(set #PkgOpts
		(askoptions
			(prompt
				("Bitte whlen Sie die Teile des %s Pakets, die Sie jetzt installieren mchten" #ProductName)
			)
			(help #setPkgHelp)
			(choices
				; bit position 0 -- todo & 1
				;
				("%s%s V%s" #AskPrefix #BackupName #BackupVersionNum)

				; bit position 1 -- todo & 2
				;
				("%s V%s" #RestoreName #RestoreVersionNum)

				; bit position 2 -- todo & 4
				;
				"Hilfe-Dateien"

				; bit position 3 -- todo & 8
				"Beispiel-BackupScripts"

				; bit position 4 -- todo & 16
				("%s" #PkgOptBackupSrcChoice)

				; bit position 5 -- todo & 32
				("%s" #PkgOptRestoreSrcChoice)
			)
			(default
				; Backup + Restore + Helpfiles + Samples
				; keine Quellcodes
				(+ 1 2 4 8)
			)
		)
	)
	)
)


(procedure P_setDirPath
;
; ****************************
; * Ask the user for a directory name.
; ****************************
;
; these variables must be defined before calling this procedure:
;    #setDirPathWhy
;    #setDirPathHelp
;    #DirPath
;
; this procedure returns the selected directory in #DirPath
;
	(
	(set #DirPath
		(askdir
			(prompt	("Bitte whlen Sie das Verzeichnis, %s" #setDirPathWhy)
			)
			(help	#setDirPathHelp
				"\n"
				@askdir-help
			)
			(newpath)
			(default #DirPath)
		)
	)
	)
)


(procedure P_setFilePath
;
; ****************************
; * Ask the user for a File name.
; ****************************
;
; these variables must be defined before calling this procedure:
;    #setFilePathWhy
;    #setFilePathHelp
;    #FilePath
;
; this procedure returns the selected File in #FilePath
;

	(
	(if (not (askbool
		(prompt (cat "Hier sehen Sie die Datei, "
				#setFilePathWhy
			"\n\n"
			('"%s"' #FilePath)
			"\n\nMchten Sie Namen oder Pfad dieser Datei jetzt "
			"ndern oder unverndert bernehmen?"
			)
		)
		(help #setFilePathHelp)
		(default 0)
		(choices "bernehmen" "ndern")
		))
		(
		(set #FilePath
			(askfile
				(prompt	("Bitte whlen Sie, %s" #setFilePathWhy)
				)
				(help	#setFilePathHelp
					"\n"
					@askfile-help
				)
				'newpath'
				(default #FilePath)
			)
		)
		)
	)
	)
)


(procedure P_deleteIfExists
;
; ****************************
; * Delete the given file, if it exists.
; ****************************
;
; these variables must be defined before calling this procedure:
;
;    #deleteDir #deleteFileName #deleteWorkingText
;
	(if (exists #deleteDir)
		(
		(working #deleteWorkingText)
		(if (NOT @pretend)
			(
			(foreach #deleteDir
				#deleteFileName
				(
				(transcript "Deleted " @each-name)
				(protect @each-name "+wd")
				(delete @each-name)
				)
			)
			)
		)
		)
	)
)


(procedure P_renameIfExists
;
; ****************************
; * Rename the given file, if it exists.
; ****************************
;
; these variables must be defined before calling this procedure:
;
;    #origFileName
;    #renameFileName
;
	(
	(if (= (exists #origFileName) 1)
		(
		(protect #origFileName "+rwed")
		(rename #origFileName #deleteFileName)
		(transcript "Renamed file " #origFileName " to " #deleteFileName)
		)
	)
	)
)


(procedure P_BuildLHADir
;
; ****************************
; * Append "/" to #LHADir
; ****************************
;
;    #LHADir
;
	(
	(set #LHADir (TACKON #LHADir "X"))
	(set #LHADirLen (strlen #LHADir))
	(set #LHADir (substr #LHADir 0 (- #LHADirLen 1)))
	)
)


(procedure P_AppendAmigaGuidePath
;
; ****************************
; * der Pfad #AGHelpDir wird an ENV:AmigaGuide/Path angehngt
; ****************************
;
;    #AGHelpDir #AGProgram
;
	(
	(if (= (exists "ENV:" (noreq)) 2)
		(
		(if (<> (exists "ENV:AmigaGuide") 2)
			(makedir "ENV:AmigaGuide"
			(confirm)
			(prompt "Verzeichnis ENV:AmigaGuide fr die Voreinstellungen von AmigaGuide wird angelegt."
			)
			(help "In diesem Verzeichnis liegen verschiedene Voreinstellungen fr das "
				"Hilfe-System AmigaGuide."
			)
			)
		)

		(if (= (exists "ENV:AmigaGuide") 2)
			(
			(working
				("Hilfe-Verzeichnis %s in ENV:AmigaGuide/Path aufnehmen..." #AGHelpDir)
			)

			; Help Directory in ENV:AmigaGuide/Path aufnehmen
			(run
				(prompt ("Jetzt wird das Verzeichnis %s mit den Hilfe-Dateien " #AGHelpDir)
					("fr %s in ENV:AmigaGuide/Path eingetragen." #AGProgram)
					)
				(help ("Damit AmigaGuide die Hilfe-Dateien fr %s " #AGProgram)
					("findet, mu das Verzeichnis %s " #AGHelpDir)
					"in ENV:AmigaGuide/Path eingetragen werden."
					)
				(confirm)
				(cat (TackOn #DiskInstall "AddAGPath") " " #AGHelpDir)
			)
			(copyfiles
				(prompt "Jetzt wird die ergnzte Version von ENV:AmigaGuide/Path "
					"nach ENVARC:AmigaGuide/Path kopiert"
				)
				(help "Damit die ergnzte Fassung von ENV:AmigaGuide/Path auch nach dem "
					"Ausschalten Ihres Amiga erhalten bleibt, wird sie jetzt "
					"in das Verzeichnis ENVARC:AmigaGuide/Path kopiert.")
				(confirm)
				(source "ENV:AmigaGuide/Path")
				(dest   "ENVARC:AmigaGuide")
				(infos)
			)
			)
		)
		)
	)
	)
)


(procedure P_incrementMeter
;
; ****************************
; * Increment the progress meter indicator.
; ****************************
;
;    #addToMeter
;
	(
	(set #PctDone	(/ (* #AccumFiles 100) #TotalFiles))
	(set #AccumFiles	(+ #AccumFiles #addToMeter))
	(complete #PctDone)
	)
)


; ****************************
; * gemeinsames Verzeichnis fr
; * die Sicherungsprotokolle anlegen
; ****************************
;
(procedure P_CreateCatalogDir
	(
	(if (<> (exists #BackupCatalogDir) 2)
		(
		(makedir #BackupCatalogDir
			(infos)
			(confirm)
			(prompt ("Verzeichnis '%s' fr die Sicherungs-Protokolle " #BackupCatalogDir)
				("des Programms %s wird angelegt" #BackupName)
			)
			(help "In diesem Verzeichnis werden Protokolle "
				"aller Sicherungslufe abgelegt (soweit eingeschaltet).\n"
				("Dieses Verzeichnis wird sowohl von %s als " #BackupName)
				("von %s benutzt." #RestoreName)
			)
		)
		)
	)
	)
)



; ****************************
; * Backup Installation routine
; ****************************
;
(procedure P_BackupInstall
	(
	; ****************************
	; * Install the Program
	; ****************************
	;
	(set #addToMeter	#BackupFileCount)
	(P_incrementMeter)

	; alte vorhandene Backup-Files lschen
	(set #deleteWorkingText ("Alte Teile von %s werden entfernt..." #BackupName))
	(set #deleteDir		#BackupDir)
	(set #deleteFileName	#BackupExecFiles)
	(P_deleteIfExists)

	(set #LHADir #BackupDir)
	(P_BuildLHADir)

	(working
		("%s wird ausgepackt..." #BackupName)
	)

	(if (<> (exists #BackupDir) 2)
		(
		(makedir #BackupDir
			(infos)
			(confirm)
			(prompt ("Verzeichnis '%s' fr das Programm %s wird angelegt" #BackupDir #BackupName)
			)
			(help ("In diesem Verzeichnis wird das Programm %s abgelegt." #BackupName))
		)
		)
	)

	(P_CreateCatalogDir)

;	(debug ("%s e \"%s\" %s \"%s\"" #LHAName #BackupBinLHA #BackupExecFiles #LHADir))
	(run
		(prompt ("Jetzt werden die Programmdateien fr %s ausgepackt und im Verzeichnis %s installiert." #BackupName #BackupDir)
			)
		(help ("Die Programmdateien fr %s mssen aus dem Archiv %s mit Lha" #BackupName #BackupBinLHA)
			(" ausgepackt werden und werden dann im Verzeichnis %s abgelegt." #BackupDir)
			)
		(confirm)
		("%s e \"%s\" %s \"%s\"" #LHAName #BackupBinLHA #BackupExecFiles #LHADir)
	)
	(transcript ("Unpacked from %s: %s to %s" #BackupBinLHA #BackupExecFiles #BackupDir))


	; Tool Types fr Backup einstellen
	(tooltype
	(prompt ("Es werden folgende Einstellungen in das %s Piktogramm (Icon) bernommen:\n" #BackupName)
		("\nPROTFILENAME=%s" (cat "\"" (tackon #BackupCatalogDir "Backup.%d.%t.Directory") "\"") )
		("\nSCRIPTPATH=%s" (cat "\"" #BackupScriptDir "\""))
		("\nHELPPATH=%s" #BackupHelpDir)
		("\nAPPICONNAME=%s" #BackupAppIconName)
		("\nDISKSAVE=%s" #BackupDiskSave)
		("\nTAPEDRIVEDATABASE=%s" #TapeDriveDataBase)
	)
	(help "Hier finden Sie nochmal alle nderungen in den Piktogramm-Einstellungen "
		("(Tool Types) fr %s, die jetzt vorgenommen werden sollen." #BackupName)
	)
	(dest (tackon #BackupDir #BackupName))
	(noposition)
	(confirm)
	(settooltype "PROTFILENAME" (cat "\"" (tackon #BackupCatalogDir "Backup.%d.%t.Directory") "\"") )
	(settooltype "SCRIPTPATH" (cat "\"" #BackupScriptDir "\""))
	(settooltype "HELPPATH" #BackupHelpDir)
	(settooltype "APPICONNAME" #BackupAppIconName)
	(settooltype "DISKSAVE" #BackupDiskSave)
	(settooltype "TAPEDRIVEDATABASE" #TapeDriveDataBase)
	)
	)
)


; ****************************
; * Restore Installation routine
; ****************************
;
(procedure P_RestoreInstall
	(
	(set #addToMeter	#RestoreFileCount)
	(P_incrementMeter)

	; alte vorhandene Restore-Files lschen
	(set #deleteWorkingText ("Alte Teile von %s werden entfernt..." #RestoreName))
	(set #deleteDir 	#RestoreDir)
	(set #deleteFileName	#RestoreExecFiles)
	(P_deleteIfExists)

	(set #LHADir #RestoreDir)
	(P_BuildLHADir)

	(working
		("%s wird ausgepackt..." #RestoreName)
	)

	(if (<> (exists #RestoreDir) 2)
		(
		(makedir #RestoreDir
			(infos)
			(confirm)
			(prompt ("Verzeichnis '%s' fr das Programm %s wird angelegt" #RestoreDir #RestoreName)
			)
			(help ("In diesem Verzeichnis wird das Programm %s abgelegt." #RestoreName))
		)
		)
	)

	(P_CreateCatalogDir)

;	(debug ("%s e \"%s\" %s \"%s\"" #LHAName #RestoreBinLHA #RestoreExecFiles #LHADir))
	(run
		(prompt ("Jetzt werden die Programmdateien fr %s ausgepackt und im Verzeichnis %s installiert." #RestoreName #RestoreDir)
			)
		(help ("Die Programmdateien fr %s mssen aus dem Archiv %s mit Lha " #RestoreName #RestoreBinLHA)
			("ausgepackt werden und werden dann im Verzeichnis %s abgelegt." #RestoreDir)
			)
		(confirm)
		("%s e \"%s\" %s \"%s\"" #LHAName #RestoreBinLHA #RestoreExecFiles #LHADir)
	)
	(transcript ("Unpacked from %s: %s to %s" #RestoreBinLHA #RestoreExecFiles #RestoreDir))

	; Tool Types fr Restore einstellen
	(tooltype
	(prompt ("Es werden folgende Einstellungen in das %s Piktogramm (Icon) bernommen:\n" #RestoreName)
		("\nCATALOGDIR=%s" (cat "\"" #BackupCatalogDir "\""))
		("\nHELPPATH=%s" #RestoreHelpDir)
		("\nTAPEDRIVEDATABASE=%s" #TapeDriveDataBase)
	)
	(help "Hier finden Sie nochmal alle nderungen in den Piktogramm-Einstellungen "
		("(Tool Types) fr %s, die jetzt vorgenommen werden sollen." #RestoreName)
	)
	(dest (tackon #RestoreDir #RestoreName))
	(noposition)
	(confirm)
	(settooltype "CATALOGDIR" (cat "\"" #BackupCatalogDir "\""))
	(settooltype "HELPPATH" #RestoreHelpDir)
	(settooltype "TAPEDRIVEDATABASE" #TapeDriveDataBase)
	)
	)
)


; ****************************
; * Help Files Installation routine
; ****************************
;
(procedure P_HelpFilesInstall
	(
	(if (IN #PkgOpts 0)
		(
		(set #addToMeter	#BackupHelpFileCount)
		(P_incrementMeter)

		; alte vorhandene Backup-Hilfedateien lschen
		(set #deleteWorkingText ("Alte Hilfe-Dateien fr %s werden entfernt..." #BackupName))
		(set #deleteDir 	#BackupHelpDir)
		(set #deleteFileName	#BackupHelpFiles)
		(P_deleteIfExists)

		(set #LHADir #BackupHelpDir)
		(P_BuildLHADir)

		(working
			("Hilfe-Dateien fr %s werden ausgepackt..." #BackupName)
		)

		(if (<> (exists #BackupHelpDir) 2)
			(
			(makedir #BackupHelpDir
				(infos)
				(confirm)
				(prompt ("Verzeichnis '%s' fr die Hilfe-Dateien zum Programm %s wird angelegt"
					#BackupHelpDir #BackupName)
				)
				(help "In diesem Verzeichnis werden die verschiedenen Hilfe-Dateien fr "
					("das Programm %s abgelegt." #BackupName)
				)
			)
			)
		)

		(run
			(prompt ("Jetzt werden die Hilfe-Dateien fr %s ausgepackt und im Verzeichnis %s installiert." #BackupName #BackupHelpDir)
				)
			(help ("Die Hilfe-Dateien fr %s mssen aus dem Archiv %s mit Lha " #BackupName #BackupBinLHA)
				("ausgepackt werden und werden dann im Verzeichnis %s abgelegt." #BackupHelpDir)
				)
			(confirm)
			("%s e -x2 \"%s\" %s \"%s\"" #LHAName #BackupBinLHA #BackupHelpFiles #LHADir)
		)
		(transcript ("Unpacked from %s: %s to %s" #BackupBinLHA #BackupHelpFiles #BackupHelpDir))

		; Hilfe-Pfad in ENV_AmigaGuide eintragen
		(set #AGHelpDir #BackupHelpDir)
		(set #AGProgram #BackupName)
		(P_AppendAmigaGuidePath)
		)
	)
	(if (IN #PkgOpts 1)
		(
		(set #addToMeter	#RestoreHelpFileCount)
		(P_incrementMeter)

		; alte vorhandene Restore-Hilfefiles lschen
		(set #deleteWorkingText ("Alte Hilfe-Dateien fr %s werden entfernt..." #RestoreName))
		(set #deleteDir 	#RestoreHelpDir)
		(set #deleteFileName	#RestoreHelpFiles)
		(P_deleteIfExists)

		(set #LHADir #RestoreHelpDir)
		(P_BuildLHADir)

		(working
			("%s %s werden ausgepackt..." "Hilfe-Dateien fr" #RestoreName)
		)

		(if (<> (exists #RestoreHelpDir) 2)
			(
			(makedir #RestoreHelpDir
				(infos)
				(confirm)
				(prompt ("Verzeichnis '%s' fr die Hilfe-Dateien zum Programm %s wird angelegt"
					#RestoreHelpDir #RestoreName)
				)
				(help "In diesem Verzeichnis werden die verschiedenen Hilfe-Dateien fr "
					("das Programm %s abgelegt." #RestoreName)
				)
			)
			)
		)

		(run
			(prompt ("Jetzt werden die Hilfe-Dateien fr %s ausgepackt und im Verzeichnis %s installiert." #RestoreName #RestoreHelpDir)
				)
			(help ("Die Hilfe-Dateien fr %s mssen aus dem Archiv %s mit Lha " #RestoreName #RestoreBinLHA)
				("ausgepackt werden und werden dann im Verzeichnis %s abgelegt." #RestoreHelpDir)
				)
			(confirm)
			("%s e -x2 \"%s\" %s \"%s\"" #LHAName #RestoreBinLHA #RestoreHelpFiles #LHADir)
		)
		(transcript ("Unpacked from %s: %s to %s" #RestoreBinLHA #RestoreHelpFiles #RestoreHelpDir))

		; Hilfe-Pfad in ENV_AmigaGuide eintragen
		(set #AGHelpDir #RestoreHelpDir)
		(set #AGProgram #RestoreName)
		(P_AppendAmigaGuidePath)
		)
	)

	)
)


; ****************************
; * Sample Files Installation routine
; ****************************
;
(procedure P_SamplesInstall
	(
	(set #addToMeter	#SampleFileCount)
	(P_incrementMeter)

	(set #LHADir #BackupScriptDir)
	(P_BuildLHADir)

	(working
		("%s %s werden installiert..." "Beispiel-Dateien fr" #BackupName)
	)

	(if (<> (exists #BackupScriptDir) 2)
		(
		(makedir #BackupScriptDir
			(infos)
			(confirm)
			(prompt ("Verzeichnis '%s' fr die Beispiel-Dateien zum Programm %s wird angelegt"
				#BackupScriptDir #BackupName)
			)
			(help "In diesem Verzeichnis werden die verschiedenen Beispiel-Dateien fr "
				("das Programm %s abgelegt." #BackupName)
			)
		)
		)
	)

	(run
		(prompt ("Jetzt werden die Beispiel-Dateien fr %s ausgepackt und im Verzeichnis %s installiert." #BackupName #BackupScriptDir)
			)
		(help ("Die Beispiel-Dateien fr %s mssen aus dem Archiv %s mit Lha " #BackupName #BackupBinLHA)
			("ausgepackt werden und werden dann im Verzeichnis %s abgelegt." #BackupScriptDir)
			)
		(confirm)
		("%s -x2 e \"%s\" %s \"%s\"" #LHAName #BackupBinLHA #BackupSampleFiles #LHADir)
	)
	)
)


; ****************************
; * Source code Installation routine
; ****************************
;
(procedure P_SourceInstall
	(
	(if (IN #PkgOpts 0)
		(
		(set #addToMeter	#BackupSourceFileCount)
		(P_incrementMeter)

		; alten vorhandene Backup-Quellcode lschen
		(set #deleteWorkingText ("Alte Quellcodes von %s werden entfernt..." #BackupName))
		(set #deleteDir 	#BackupSourceDir)
		(set #deleteFileName	#BackupSourceFiles)
		(P_deleteIfExists)

		(set #LHADir #BackupSourceDir)
		(P_BuildLHADir)

		(working
			("Quellcode fr %s wird installiert..." #BackupName)
		)

		(if (<> (exists #BackupSourceDir) 2)
			(
			(makedir #BackupSourceDir
				(infos)
				(confirm)
				(prompt ("Verzeichnis '%s' fr den Quellcode fr das Programm %s wird angelegt"
					#BackupSourceDir #BackupName)
				)
				(help "In diesem Verzeichnis wird der gesamte Quellcode fr "
					("das Programm %s abgelegt." #BackupName)
				)
			)
			)
		)

		(run
			(prompt ("Jetzt wird der Quellcode fr %s ausgepackt und im Verzeichnis %s installiert." #BackupName #BackupSourceDir)
				)
			(help ("Der Quellcode fr %s mssen aus dem Archiv %s mit Lha " #BackupName #BackupSrcLHA)
				("ausgepackt werden und werden dann im Verzeichnis %s abgelegt." #BackupSourceDir)
				)
			(confirm)
			("%s -x1 e \"%s\" %s \"%s\"" #LHAName #BackupSrcLHA
				#BackupSourceFiles #LHADir)
		)
		(transcript ("Unpacked from %s: %s to %s" #BackupSrcLHA
				#BackupSourceFiles #BackupSourceDir)
		)
		)
	)
	(if (IN #PkgOpts 1)
		(
		(set #addToMeter	#RestoreSourceFileCount)
		(P_incrementMeter)

		; alten vorhandene Restore-Quellcode lschen
		(set #deleteWorkingText ("Alte Quellcodes von %s werden entfernt..." #RestoreName))
		(set #deleteDir 	#RestoreSourceDir)
		(set #deleteFileName	#RestoreSourceFiles)
		(P_deleteIfExists)

		(set #LHADir #RestoreSourceDir)
		(P_BuildLHADir)

		(working
			("Quellcode fr %s wird installiert..." #RestoreName)
		)

		(if (<> (exists #RestoreSourceDir) 2)
			(
			(makedir #RestoreSourceDir
				(infos)
				(confirm)
				(prompt ("Verzeichnis '%s' fr den Quellcode fr das Programm %s wird angelegt"
					#RestoreSourceDir #RestoreName)
				)
				(help "In diesem Verzeichnis wird der gesamte Quellcode fr "
					("das Programm %s abgelegt." #RestoreName)
				)
			)
			)
		)

		(run
			(prompt ("Jetzt wird der Quellcode fr %s ausgepackt und im Verzeichnis %s installiert." #RestoreName #RestoreSourceDir)
				)
			(help ("Der Quellcode fr %s mssen aus dem Archiv %s mit Lha " #RestoreName #RestoreSrcLHA)
				("ausgepackt werden und werden dann im Verzeichnis %s abgelegt." #RestoreSourceDir)
				)
			(confirm)
			("%s -x1 e \"%s\" %s \"%s\"" #LHAName #RestoreSrcLHA
				#RestoreSourceFiles #LHADir)
		)
		(transcript ("Unpacked from %s: %s to %s" #RestoreSrcLHA
				#RestoreSourceFiles #RestoreSourceDir)
		)
		)
	)
	)
)


; ****************************
; * Locale Installation routine
; ****************************
;
(procedure P_LocaleInstall
	(
	(set #addToMeter	2)				; 2 set of locale files
	(P_incrementMeter)

	(if (= (getassign "LOCALE" "a") "")
		(
		; no LOCALE: assigned -- we cannot continue
		;
		(message
			"\nYou do not seem to have LOCALE: assigned to the directory "
			"where the localization files are stored.\n"
			"\n"
			"Please install the system software localization files before "
			"retrying this installation.\n"
			"\n\n"
			"Press either the Proceed or Abort Install button to abort "
			"this installation.\n")
		(P_cleanUp)
		(exit (quiet))
		)
		(
		; LOCALE: was found
		;
		(if (<> (exists "LOCALE:Catalogs") 2)
			(
			(makedir "LOCALE:Catalogs")
			(if (<> (exists "LOCALE:Catalogs") 2)
				(
				(message
					"\nThe directory:\n\nLOCALE:Catalogs\n\n"
					"could not be created.  This installation "
					"requires this directory be present to "
					"install the selected locale support files.\n"
					"\n"
					"This installation cannot continue.\n")
				(P_cleanUp)
				(exit (quiet))
				)
			)
			)
		)

		(set #LanguageToDo	0)
		(set #LanguageMax	1)
		(while (< #LanguageToDo #LanguageMax)
			(
			(set #LanguageDesc (select #LanguageToDo
					"English"
					""))

			(if (IN #LanguageID #LanguageToDo)
				(
				(if (IN #PkgOpts 0)
					(
					(working
						("Sprache %s fr %s wird installiert..."
						#LanguageDesc
						#BackupName)
					)
					(set #LHADir (TACKON "Catalogs" #LanguageDesc))
					(P_BuildLHADir)
					(run
						(prompt ("Jetzt werden die Katalog-Dateien fr %s in der Sprache %s " 
								#BackupName #LanguageDesc)
							"ausgepackt und im Verzeichnis "
							("LOCALE:Catalogs/%s installiert." #LanguageDesc)
							)
						(help ("Die Katalog-Dateien (%s) fr %s mssen aus dem Archiv %s mit Lha ausgepackt werden und"
								#BackupName #LanguageDesc #BackupBinLHA)
							(" werden dann im Verzeichnis LOCALE:Catalogs/%s abgelegt." #LanguageDesc)
							)
						(confirm)
						("%s -x2 e \"%s\" %s/#?.catalog LOCALE:Catalogs/" 
							#LHAName #BackupBinLHA
							#LHADir
						)
					)
					(transcript ("Unpacked from %s: %s to %s" #BackupBinLHA #LanguageDesc
							(TACKON "Catalogs" #LanguageDesc))
					)
					)
				)
				(if (IN #PkgOpts 1)
					(
					(working
						("Sprache %s fr %s wird installiert..."
						#LanguageDesc
						#RestoreName)
					)
					(set #LHADir (TACKON "Catalogs" #LanguageDesc))
					(P_BuildLHADir)
					(run
						(prompt ("Jetzt werden die Katalog-Dateien fr %s in der Sprache %s "
								#RestoreName #LanguageDesc)
							"ausgepackt und im Verzeichnis"
							(" LOCALE:Catalogs/%s installiert." #LanguageDesc)
							)
						(help ("Die Katalog-Dateien (%s) fr %s mssen aus dem Archiv %s mit Lha ausgepackt werden und"
								#RestoreName #LanguageDesc #RestoreBinLHA)
							(" werden dann im Verzeichnis LOCALE:Catalogs/%s abgelegt." #LanguageDesc)
							)
						(confirm)
						("%s -x2 e \"%s\" %s/#?.catalog LOCALE:Catalogs/"
							#LHAName #RestoreBinLHA
							#LHADir
						)
					)
					(transcript ("Unpacked from %s: %s to %s" #RestoreBinLHA #LanguageDesc
							(TACKON "Catalogs" #LanguageDesc))
					)
					)
				)
				)
			)

			(set #LanguageToDo	(+ #LanguageToDo 1))
			)
		)
		)
	)
	)
)


; ****************************
; * General P_cleanUp routine
; ****************************
;
(procedure P_cleanUp
	(
	; ****************************
	; * exit the program.
	; ****************************
	;

	(complete 100)
	)
)


; *************************************************************************
; *                         ACTUAL START OF SCRIPT
; *
; * Ask all questions for the user now, do all of the work later.
; *************************************************************************
;

(onerror
	(P_cleanUp)
	(exit (quiet))
)


; ****************************
; * set the default destination
; ****************************
;
(set @default-dest	#DefaultDestination)
(set #defaultUtilDir	@default-dest)

; Versions-Abfrage: Backup & Restore verlangen Kickstart >= 39
(if (< #OSVersion 39)
	(
	(message
		"\nSie haben leider kein Kickstart/Workbench 3.0 in Betrieb.\n"
		"Backup und Restore bentigt zum Betrieb mindestens Kickstart V39"
		"\n")
	(P_cleanUp)
	(exit (quiet))
	)
)

(P_setPkgOpts)


; ****************************
; * if (#PkgOpts & 0) or (#PkgOpts & 1), ask the user which locale files to install,
; * but don't actually do it yet.
; ****************************
;
;(debug ("WB %ld / OS %ld" #WBVersion #OSVersion))

(if (AND (OR (IN #PkgOpts 0) (IN #PkgOpts 1)) (>= #WBVersion 38))
	(
	(set #LanguageID 1)				; default language is 0 (Deutsch)

	(set #TotalFiles		(+ #TotalFiles 2))	; 2 set of locale files

	(set #LanguageID
		(askoptions
			(prompt
				("Bitte whlen Sie die bevorzugten Fremdsprachen (auer Deutsch), in denen Sie %s mglicherweise betreiben mchten." #ProductName)
			)
			(help
				"Zur Zeit besteht die einzige Alternative zu Deutsch in Englisch.\n"
				"\n\n"
				"*** English\n"
				"Dies sollten Sie auswhlen, wenn Sie englischsprachige Menu- und Fenster-Texte mchten.\n"
				"\n"
				@askchoice-help
			)
			(choices
				; bit position 0 -- todo & 1
				;
				("%sEnglish" #AskPrefix)
			)
			(default #LanguageID)
		)
	)
;	(debug ("#LanguageID = %ld" #LanguageID))
	)
	(set #LanguageID 0)
)

(set #BackupDir @default-dest)
(set continueOn		0)

(onerror
	(P_cleanUp)
	(exit (quiet))
)

(while (AND (<> continueOn 1) (> @user-level 0))
	(

	; ****************************
	; * if (#PkgOpts & 0), ask the user where to install Backup
	; * but don't actually do it yet.
	; ****************************
	;
	(if (IN #PkgOpts 0)			; if bit position 0 is on
		(
		(set #setDirPathWhy	(cat ("wo Sie %s V%s installiert haben mchten." #BackupName #BackupVersionNum)
					"\n"
					"Dieses Verzeichnis wird bei der Installation angelegt, wenn es noch nicht existiert.") )
		(set #setDirPathHelp 	(cat "Workbench-Benutzer sollten diese Programme in einem "
					"Verzeichnis installieren, das von der Workbench aus "
					"erreicht werden kann.  CLI/Shell-Benutzer, knnen sie"
					" in Ihrem C: Verzeichnis installieren (oder jedem "
					"anderen Verzeichnis im Suchpfad).\n") )
		(set #DirPath		#BackupDir)
		(P_setDirPath)

		(set #BackupDir		#DirPath)
		(set @default-dest	#BackupDir)

		(set #TotalFiles	(+ #TotalFiles #BackupFileCount))

		(set #BackupHelpDir	(TACKON #BackupDir "Guide"))
		(set #BackupScriptDir	(TACKON #BackupDir "BackupScripts"))
		(set #BackupSourceDir	(TACKON #BackupDir "BackupSource"))
		(set #BackupCatalogDir	(TACKON #BackupDir "BackupCatalogs"))
		(set #BackupAppIconName	(TACKON #BackupDir "Backup_AppIcon"))

		(if (> @user-level 1)
			(
			; ****************************
			; jetzt noch das Directory fr die Protokolle abfragen 
			; ****************************

			(set #setDirPathWhy	(cat ("wo %s seine Sicherungsprotokolle ablegen soll." #BackupName)
						"\n"
						"Dieses Verzeichnis wird bei der Installation angelegt, wenn es noch nicht existiert.") )
			(set #setDirPathHelp 	(cat "Backup kann bei jeder Sicherung ein Protokoll erstellen, "
						"das von Restore verwendet werden kann. Das Verzeichnis "
						"fr diese Protokolle wird als TOOL TYPE in die "
						"Piktogramme von Backup und Restore eingetragen\n") )
			(set #DirPath		#BackupCatalogDir)
			(P_setDirPath)

			(set #BackupCatalogDir		#DirPath)
			)
		)
		)
	)


	; ****************************
	; * if (#PkgOpts & 1), ask the user where to install Restore,
	; * but don't actually do it yet.
	; ****************************
	;
	(if (IN #PkgOpts 1)						; if bit position 1 is on
		(
		(set #RestoreDir	#BackupDir)

		(if (> @user-level 1)
			(
			(set #setDirPathWhy	(cat ("wo Sie %s V%s installiert haben mchten" #RestoreName #RestoreVersionNum)
							"\n"
							"Dieses Verzeichnis wird bei der Installation angelegt, wenn es noch nicht existiert.") )
			(set #setDirPathHelp	("Das Programm %s knnen Sie entweder im selben Verzeichnis wie %s anlegen, oder dort, wo Sie normalerweise Ihre Hilfsprogramme aufbewahren.\n" #RestoreName #BackupName))
			(set #DirPath		#RestoreDir)
			(P_setDirPath)
			(set #RestoreDir	#DirPath)
			(set #defaultUtilDir	#DirPath)
			)
		)

		(set #TotalFiles	(+ #TotalFiles #RestoreFileCount))

		(set #RestoreHelpDir	(TACKON #RestoreDir "Guide"))
		(set #RestoreSourceDir	(TACKON #RestoreDir "RestoreSource"))
		)
	)


	; ****************************
	; * if (#PkgOpts & 2), ask the user where to install the package's Help files
	; * from disk 1.
	; ****************************
	;
	(if (IN #PkgOpts 2)						; if bit position 2 is on
		(
		(if (> @user-level 1)
			(
			(if (IN #PkgOpts 0)
				(set #setDirPathWhy	(cat "wo Sie die Backup-Hilfedateien installiert haben mchten."
							"\n"
							"Dieses Verzeichnis wird bei der Installation angelegt, wenn es noch nicht existiert.") )
				(set #setDirPathHelp	(cat "In diesem Verzeichnis werden diverse Text- Bild-Dateien der "
							("Online-Hilfe fr %s abgelegt.\n" #BackupName) )
				)
				(set #DirPath		#BackupDir)
				(P_setDirPath)

				(set #BackupHelpDir	#DirPath)
			)
			(if (IN #PkgOpts 1)
				(set #setDirPathWhy	"wo Sie die Restore-Hilfedateien installiert haben mchten.")
				(set #setDirPathHelp	(cat "In diesem Verzeichnis werden diverse Text- Bild-Dateien der "
							("Online-Hilfe fr %s abgelegt.\n" #RestoreName) )
				)
				(set #DirPath		#RestoreDir)
				(P_setDirPath)

				(set #RestoreHelpDir	#DirPath)
			)
			)
			(
			(set #BackupHelpDir	(TACKON #BackupDir "Guide"))
			(set #RestoreHelpDir	(TACKON	#RestoreDir "Guide"))
			)
		)

		(if (IN #PkgOpts 0)
			(set #TotalFiles (+ #TotalFiles #BackupHelpFileCount))
		)
		(if (IN #PkgOpts 1)
			(set #TotalFiles (+ #TotalFiles #RestoreHelpFileCount))
		)
		)
	)


	; ****************************
	; * if (#PkgOpts & 3), ask the user where to install the package's Sample Script files
	; * from disk 1.
	; ****************************
	;
	(if (IN #PkgOpts 3)		; if bit position 3 is on
		(
		(if (> @user-level 1)
			(
			(set #setDirPathWhy	(cat "wo Sie die Beispiel-Scripts fr Backup installiert haben mchten."
						"\n"
						"Dieses Verzeichnis wird bei der Installation angelegt, wenn es noch nicht existiert.") )
			(set #setDirPathHelp	(cat "In diesem Verzeichnis werden einige Beispiel-Skript-Dateien "
							("fr %s abgelegt.\n" #BackupName) )
			)
			(set #DirPath		(TACKON #BackupDir "BackupScripts") )
			(P_setDirPath)

			(set #BackupScriptDir	#DirPath)
			)
			(
			(set #BackupScriptDir 	(TACKON #BackupDir "BackupScripts") )
			)
		)

		(set #TotalFiles (+ #TotalFiles #SampleFileCount))
		)
	)


	; ****************************
	; * if (#PkgOpts & 4), ask the user where to install the Backup Source code
	; * from disk 1.
	; ****************************
	;
	(if (IN #PkgOpts 4)		; if bit position 4 is on
		(
		(if (> @user-level 1)
			(
			(set #setDirPathWhy	(cat "wo Sie den Backup-Quellcode installiert haben mchten."
						"\n"
						"Dieses Verzeichnis wird bei der Installation angelegt, wenn es noch nicht existiert.") )
			(set #setDirPathHelp	(cat "In diesem Verzeichnis werden smtliche Quellcode-"
						("Dateien fr %s abgelegt.\n" #BackupName) )
			)
			(set #DirPath		(TACKON #BackupDir "BackupSource") )
			(P_setDirPath)

			(set #BackupSourceDir	#DirPath)
			)
			(
			(set #BackupSourceDir (TACKON #BackupDir "BackupSource") )
			)
		)

		(set #TotalFiles (+ #TotalFiles #BackupSourceFileCount))
		)
	)

	; ****************************
	; * if (#PkgOpts & 5), ask the user where to install the Restore Source code
	; * from disk 1.
	; ****************************
	;
	(if (IN #PkgOpts 5)		; if bit position 5 is on
		(
		(if (> @user-level 1)
			(
			(set #setDirPathWhy	(cat "wo Sie den Restore-Quellcode installiert haben mchten."
						"\n"
						"Dieses Verzeichnis wird bei der Installation angelegt, wenn es noch nicht existiert.") )
			(set #setDirPathHelp	(cat "In diesem Verzeichnis werden smtliche Quellcode-"
						("Dateien fr %s abgelegt.\n" #RestoreName) )
			)
			(set #DirPath		(TACKON #RestoreDir "RestoreSource") )
			(P_setDirPath)

			(set #RestoreSourceDir	#DirPath)
			)
			(
			(set #RestoreSourceDir (TACKON #RestoreDir "RestoreSource") )
			)
		)

		(set #TotalFiles (+ #TotalFiles #RestoreSourceFileCount))
		)
	)

	; ****************************
	; * ask the user where to place the Tape Drive Data Base
	; ****************************
	;
	(if (or (IN #PkgOpts 0) (IN #PkgOpts 1))	; if bit position 0 or 1 is on
		(
		(if (> @user-level 1)
			(
			(set #setFilePathWhy	"wo Backup die Bandlaufwerks-Datenbank ablegen soll.")
			(set #setFilePathHelp	(cat "Backup und Restore benutzen eine Datenbank, um sich die "
						"Eigenschaften von Bandlaufwerken zu merken.\n"
						"Hier legen Sie fest, wo diese Datenbank angelegt wird.\n")
			)
			(set #FilePath		#TapeDriveDataBase)
			(P_setFilePath)

			(set #TapeDriveDataBase	#FilePath)
			)
		)
		)
	)

	; ****************************
	; * ask the user where to place the DiskSave File
	; ****************************
	;
	(if (IN #PkgOpts 0)	; if bit position 0 is on
		(
		(if (> @user-level 1)
			(
			(set #setFilePathWhy	"wo Backup seine Reservedatei fr Diskettensicherungen anlegen soll.")
			(set #setFilePathHelp	(cat "Die Reservedatei ermglicht, bei einem Lese- oder Schreibfehler "
						"die aktuelle Diskette zu verwerfen und durch eine andere zu "
						"ersetzen, wobei die neue Diskette wieder von Spur 1 an "
						"bespielt wird.\n")
			)
			(set #FilePath		#BackupDiskSave)
			(P_setFilePath)

			(set #BackupDiskSave	#FilePath)
			)
		)
		)
	)

	; letzte Nachfrage...
	(if (= 1 (askbool
			(prompt	(cat ("%s wird in folgenden Verzeichnissen installiert:\n" #BackupName)
				(if (IN #PkgOpts 0) ("\nBackup in %s\nBackup-Protokolle : %s" #BackupDir #BackupCatalogDir))
				(if (IN #PkgOpts 1) ("\nRestore in %s" #RestoreDir))
				(if (AND (IN #PkgOpts 2) (IN #PkgOpts 0)) ("\nBackup  Hilfedateien in %s" #BackupHelpDir))
				(if (AND (IN #PkgOpts 2) (IN #PkgOpts 1)) ("\nRestore Hilfedateien in %s" #RestoreHelpDir))
				(if (IN #PkgOpts 3) ("\nBeispiel-Scripts in %s" #BackupScriptDir))
				(if (IN #PkgOpts 4) ("\nBackup  Quellcode in %s" #BackupSourceDir))
				(if (IN #PkgOpts 5) ("\nRestore Quellcode : %s" #RestoreSourceDir))
				(if (OR (IN #PkgOpts 1) (IN #PkgOpts 0)) ("\nBandlaufwerks-Datenbank in %s" #TapeDriveDataBase))
				(if (OR (IN #PkgOpts 1) (IN #PkgOpts 0)) ("\nDisketten-Reservedatei in %s" #BackupDiskSave))
				(if (OR (IN #PkgOpts 1) (IN #PkgOpts 0)) ("\nBackup-AppIcon in %s" #BackupAppIconName))
				"\n\nIst das richtig?"
				)
			)

			(help	("Diese Anzeige zeigt Ihnen noch einmal, in welchem Verzeichnis der Installer %s installieren wird. " #BackupName)
				(cat "Dies dient zu Ihrer Sicherheit, damit Sie genau "
				"wissen, wo die Dateien hinkopiert werden.\n"
				"\n"
				"Um andere Verzeichnise zu whlen, drcken Sie "
				"den NEIN-Knopf.  Ansonsten drcken Sie den "
				"JA-Knopf, um die Installation fortzusetzen.\n"
				)
			)
		)
		(set continueOn		1)
		)
	)
	)
)


(complete 0)

(message "\nWollen Sie Backup jetzt installieren?"
	(help	"Sobald Sie den WEITER-Knopf gedrckt haben, werden die "
		"ausgewhlten Programmteile installiert. Jetzt haben sie"
		" die letzte Mglichkeit "
		"diesen Vorgang abzubrechen, ohne Teile der ausgewhlten"
		" Programmteile zu installieren.\n"
		"\n"
		"Nach dem Drcken von WEITER knnen Sie die Esc-Taste "
		"drcken, um die Installation abzubrechen.\n")
)


(onerror
	(P_cleanUp)
	(exit (quiet))
)

;(askdisk
;	(dest (substr #DiskInstall 0 (- (strlen #DiskInstall) 1)))
;	(prompt ("Bitte die\nBackup-Installationsdiskette\n\n%s\n\nin ein Laufwerk einlegen" #DiskInstall))
;	(help "Die Originaldiskette mit den Backup- und Restore-Archiven "
;	      "wird unbedingt gebraucht, um die Installation durchfhren zu knnen."
;	      "\nSollten Sie die Archive bereits auf Ihre Festplatte kopiert haben,"
;	      (" knnen Sie den Namen '%s' mit Assign zuweisen." #DiskInstall)
;	)
;	(assigns)
;)

(if (IN #PkgOpts 0)
	(P_BackupInstall)
)
(if (IN #PkgOpts 1)
	(P_RestoreInstall)
)
(if (IN #PkgOpts 2)
	(P_HelpFilesInstall)
)
(if (IN #PkgOpts 3)
	(P_SamplesInstall)
)
(if (IN #PkgOpts 4)
	(P_SourceInstall)
)

(if (AND (AND (OR (IN #PkgOpts 0) (IN #PkgOpts 2)) (>= #WBVersion 38)) (<> #LanguageID 0))
	(P_LocaleInstall)
)

(P_cleanUp)
(exit)
