; Installation script for NetSurf (procedure p_setmimetype #type #mimetype (transcript "Setting MIME Type " #mimetype " for default " #type " icon") (set #fullpath (cat "ENVARC:Sys/def_" #type)) (tooltype (prompt "Setting MIME type") (help @tooltype-help) (dest #fullpath) (settooltype "MIMETYPE" #mimetype) ) ) ; The below procedure is part of "fitr", see ; http://www.unsatisfactorysoftware.co.uk/fitr (procedure p_fitr #filename #text #comment #flags (set #comstring "") (if #comment (set #comstring (cat "COMMENT=\"" #comment "\""))) (set #comment "") (set #switches "") (if #flags (set #switches (cat " " #flags))) (set #flags "") (if #text ( (transcript "Adding " @app-name " section to " #filename) (textfile (dest "t:fitr-installer.tmp") (append #text) ) (run (cat "fitr \"" #filename "\" \"" @app-name "\" t:fitr-installer.tmp " #comstring #switches)) (delete "t:fitr-installer.tmp") ) ;else ( (transcript "Removing " @app-name " section from " #filename) (run (cat "fitr \"" #filename "\" \"" @app-name "\" " #comstring #switches)) ) ) ) (procedure p_failedsobjs (if #failedsobjs (message "The following shared objects failed to copy. These will be updated on next reboot.\n\n" #failedsobjs) ) ) (procedure p_schedulesobj #sobj (transcript "Scheduling update of " #sobj " for next reboot") (set #failedsobjs (cat #failedsobjs "\n" #sobj)) (makedir "SObjs:so-installer") (copyfiles (source (tackon "SObjs" #sobj)) (dest "SObjs:so-installer") ) (startup "Shared object installer" (prompt "Adding commands to user-startup to schedule copy of " #sobj " on next reboot") (help @startup-help) (command "if EXISTS SObjs:so-installer\n") (command " copy SObjs:so-installer SObjs: CLONE FORCE QUIET\n") (command " delete SObjs:so-installer ALL FORCE QUIET\n") (command "endif\n") ) ) (procedure p_comparesobj2 #sobj1_full #sobj2_full (set #same 0) (set #sobj-version (getversion (#sobj1_full))) (if (= #sobj-version 0) ( (if (exists (#sobj2_full)) ( (set #file-newer (earlier (#sobj2_full) (#sobj1_full))) (set #old-size (getsize (#sobj2_full))) (set #new-size (getsize (#sobj1_full))) (if (AND (= #old-size #new-size) (= #file-newer 0)) (set #same 1)) ) ) ) ; else if version info is available ( (set #sobj-oldversion (getversion (#sobj2_full))) (if (<= #sobj-version #sobj-oldversion) (set #same 1)) ) ) ) (procedure p_comparesobj #sobj (set #sobj1 (tackon "SObjs/" #sobj)) (set #sobj2 (tackon "SObjs:" #sobj)) (p_comparesobj2 #sobj1 #sobj2) ) (procedure p_linksobj #sobj #sobj_link (set #sobj2 (tackon "SObjs:" #sobj_link)) (p_comparesobj2 (tackon "SObjs/" #sobj) #sobj2) (if (= #same 0) ;if #sobj is newer than that pointed to by #sobj_link ( (if (exists (#sobj2)) (transcript "Deleting " #sobj2) (delete #sobj2 (optional "force")) ;prevent dodgy recursive links ) (set #linkcmd (cat "makelink " #sobj2 " SObjs:" #sobj " soft")) (transcript "Running " #linkcmd) (run #linkcmd) ) ) ) (procedure p_copysobj #sobj (set #sobj-version (getversion (tackon "SObjs/" #sobj))) (if (= #sobj-version 0) ( (transcript "Date compare " #sobj) (if (exists (tackon "SObjs:" #sobj)) ( (set #file-newer (earlier (tackon "SObjs:" #sobj) (tackon "SObjs/" #sobj))) (if (= #file-newer 0) ( (set #newer-text "has an older datestamp") ) ;else ( (set #newer-text "has a newer datestamp") ) ) (set #old-size (getsize (tackon "SObjs:" #sobj))) (set #new-size (getsize (tackon "SObjs/" #sobj))) (if (AND (= #old-size #new-size) (= #file-newer 0)) ( (set #copy 0) ) ;else ( (if (OR (= @user-level 2) (AND (= @user-level 1) (<> #file-newer 0))) ; Expert users are always prompted ; Average users are prompted if the file trying to be copied is newer ; Novice users are never prompted ; This is roughly equivalent to (copylib (confirm)) ; No prompting occurs if the destination does not exist (silent copy) ; or the files are the same size and the one being copied isn't newer (don't copy) ( (set #copy (askbool (prompt "Copying " #sobj "...\n\n" "Version to install: " #new-size " bytes\n" "Version currently installed: " #old-size " bytes\n\n" "The file to copy " #newer-text) (help @askbool-help) (default #file-newer) (choices "Proceed with copy" "Skip this part") ) ) ) ;else ( (set #copy #file-newer) ) ) ) ) ) ; else if dest file does not exist ( (set #copy 1) ) ) (if (<> #copy 0) ( (if (<> #AutoInstall 1) ( (copyfiles (prompt "Copying " #sobj "...") (help @copyfiles-help) (source (tackon "SObjs/" #sobj)) (dest "SObjs:") (optional "nofail" "force") ) ) ;else ( (run "CopyStore SObjs/" #sobj " SObjs:") ) ) (p_comparesobj #sobj) (if (= #same 0) ( (p_schedulesobj #sobj) ) ) ) ) ) ; else if version info is available ( (if (<> #AutoInstall 1) ( (copylib (prompt "Copying " #sobj "...") (help @copylib-help) (source (tackon "SObjs/" #sobj)) (dest "SObjs:") (optional "nofail" "force") (confirm "expert") ) ) ;else ( (run "CopyStore SObjs/" #sobj " SObjs:") ) ) (p_comparesobj #sobj) (if (= #same 0) ( (p_schedulesobj #sobj) ) ) ) ) ) (procedure p_copylib #lib (if (<> #AutoInstall 1) ( (copylib (prompt "Copying " #lib "...") (help @copylib-help) (source (tackon "Libs/" #lib)) (dest "Libs:") (optional "nofail" "force") (confirm "expert") ) ) ;else ( (run "CopyStore Libs/" #lib " Libs:") ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Script execution starts here ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (= @app-name "NetSurfAutoInstall") (set #AutoInstall 1)) (set @app-name "NetSurf") (if (<> #AutoInstall 1) (welcome)) (complete 0) (set @default-dest (getenv "AppPaths/NetSurf")) ; If env-var did not exist, this is a first time install. ; For novice users we must take care to put the files somewhere sensible. (if (= @default-dest "") ( ; Workaround for Installer bug picking TEXTCLIP: as a sensible location (if (= @default-dest "TextClip:") (set @default-dest "SYS:Utilities")) (if (= @user-level 0) ( (makedir (tackon @default-dest "NetSurf") (infos)) (set @default-dest (tackon @default-dest "NetSurf")) ) ) ) ) (set @default-dest (askdir (prompt "Where would you like to install NetSurf?\n" "(a drawer will not be created)") (help @askdir-help) (default @default-dest) ) ) (complete 5) (working "Checking existing installation...") (set #icon-exists (exists (tackon @default-dest "NetSurf.info"))) (set osver (getversion)) (set osver (/ osver 65536)) (set #versions-available 0) (if (exists "NetSurf-Static") ( (set #static-name "Static/graphics.library") (set #versions-available (+ #versions-available 1)) ) ; else ( (set #static-name "") ) ) (if (AND (>= osver 53) (exists "NetSurf")) ( (set #cairo-name "Shared objects/part-Cairo") (set #versions-available (+ #versions-available 1)) (set #cairo-version 1) ) ; else ( (set #cairo-version 0) (set #cairo-name "") ) ) (transcript "Versions avaiable for install: " #versions-available " " #static-name " " #cairo-name) (complete 10) (if (AND (> @user-level 0) (> #versions-available 1)) ( (set #cairo-version (askchoice (prompt "Which version of NetSurf would you like to install?") (help "The Cairo/shared objects version has better rendering " "of some graphical elements, and supports SVG.\n\n" @askchoice-help) (choices #static-name #cairo-name) (default #cairo-version) ) ) ) ) (complete 15) (set #options-exist (exists (tackon @default-dest "Resources/Options"))) (set #searchengines-exist (exists (tackon @default-dest "Resources/SearchEngines"))) (set #aiss-theme "") (if (= #options-exist 0) ( (if (exists "TBimages:" (noreq)) (set #aiss-theme "AISS") ) (set #themename (askchoice (prompt "Please select theme") (help "AISS theme requires AISS (and def_pointers for 32-bit " "pointers), and will only be shown as an option if " "AISS is installed.\n\n" @askchoice-help) (choices "Default" #aiss-theme) (default 0) ) ) (select #themename (set #themeshort "Default") (set #themeshort "AISS") ) (set #theme (tackon "PROGDIR:Resources/Themes/" #themeshort)) ) ) (complete 19) (if (>= osver 53) ( (set #addlaunchhandler (askbool (prompt "Add NetSurf to launch-handler? (recommended)\n\n" "Please select \"No\" if NetSurf is already added to " "launch-handler, as this avoids duplication.") (help "launch-handler is part of OS4.1 which opens URLs " " by launching a web browser.\n\n" "The installation will update the configuration of " "OS4.1 to allow URLs to be opened by NetSurf.") ) ) ) ;else ( (set #addlaunchhandler 0) ) ) (complete 20) (set #netsurf-name (select #cairo-version "NetSurf-Static" "NetSurf")) (if (= #AutoInstall 0) ( (copyfiles (prompt "Copying NetSurf...") (help @copyfiles-help) (source #netsurf-name) (dest @default-dest) (newname "NetSurf") (optional "askuser" "force" "oknodelete") (confirm "expert") ) ) ;else ( (copyfiles (prompt "Please check the version of NetSurf you are copying against " "any which might already be installed.") (help @copyfiles-help) (source #netsurf-name) (dest "T:") (newname "NetSurf") (optional "force" "oknodelete") ) (run "CopyStore T:NetSurf" @default-dest) (delete "T:NetSurf") ) ) (complete 30) (if #searchengines-exist (rename (tackon @default-dest "Resources/SearchEngines") (tackon @default-dest "Resources/SearchEngines.backup")) ) (copyfiles (prompt "Copying files") (source "") (choices "Resources" "Rexx" "NetSurf.guide" "NetSurf.readme") (help @copyfiles-help) (dest @default-dest) (infos) (optional "nofail") ; (all) ) (copyfiles (prompt "Copying additional documentation") (source "") (pattern "(COPYING|ChangeLog)") (help @copyfiles-help) (dest @default-dest) (infos) (optional "nofail") ) (set #complete 40) (working "Copying Libraries") (foreach "Libs" "#?" (complete #complete) (p_copylib @each-name) (set #complete (+ #complete 2)) ) (set #complete 60) (if (= #cairo-version 1) ( (working "Copying Shared Objects") (foreach "SObjs" "#?" (complete #complete) (p_copysobj @each-name) (set #complete (+ #complete 2)) ) ) ) (complete 90) (if #themeshort ( (set #theme-icon (tackon "Resources/Themes" (tackon #themeshort "NetSurf.info") ) ) (if (exists #theme-icon) ( (copyfiles (prompt "Copying theme icon") (help @copyfiles-help) (source #theme-icon) (dest @default-dest) ) ) ) (textfile (prompt "Setting default options") (help @textfile-help) (dest (tackon @default-dest "Resources/Options")) (append "theme:" #theme "\n") (append "use_pubscreen:Workbench\n") ) ) ) (complete 95) (if (= (exists "ENVARC:Sys/def_css.info") 0) (copyfiles (prompt "Copying default CSS icon") (source "Resources/default.css.info") (newname "def_css.info") (help @copyfiles-help) (dest "ENVARC:Sys") (optional "nofail") ) ) (complete 96) (working "Setting MIME types") (p_setmimetype "css" "text/css") (p_setmimetype "html" "text/html") (p_setmimetype "ascii" "text/plain") (p_setmimetype "jpeg" "image/jpeg") (p_setmimetype "gif" "image/gif") (p_setmimetype "png" "image/png") (p_setmimetype "jng" "image/jng") (p_setmimetype "mng" "image/mng") (p_setmimetype "svg" "image/svg") (p_setmimetype "bmp" "image/bmp") (p_setmimetype "ico" "image/ico") (p_setmimetype "sprite" "image/x-riscos-sprite") (p_setmimetype "webp" "image/webp") (p_setmimetype "lha" "application/x-lha") (p_setmimetype "zip" "application/x-zip") (complete 98) (if #addlaunchhandler ( ; We use fitr here so that the sections are only added once. ; Unfortunately saving URL prefs overwrites the markers making it ; necessary to ask whether the user wants to add NetSurf to launch-handler. (working "Adding NetSurf to launch-handler config") (p_fitr "ENVARC:launch-handler/URL/FILE.LH" "ClientName=\"NETSURF\" ClientPath=\"APPDIR:NETSURF\" CMDFORMAT=\"URL=*\"file:///%s*\"\"") (p_fitr "ENVARC:launch-handler/URL/HTTP.LH" "ClientName=\"NETSURF\" ClientPath=\"APPDIR:NETSURF\" CMDFORMAT=\"URL=*\"http://%s*\"\"") (p_fitr "ENVARC:launch-handler/URL/HTTPS.LH" "ClientName=\"NETSURF\" ClientPath=\"APPDIR:NETSURF\" CMDFORMAT=\"URL=*\"https://%s*\"\"") (p_fitr "ENVARC:launch-handler/URL/WWW.LH" "ClientName=\"NETSURF\" ClientPath=\"APPDIR:NETSURF\" CMDFORMAT=\"URL=*\"http://www.%s*\"\"") ; (p_fitr "ENVARC:launch-handler/URL/FTP.LH" "ClientName=\"NETSURF\" ClientPath=\"APPDIR:NETSURF\" CMDFORMAT=\"URL=*\"ftp://%s*\"\"") ) ) (complete 100) (if (= #AutoInstall 1) ( (exit (quiet)) ) ( (p_failedsobjs) (exit "If you are on a low memory system, you may like to use the version of " "parserutils.library in the archive under ParserUtils_lowmem.\n\n" "The low memory version does not use iconv.library so can save " "~1MB of RAM, at the expense of reduced character set support. " "Simply replace the version in LIBS: with that in ParserUtils_lowmem.") ) )