; $VER: StormC V1.0 Install Version 1.04 (15.11.95)
; Installations-Script - na, wofür wohl?
; (c) 1995/96 HAAGE & PARTNER Computer GmbH

(complete 0)

; Die Versionsnummer und das Erstellungs-Datum der hier installierten
; Versionen.

(set stcpp-version "1.02")
(set stcpp-date "(12 Jan 96)")

;====================================================================
; Initialisierungen


(set @default-dest "")

(set os-version (/ (getversion) 65536))
(set os-13 (< os-version 36))
(set os-20 (>= os-version 36))
(set os-21 (>= os-version 38))

(set totalmem (database "total-mem")) ; Diese schöne Funktion vereinfacht einiges

; Die Pfadnamen der Programme, die vom Installations-Skript aufgerufen werden.

;(set run-lha				"run RAM:Lhex x -a ")
;(set run-free				"run C/StormFree")

; Die Pfadnamen der einzelnen Quell-Dateien.

(set #binsource 			(tackon (pathonly @icon) "StormSYS"))	; Hier stehen die Ausführbaren Programme
(set #includesource 		(tackon (pathonly @icon) "INCLUDE")) 	; Hier stehen die Includes
(set #envsource			(tackon (pathonly @icon) "ENV"))			; Die Voreinstellungen
(set #libsource			(tackon (pathonly @icon) "LIB"))			; Hier stehen die Bibliotheken
(set #samplesource		(tackon (pathonly @icon) "Examples"))	; Hier stehen die Demo-Sourcen
(set #manualsource		(tackon (pathonly @icon) "MANUAL"))		; Hier steht die Dokumentation
(set source-Liesmich 	(tackon (pathonly @icon) "Liesmich"))		; Die Liesmich Datei 
(set source-ikon		(tackon (pathonly @icon) "StormCPP.info"))	; Das Programm-Piktogramm


;(set !auswahlhilfe
;	(cat "\nAuf Ihrer Festplatte befindet sich bereits eine Version "
;        "der Datei die installiert werden soll. \n\n"
;        "Wählen Sie \"Ja\", wenn Sie die alte Datei mit der neuen "
;        "überschreiben möchten. Anderenfalls wählen Sie bitte \"Nein\"!\n"))

(set #prp-copy-samples
	"Kopiere die C und C++ Beispielprogramme")
(set #hlp-copy-bin
	"Anhand des Handbuches und der Beispiele können Sie sich sehr schnell in StormC einarbeiten")
(set #prp-copy-env
	"Kopiere die StormC Default-Piktogramme")
(set #hlp-copy-env
	"Die Piktogramme werden von der Projektverwaltung und vom Editor benötigt")
(set #prp-copy-includes
	"Kopiere die C++ Systemincludes")
(set #hlp-copy-includes
	"Die Includes werden vom Compiler-Preprozessor benötigt")
(set #prp-copy-libs
	"Kopiere die Linker-Bibliotheken")
(set #hlp-copy-libs
	"Die Bibliotheken werden vom Linker benötigt")
(set #prp-copy-manual
	"Kopiere die Dokumentation")
(set #hlp-copy-manual
	"Eine Amiga-Guide-Datei zu StormC")
(set #prp-copy-bin
	"Kopiere die Ausführbaren Dateien des Compilersystems")
(set #hlp-copy-bin
	"Bei der allerersten Installation sollten Sie auch alle Dateien kopieren")
	
; Die Dateigrößen

(set size-stormcpp			54000)
(set size-stormc				424000)
(set size-stormed				312000)
(set size-stormshell	 	 	416000)
(set size-stormrun			381000)
(set size-stormasm			36000)
(set size-stormpics			50000)
(set size-stormlex			50000)
(set size-libs					320000)
(set size-inlcudes			950000)
(set size-demos				200000)

(set size-komplett	( + size-stormrun size-stormasm size-stormcpp size-stormc size-stormed size-stormshell size-stormpics size-stormlex size-libs size-inlcudes size-demos))

; ----------------------------- Prozeduren ------------------------------

(Procedure Make_Folder
    (
    (set folder (tackon folder "StormC"))
    (if (= (exists folder) 0)
       (
       (makedir folder (infos))
       )
    ))
)

;=====================================================================================
; Beginn der Installation
;=====================================================================================

; Eine kleine Einleitung, gefolgt vom Startbild des Installers.

(set act-user-level @user-level)
(user 1)

(message (cat	"\nWillkommen bei der Installation der \n\n\"StormC-Demoversion "
					 stcpp-version " vom "stcpp-date "\"!\n\n"
					"Dieses Skript kopiert die verschiedenen Dateien, "
					"aus denen sich das Compilersystem zusammensetzt, "
					"auf Ihre Festplatte.\n"))

(user act-user-level)
(welcome)

(complete 5)

(set act-user-level @user-level)
(user 1)


;	Alte Version prüfen und entsprechende Warnung ausgeben! **************************************************************

(set folder "WORK:StormC")

(if (exists "StormC:" (noreq))
	(
		(message (cat	"\nAuf Ihrer Festplatte befindet sich bereits eine\n"
						"Installation von StormC! Wählen Sie bitte die über-\n"
						"geordnete Schublade oder das jeweilige Laufwerk an,\n"
						"wenn Sie ihr altes System aktualisieren möchten!"))

	(set folder (getassign "STORMC"))
	)
)

(set cmpstr (getassign "STORMC"))

(user act-user-level)

(if (= @user-level 0)
	(
	(user 1)
	(message (cat	"Im Einsteiger-Modus wird davon ausgegangen, daß Storm C auf "
						"einer Festplatte installiert wird, auf der noch mindestens "
						"ca. 5 MByte freier Speicherplatz verfügbar sind. Sie werden "
						"dazu im nächsten Fenster nach dem Namen der gewünschten "
						"Schublade gefragt.\n\n"
						"Alle weiteren Angaben werden dann vom Installations-Skript "
						"möglichst genau an Ihr System angepaßt."))))

(set ok 0)
(while (not ok)
	(set folder
		(askdir
			(prompt (cat "\n"
							 "Auswahl des Pfades für die Compiler-Installation.\n"
							 "Eine Schublade mit dem Namen StormC wird automatisch erzeugt!"))
			(help (cat	"    Sie können über das Symbol 'Laufwerke anz.' (bzw. 'Show drives') "
							"eine Übersicht über alle Laufwerke Ihres Amiga anfordern; aus "
							"dieser Übersicht sollten Sie nur die oberen, nicht farblich "
							"gekennzeichneten Einträge auswählen.\n"
							"    Typische sinnvolle Namen sind z.B. \"WORK:\", \"HD0:\" oder \"DH0:\"; "
							"nicht verwenden sollten Sie Namen wie \"DF0:\", \"DF1:\", "
							"\"DF2:\", \"DF3:\", \"RAD:\", \"RAM:\", \"System2.0:\", "
							"\"WB_2.x:\", \"System3.0:\" oder \"WB_3.x:\"!"
							"\n\n"
							"Storm C kann nur in eine Schublade nicht aber auf eine "
							"Partition direkt installiert werden! Wenn Sie also nur ein Laufwerk "
							"für die Installation auswählen, wird Ihnen eine Fehlermeldung angezeigt!\n\n"
							@askdir-help))
			(default folder)
			(disk)
		)
	)

   (Make_Folder)    ; // Automatisch neues Verzeichnis anlegen!

	; Ist der Dateiname leer oder endet mit einem ':' oder existiert unter
	; diesem Namen kein Verzeichnis, wird eine Fehlermeldung angezeigt; andernfalls
	; kann die Auswahl-Schleife beendet werden.
	(if (or (or (or (<= (strlen folder) 0) (= (substr folder (- (strlen folder) 1) 1) ":")) (= (exists folder (noreq)) 0)) (= (getdiskspace folder) -1))
		(message (cat	"\nBei Ihrer Auswahl \"" folder "\" handelt es sich nicht um "
							"eine gültige Schublade!\n\n"
							"Sie können über das Symbol 'Laufwerke anz.' (bzw. 'Show drives') "
							"eine Übersicht über alle Laufwerke Ihres Amiga anfordern; aus "
							"dieser Übersicht sollten Sie nur die oberen, nicht farblich "
							"gekennzeichneten Einträge auswählen.\n"
							"Über den Schalter \"Neue Schublade anlegen...\" können Sie ein neue "
   							"Schublade erzeugen. Diese neue Schublade\nwird auf der Partition "
   							"angelegt, die Sie soeben betrachten."))
		;else
		(
			(set freediskspace (getdiskspace folder))	; Der freie Speicher auf diesem Medium

			(if (< freediskspace size-komplett)
				(
				(user 1)
				(message (cat	"\nAuf der ausgewählten Festplattenpartition "
											"steht nicht genügend freier Speicher für die "
											"komplette Installation des Compilersystems zur Verfügung.\n\n"
											"Freier Speicher " freediskspace "!\n"
											"Benötigter Speicher " size-komplett "!\n\n"
											"Bitte wählen Sie eine andere Partition, auf "
											"der entsprechende Kapazitäten vorhanden sind!"))				
				)
			;else
			(set ok 1)
			)
		)
	)
)

(makeassign "STORMC")

(user act-user-level)

(set @default-dest folder)	; Die Zuweisung ist sehr wichtig!

(set destbin	(tackon folder "StormSYS"))
(if                                      	; Compiler-Verzeichnis erzeugen
	(= (exists destbin) 0)
	(makedir destbin (infos))
)

(set destdemo	(tackon folder "Examples"))
(if                                      	; Demo-Verzeichnis erzeugen
	(= (exists destdemo) 0)
	(makedir destdemo (infos))
)
(set destinclude (tackon folder "Include"))
(if                                      	; Includes-Verzeichnis erzeugen
	(= (exists destinclude) 0)
	(makedir destinclude)
)

(set destlib	(tackon folder "Lib"))
(if                                      	; Libraries-Verzeichnis erzeugen
	(= (exists destlib) 0)
	(makedir destlib)
)

(set destmanual	(tackon folder "Manual"))
(if                                      	; Dokumentations-Verzeichnis erzeugen
	(= (exists destmanual) 0)
	(makedir destmanual (infos))
)

(complete 5)

; Liesmich Datei auf Festplatte kopieren!

(copyfiles
	(source source-Liesmich)
	(dest folder)
	(infos)
)

(complete 8)

(set morerunpath "run C/More Liesmich")

(run morerunpath)	; Liesmich laden

(complete 10)

(set destinfo	(tackon folder "StormCPP.info"))
(if                                      	; Projekt-Ikon erzeugen
	(= (exists destinfo) 0)
	(copyfiles
		(source source-ikon)
		(dest folder)
	)
)

(complete 15)

(copyfiles											; Beispiele kopieren
	(prompt #prp-copy-samples)
	(help #hlp-copy-samples)
	(source #samplesource)
	(dest destdemo)
	(all)
	(confirm)
)

(complete 20)

(copyfiles											; Settings kopieren
	(prompt #prp-copy-env)
	(help #hlp-copy-env)
	(source #envsource)
	(dest "ENVARC:")
	(all)
	(confirm)
)

(complete 22)

(copyfiles											; Settings kopieren
	(prompt #prp-copy-env)
	(help #hlp-copy-env)
	(source #envsource)
	(dest "ENV:")
	(all)
	(confirm)
)

(complete 25)

(copyfiles											; Compiler kopieren
	(prompt #prp-copy-bin)
	(help #hlp-copy-bin)
	(source #binsource)
	(dest destbin)
	(all)
	(confirm)
)

(complete 40)

(copyfiles											; Includes kopieren
	(prompt #prp-copy-includes)
	(help #hlp-copy-includes)
	(source #includesource)
	(dest destinclude)
	(all)
	(confirm)
)

(complete 60)

(copyfiles											; Libs kopieren
	(prompt #prp-copy-libs)
	(help #hlp-copy-libs)
	(source #libsource)
	(dest destlib)
	(all)
	(confirm)
)

(complete 80)

(copyfiles											; Manual kopieren
	(prompt #prp-copy-manual)
	(help #hlp-copy-manual)
	(source #manualsource)
	(dest destmanual)
	(all)
	(confirm)
)

(complete 95)


; ------- STARTUP ÄNDERN

(set command1 (cat  "ASSIGN STORMC: " folder ""))

(set command1.txt
	(cat 
	 	"\n\n\nUm mit StromC richtig arbeiten zu "
      "können muß eine Änderung an der User-Startup vorgenommen werden.\n\n"
	 	command1
	)
)

(startup "StormC"
	(prompt command1.txt)
	(help #help-startup)
	(command command1)
)

(makeassign "STORMC")
(makeassign "STORMC" folder)

;(set FREERROR (run "C/StormFree"))

;(if  ( <> FREERROR 0)
;	(
;	(delete "STORMC:BIN/StormCPP")
;	(delete "STORMC:BIN/StormCPP.info")
;	(delete "STORMC:StormCPP.info")
;	(message
;		"\n\n\n\n"
;		"Fehler bei der Installation.\n"
;		"Die Installation war fehlerhaft!\n\n"
;		"Stellen Sie bitte sicher, daß Ihre Festplatte ausreichend Speicherkapazität hat, "
;		" und, falls die Dateien bereits vorhanden sind diese nicht "
;		" Lösch- oder Schreibgeschützt sind.")
;	)
;)

(complete 100)

; ------- FERTIG

(message (cat 
	"\nInstallation des StormC Compilers beendet.\n"
   "Falls die Zeilen:\n" command1 "\nnicht in Ihre Startup-Sequence bzw. "
   "User-Startup eingefügt wurde, dann holen Sie dies bitte nach.\n\n"
   "\n\nWir wünschen ihnen viel Erfolg bei der Lösung Ihrer Programmieraufgaben!")
)