; Replacement hard drive installer for Colonization. V1.0.
; Copyright © 1998 Neil Cafferkey.
; $VER: "Install Colonization" 1.0 (29.10.98)


; Set constants

(set #text-viewer "More")

(set #generic-disk-name "Colonization Disk %ld")
(set #generic-disk-desc "Disk %ld")
(set #disk-count 3)
(set #save-disk-name "COLONIZATIONSAVES")
(set #save-disk-desc "saved games disk")

(set #kick-too-low-msg "Kickstart 2.0 or greater is required.")
(set #askdir-prompt
   (cat "Where should %s be installed?\nA drawer called \"%s\" will be"
      " created within the selected location."
   )
)
(set #dest-exists-msg "\"%s\" already exists.")
(set #ask-english-prompt
   (cat "Do you want to install International English files instead of"
      " American English?"
   )
)
(set #ask-english-help
   (cat "If you select `Yes', the original American English files will be"
      " altered after they are installed. In addition, the menu titles"
      " will be mixed case instead of uppercase, \"Exit to DOS\" will be"
      " changed to \"Quit\", etc. Some spelling and grammar errors are "
      " corrected too."
   )
)
(set #askdisk-prompt "Please insert %s in any drive")
(set #askdisk-help
   (cat "Put %s into one of your floppy disk drives if you want to"
      " continue."
   )
)
(set #patching-lang-msg "Installing International English files...")
(set #no-patch-lang-msg
   (cat "The International English files could not be installed.")
)
(set #ask-saves-prompt
   (cat "Do you have a disk called \"%s\" for saved games and the hall of"
      " fame?"
   )
)
(set #ask-saves-help
   (cat "If you have previously played the game from floppy disk you'll"
      " probably have a disk called \"%s\". If you select \"Yes\" then the"
      " saved game and hall of fame files on that disk will be installed."
      " Any other files on the disk won't be installed."
   )
)


; Check Kickstart version

(if (< (/ (getversion) 65536) 36)
   (abort #kick-too-low-msg)
)


; Ask where to install to

(set #default-dest
   (tackon
      (askdir
         (prompt (#askdir-prompt @app-name @app-name))
         (default @default-dest)
         (help @askdir-help)
         (disk)
      )
      @app-name
   )
)

(set @default-dest #default-dest)


; Check that destination directory doesn't already exist and create it

(if (OR (exists @default-dest) (exists (cat @default-dest ".info")))
   (abort (#dest-exists-msg @default-dest))
   (
      (makedir @default-dest (infos))
      (onerror
         (run
            ("Delete \"%s\" \"%s\" ALL FORCE"
               @default-dest (cat @default-dest ".info")
            )
         )
      )
   )
)


; Ask whether the user wants to install the International English patch

(set #patch-english
   (if
      (AND
         (= 0 (run "Which GPatch" (safe)))
         (= 0 (run "Which xfdDecrunch" (safe)))
      )
      (askbool (prompt #ask-english-prompt) (help #ask-english-help))
      0
   )
)


; Copy files from each disk

(set #i 0)

(while (< #i #disk-count)
   (set #disk-name (#generic-disk-name (+ #i 1)))
   (set #disk-desc (#generic-disk-desc (+ #i 1)))
   (askdisk
      (dest #disk-name)
      (prompt (#askdisk-prompt #disk-desc))
      (help (#askdisk-help ("%s %s" @app-name #disk-desc)))
   )
   (copyfiles
      (source (cat #disk-name ":"))
      (dest @default-dest)
      (pattern "~(C|Devs|Disk.info|Install#?|Libs|S)")
      (infos)
      (help @copyfiles-help)
   )
   (set #i (+ #i 1))
)


; Install International English patch

(if (AND (NOT @pretend) #patch-english)
   (
      (working #patching-lang-msg)
      (set #success 1)
      (foreach (tackon @default-dest "Exe") "#?ENG.(cat|txt)"
         (run
            ("xfddecrunch \"%s\""
               (tackon (tackon @default-dest "Exe") @each-name)
            )
         )
         (set #success
            (AND #success
               (= 0
                  (run
                     ("GPatch \"%s\" \"%s\" \"%s\""
                        (tackon (tackon @default-dest "Exe") @each-name)
                        "langpatch" (tackon @default-dest @each-name)
                     )
                  )
               )
            )
         )
      )
      (if #success
         (foreach (tackon @default-dest "Exe") "#?ENG.(cat|txt)"
            (delete (tackon (tackon @default-dest "Exe") @each-name))
            (rename
               (tackon @default-dest @each-name)
               (tackon (tackon @default-dest "Exe") @each-name)
            )
         )
         (
            (foreach (tackon @default-dest "Exe") "#?ENG.(cat|txt)"
               (delete (tackon @default-dest @each-name))
            )
            (message #no-patch-lang-msg)
         )
      )
   )
)


; Change default tool of read me files

(if (NOT @pretend)
   (foreach @default-dest "(English|Français|Deutsch)"
      (tooltype
         (dest (tackon @default-dest @each-name))
         (setdefaulttool #text-viewer)
      )
   )
)


; Copy files from saved game disk if requested by user

(if
   (askbool (prompt (#ask-saves-prompt #save-disk-name))
      (help (#ask-saves-help #save-disk-name))
   )
   (
      (set #disk-name #save-disk-name)
      (set #disk-desc ("%s %s" "the" #save-disk-desc))
      (set #full-disk-desc ("%s %s %s" "the" @app-name #save-disk-desc))
      (askdisk
         (dest #disk-name)
         (prompt (#askdisk-prompt #disk-desc))
         (help (#askdisk-help #full-disk-desc))
      )
      (copyfiles
         (source (cat #disk-name ":"))
         (dest (tackon @default-dest "exe"))
         (pattern "(HallFame.dat|Colony??.sav)")
         (files)
         (help @copyfiles-help)
      )
   )
)


