; $VER: Install_MiamiDx 1.0c (10.04.2000)
(procedure P-check-system-version
 (if (< (/ @installer-version 65536) 43)
  (abort "The MiamiDx installation script needs Installer\n"
   "version 43 or higher. It is available from Aminet\n"
   "and from www.nordicglobal.com")
 )
 (set #exec-version (/ (getversion) 65536))
 (if (< #exec-version 37)
  (abort "MiamiDx needs Kickstart 2.04 or higher.\n")
 )
 (if (< #exec-version 39)
  (set #ag-browser "AmigaGuide")
  (set #ag-browser "MultiView")
 )
 (set #wb-version (/ (getversion "LIBS:workbench.library") 65536))
)

(procedure P-select-destination-directory
 (if (exists "Miami:" (noreq))
  (
   (set #old-miami-assign 1)
   (set #old-miami-assign-location (expandpath "Miami:"))
   (set @default-dest
    (askdir
     (prompt "Select the directory where you want to "
      "install MiamiDx. You already have a 'Miami:' "
      "assign on your system, so it is assumed that this "
      "is the location of an older version of Miami or MiamiDx that "
      "you want to upgrade.")
     (help "Select the directory where you want to "
      "install MiamiDx. Since you already have a 'Miami:' "
      "assign on your system you should probably accept "
      "the default.")
     (default "Miami:")
    )
   )
  ) (
   (set #old-miami-assign 0)
   (if (exists "Work:" (noreq))
    (set @default-dest "Work:")
    (set @default-dest "SYS:")
   )
   (set @default-dest
    (askdir
     (prompt "Select the directory where you want to "
      "install MiamiDx. An additional directory "
      "will *NOT* be created at the location you specify.")
     (help "Select the directory where you want to "
      "install MiamiDx. All necessary files will be copied "
      "to that directory during installation. A new directory "
      "will *NOT* be created at the location you specify. "
      "This means if you want MiamiDx to be installed in its "
      "own directory then you need to create that directory "
      "yourself first.")
     (default @default-dest)
    )
   )
  )
 )
 (makeassign "Miami" @default-dest)
)

(procedure P-select-binary
 (set #cpu-choice (if (patmatch "(68000|68010)" (database "cpu")) 0 1))
 (if (= #cpu-choice 0)
  (abort "The current version of MiamiDx requires a 68020\n"
   "or higher CPU. A version for 68000/010 may be\n"
   "available at a later time.")
 )
)

(procedure P-select-guis
 (set #gui-options
  (askoptions
   (prompt "Please select which GUI modules you want to use with MiamiDx. The "
    "MUI module requires MUI 3.8 or higher, which has to be installed "
    "BEFORE installing MiamiDx.")
   (help "MiamiDx supports several different user interface engines, "
    "but at the moment only the MUI version is available")
   (choices "MUI")
  )
 )
 (if (= #gui-options 0)
  (abort "You need to install at least one GUI module.")
 )
 (if (not (= 0 (BITAND #gui-options 3))) (
  (if (not (exists "MUI:Libs/muimaster.library" (noreq)))
   (abort "You need to install MUI 3.8 before you can install GUI "
    "modules for MiamiDx.")
  )
  (if (< (/ (getversion "MUI:Libs/muimaster.library") 65536) 18)
   (abort "Your installed MUI version is too old for MiamiDx. "
    "Please upgrade to MUI 3.8 or higher before installing MiamiDx."
   )
  )
 ))
)

(procedure P-select-sana
 (set #sana-choice
  (askbool
   (prompt "Do you want to install sanamni.device in\n"
    "DEVS:Networks ? That device allows you to use\n"
    "some third-party software like Envoy with MNI\n"
    "drivers.")
   (help "MiamiDx supports 'MNI', a new driver standard\n"
    "for Ethernet. sanamni.device allows you to use\n"
    "these new drivers with some older third-party\n"
    "software such as Envoy that usually requires\n"
    "SANA-II drivers")
  )
 )
)

(procedure P-check-gui
 (if (not (exists (tackon #source-dir #current-gui)))
  (abort "Before you can install MiamiDx you first need to\n"
   "download and unpack the archives that contain the MiamiDx\n"
   "GUI modules you want to install.")
 )
)

(procedure P-check-guis
 (if (= 1 (BITAND #gui-options 1)) (
  (set #current-gui "MUI")
  (P-check-gui)
 ))
)


(procedure P-select-gui
 (if (= 1 (BITAND #gui-options 1))
  ((set #gui-choice-mui "MUI") (set #gui-choice 0))
  (set #gui-choice-mui "")
 )
 (set #gui-choice
  (askchoice
   (prompt "Please select which GUI module you want to use as the default "
    "module for MiamiDx")
   (help "MiamiDx supports several different user interface engines, "
    "but at the moment only the MUI module is available.")
   (choices #gui-choice-mui)
   (default #gui-choice)
  )
 )
 (set #gui-choice-name (select #gui-choice "MUI"))
)

(procedure P-select-icon
 (if (>= #wb-version 44)
  (set #icon-choice-os35 "OS 3.5")
  (set #icon-choice-os35 "")
 )
 (set #icon-choice
  (askchoice
   (prompt "Please select which icons you\nwant to use for MiamiDx and\n"
    "the utility programs:")
   (help "MiamiDx comes with four different\nicon styles. Please select\n"
    "the one you prefer.")
   (choices "do not install new icons" "standard" "Magic Workbench" "NewIcons"
    #icon-choice-os35)
  )
 )
)

(procedure P-copy-file
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest @default-dest)
  (optional force)
 )
)

(procedure P-set-tooltypes
 (if (not (= #icon-choice 0)) (
  (tooltype
   (dest (tackon @default-dest "MiamiDx"))
   (noposition)
  )
  (tooltype
   (dest (tackon @default-dest "MiamiInit"))
   (noposition)
  )
  (tooltype
   (dest (tackon @default-dest "MiamiRegister"))
   (noposition)
  )
  (tooltype
   (dest (tackon @default-dest "MiamiDx.guide"))
   (noposition)
   (setdefaulttool #ag-browser)
  )
 ))
)

(procedure P-add-to-startup
 (if #old-miami-assign
  (if (= #old-miami-assign-location (expandpath @default-dest))
   (set #change-startup 0)
   (set #change-startup 1)
  )
  (set #change-startup 1)
 )
 (if #change-startup
  (
   (set #startup-addition (cat
    "assign Miami: \"" (expandpath @default-dest) "\"\n"
    )
   )
   (if
    (askbool
     (prompt "It is NECESSARY that an assign "
      "'Miami:' is created for the MiamiDx installation "
      "directory. Would you like Installer "
      "to make the required change to your user-startup "
      "file ? If you answer 'No' then you need to make the "
      "addition yourself, manually, before you can use MiamiDx.")
     (help "It is NECESSARY that an assign "
      "'Miami:' is created for the MiamiDx installation "
      "directory. Would you like Installer "
      "to make the required change to your user-startup "
      "file ? If you answer 'No' then you need to make the "
      "addition yourself, manually, before you can use MiamiDx. "
      "You should only answer with 'No' if you prefer to edit "
      "the user-startup file yourself. If you answer 'No' then "
      "a file 'addition-to-user-startup' will be created in the "
      "MiamiDx installation directory instead. You need to add the "
      "contents of that file to your user-startup file.")
     (choices "Yes" "No")
    )
    (startup "Miami"
     (command #startup-addition)
     (prompt "Installer will modify your s:user-startup "
      "script. The following lines will be added:\n\n"
      #startup-addition)
     (help "Installer will modify your s:user-startup "
      "script. The following lines will be added:\n\n"
      #startup-addition)
    )
    (textfile
     (dest (tackon @default-dest "addition-to-user-startup"))
     (append #startup-addition)
    )
   )
  )
 )
)

(procedure P-set-envvars

 (set #env-equal-envarc (= (expandpath "ENV:") (expandpath "ENVARC:")))
 (if (not (exists "ENV:MIAMI"))
  (makedir "ENV:MIAMI")
 )
 (if (not #env-equal-envarc)
  (if (not (exists "ENVARC:MIAMI"))
   (makedir "ENVARC:MIAMI")
  )
 )
 (textfile
  (dest "ENV:MIAMI/GUI")
  (append #gui-choice-name)
 )
 (if (not #env-equal-envarc)
  (copyfiles
   (source "ENV:MIAMI/GUI")
   (dest "ENVARC:MIAMI")
  )
 )
)


(welcome "Welcome to the MiamiDx 1.0 installation.\n")

(set app-name "MiamiDx 1.0")

(P-check-system-version)

(if @pretend
  (abort "Pretend mode cannot be used with this\n"
   "installation script.")
)

(complete 0)

(set #source-dir (if (= 1 (exists @icon)) (pathonly (expandpath @icon))
 (expandpath @icon))
)

(P-select-destination-directory)

(complete 5)

(P-select-binary)

(complete 10)

(P-select-icon)

(complete 15)

(P-select-guis)

(P-select-gui)

(P-check-guis)

(P-select-sana)

(complete 20)

; start actual installation

; delete obsolete files from older Miami versions
(delete (tackon @default-dest "MiamiRemind.doc") (optional force))
(delete (tackon @default-dest "MiamiInitSANA2") (optional force) (infos))
(delete (tackon @default-dest "Miami.000") (optional force) (infos))
(delete (tackon @default-dest "Miami.020") (optional force) (infos))
(delete (tackon @default-dest "Miami.eval") (optional force) (infos))

(complete 25)

; copy MiamiDx binary selected by user
(copyfiles
 (source (tackon #source-dir "main/MiamiDx"))
 (dest @default-dest)
 (optional force)
)

(complete 30)

; copy individual files
(set #to-copy "main/MiamiDx.guide") (P-copy-file)
(set #to-copy "main/MiamiAddr") (P-copy-file)
(set #to-copy "main/MiamiArp") (P-copy-file)
(set #to-copy "main/MiamiDiG") (P-copy-file)
(set #to-copy "main/MiamiDNSQuery") (P-copy-file)
(set #to-copy "main/MiamiDod") (P-copy-file)
(set #to-copy "main/MiamiFinger") (P-copy-file)
(set #to-copy "main/MiamiFtp") (P-copy-file)
(set #to-copy "main/MiamiHost") (P-copy-file)
(set #to-copy "main/MiamiIfConfig") (P-copy-file)
(set #to-copy "main/MiamiInit") (P-copy-file)
(set #to-copy "main/MiamiIPFW") (P-copy-file)
(set #to-copy "main/MiamiIPNatD") (P-copy-file)
(complete 40)
(set #to-copy "main/MiamiMapMBone") (P-copy-file)
(set #to-copy "main/MiamiMRInfo") (P-copy-file)
(set #to-copy "main/MiamiMRouteD") (P-copy-file)
(set #to-copy "main/MiamiMTrace") (P-copy-file)
(set #to-copy "main/MiamiNetStat") (P-copy-file)
(set #to-copy "main/MiamiNSLookup") (P-copy-file)
(set #to-copy "main/MiamiPing") (P-copy-file)
(set #to-copy "main/MiamiRegister") (P-copy-file)
(complete 50)
(set #to-copy "main/MiamiRemind") (P-copy-file)
(set #to-copy "main/MiamiResolve") (P-copy-file)
(set #to-copy "main/MiamiRoute") (P-copy-file)
(set #to-copy "main/MiamiSecureShellKeygen") (P-copy-file)
(set #to-copy "main/MiamiSecureShellKill") (P-copy-file)
(set #to-copy "main/MiamiSysCtl") (P-copy-file)
(set #to-copy "main/MiamiTCPDump") (P-copy-file)
(set #to-copy "main/MiamiTelnet") (P-copy-file)
(set #to-copy "main/MiamiTelnetD") (P-copy-file)
(set #to-copy "main/MiamiTraceRoute") (P-copy-file)

(complete 60)

; copy libraries
(if (not (exists (tackon @default-dest "Libs")))
 (makedir (tackon @default-dest "Libs"))
)
(copyfiles
 (source (tackon #source-dir "main/Libs"))
 (dest (tackon @default-dest "Libs"))
 (optional force)
 (all)
)

(complete 62)

; copy MNI drivers
(if (not (exists (tackon @default-dest "MNI")))
 (makedir (tackon @default-dest "MNI"))
)
(copyfiles
 (source (tackon #source-dir "main/MNI"))
 (dest (tackon @default-dest "MNI"))
 (optional force)
 (all)
)

(complete 64)

; copy devices
(if (not (exists (tackon @default-dest "Devs")))
 (makedir (tackon @default-dest "Devs"))
)
(copyfiles
 (source (tackon #source-dir "main/Devs"))
 (dest (tackon @default-dest "Devs"))
 (optional force)
 (all)
)

(complete 66)

; copy sanamni.device
(if #sana-choice (
 (if (not (exists "DEVS:Networks"))
  (makedir "DEVS:Networks")
 )
 (copyfiles
  (source (tackon #source-dir "main/SANA2"))
  (dest "DEVS:Networks")
  (optional force)
  (all)
 )
))

(complete 68)

; copy PC files
(if (not (exists (tackon @default-dest "PC")))
 (makedir (tackon @default-dest "PC"))
)
(copyfiles
 (source (tackon #source-dir "main/PC"))
 (dest (tackon @default-dest "PC"))
 (optional force)
 (all)
)

(complete 70)

; copy GUI modules
(if (= 1 (BITAND #gui-options 1)) (
 (copyfiles
  (source (tackon #source-dir "MUI/MUI.MiamiDxGui"))
  (dest (tackon @default-dest "Libs"))
  (optional force)
 )
 (copyfiles
  (source (tackon #source-dir "MUI/MUI.MiamiToolsGui"))
  (dest (tackon @default-dest "Libs"))
  (optional force)
 )
))

(complete 80)

; set icons

(if (not (= #icon-choice 0)) (
 (set #to-copy
  (select #icon-choice
   ""
   "main/Icons/Standard/MiamiDx.info"
   "main/Icons/MagicWB/MiamiDx.info"
   "main/Icons/NewIcons/MiamiDx.info"
   "main/Icons/OS3.5/MiamiDx.info"
  )
 )
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest @default-dest)
 )
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest @default-dest)
  (newname "MiamiInit.info")
 )
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest @default-dest)
  (newname "MiamiRegister.info")
 )
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest "ENV:Sys")
  (newname "def_MiamiApp.info")
 )
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest "ENV:Sys")
  (newname "def_MiamiAppOnline.info")
 )
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest "ENVARC:Sys")
  (newname "def_MiamiApp.info")
 )
 (copyfiles
  (source (tackon #source-dir #to-copy))
  (dest "ENVARC:Sys")
  (newname "def_MiamiAppOnline.info")
 )
 (set #to-copy "main/MiamiDx.guide.info") (P-copy-file)
 (if (>= #icon-choice 3) (
  (if (exists "ENV:Sys/def_amigaguide.info")
   (copyfiles
    (source "ENV:Sys/def_amigaguide.info")
    (dest @default-dest)
    (newname "MiamiDx.guide.info")
   )
  )
 ))
))

(complete 85)

(P-set-tooltypes)

(complete 90)

(P-set-envvars)

(complete 95)

(P-add-to-startup)

(complete 100)

(exit "The installation of MiamiDx is finished. If you are "
 "upgrading from an earlier version of MiamiDx then you need "
 "to execute the Shell command `avail flush' or reboot your "
 "computer before starting MiamiDx.")
