; install - Installer script for Eiffel/Sofa mode.
; Copyright 1999 Thomas Aglassinger and others, see file "forum.txt"
;
; $VER: Install 2.2 (10.1.00)


; Ensure that minimum installer version to be installed

(set #minimum-installer-version 43)
(set #minimum-installer-revision 3)
(set #minimum-installer-id
   (+ #minimum-installer-revision
       (* #minimum-installer-version 65536)
   )
)
(debug "  minimum-installer-id = " #minimum-installer-id)
(debug "  current-installer-id = " @installer-version)

(if (< @installer-version #minimum-installer-id)
  (
    (set #message-wrong-installer
    (cat "You have an old version of the program `Installer' on your Amiga!\n\n"
         "The installation procedure needs at least Installer "
         #minimum-installer-version "." #minimum-installer-revision ".\n\n"
         "Please obtain a newer version!\n\n"
         "(Check Aminet or the WWW site of the current owner of the rights for "
         "Amiga - whoever that might be right now.)"
    ))

    (debug "installer too old")
    (abort #message-wrong-installer)
  )
)

(set #damage-estimation
(cat "Without it, most functions of the Toolbar will not work. "
     "Nevertheless, the syntax parser and scanner will be available.\n\n"
     "Refer to the manual to learn from where to download it."
))

; Check if rexxdossupport is installed
(if (NOT (exists "libs:rexxdossupport.library" (noreq)))
   (
      (set #message-rexxdos-missing
      (cat "For the add-on to work properly, "
           "the file \"rexxdossupport.library\" must be installed in the "
           "\"libs:\" drawer.\n\n"
           #damage-estimation
      ))
      (message #message-rexxdos-missing (all))
   )
)

; Check if Sofa is installed
(if (NOT (exists "Sofa:" (noreq)))
   (
      (set #message-sofa-missing
      (cat "For the add-on to work properly, "
           "the Sofa distribution of the SmallEiffel compiler must be "
           "installed in the \"Sofa:\" drawer.\n\n"
           #damage-estimation
      ))
      (message #message-sofa-missing (all))
   )
)


(delopts "oknodelete" "force" "askuser")

(complete 0)

(onerror
   (if (> @ioerr 0)
      (
         (delete "env:INSTALLOPTIONS")
         (message "An error has occurred. Please contact the author.")
      )
   )
)

; initialize return code

(textfile (dest "env:COMPONENTINSTALL") (append "INCOMPLETE"))

; initialize strings

(set #golded_version "6.2.0")
(set #golded_version_id 62)

(if (= @language "deutsch")
    (
       (set #eiffel_uninstalling "Die Eiffel-Erweiterung wird entfernt ...")
       (set #eiffel_badversion   (cat "Diese Software benötigt GoldED " #golded_version " !"))
       (set #eiffel_welcome      "Willkommen beim Setup für die Eiffel-Erweiterung !")
       (set #eiffel_install      "Installieren")
       (set #eiffel_uninstall    "Entfernen")
       (set #eiffel_golded       "Bitte installieren Sie GoldED, bevor Sie diese Installation ausführen !")
       (set #eiffel_language     "Einige Komponenten dieser Erweiterung liegen in verschiedenen Sprachversionen vor. Wählen Sie eine Sprache aus:")
       (set #eiffel_registry     "Registry wird aktualisiert...")
    )
    (
       (set #eiffel_uninstalling "Uninstalling Eiffel add-on ...")
       (set #eiffel_badversion   (cat "This software requires GoldED " #golded_version " !"))
       (set #eiffel_welcome      "Welcome to the setup for the Eiffel add-on !")
       (set #eiffel_install      "Install")
       (set #eiffel_uninstall    "Uninstall")
       (set #eiffel_golded       "Please install GoldED before you install this add-on !")
       (set #eiffel_language     "Some components of this software support multiple languages. Choose a language:")
       (set #eiffel_registry     "Updating registry ...")
    )
)

(if (exists "golded:" (NOREQ))
   (
      (set vernum (getversion "golded:golded"))
      (set ver (/ vernum 65536))
      (set rev (- vernum (* ver 65536)))
      (set version (+ (* 10 ver) rev))

      (if (< version #golded_version_id)
         (
            (message #eiffel_badversion)
         )
      )

      ; read command passed in to our script in the env variable INSTALLOPTIONS
      (if (exists "env:INSTALLOPTIONS" (noreq))
         ; (getenv) may not be used without checking if var exists (installer bug)
         (
            (set eiffel_installmode (getenv "INSTALLOPTIONS"))
            (if (= eiffel_installmode "UNINSTALL")
               (working #eiffel_uninstalling)
               (message #eiffel_welcome)
            )
         )
         (set eiffel_installmode "ASK")
      )

      (if (= eiffel_installmode "ASK")
         (if
            (askbool
               (prompt #eiffel_welcome)
               (choices
                  #eiffel_install
                  #eiffel_uninstall
               )
               (help @askbool_help)
            )

            (set eiffel_installmode "INSTALL")
            (set eiffel_installmode "UNINSTALL")
         )
      )

      (delete "env:INSTALLOPTIONS")

      ; verify directory structure

      (makedir "golded:etc")
      (makedir "golded:etc/api")
      (makedir "golded:etc/syntax")
      (makedir "golded:etc/images")
      (makedir "golded:etc/images/toolbar")
      (makedir "golded:etc/scanner")
      (makedir "golded:etc/uninstall")
      (makedir "golded:add-ons")

      ; install registry editor (if not yet installed)

      (if (exists "golded:add-ons/regedit")
         (
            (set oldver (getversion "golded:add-ons/regedit/regedit"))
            (set newver (getversion "regedit/regedit"))
            (if (> newver oldver)
               (copyfiles
                  (source "regedit")
                  (dest "golded:add-ons/regedit")
                  (all)
                  (nogauge)
               )
            )
         )
         (copyfiles
            (source "regedit")
            (dest "golded:add-ons/regedit")
            (all)
            (nogauge)
         )
      )

      (if (= eiffel_installmode "UNINSTALL")

         ; uninstall
         (
            ; update registry
            (working #eiffel_registry)
            (if (exists ("golded:etc/uninstall/envSOF21.bat"))
               (
                   (run "golded:add-ons/regedit/regedit script=golded:etc/uninstall/envSOF21.bat label=uninstall")
                   (delete "golded:etc/uninstall/envSOF21.bat")
               )
               (run "golded:add-ons/regedit/regedit script=install.bat label=uninstall")
            )
            (exit (quiet))
         )

         ; install
         (
            (if (= eiffel_installmode "ASK")
               (welcome)
            )

            ; install basic files
            (makedir "golded:add-ons/eiffel")
            (copyfiles
               (source "eiffel")
               (dest "golded:add-ons/eiffel")
               (all)
            )

            (set eiffel_language "english")

            ; install manual
            (copylib
               (source "Manual.guide")
               (dest "golded:add-ons/eiffel")
            )
            (copyfiles
               (source "forum.txt")
               (dest "golded:add-ons/eiffel")
            )

            ; install scanner
            (copylib
               (source "scanner/eiffel")
               (dest "golded:etc/scanner")
            )

            ; install template
            (makedir "golded:add-ons/eiffel/template")
            (copylib
               (source "template/new_class.e")
               (dest "golded:add-ons/eiffel/template")
            )

            ; install toolbar images
            (copyfiles
                (source "toolbar")
                (dest "golded:etc/images/toolbar")
                (all)
            )

            ; update registry
            (working #eiffel_registry)
            (run (cat "golded:add-ons/regedit/regedit script=install.bat ARGS " eiffel_language))

            ; prepare uninstallation
            (copyfiles
               (source "install.bat")
               (dest "golded:etc/uninstall")
               (newname "envSOF21.bat")
            )

            ; installation completed
            (textfile (dest "env:COMPONENTINSTALL") (append "OK"))
            (complete 100)
            (set @default-dest "golded:add-ons/eiffel")
            (if (= eiffel_installmode "INSTALL")
               (exit)
               (exit (quiet))
            )
         )
      )
   )

   ; no GoldEd installed
   (message #eiffel_golded)
)

(exit (quiet))
