; ImageFX Installer Utility
;
; For ImageFX release 1.03
;
; (Last updated: TEK 12/9/92)


(

   ; Which OS are we under?
   (set osver (/ (getversion) 65536))

   ; Ask where to install it...
   (set @default-dest
      (askdir
         (prompt "Select or create the directory where you would "
                 "like to install ImageFX.  (You may install over "
                 "an existing copy of ImageFX if you want "
                 "to update it to this new version - your current "
                 "configuration will be preserved.)")
         (help "ImageFX and all necessary files will be installed "
               "in the directory of your choice.  You may wish to "
               "create a new directory for ImageFX by using the "
               "'Make New Drawer' gadget.")
         (default "RAM:")
      )
   )

   (working "Installing ImageFX Program...")

   (copyfiles
      (prompt "")
      (help @copyfiles-help)
      (source "ImageFX:ImageFX")
      (dest @default-dest)
   )

   ; Do not write over existing icons!
   (if (= (exists (tackon @default-dest "ImageFX.info")) 0)
      (
         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX:ImageFX.info")
            (dest @default-dest)
         )
      )
   )

   ; Save user's existing Default.keys file to Old.Default.keys

   (if (exists (tackon @default-dest "Default.keys"))
      (
         (set copykeys 1)
         (if (> @user-level 1)
            (set copykeys
               (askbool
                  (prompt "Do you want to make a backup copy of your current "
                          "'Default.keys' file (in case you have made any changes "
                          "you want to keep)?")
                  (help "")
                  (default 1)
               )
            )
         )

         (if (<> copykeys 0)
            (
               (copyfiles
                  (prompt "")
                  (help @copyfiles-help)
                  (source (tackon @default-dest "Default.keys"))
                  (dest @default-dest)
                  (newname "Old.Default.keys")
               )
               (if (> @user-level 1)
                  (message "Your Default.keys file has been saved to 'Old.Default.keys'.")
               )
            )
         )
      )
   )

   (copyfiles
      (prompt "")
      (help @copyfiles-help)
      (source "ImageFX:Default.keys")
      (dest @default-dest)
   )

   ; Since presets are exactly the same, don't copy over
   ; an existing file, in case the user has modified them.

   (if (= (exists (tackon @default-dest "Default.presets")) 0)
      (
         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX:Default.presets")
            (dest @default-dest)
         )
      )
   )

   ; README file is now on Disk #1

   (copyfiles
      (prompt "")
      (help @copyfiles-help)
      (source "ImageFX:")
      (dest @default-dest)
      (choices
         "README"
         "README.info"
      )
   )

   ;----------------------------------------------------------
   ; Prompt for second disk.

   (askdisk
      (prompt "Please insert ImageFX Disk #2 in any drive.")
      (help "")
      (dest "ImageFX2")
   )

   (working "Installing ImageFX Modules...")

   (makedir (tackon @default-dest "modules"))
   (makedir (tackon @default-dest "modules/preview"))
   (makedir (tackon @default-dest "modules/scanner"))
   (makedir (tackon @default-dest "modules/render"))
   (makedir (tackon @default-dest "modules/printer"))
   (makedir (tackon @default-dest "modules/quantize"))
   (makedir (tackon @default-dest "modules/sys"))
   (makedir (tackon @default-dest "modules/loaders"))
   (makedir (tackon @default-dest "modules/savers"))

   (if (exists (tackon @default-dest "modules/loaders"))
      (
         ; Delete old copies of loaders
         (delete (tackon @default-dest "modules/loaders/ALIAS"))
         (delete (tackon @default-dest "modules/loaders/ANIM"))
         (delete (tackon @default-dest "modules/loaders/BMP"))
         (delete (tackon @default-dest "modules/loaders/DCTV"))
         (delete (tackon @default-dest "modules/loaders/DPIIE"))
         (delete (tackon @default-dest "modules/loaders/FLI"))
         (delete (tackon @default-dest "modules/loaders/GIF"))
         (delete (tackon @default-dest "modules/loaders/HAME"))
         (delete (tackon @default-dest "modules/loaders/ICO"))
         (delete (tackon @default-dest "modules/loaders/ILBM"))
         (delete (tackon @default-dest "modules/loaders/Impulse"))
         (delete (tackon @default-dest "modules/loaders/info"))
         (delete (tackon @default-dest "modules/loaders/JPEG.000"))
         (delete (tackon @default-dest "modules/loaders/JPEG.030"))
         (delete (tackon @default-dest "modules/loaders/PBM"))
         (delete (tackon @default-dest "modules/loaders/PCX"))
         (delete (tackon @default-dest "modules/loaders/Rendition"))
         (delete (tackon @default-dest "modules/loaders/Sculpt"))
         (delete (tackon @default-dest "modules/loaders/Targa"))
         (delete (tackon @default-dest "modules/loaders/TIFF"))
         (delete (tackon @default-dest "modules/loaders/VMEM"))
      )
   )

   (copyfiles
      (prompt "Select Loader Modules:")
      (help @copyfiles-help)
      (source "ImageFX2:modules/loaders")
      (dest (tackon @default-dest "modules/loaders"))
      (choices
         "ALIAS" "ANIM" "BMP" "DCTV" "DPIIE" "FLI" "GIF"
         "HAME" "ICO" "ILBM" "Impulse" "info" "JPEG.000"
         "JPEG.030" "PBM" "PCX" "Rendition" "Sculpt"
         "Targa" "TIFF" "VMEM"
      )
      (confirm)
   )

   (if (exists (tackon @default-dest "modules/savers"))
      (
         ; Delete old copies of savers
         (delete (tackon @default-dest "modules/savers/ALIAS"))
         (delete (tackon @default-dest "modules/savers/ANIM"))
         (delete (tackon @default-dest "modules/savers/BMP"))
         (delete (tackon @default-dest "modules/savers/GIF"))
         (delete (tackon @default-dest "modules/savers/ILBM"))
         (delete (tackon @default-dest "modules/savers/JPEG.000"))
         (delete (tackon @default-dest "modules/savers/JPEG.030"))
         (delete (tackon @default-dest "modules/savers/PBM"))
         (delete (tackon @default-dest "modules/savers/Rendition"))
         (delete (tackon @default-dest "modules/savers/Sculpt"))
         (delete (tackon @default-dest "modules/savers/Targa"))
         (delete (tackon @default-dest "modules/savers/TIFF"))
         (delete (tackon @default-dest "modules/savers/VMEM"))
      )
   )

   (copyfiles
      (prompt "Select Saver Modules:")
      (help @copyfiles-help)
      (source "ImageFX2:modules/savers")
      (dest (tackon @default-dest "modules/savers"))
      (choices
         "ALIAS" "ANIM" "BMP" "GIF" "ILBM" "JPEG.000" "JPEG.030"
         "PBM" "Rendition" "Sculpt" "Targa" "TIFF" "VMEM"
      )
      (confirm)
   )

   (if (exists (tackon @default-dest "modules/preview"))
      (
         ; Delete old copies of previews
         (delete (tackon @default-dest "modules/preview/Amiga"))
         (delete (tackon @default-dest "modules/preview/Amiga-AGA"))
         (delete (tackon @default-dest "modules/preview/Firecracker"))
         (delete (tackon @default-dest "modules/preview/Hame"))
         (delete (tackon @default-dest "modules/preview/IV24"))
      )
   )

   (copyfiles
      (prompt "Select Preview Modules:")
      (help @copyfiles-help)
      (source "ImageFX2:modules/preview")
      (dest (tackon @default-dest "modules/preview"))
      (choices
         "Amiga" "Amiga-AGA" "Firecracker" "Hame" "IV24"
      )
      (confirm)
   )

   (if (exists (tackon @default-dest "modules/render"))
      (
         ; Delete old copies of render modules
         (delete (tackon @default-dest "modules/render/Amiga"))
         (delete (tackon @default-dest "modules/render/Amiga1.3"))
         (delete (tackon @default-dest "modules/render/DCTV"))
         (delete (tackon @default-dest "modules/render/EGS"))
         (delete (tackon @default-dest "modules/render/Firecracker"))
         (delete (tackon @default-dest "modules/render/Foreign"))
         (delete (tackon @default-dest "modules/render/Hame"))
         (delete (tackon @default-dest "modules/render/IV24"))
         (delete (tackon @default-dest "modules/render/SAGE"))
         (delete (tackon @default-dest "modules/render/OpalVision"))
      )
   )

   (copyfiles
      (prompt "Select Render Modules:")
      (help @copyfiles-help)
      (source "ImageFX2:modules/render")
      (dest (tackon @default-dest "modules/render"))
      (choices
         "Amiga" "Amiga1.3" "DCTV" "EGS" "Firecracker"
         "Foreign" "Hame" "IV24" "SAGE" "OpalVision"
      )
      (confirm)
   )

   (if (exists (tackon @default-dest "modules/scanner"))
      (
         ; Delete old copies of scanner modules
         (delete (tackon @default-dest "modules/scanner/ES300C.alt"))
         (delete (tackon @default-dest "modules/scanner/ES300C"))
         (delete (tackon @default-dest "modules/scanner/FrameGrabber"))
         (delete (tackon @default-dest "modules/scanner/IVFG"))
         (delete (tackon @default-dest "modules/scanner/JX100"))
      )
   )

   (copyfiles
      (prompt "Select Scanner Modules:")
      (help @copyfiles-help)
      (source "ImageFX2:modules/scanner")
      (dest (tackon @default-dest "modules/scanner"))
      (choices
         "ES300C.alt" "ES300C" "FrameGrabber" "IVFG" "JX100"
      )
      (confirm)
   )

   (if (exists (tackon @default-dest "modules/printer"))
      (
         ; Delete old copies of printer modules
         (delete (tackon @default-dest "modules/printer/PostScript"))
         (delete (tackon @default-dest "modules/printer/Prefs"))
      )
   )

   (copyfiles
      (prompt "Select Printer Modules:")
      (help @copyfiles-help)
      (source "ImageFX2:modules/printer")
      (dest (tackon @default-dest "modules/printer"))
      (choices
         "PostScript" "Prefs"
      )
      (confirm)
   )

   (if (exists (tackon @default-dest "modules/quantize"))
      (
         ; Delete old copies of printer modules
         (delete (tackon @default-dest "modules/quantize/MedianCut"))
         (delete (tackon @default-dest "modules/quantize/Enhanced"))
      )
   )

   (copyfiles
      (prompt "Select Quantize Modules:")
      (help @copyfiles-help)
      (source "ImageFX2:modules/quantize")
      (dest (tackon @default-dest "modules/quantize"))
      (choices
         "MedianCut" "Enhanced"
      )
      (confirm)
   )

   (copyfiles
      (prompt "")
      (help @copyfiles-help)
      (source "ImageFX2:modules/sys")
      (dest (tackon @default-dest "modules/sys"))
      (all)
   )

   ; Preserve user's current convolves, since they aren't different
   (if (= (exists (tackon @default-dest "matrix")) 0)
      (
         (working "Installing Default Convolution Matrices...")

         (makedir (tackon @default-dest "matrix"))

         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX2:matrix")
            (dest (tackon @default-dest "matrix"))
            (all)
         )
      )
   )

   ; Preserve user's current transforms, since they aren't any different
   (if (= (exists (tackon @default-dest "transform")) 0)
      (
         (working "Installing Color Transform Presets...")

         (makedir (tackon @default-dest "transform"))

         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX2:transform")
            (dest (tackon @default-dest "transform"))
            (all)
         )
      )
   )

   ; Copy libraries needed from disk 2.

   (working "Checking for required libraries...")

   (copylib
      (prompt "")
      (help @copylib-help)
      (source "ImageFX2:libs/iffparse.library")
      (dest "LIBS:")
   )

   (copylib
      (prompt "")
      (help @copylib-help)
      (source "ImageFX2:libs/amigaguide.library")
      (dest "LIBS:")
   )

   (copylib
      (prompt "")
      (help @copylib-help)
      (source "ImageFX2:libs/dctv.library")
      (dest "LIBS:")
   )

   (copylib
      (prompt "")
      (help @copylib-help)
      (source "ImageFX2:libs/req.library")
      (dest "LIBS:")
   )

   ;----------------------------------------------------------
   ; Prompt for third disk.

   (askdisk
      (prompt "Please insert ImageFX Disk #3 in any drive.")
      (help "")
      (dest "ImageFX3")
   )

   (working "Installing Hook Programs...")

   (makedir (tackon @default-dest "Hooks"))

   (copyfiles
      (prompt "")
      (help @copyfiles-help)
      (source "ImageFX3:Hooks")
      (dest (tackon @default-dest "Hooks"))
      (all)
   )

   (if (= (exists (tackon @default-dest "Hooks.info")) 0)
      (
         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX3:Hooks.info")
            (dest @default-dest)
         )
      )
   )

   (working "Installing Help Files...")

   (copyfiles
      (prompt "")
      (help @copyfiles-help)
      (source "ImageFX3:help")
      (dest (tackon @default-dest "help"))
      (all)
   )

   (working "Installing Arexx Programs...")

   ; Make copy of existing rexx directory, so user can
   ; save his current Arexx programs if he wants.

   (if (exists (tackon @default-dest "rexx"))
      (
         (set copyrexx 1)
         (if (> @user-level 1)
            (set copyrexx
               (askbool
                  (prompt "Do you want to make a backup copy of your current "
                          "Arexx directory (in case you have made any changes "
                          "to the default Arexx scripts?")
                  (help "")
                  (default 1)
               )
            )
         )

         (if (<> copyrexx 0)
            (
               (makedir (tackon @default-dest "oldrexx"))

               (copyfiles
                  (prompt "")
                  (help @copyfiles-help)
                  (source (tackon @default-dest "rexx"))
                  (dest (tackon @default-dest "oldrexx"))
                  (all)
               )

               (if (> @user-level 1)
                  (message "Your Arexx directory has been saved to the 'oldrexx' directory.")
               )
            )
         )
      )
   )

   (makedir (tackon @default-dest "rexx"))

   (copyfiles
      (prompt "")
      (help @copyfiles-help)
      (source "ImageFX3:rexx")
      (dest (tackon @default-dest "rexx"))
      (all)
   )

   (working "Installing Icons...")

   (if (<= osver 36)
      (

         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX3:icons_1.3/ImageFX_13.info")
            (dest @default-dest)
            (newname "ImageFX.info")
         )

         (if (= (exists (tackon @default-dest "ImageFX_WB.info")) 0)
            (
               (copyfiles
                  (prompt "")
                  (help @copyfiles-help)
                  (source "ImageFX3:icons_1.3")
                  (dest @default-dest)
                  (choices
                     "ImageFX_WB.info"
                     "IMP.info"
                     "Cinemorph.info"
                  )
               )
            )
         )

         (if (= (exists (tackon @default-dest "icons")) 0)
            (
               (makedir (tackon @default-dest "icons"))

               (copyfiles
                  (prompt "")
                  (help @copyfiles-help)
                  (source "ImageFX3:icons_1.3")
                  (dest (tackon @default-dest "icons"))
                  (choices
                     "Buffer.info"
                     "Brush.info"
                     "Rendered.info"
                     "Palette.info"
                  )
               )
            )
         )

      )
      ; else
      (

         (if (= (exists (tackon @default-dest "ImageFX_WB.info")) 0)
            (
               (copyfiles
                  (prompt "")
                  (help @copyfiles-help)
                  (source "ImageFX3:icons_2.0")
                  (dest @default-dest)
                  (choices
                     "ImageFX_WB.info"
                     "IMP.info"
                     "Cinemorph.info"
                  )
               )
            )
         )

         (if (= (exists (tackon @default-dest "icons")) 0)
            (
               (makedir (tackon @default-dest "icons"))

               (copyfiles
                  (prompt "")
                  (help @copyfiles-help)
                  (source "ImageFX3:icons_2.0")
                  (dest (tackon @default-dest "icons"))
                  (choices
                     "AppIcon.info"
                     "Buffer.info"
                     "Brush.info"
                     "Rendered.info"
                     "Palette.info"
                  )
               )
            )
         )

      )
   )

   (set copysamples 1)
   (if (> @user-level 1)
      (set copysamples
         (askbool
            (prompt "Do you want to copy the sample images, animations, and "
                    "morph projects over?")
            (help "")
            (default 1)
         )
      )
   )

   (if (<> copysamples 0)
      (

         ;----------------------------------------------------------
         ; Prompt for fourth disk.

         (askdisk
            (prompt "Please insert ImageFX Disk #4 in any drive.")
            (help "")
            (dest "ImageFX4")
         )

         (working "Installing Sample Files...")

         (if (= (exists (tackon @default-dest "Animations.info")) 0)
            (
               (copyfiles
                  (prompt "")
                  (help @copyfiles-help)
                  (source "ImageFX4:")
                  (dest @default-dest)
                  (choices
                     "Animations.info"
                     "MorphProjects.info"
                     "Pictures.info"
                  )
               )
            )
         )

         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX4:Animations")
            (dest (tackon @default-dest "Animations"))
            (all)
         )

         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX4:MorphProjects")
            (dest (tackon @default-dest "MorphProjects"))
            (all)
         )

         (copyfiles
            (prompt "")
            (help @copyfiles-help)
            (source "ImageFX4:Pictures")
            (dest (tackon @default-dest "Pictures"))
            (all)
         )
      )
   )

   (makeassign "ImageFX" @default-dest)

   ; Add IFX: assign to startup-sequence, only ask if user is
   ; an expert.  This should be the last thing in case this
   ; !@#$@# installer utility chokes modifying the startup.

   (set modifystartup 1)
   (if (> @user-level 1)
      (set modifystartup
         (askbool
            (prompt "Do you want to add an ImageFX: assign to your Startup sequence?")
            (help "")
            (default 1)
         )
      )
   )

   (if (<> modifystartup 0)
      (
         (onerror
            (message
               "Cannot update startup sequence.  You will need to "
               "add the following command manually: "
               "'Assign ImageFX: %ls'" @default-dest)
         )

         (startup "ImageFX"
            (prompt "")
            (help @startup-help)
            (command "Assign ImageFX: " @default-dest)
         )

      )
   )

)
