;  $VER: InstallEZP@gerNG 1.9 (14.9.2000) Copyright © 2000 by Stefan Falke

(set #destdev "DH0:")
(set #destdir "EZP@gerNG")
(set #install-dest #destdev)

(set @default-dest "")

(set #prg_path "EZP@gerNG_Disk")
(set #prg_name @app-name)
(set #assign "EZP@gerNG")

(set #sdir (cat #prg_path ":"))
(set #current_dir (expandpath ""))

(set defuser @user-level)

(set #vernum (getversion))
(set #os_ver (/ #vernum 65536))
(set #os_rev (- #vernum (* #os_ver 65536)))

(set #invernum @installer-version)
(set #in_ver (/ #invernum 65536))
(set #in_rev (- #invernum (* #in_ver 65536)))


(if (>= #in_ver 44 ) (
	(effect "center" "horizontal" $0000FF $000000)
))

(if (= @user-level 0) (user 1))
(user defuser)

(procedure setLanguage
	(set #lang_en 0)
	(set #lang_de 1)
	(set #lang_nl 2)
	(set #lang_builtin #lang_en)

	(set #language #lang_builtin)

	(set #lch_deu "Deutsch")
	(set #lch_enu "English")

	(set #lch_del "deutsch")
	(set #lch_enl "english")

	(if (= (exists (tackon #sdir "Catalogs/nederlands") (noreq)) 2) (
		(set #lch_nlu "Nederlands")
		(set #lch_nll "nederlands")
	)(
		(set #lch_nlu "")
		(set #lch_nll "")
	))

	(if (= #lch_enl @language) (set #language #lang_en))
	(if (= #lch_del @language) (set #language #lang_de))
	(if (= #lch_nll @language) (set #language #lang_nl))

	(if (= #in_ver 0) (
		(set #langhelp "Please choose your language\nBitte Sprache auswählen")
		(set #language (askchoice
				(choices #lch_enu #lch_deu)
				(prompt #langhelp)
				(help #langhelp)
				(default #language)
			)
		)
	))

	; English strings
	(set #chdir "Please select a directory for the %s.\n\nNo drawer will be created by default.")
	(set #chdirhelp "You have to specify now the path of the drawer in which all files shall be copied.\nNon existant drawers can be created from within this install script including their accompanying icons.")

	(set #asklibdir "In which drawer do you want the support libraries to be installed?")
	(set #askclassdir "In which drawer do you want the support classes to be installed?")

	(set #gdisk "Please insert disk \"%s\" in a drive of your choice.")
	(set #gdhelp "The disk \"%s\" is needed to copy all files of the %s into the specified drawer.")

	(set #lchelp "Please select the language catalog to be installed")
	(set #askcatdir "In which drawer do you want the catalog to be installed?")

	(set #iconnew "\nDo you want the existing EZP@gerNG-Icon to be copied over by the new icon from the install disk?\nChoose 'No' if you have already modified some tooltypes.\n(Recommended choice: 'No')")
	(set #owhelp "If you respond to this requester with 'Yes', a possibly existing %sversion will be written over completely!")
	(set #owhelp2 "If you respond to this requester with 'Yes', a possibly existing file will be written over completely!")

	(set #askassign "Do you want an assign for \"%s:\" to \"%s\" to be added to the User-Startup file?")
	(set #assignhelp "If you respond to this requester with 'Proceed', an assign to the logical device 'EZP@gerNG:' will be added to the User-Startup file which will ease the installation of newer releases and the access to all EZP@gerNG files.")

	(set #askinstall1 "Do you want to install the main program again?")
	(set #askinstall2 "Do you want to install the main program with version %ld.%ld?")
	(set #installed1 (cat "Version %ld.%ld of the program \"%s\" presumedly has already been installed completely.\n" #askinstall1))
	(set #installed2 (cat "ATTENTION! Version %ld.%ld of the program \"%s\" already exists in the destination drawer.\n" #askinstall2))
	(set #installed3 "The data file \"%s\" presumedly has already been installed completely in the destination drawer.\nDo you want to install this file again?\n(Recommended choice: 'No')")

	(set #ppart1 "main program")
	(set #ppart2 #ppart1)

	(set #pr_copymain "Copy main program")
	(set #pr_copylibs "Copy support library ")
	(set #pr_copyclasses "Copy support class ")
	(set #pr_copycats "Copy language catalog")
	(set #pr_servicedat "Copy service data")
	(set #pr_copyicons "Copy icons")
	(set #pr_copyarexx "Copy ARexx scripts")
	(set #pr_copycontrib "Copy contribution files")
	(set #pr_keyfile "Copy keyfile")
	(set #pr_copyguide "Copy user guide")

	(set #newer "newer ")
	(set #older "older ")
	(set #no "No")
	(set #yes "Yes")

	(if (= #language #lang_de) (
	;	German strings
	(set #chdir "Bitte Verzeichnis für %s auswählen.\n\nEin eigenes Verzeichnis wird nicht automatisch erzeugt.")
	(set #chdirhelp "Sie müssen jetzt den Pfad des Verzeichnisses angeben, in das die Dateien kopiert werden sollen.\nNoch nicht vorhandene Verzeichnisse können von diesem Installationprogramm aus angelegt werden und mit einem Schubladen-Icon versehen werden.")

	(set #asklibdir "In welchem Verzeichnis sollen die Support-Libraries installiert werden?")
	(set #askclassdir "In welchem Verzeichnis sollen die Support-Klassen installiert werden?")

	(set #gdisk "Bitte legen Sie die Diskette \"%s\" in ein Laufwerk Ihrer Wahl.")
	(set #gdhelp "Die Diskette \"%s\" wird benötigt, damit alle Dateien des %s in das angegebene Zielverzeichnis kopiert werden können.")

	(set #lchelp "Wählen Sie den EZP@gerNG Sprachen-Katalog der installiert werden soll.")
	(set #askcatdir "In welchem Verzeichnis soll der Sprachen-Katalog installiert werden?")

	(set #iconnew "\nWollen Sie das bereits bestehende EZP@gerNG-Icon mit dem Icon von der Installationsdiskette überschreiben?\nWenn Sie bereits ToolTypes verändert haben, sollten Sie 'Nein' wählen.\n(Empfohlene Wahl: 'Nein')")
	(set #owhelp "Wenn Sie diesen Requester mit 'Ja' beantworten, wird eine eventuell schon vorhandene %sVersion komplett überschrieben!")
	(set #owhelp2 "Wenn Sie diesen Requester mit 'Ja' beantworten, wird eine eventuell schon vorhandene Datei komplett überschrieben!")

	(set #askassign "Soll ein Assign für \"%s:\" auf \"%s\" in die Datei User-Startup eingefügt werden?")
	(set #assignhelp "Wenn Sie diesen Requester mit 'Weiter' beantworten, wird ein Assign auf das logische Device 'EZP@gerNG:' in die Datei User-Startup eingefügt, wodurch das Installieren neuerer Versionen und der Zugriff auf EZP@gerNG-Dateien vereinfacht wird.")

	(set #askinstall1 "Wollen Sie das Hauptprogramm erneut installieren?")
	(set #askinstall2 "Wollen Sie das Hauptprogramm mit der Version %ld.%ld installieren?")
	(set #installed1 (cat "Die Version %ld.%ld des Programmes \"%s\" ist vermutlich schon komplett in dem angegebenen Zielverzeichnis installiert.\n" #askinstall1))
	(set #installed2 (cat "ACHTUNG! In dem angegebenen Zielverzeichnis befindet sich bereits die Version %ld.%ld des Programmes \"%s\".\n" #askinstall2))
	(set #installed3 "Die Datendatei \"%s\" wurde in dem angegebenen Zielverzeichnis vermutlich bereits komplett installiert.\nWollen Sie diese Datei erneut installieren?\n(Empfohlene Wahl: 'Nein')")

	(set #pr_copymain "Kopieren des Hauptprogrammes")
	(set #pr_copylibs "Kopieren der Support-Library ")
	(set #pr_copyclasses "Kopieren der Support-Klasse ")
	(set #pr_copycats "Kopieren des Sprachen-Katalogs")
	(set #pr_servicedat "Kopieren der Service-Daten")
	(set #pr_copyicons "Kopieren der Icons")
	(set #pr_copyarexx "Kopieren der ARexx-Skripte")
	(set #pr_copycontrib "Kopieren der Contribution-Dateien")
	(set #pr_keyfile "Kopieren des Keyfiles")
	(set #pr_copyguide "Kopieren der Bedienungsanleitung")

	(set #ppart1 "Hauptprogramm")
	(set #ppart2 (cat #ppart1 "s"))

	(set #newer "neuere ")
	(set #older "ältere ")
	(set #no "Nein")
	(set #yes "Ja")
	))
)

(procedure copyMain
	(working)

	(checkMain)

	(if (= docopy 1) (
		(docopyMain)

		(set #file "fgui.library")
		(docopyLibs)
		(set #file "fpager_fgui.gui")
		(docopyLibs2)
		(set #file "fbase.library")
		(docopyLibs)
		(set #file "ezpsupport.library")
		(docopyLibs)
		(set #file "pprsmtp.library")
		(docopyLibs)

		(set #file "fbubble.gadget")
		(docopyClasses)
		(set #file "fbutton.gadget")
		(docopyClasses)
		(set #file "fdbutton.gadget")
		(docopyClasses)
		(set #file "ficon.gadget")
		(docopyClasses)
		(set #file "stringfield.gadget")
		(docopyClasses)
		(set #file "fgui.image")
		(docopyClasses)
		(set #file "ficons.image")
		(docopyClasses)
		(set #file "select.image")
		(docopyClasses)

		(set #file "ezp@gerng.key")
		(docopyKey)

		(if (= (exists (tackon #sdir "catalogs")) 2)	(docopyCats))

		(run "avail flush >nil:")

		(set #dfile "EZP@gerNG.guide")
		(set #file (tackon #sdir #dfile))
		(docopyGuides)

		(set #dfile "ReadMe.guide")
		(set #file (tackon #sdir #dfile))
		(docopyGuides)

		(set #dfile "EZP@gerNG_FAQ.guide")
		(set #file (tackon #sdir #dfile))
		(docopyGuides)
	))

	(set #path "data")
	(docopyData)

	(set #path "icons")
	(set #pattern "8Bit")
	(set #prompt #pr_copyicons)
	(docopyDir)

	(set #path "icons")
	(set #file "service")
	(set #prompt #pr_copyicons)
	(docopyFile)

	(set #path "icons")
	(set #file "toolbar")
	(set #prompt #pr_copyicons)
	(docopyFile)

	(set #path "rexx")
	(set #prompt #pr_copyarexx)
	(set #pattern "#?.ezprx")
	(docopyDir)

	(set #path "contribution")
	(set #prompt #pr_copycontrib)
	(set #pattern "#?")
	(docopyDir)

)

(procedure askCats
	(set catalog (askchoice
			(choices #lch_enu #lch_deu)
			(prompt #lchelp)
			(help #lchelp)
			(default #language)
		)
	)

	(if (= catalog #lang_en) (set #ulcat #lch_enl))
	(if (= catalog #lang_de) (set #ulcat #lch_del))
	(if (= catalog #lang_nl) (set #ulcat #lch_nll))

	(if (= catalog #lang_builtin) (set #ulcat ""))
	(if (<> #ulcat "") (
		(set catdirc (askchoice
				(choices (tackon @default-dest (cat "catalogs/" #ulcat)) (cat "LOCALE:catalogs/" #ulcat) )
				(prompt #askcatdir)
				(help #askcatdir)
				(default 0)
			)  
		)

		(if (= catdirc 0) (
			(set #catdir @default-dest)
		)(
			(set #catdir "LOCALE:")
			(if (< (exists "LOCALE:" (noreq)) 2) (
				(makedir "sys:Locale")
				(makeassign "LOCALE" "sys:Locale")
			))
			)
		)
	))
)

(procedure docopyCats
	(if (<> #ulcat "") (
		(if (< (exists (tackon #catdir "catalogs")) 2)
			(makedir (tackon #catdir "catalogs"))
		)
		(if (< (exists (tackon #catdir (cat "catalogs/" #ulcat)) ) 2)
			(makedir (tackon #catdir (cat "catalogs/" #ulcat)) )
		)
		(copylib
			(prompt #pr_copycats)
			(help @copylib-help)
			(source (cat (tackon #sdir "catalogs/") #ulcat "/EZP@gerNG.catalog"))
			(dest (tackon #catdir (cat "catalogs/" #ulcat)) )
			(optional "nofail")
			(confirm)
		)
	))
)

(procedure chooseLibDir
	(set libdirc (askchoice
			(choices (tackon @default-dest "libs") "LIBS:")
			(prompt #asklibdir)
			(help #asklibdir)
			(default 0)
		)  
	)

	(if (= libdirc 0) (
		(set #libdir (tackon @default-dest "libs"))
		(if (< (exists #libdir) 2)
			(makedir #libdir)
		)
	)(
		(set #libdir "LIBS:")
	))
)

(procedure chooseClassDir
	(set classdirc (askchoice
			(choices (tackon @default-dest "classes") "sys:Classes")
			(prompt #askclassdir)
			(help #askclassdir)
			(default 0)
		)  
	)

	(if (= classdirc 0) (
		(set classdir (tackon @default-dest "classes"))
		(if (< (exists classdir) 2)
			(makedir classdir)
		)
	)(
		(set classdir "sys:Classes")
	))
)

(procedure docopyLibs
	(set spath (tackon #sdir (cat "libs/" #file)))

	(if (= (exists spath) 1)(
		(copylib
			(prompt (cat #pr_copylibs #file))
			(help @copylib-help)
			(source spath)
			(dest #libdir)
			(optional "nofail")
			(confirm)
		)
	))
)

(procedure docopyLibs2
	(set spath (tackon #sdir (cat "libs/" #file)))
	(set dpath (tackon #libdir #file))

	(if (= (exists spath) 1)(
		(set docopy 1)

		(set ver_source (getversion spath))
		(set ver_s (/ ver_source 65536))
		(set rev_s (- ver_source (* ver_s 65536)))

		(if (= (exists dpath) 1)(
			(set ver_dest (getversion dpath))
			(set ver_d (/ ver_dest 65536))
			(set rev_d (- ver_dest (* ver_d 65536)))

			(if (< ver_source ver_dest) (
				(set docopy 0)
			))
		))

		(if (= docopy 1)(
			(copyfiles
				(prompt (cat #pr_copylibs #file))
				(help @copylib-help)
				(source spath)
				(dest #libdir)
				(optional "nofail")
				(confirm)
			)
		))
	))
)

(procedure docopyClasses
	(set spath (tackon #sdir (cat "classes/" #file)))

	(if (= (exists spath) 1)(
		(copylib
			(prompt (cat #pr_copyclasses #file))
			(help @copylib-help)
			(source spath)
			(dest classdir)
			(optional "nofail")
			(confirm)
		)
	))
)

(procedure docopyData
	(set spath (tackon #sdir #path))
	(set dpath (tackon #install-dest #path))

	(if (= (exists spath) 2)(
		(if (< (exists dpath) 2)
			(makedir dpath)
		)
		(set dname "service")
		(set docopy 1)
		(if (= (exists (tackon dpath (cat dname ".dat"))) 1)(
			(set vprompt (#installed3 dname))
			(set docopy
				(askbool
					(prompt	vprompt)
					(help		#owhelp2)
					(choices #yes #no)
				)
			)
		))
		(if (= docopy 1)(
			(copyfiles
				(prompt #pr_servicedat)
				(help @copyfiles-help)
				(source spath)
				(dest dpath)
				(pattern (cat dname ".#?"))
				(confirm)
			)
		))

		(copyfiles
			(prompt #pr_servicedat)
			(help @copyfiles-help)
			(source spath)
			(dest dpath)
			(pattern "#?.psp")
			(confirm)
		)

	))
)

(procedure docopyDir
	(set spath (tackon #sdir #path))
	(set dpath (tackon #install-dest #path))

	(if (= (exists spath) 2)(
		(if (< (exists dpath) 2)
			(makedir dpath)
		)
		(copyfiles
			(prompt #prompt)
			(help @copyfiles-help)
			(source spath)
			(dest dpath)
			(pattern #pattern)
			(confirm)
		)

	))
)

(procedure docopyFile
	(set spath (tackon #sdir (tackon #path #file)))
	(set dpath (tackon #install-dest #path))

	(if (= (exists spath) 1)(
		(if (= (exists (tackon dpath #file)) 0)
			(copyfiles
				(prompt #prompt)
				(help @copyfiles-help)
				(source spath)
				(dest dpath)
				(confirm)
			)
		)
	))
)

(procedure docopyKey
	(set #path (tackon #sdir #file))

	(if (= (exists #path) 1) (
		(copylib
			(prompt #pr_keyfile)
			(help @copylib-help)
			(source #path)
			(dest #install-dest)
			(optional "nofail")
			(confirm)
		)
	))
)

(procedure docopyGuides
	(if (= (exists #file) 1)
		(copyfiles
			(prompt #pr_copyguide)
			(help @copyfiles-help)
			(source #file)
			(dest #install-dest)
			(infos)
			(optional "nofail")
			(confirm)
		)
	)

	(if (>= #os_ver 39)
		(tooltype
			(dest (tackon #install-dest #dfile))
			(setdefaulttool "MultiView")
		)
		(tooltype
			(dest (tackon #install-dest #dfile))
			(setdefaulttool "AmigaGuide")
		)
	)
)

(procedure docopyMain
	(set #nocopyicon 0)

	(if (exists (cat (tackon #install-dest #prg_name) ".info"))
		(set #nocopyicon
				(askchoice	(choices #yes #no)
								(prompt #iconnew)
								(help   #iconnew)
								(default 1)
				)
		)
	)

	(if (= #nocopyicon 1) (
		(copyfiles
			(prompt #pr_copymain)
			(help @copyfiles-help)
			(source #file)
			(dest #install-dest)
			(optional "force")
			(confirm)
		)
	)(
		(copyfiles
			(prompt #pr_copymain)
			(help @copyfiles-help)
			(source #file)
			(dest #install-dest)
			(infos)
			(optional "force")
			(confirm)
		)
	))

	(if (= #prg_name "EZP@gerNG_CE") (
		(set dpath (tackon #install-dest "EZP@gerNG"))
		(if (= (exists dpath) 1) (
			(set ver_dest (getversion dpath))
			(set ver_d (/ ver_dest 65536))
			(set rev_d (- ver_dest (* ver_d 65536)))

			(if (AND (= ver_d 1) (< rev_d 3)) (

				(delete dpath
					(infos)
					(optional "force")
				)
			))
		))
	))
)

(procedure checkMain
	(if (= (exists #dfile) 1) (
		(set ver_source (getversion #file))
		(set ver_s (/ ver_source 65536))
		(set rev_s (- ver_source (* ver_s 65536)))

		(set ver_dest (getversion #dfile))
		(set ver_d (/ ver_dest 65536))
		(set rev_d (- ver_dest (* ver_d 65536)))

		(if (= ver_source ver_dest) (
			(set vprompt (#installed1 ver_s rev_s #prg_name))
			(set vhelp (#owhelp ""))
			(set docopy
				(askbool
					(prompt	vprompt)
					(help		vhelp)
					(choices #yes #no)
				)
			)
			(if (= @user-level 0) (set docopy 1))
		))
		(if (< ver_source ver_dest) (
			(set vprompt (#installed2 ver_d rev_d #prg_name ver_s rev_s))
			(set vhelp (#owhelp #newer))
			(set docopy
				(askbool
					(prompt	vprompt)
					(help		vhelp)
					(choices #yes #no)
				)
			)
			(if (= @user-level 0) (set docopy 0))
		))
		(if (> ver_source ver_dest) (
			(set vprompt (#installed2 ver_d rev_d #prg_name ver_s rev_s))
			(set vhelp (#owhelp #older))
			(set docopy
				(askbool
					(prompt	vprompt)
					(help		vhelp)
					(choices #yes #no)
				)
			)
			(if (= @user-level 0) (set docopy 1))
		))
	)(
		(set docopy 1)
	))
)

(procedure chooseDestDir
	(set ptext (#chdir #ppart1))

	(if (= (exists (cat #assign ":") (noreq)) 2) (
		(set #install-dest (cat #assign ":"))
	)(
		(if (= (exists #destdev (noreq)) 0) (
			(set #destdev (cat (getdevice "sys:") ":"))
			(set #install-dest #destdev)
		))
		(if (= @user-level 0)
			(set #install-dest (cat #destdev #destdir))
			(set #install-dest #destdev)
		)
	))

	(set @default-dest #install-dest)

	(set #install-dest
		(askdir
			(prompt  ptext)
			(help		#chdirhelp)
			(default	#install-dest)
			(newpath)
			(disk)
		)
	)

	(if (= @default-dest #install-dest) (

		(if (= (exists @default-dest) 0) (
			(makedir @default-dest
					(infos)
			)
		))

		(if (= (exists (cat #assign ":") (noreq)) 0) (
			(startup #assign
				(prompt	(#askassign #assign #install-dest))
				(help		#assignhelp)
				(command	(cat "assign "#assign": \"" #install-dest "\""))
				(confirm)
			)
		))

	)(

		(set @default-dest #install-dest)

		(startup #assign
			(prompt	(#askassign #assign #install-dest))
			(help		#assignhelp)
			(command	(cat "assign "#assign": \"" #install-dest "\""))
			(confirm)
		)

	))

	(makeassign #assign #install-dest)

	(user defuser)
)

(procedure getDisk
	(set gdhelp (#gdhelp #source_disk #ppart2))
	(set vprompt (#gdisk #source_disk))

	(askdisk
		(prompt	vprompt)
		(help		gdhelp)
		(dest		#source_disk)
	)
)


;
; Start of Script
;

(setLanguage)

(set #source_disk #prg_path)
(set md (exists (cat #source_disk ":") (noreq)))
(if (= md 0) (
	(if (<> (exists (#prg_name)) 1)
		(getDisk)
	)
))
(if (= md 0) (set #prg_path ""))

(if (<> #prg_path "")
	(set #sdir (cat #prg_path ":"))
	(set #sdir "")
)
(set #file (tackon #sdir #prg_name))

(setLanguage)

(chooseDestDir)
(chooseLibDir)
(chooseClassDir)
(set #dfile (tackon @default-dest #prg_name))
(if (= (exists (tackon #sdir "catalogs")) 2)	(askCats))

(copyMain)


(exit)
