From b6d82513ce79aa9544c2a29e7a7fdb8ff5369e78 Mon Sep 17 00:00:00 2001 From: Carsten Larsen Date: Sun, 28 Feb 2021 22:21:40 +0100 Subject: [PATCH] Version 43.3 --- Installer | Bin 0 -> 109956 bytes Installer.guide | 3773 +++++++++++++++++++++++++++++ Installer.guide.info | Bin 0 -> 476 bytes Installer.license | 114 + Installer.license.info | Bin 0 -> 323 bytes Legal.README | 36 + Legal.README.info | Bin 0 -> 323 bytes SampleScripts.info | Bin 0 -> 628 bytes SampleScripts/Surfer-Install | 731 ++++++ SampleScripts/Surfer-Install.info | Bin 0 -> 487 bytes SampleScripts/install-test | 163 ++ SampleScripts/install-test.info | Bin 0 -> 663 bytes 12 files changed, 4817 insertions(+) create mode 100644 Installer create mode 100644 Installer.guide create mode 100644 Installer.guide.info create mode 100644 Installer.license create mode 100644 Installer.license.info create mode 100644 Legal.README create mode 100644 Legal.README.info create mode 100644 SampleScripts.info create mode 100644 SampleScripts/Surfer-Install create mode 100644 SampleScripts/Surfer-Install.info create mode 100644 SampleScripts/install-test create mode 100644 SampleScripts/install-test.info diff --git a/Installer b/Installer new file mode 100644 index 0000000000000000000000000000000000000000..0f6f32a1be87d08f7f5c1d4a07b427a9bd85d85b GIT binary patch literal 109956 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

Iz*m9F&5}pD9_^*?6TppkTNQ6f08@y~oSiWa& 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 UTdh%r=#Uo-n3 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

)2l@P13rp5+P$jMAVHU4- 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 literal 0 HcmV?d00001 diff --git a/Installer.guide b/Installer.guide new file mode 100644 index 0000000..1c41113 --- /dev/null +++ b/Installer.guide @@ -0,0 +1,3773 @@ +@database Installer.guide + +@Master Installer.texi + +@Width 72 + + +This is the AmigaGuide® file Installer.guide, produced by Makeinfo-1.55 from +the input file Installer.texi. + + $VER: Installer.guide 1.19 (29.4.96) ©1995-96 by ESCOM AG + +Copyright © 1995-96 ESCOM AG + + This file contains the documentation for the Amiga Installer. It +has been created from the original Installer.doc ASCII file. + + Major reworks were necessary. This work has been done by Heinz +Wrobel. It is dedicated to Joan Thuesen. Additional help with the +text has been provided by Jim Cooper. Thanks, Jim. + + +@Node Main "Installer.guide" +@Next "Copyrights" + +@{B}Installer +*********@{UB} + + This document contains all the information needed to use the Amiga +Installer tool. + + + @{" Copyrights " Link "Copyrights"} + @{" Background " Link "Background"} + @{" Overview " Link "Overview"} + @{" Style Guide " Link "Style Guide"} Read this! + @{" Scripting Language Tutorial " Link "Scripting Language Tutorial"} + @{" Installer Language Reference " Link "Installer Language Reference"} + @{" Installer Language Quick Reference " Link "Installer Language Quick Reference"} + +@{B}NOTE:@{UB} On pre V39 (< Workbench 3.0) AmigaGuide you will see some +funny marks on the screen. They are V39 formatting commands which make +the text look nicer under >=V39. They do not reduce the amount of +information shown in this document. + + +@EndNode + +@Node "Copyrights" "Installer.guide/Copyrights" +@Next "Background" +@Prev "Main" +@Toc "Main" + +@{B}Copyrights & Sentiments +***********************@{UB} + +The Installer and its documentation is ©1995-96 by ESCOM AG. + + Based on previous work by Loren Wilton, the V43 Installer and its +documentation have been created by Heinz Wrobel. This work is +dedicated to Joan Thuesen. + + +@EndNode + +@Node "Background" "Installer.guide/Background" +@Next "Overview" +@Prev "Copyrights" +@Toc "Main" + +@{B}Background +**********@{UB} + + Installation of applications from floppy disks onto a hard disk has +proven to be a very inconsistent and often frustrating endeavor for most +end-users. This has been caused by many factors, some of which are: + + a. Many products do not come with any utility or script to install an + application on a hard disk. + + b. Many products assume a great deal of familiarity with the startup + process of the Amiga and applications, including assigns, device + names (as opposed to volume names), etc. + + c. The installation scripts or utilities included with some products + vary widely in their ability to deal with different environments + and systems. + + + In 1991, Commodore set out to remedy this situation, by developing a +standard tool that developers can include with their products, which +provides the user with a standard way to install applications. The +Installer's features were based on a number of assumptions: + + a. Installation requirements vary widely--some need assigns, some need + new drawers created, some install pieces in system drawers such as + a fonts drawer, a `product' might be just an upgrade and the + installation must check to see which version (if any) they + currently have installed, etc. + + b. Different users have different levels of comfort and expertise when + attempting to install software, and the Installer should be able to + accommodate a range of users. Many installation scripts assume a + great deal of knowledge, which is very intimidating for a novice. + + c. The Installer tool must be very flexible internally, but present a + consistent pleasant graphical user interface to the user that only + shows the user information or prompts that they need to see. The + Installer should be resolution, color and font sensitive. + + d. Writing scripts to install an application will require some effort, + but certainly no more than writing an AmigaDOS shell script + equivalent, and the resulting installation procedure will be more + friendly, flexible, and much better looking than the latter. + + + Amiga Technologies improves the Installer to allow even better and +more versatile Installation procedures while keeping it fairly general. +Many new features have been added during V43 Installer development. + + +@EndNode + +@Node "Overview" "Installer.guide/Overview" +@Next "Style Guide" +@Prev "Background" +@Toc "Main" + +@{B}Overview +********@{UB} + + The Installer is a script driven program, that presents a consistent +installation environment to the end user. The user never sees the +script. Instead they are presented with simple yes/no choices, and may +be asked to specify locations to put things on their system. + + To accommodate different user levels, they can choose to run the +tool in novice, average or expert modes. Scripts can include help text +to explain any choices that the user must make. At each step the user +is given the option of aborting the installation. + + + @{" Standard Invocation " Link "Standard Invocation"} + @{" Initial Actions " Link "Initial Actions"} + @{" Startup Screens " Link "Startup Screens"} + @{" Installation Actions " Link "Installation Actions"} + + +@EndNode + +@Node "Standard Invocation" "Installer.guide/Standard Invocation" +@Next "Initial Actions" +@Prev "Overview" +@Toc "Overview" + +@{B}Standard Invocation +===================@{UB} + + The Installer is normally started from a Workbench Project icon +which has the same name as the script to interpret and has a default +tool of Installer. A number of tooltypes are available to modify the +operation of the Installer: + +`SCRIPT' + Path to a script file to be used with Installer. + +`APPNAME' + Name of the application being installed (appears in the startup + screen). This MUST be given. + +`MINUSER' + The minimum possible operation mode of the installation for a + script. This will be either NOVICE (all decisions made by + Installer), AVERAGE (only important decisions made by user) or + EXPERT (user confirms almost all actions). The Default is NOVICE. + +`DEFUSER' + Indicates which operation mode button should be initially + selected. Same values as MINUSER, with the value of the MINUSER + tooltype being the default (which will be NOVICE if MINUSER not + defined). + +`NOPRINT' + If set to FALSE, then the printer option in the log file settings + will be ghosted. + +`PRETEND' + If set to FALSE, indicates that PRETEND mode not available for + this script. + +`LANGUAGE' + Used to set the variable `@language'. The default value for + `@language' is the name of the current locale or `"english"' if + there isn't any available. The use of this variable is left up to + the install script and should be used to adapt the language for + the script's messages to the chosen information. Note that with + Installer V42 and better, the current locale as set by the OS will + automatically be used if no language has been specified. This + tooltype should probably only be used to force a certain language + while testing a script or when a system with OS 2.04 is expected + to be the target. For the latter, it is recommended that you use + the `getversion' command to check the OS version. + +`LOGFILE' + The name of the log file that the Installer should use. This must + be a full path. The default is `install_log_file'. + +`LOG' + In NOVICE mode the default is to create a log file (to disk). If + this tooltype is set to FALSE, the creation of a log file in + NOVICE mode is disabled. + + Although the Installer can be started from the Shell, that is not the +recommended mode. Shell invocation is provided mainly for script +debugging purposes. The command template is: + + `SCRIPT,APPNAME,MINUSER,DEFUSER,LOGFILE,LANGUAGE,NOPRETEND/S, +NOLOG/S,NOPRINT/S' + + +@EndNode + +@Node "Initial Actions" "Installer.guide/Initial Actions" +@Next "Startup Screens" +@Prev "Standard Invocation" +@Toc "Overview" + +@{B}Initial Actions +===============@{UB} + + The first thing the Installer does is to compile the installation +script into an internal format that can be easily interpreted. If +there are syntax errors in the script, they will be caught during this +phase. + + +@EndNode + +@Node "Startup Screens" "Installer.guide/Startup Screens" +@Next "Installation Actions" +@Prev "Initial Actions" +@Toc "Overview" + +@{B}Startup Screens +===============@{UB} + + Next, the Installer asks the user what Installation Mode to run in, +either NOVICE, AVERAGE or EXPERT. If the user chooses NOVICE, they +will not be asked any more questions (although they may be requested to +do things). In the other user levels, a second display appears asking +the user if he wants to install "for real" or "do a dry run", and if he +wants a transcription of the installation process written, and if so, +whether to a file or to the printer. In EXPERT mode, the user should be +asked for every configuration option like installation drawers, while +only the most important questions will be asked in AVERAGE mode. + + +@EndNode + +@Node "Installation Actions" "Installer.guide/Installation Actions" +@Prev "Startup Screens" +@Toc "Overview" + +@{B}Installation Actions +====================@{UB} + + Now the Installer interprets its internal version of the script. Any +commands that call for a user interface will cause the Installer to +algorithmically generate a display, always including buttons to allow +for context sensitive help and aborting the installation. + + +@EndNode + +@Node "Style Guide" "Installer.guide/Style Guide" +@Next "Scripting Language Tutorial" +@Prev "Overview" +@Toc "Main" + +@{B}Style Guide +***********@{UB} + + Making an installation script for any typical application is fairly +easy with Installer 43.2. But to make a really great installation, +please adhere to the rules outlined below: + + · Installer V43 provides some new features over older versions like + better return values for certain statements or optional + proportional rendering for choices. The minimum version necessary + is marked in the respective descriptions. @{B}Please check the + variable `@installer-version' before using these new + features@{UB}. This variable will default to 0 with old versions + of Installer like V1.24, so it is safe and easy to check. Please + do not do an exact equality check. Check for a minimum revision, + just like with libraries. + + · Starting with V42 there are some reasonable guidelines for naming + things. Please adhere to them or upgrading Installer will be very + hard. Don't use the `@' sign for your variables. This sign marks + installer system variables. Please @{B}do@{UB} use a prefix for + your variable names like `#' and name your procedures carefully by + using a prefix like `P_'. Names without a prefix may collide with + future enhancements to Installer. + + · Always, always, always set up meaningful help texts within your + install script. + + · Don't install parts of your application into the standard OS + drawers like `DEVS:', `SYS:', or `FONTS:' unless absolutely + necessary. Many people try to keep their OS installation and + applications separate for easier updates. Never forget that + `PROGDIR:' might be what you really want. + + · If you can't keep needed files together, at least leave a way to + change the destination to something other than e.g. `LIBS:'. + + · Always, always, always allow for a deinstallation in your script. + This is another reason to avoid spreading files around too much. + + · If you are installing or deinstalling libraries, take care that + you don't simply overwrite an existing library or delete it when + some other program might have a need for it. If in doubt ask the + USER, @{B}if@{UB} she is not a NOVICE. + + · Don't keep the user waiting if it is not necessary. If your + application fits on one disk, ask all necessary questions + @{B}first@{UB}, and install the files afterwards. + + · If you have to ask the user for an application directory, make + very clear if your script will create the application directory + there or if the user has to create and specify the directory + himself. This has been the source of much confusion in many + scripts. + + · Don't ask any questions in NOVICE mode. If you absolutely have to + ask questions, don't support NOVICE mode. Any NOVICE mode + installation should be capable of running successfully without user + interaction. + + · Make a difference between AVERAGE and EXPERT mode. In EXPERT mode + the user should be able to confirm just about everything. In + AVERAGE mode, only very important questions should be asked. Do not + let AVERAGE and EXPERT be equal. Give the expert user somethig to + work with and don't confuse the average user. + + +@EndNode + +@Node "Scripting Language Tutorial" "Installer.guide/Scripting Language Tutorial" +@Next "Installer Language Reference" +@Prev "Style Guide" +@Toc "Main" + +@{B}Scripting Language Tutorial +***************************@{UB} + + The script language of the Installer is based on LISP. It is not +difficult to learn, but requires a lot of parentheses. An Installer +script can easily be made to look very readable. + + + @{" Basic Elements " Link "Basic Elements"} + @{" Escape Characters " Link "Escape Characters"} + @{" Symbols (Variables) " Link "Symbols (Variables)"} + @{" Types of Symbols " Link "Types of Symbols"} + @{" Statements " Link "Statements"} + @{" Data Types " Link "Data Types"} + @{" Special Features " Link "Special Features"} + @{" Miscellaneous " Link "Miscellaneous"} + + +@EndNode + +@Node "Basic Elements" "Installer.guide/Basic Elements" +@Next "Escape Characters" +@Prev "Scripting Language Tutorial" +@Toc "Scripting Language Tutorial" + +@{B}Basic Elements +==============@{UB} + + There are only a few basic elements of the Installer language. Here +is a list of these basic elements with a few examples each. + +decimal integers + `5', `32769', `-3' + +hexadecimal integers + `$a000', `$FB' + +binary integers + `%0010010', `%11' + +strings + `"Hello"', `'Hello'' + +symbols + `#x', `#loopvar', `P_funcfoo' + +comments + `; this is a comment ( )' + +`( )' + for statement definition + +space (or any white space) + delimits symbols + + +@EndNode + +@Node "Escape Characters" "Installer.guide/Escape Characters" +@Next "Symbols (Variables)" +@Prev "Basic Elements" +@Toc "Scripting Language Tutorial" + +@{B}Escape Characters +=================@{UB} + +Escape characters are supported as in the C++ language: + +`\\n' + newline character + +`\\r' + return character + +`\\t' + tab character + +`\\h' + horizontal tab character (V42.6) + +`\\v' + vertical tab character (V42.6) + +`\\b' + backspace character (V42.6) + +`\\f' + formfeed character (V42.6) + +`\\"' + double quote + +`\\'' + single quote + +`\\\\' + backslash + +`\\ooo' + some octal number `ooo'. You can use `\\0' to get a NUL character. + (V42.6) + +`\\xXX' + some hex number `XX'. (V42.6) + +@{B}NOTE:@{UB} Depending on the AmigaGuide or MultiView version you are +using, you might see an additional backslash character where there +should only be one. This should show you one backslash: `\\'. And this +should show two of them: `\\\\'. + + +@EndNode + +@Node "Symbols (Variables)" "Installer.guide/Symbols (Variables)" +@Next "Types of Symbols" +@Prev "Escape Characters" +@Toc "Scripting Language Tutorial" + +@{B}Symbols (Variables) +===================@{UB} + + A symbol is any sequence of characters surrounded by spaces that is +not a quoted string, an integer or a control character. This means +that symbols can have punctuation marks and other special characters in +them. The following are all valid symbols: + + · `x' + + · `total' + + · `this-is-a-symbol' + + · `**name**' + + · `@#__#@' + + When naming variables, you should not use `@' as prefix for your +names, but you should select a prefix like `#' to avoid collisions with +future Installer enhancements. + + +@EndNode + +@Node "Types of Symbols" "Installer.guide/Types of Symbols" +@Next "Statements" +@Prev "Symbols (Variables)" +@Toc "Scripting Language Tutorial" + +@{B}Types of Symbols +================@{UB} + +There are three types of symbols: + + a. user-defined symbols. These are created using the `set' function. + + b. built-in function names. These include things like `+' and `*' as + well as textual names such as `delete' or `rename'. + + c. special symbols. These are variables which are created by the + Installer before the script actually starts to run, and are used + to tell the script certain things about the environment. These + symbols always begin with an `@' sign. An example is + `@default-dest' which tells you the default directory that was + selected by the Installer. + + + For naming conventions, please check the @{"Style Guide" Link "Style Guide"}. + + +@EndNode + +@Node "Statements" "Installer.guide/Statements" +@Next "Data Types" +@Prev "Types of Symbols" +@Toc "Scripting Language Tutorial" + +@{B}Statements +==========@{UB} + +The format of a statement is: + + (operator ...) + +A statement to assign the value `5' to the variable `#x' would be: + + (set #x 5) + + You can read this as "set `#x' to 5". Note that the variable `#x' +does not have to be declared - it is created by this statement. + + Note that there is no difference between operators and functions - +the function @{"`set'" Link "s_set"}, and the arithmetic operator `+' are both used +exactly the same way. + + Combining statements: A statement can be used as the operand to +another statement as follows: + + (set #var (+ 3 5)) + + In this case, the statement `(+ 3 5)' is evaluated first, and the +result is 8. You can think of this as having the `(+ 3 5)' part being +replaced by an 8. So now we are left with: + + (set #var 8) + +which is the same form as the first example. + + Note that the `(+ 3 5)' part actually produced a value: 8. This is +called the @{B}result@{UB} of the statement. Many statements return +results, even some that might surprise you, such as `set' and `if'. + + +@EndNode + +@Node "Data Types" "Installer.guide/Data Types" +@Next "Special Features" +@Prev "Statements" +@Toc "Scripting Language Tutorial" + +@{B}Data Types +==========@{UB} + + All data types in the Installer are dynamic, that is to say the type +of a variable is determined by the data it contains. So if you assign +the string `"Hello, World"' to the variable `#x', then `#x' will be of +type STRING. Later you can assign an integer to `#x' and `#x' will be +of type INTEGER. When using variables in expressions, the interpreter +will attempt to convert to the proper type if possible. + + Special forms: There are two exceptions to the form of a statement. +The first type is used for string substitution: If the first item in +parentheses is a text string rather than a function name, the result of +that clause is another string that is created by taking the original +string and performing a C-style `sprintf'-like formatting operation on +it, using the other arguments of the statement as parameters to the +formatting operation. + +Thus the statement: + + ("My name is %s and I am %ld years old" "Mary" 5) + +Becomes: + + "My name is Mary and I am 5 years old" + +@{B}NOTE:@{UB} since the formatting operation uses the ROM `RawDoFmt()' +routine, decimal values must always be specified with `"%ld"' rather +than `"%d"' (The interpreter always passes numeric quantities as 32 bit +longwords). Note that a variable containing a string may be used +rather than the string itself. + + The second type of exception occurs if the elements in parentheses +are themselves statements in parentheses. In this case, the interpreter +assumes that all the elements are statements to be executed +sequentially. + + For example, this statement sets the value of three different +variables: `#var1', `#var2', and `#var3'. + + ((set #var1 5) (set #var2 6) (set #var3 7)) + + What this feature does is allow the language to have a block +structure, where an `if' statement can have multiple statements in its +`then' or `else' clause. Note that the result of this statement will +be the result of the last statement in the sequence. + + Complex statements: Here is an example of how statements in the +script language can be combined into complex expressions. We will +start with an `if' statement. The basic format of an `if' statement is: + + (if []) + + The condition should be a statement which returns a value. The +`then' and optional `else' parts should be statements. Note that if the +`then' or `else' statements produce a result, then the `if' statement +will also have this result. + + Our first example is a rather strange one: Using an `if' statement +to simulate a boolean `not' operator. Note that there are actually +easier ways in the script language to do this. + + (set #flag 0) ; set a flag to FALSE + + (set #flag (if #flag 0 1)) ; a Boolean NOT + + Basically, the `if' statement tests the variable `flag'. If flag is +non-zero, it produces the value `0'. Otherwise, the result is `1'. In +either case, `flag' is set to the result of the `if' statement. + + Now, let's plug some real statements into our `if' statement. + + (if #flag ; conditional test + (message "'flag' was non-zero\n") ; "then" clause. + (message "'flag' was zero\n") ; "else" clause. + ) ; if ; closing parenthesis + + Note the style of the indenting. This makes for an easier to read +program. The preferred indent is four spaces. + + Now, we'll add a real condition. `=' tests for equality of the two +items. + + (if (= #a 2) ; conditional test + (message "a is 2\n") ; "then" clause + (message "a is not 2\n") ; "else" clause + ) ; if ; closing parenthesis + + Finally, just to make things interesting, we'll make the `else' +clause a compound statement. Note the extended use of parentheses to +generate exactly the two needed clauses. Installer won't check things +if you mess up here! + + (if (= #a 2) ; conditional test + ( ; "then" clause + (message "a is 2\n") + ) + ( ; "else" compound statement + (message "a is not 2\n") + (set #a 2) + (message "but it is now!\n") + ) ; end of compound statement + ) ; if ; end of if + + +@EndNode + +@Node "Special Features" "Installer.guide/Special Features" +@Next "Miscellaneous" +@Prev "Data Types" +@Toc "Scripting Language Tutorial" + +@{B}Special Features +================@{UB} + + When the Installer starts running, it attempts to determine the best +place to install the application. Any volume named `WORK:' is given +preference, as this is the standard way that an Amiga comes configured +from Amiga Technologies. Starting with V42 the largest writable +partition available will also be under consideration as default +destination. This covers the typical cases. + + There are two keyboard shortcuts. Whenever there is a `Help' button +active, pressing the HELP key will also bring up the help display. +Whenever there is an `Abort' button active, pressing ESC brings up the +abort requester. Also, whenever the Installer is @{B}busy@{UB}, +pressing ESC brings up the abort requester - there is text is the title +bar to that effect. + + If an application must have assigns or other actions performed during +system boot, the Installer will add these to a file named +`S/User-Startup' on the boot volume. If this file isn't available, +`S:User-Startup' will be tried. The Installer will then add the lines + + if exists S:user-startup + execute S:user-startup + endif + + to the user's `Startup-Sequence'. The Installer will attempt to +determine the true boot volume of the system when looking for the +`Startup-Sequence' and `User-Startup'. It can handle any AmigaDOS +scripts executed from `Startup-Sequence' up to 10 levels of nesting. + + The Installer can create an assign to just a device, volume or +logical assignment. This comes in handy when you want to update an +application which comes on a volume named `MyApp:', but the installed +version is in a directory with the logical assign `MyApp:'! + + The Installer always copies files in the AmigaDOS `CLONE' mode, +meaning all the protection bits, filenotes and file dates are +preserved. When copying files the Installer gives a "fuelgauge" +readout of the progress of the copy. + + The Installer can find the version number of any executable file +that has either a RomTag with an ID string (such as libraries and +devices) or has a version string conforming to that given in the Amiga +User Interface Style Guide. The Installer can also checksum files. + + +@EndNode + +@Node "Miscellaneous" "Installer.guide/Miscellaneous" +@Prev "Special Features" +@Toc "Scripting Language Tutorial" + +@{B}Miscellaneous +=============@{UB} + + To perform a set of actions on all the contents of a directory +matching a pattern you can use the `foreach' operator. To perform a +set of actions on an explicit set of files, the following Installer +statements can be used as a template: + + (set #n 0) + (while (set thisfile (select #n "file1" "file2" "file3" "")) + ( + (set #n (+ #n 1)) + (... your stuff involving this file ...) + ) + ) ; while + + Note that an empty string is considered a FALSE value to any +condition operator. + + To run an external Shell command which normally requires user input, +redirect the input from a file with the needed responses. For example, +to format a disk one could combine the statement shown below with a +file which contains only a newline character. + + (run "format [ ...]) + + Set the variable `' to the indicated value. If `' +does not exist it will be created. Set returns the value of the last +assignment. + +@{B}NOTE:@{UB} All variables are typeless, and any variable may be used +wherever a string could be used. All variables are global. For naming +conventions, please check the @{"Style Guide" Link "Style Guide"}. + + The `set' statement can be used to convert a string to an integer +value: + + (set (+ )) + + To do the reverse, use @{"`cat'" Link "f_cat"}. + + +@EndNode + +@Node "s_symbolset" "Installer.guide/s_symbolset" +@Next "s_makedir" +@Prev "s_set" +@Toc "Statements (Ref)" + +@{B}The `symbolset' statement (V42.9) +---------------------------------@{UB} + + (symbolset [ ...]) + + Set the variable that is named by the contents of the string +variable or expression `' to the indicated value. If the +variable that `' names does not exist, it will be created. +The statement `symbolset' returns the value of the last assignment. + + Together with the function @{"`symbolval'" Link "f_symbolval"}, this function is intended to +allow somewhat dynamic handling of variable names, e.g. to create +variables with an arbitrary index in the name. + +@{B}NOTE:@{UB} You should read the description of @{"`set'" Link "s_set"}, as the rest of +the semantics are the same. + + +@EndNode + +@Node "s_makedir" "Installer.guide/s_makedir" +@Next "s_copyfiles" +@Prev "s_symbolset" +@Toc "Statements (Ref)" + +@{B}The `makedir' statement +-----------------------@{UB} + + (makedir ) + + Creates a new directory. Starting with Installer V42.9, this +statement will try to create the complete path with all specified +intermediate directories. Parameters: + +`prompt' + tell the user what's going to happen. + +`help' + text of help message + +`infos' + create an icon for directory + +`confirm' + if this option is present, the user will be prompted, else the + directory will be created silently. + +`safe' + make directory even if in PRETEND mode + + +@EndNode + +@Node "s_copyfiles" "Installer.guide/s_copyfiles" +@Next "s_copylib" +@Prev "s_makedir" +@Toc "Statements (Ref)" + +@{B}The `copyfiles' statement +-------------------------@{UB} + + (copyfiles ) + + Copies one or more files from the install disk to a target +directory. Each file will be displayed with a checkmark next to the +name indicating if the file should be copied or not. Note that a write +protected file is considered "delete protected" as well. Parameters: + +`prompt' +`help' + tell the user what's going to happen. + +`source' + name of source directory or file. + +`dest' + name of destination directory, which is created if it doesn't + exist. Note that both source and dest may be relative pathnames. + +`newname' + if copying one file only, and file is to be renamed, this is the + new name. + +`choices' + a list of files/directories to be copied (optional) + +`all' + all files/directories in the source directory should be copied. + +`pattern' + indicates that files/directories from the source dir matching a + pattern should be copied. The pattern should be no more than 64 + characters long. Note that only one of `choices', `all' or + `pattern' should be used at any one time. + +`files' + only copy files. By default the Installer will match and copy + subdirectories. + +`infos' + switch to copy icons along with other files/directories. + +`noposition' + reset the position of every icon copied. + +`fonts' + switch to not display `.font' files, yet still copy any that match + a directory that is being copied. + +`nogauge' + don't display the status indicator. + +`(optional

)' + do for entries in directory + +`(if expr truestatements falsestatements)' + conditional + +`(makeassign (safe)) ; note: doesn't need `:'' + create an assignment + +`(makedir (prompt..) (help..) (infos) (confirm..) (safe))' + make a directory + +`(message ... (all))' + display message with Proceed, Abort buttons + +`(onerror ())' + general error trap + +`(protect [] [] )' + get/set file protection flags + +`(rename (help..) (prompt..) (confirm..) (safe))' + rename files + +`(rexx (help..) (prompt..) (confirm..) (safe))' + execute ARexx script + +`(run (help..) (prompt..) (confirm..) (safe))' + execute program + +`(set )' + assign a value to a variable + +`(startup (prompt..) (command..))' + add a command to the boot scripts (startup-sequence, user-startup) + +`(symbolset )' + assign a value to a variable named by the string result of + `' (V42.9) + +`(textfile (prompt..) (help..) (dest..) (append) (include..) (confirm..) (safe))' + create text file from other text files and strings + +`(tooltype (prompt..) (help..) (dest..) (settooltype..) (setstack..)' + `(setdefaulttool..) (noposition) (confirm..) (safe))' + + modify an icon + +`(trap )' + trap errors. flags: 1-abort, 2-nomem, 3-error, 4-dos, 5-badargs + +`(until )' + do-until conditional structure (test end of loop) + +`(welcome ...)' + allow Installation to commence. + +`(while )' + do-while conditional structure (test top of loop) + +`(working)' + indicate to user that Installer is busy doing things + + +@EndNode + +@Node "Functions (Quick)" "Installer.guide/Functions (Quick)" +@Prev "Statements (Quick)" +@Toc "Installer Language Quick Reference" + +@{B}Functions +=========@{UB} + +`(= )' + equality test (returns 0 or 1) + +`(> )' + greater than test (returns 0 or 1) + +`(>= )' + greater than or equal test (returns 0 or 1) + +`(< )' + less than test (returns 0 or 1) + +`(<= )' + less than or equal test + +`(+ ...)' + returns sum of expressions + +`(- )' + returns `' minus `' + +`(* ...)' + returns product of expressions + +`(/ )' + returns `' divided by `' + +`(AND )' + returns logical `AND' of `' and `' + +`(OR )' + returns logical `OR' of `' and `' + +`(XOR )' + returns logical `XOR' of `' and `' + +`(NOT )' + returns logical `NOT' of `' + +`(BITAND )' + returns bitwise `AND' of `' and `' + +`(BITOR )' + returns bitwise `OR' of `' and `' + +`(BITXOR )' + returns bitwise `XOR' of `' and `' + +`(BITNOT )' + returns bitwise `NOT' of `' + +`(shiftleft )' + logical shift left + +`(shiftright )' + logical shift right + +`(IN ...)' + returns `' `AND' bits + +`( ...)' + printf clone + +`(askdir (prompt..) (help..) (default..) (newpath) (disk))' + ask for directory name + +`(askfile (prompt..) (help..) (default..) (newpath) (disk))' + ask for file name + +`(askstring (prompt..) (help..) (default..))' + ask for a string + +`(asknumber (prompt..) (help..) (range..) (default..))' + ask for a number + +`(askchoice (prompt..) (choices..) (default..))' + choose 1 options + +`(askoptions (prompt (help..) (choices..) default..))' + choose n options + +`(askbool (prompt..) (help..) (default..) (choices..))' + 0=no, 1=yes + +`(askdisk (prompt..) (help..) (dest..) (newname..) (assigns))' +`(cat ...)' + returns concatenation of strings + +`(exists (noreq))' + 0 if no, 1 if file, 2 if dir + +`(expandpath )' + Expands a short path to its full path equivalent + +`(earlier )' + true if file1 earlier than file2 + +`(fileonly )' + return file part of path (see pathonly) + +`(getassign )' + return value of logical name (no `:') `': 'v'-volumes, + 'a'-assigns, 'd'-devices + +`(getdevice )' + returns name of device upon which resides + +`(getdiskspace )' + return available space + +`(getenv )' + return value of environment variable + +`(getsize )' + return size + +`(getsum )' + return checksum of file for comparison purposes + +`(getversion (resident))' + return version/revision of file, library, etc. as 32 bit num + +`(iconinfo )' + return information about an icon (V42.12) + +`(pathonly )' + return dir part of path (see fileonly) + +`(patmatch )' + Does match ? TRUE : FALSE + +`(select ...)' + return n'th item + +`(strlen )' + string length + +`(substr [])' + returns a substring of + +`(symbolval )' + returns the value of the symbol named by the string expression + `' (V42.9) + +`(transcript )' + puts concatenated strings in log file + +`(tackon )' + return properly concatenated file to path + +@EndNode + diff --git a/Installer.guide.info b/Installer.guide.info new file mode 100644 index 0000000000000000000000000000000000000000..0bb76827744883be0caa2a03bc72f6bbfe368bc4 GIT binary patch literal 476 zcmaDXz`)1=0wN5m3?>On8h~;ji~s@^ ZHa4y42%aRMYTrNpeV?KF z``z#F8Onb@e*c{z`|s=PzZpuaU%&beRR0*P>nxa*uLqj&C;UFl9Eiz4lFPR=rzEp1 PGqoHf1o9?0%%B7SbK`0u literal 0 HcmV?d00001 diff --git a/Legal.README b/Legal.README new file mode 100644 index 0000000..efa5757 --- /dev/null +++ b/Legal.README @@ -0,0 +1,36 @@ + + + ************************************************************************ + * * + * COPYRIGHTS * + * * + * UNLESS OTHERWISE NOTED, ALL FILES ARE * + * * + * Copyright (c) 1995-1996 ESCOM AG. All Rights Reserved * + * * + ************************************************************************ + + + ************************************************************************ + * * + * COPYRIGHTED DEVELOPER MATERIALS * + * * + ************************************************************************ + + THIS SOFTWARE AND INFORMATION IS COPYRIGHTED. + + ************************************************************************ + * * + * DISCLAIMER * + * * + * THIS SOFTWARE AND INFORMATION IS PROVIDED "AS IS". * + * NO REPRESENTATIONS OR WARRANTIES ARE MADE WITH RESPECT TO THE * + * ACCURACY, RELIABILITY, PERFORMANCE, CURRENTNESS, OR OPERATION * + * OF THIS SOFTWARE AND INFORMATION, AND ALL USE IS AT YOUR OWN RISK. * + * NEITHER ESCOM AG NOR THE AUTHORS ASSUME ANY RESPONSIBILITY OR * + * LIABILITY WHATSOEVER WITH RESPECT TO YOUR USE OF THIS SOFTWARE * + * AND INFORMATION. * + * * + ************************************************************************ + + diff --git a/Legal.README.info b/Legal.README.info new file mode 100644 index 0000000000000000000000000000000000000000..3301c895695980d9f79e4e8dc6672128cf8e7ca2 GIT binary patch literal 323 zcmaDXz`)1=0{a "" #gp_envname) + ( + (set #gp_res (getenv (cat "Surfer/Path_" #gp_envname))) + + (if (AND (<> "" #gp_res) #gp_remdir) + ( + ; Remove the "Internet" suffix + (set #gp_res (pathonly #gp_res)) + ) + ) ; if + ) + ( + (set #gp_res "") + ) + ) ; if + ) + ) ; if + + (if (OR (= "" #gp_res) (= @user-level 2)) + ( + ; We had a problem. So we need to ask the user! + (set #gp_res + (expandpath + (askdir + (prompt #gp_msg) + (help #gp_help) + (default #gp_default) + ) + ) + ) + ) + ) ; if + + ; If the directory does not exist, retry! + (if (<> "" #gp_res) + ( + (if (not (exists #gp_res (noreq))) + (set #gp_res "") + ) ; if + ) + ) ; if + ) ; while + + ; return the result! + (set #gp_res #gp_res) + +) ; GETPATH + +;------------------------------------------------------------------------ +(procedure RUNLHEX #rl_archive #rl_dest #rl_msg + (working (#installing #rl_msg)) + (run (cat "C:lhex \"-qfw" #rl_dest "\" x \"" #rl_archive "\"")) +) ; RUNLHEX + +;------------------------------------------------------------------------ +; Unpack an archive like RUNLHEX, but to a temporary subdirectory +(procedure RUNLHEX2TEMP #rl2t_archive #rl2t_dest #rl2t_msg + + (set #rl2t_destpath #rl2t_dest) + + (set #rl2t_temppath (tackon @default-dest ".tempinstall")) + (delete #rl2t_temppath (all) (optional "force")) + (makedir #rl2t_temppath) + + (RUNLHEX #rl2t_archive #rl2t_temppath #rl2t_msg) + +) ; RUNLHEX2TEMP + +;------------------------------------------------------------------------ +(procedure UPD_TEMP2DEST #rl2t_usecopylib #rl2t_file + + ; This may be called multiple times after RUNLHEX2TEMP + ; it will update a file from the temporary area to the + ; actual destination using copylib if requested to do so. + + (set #rl2t_src (tackon #rl2t_temppath #rl2t_file)) + (set #rl2t_dst (tackon #rl2t_destpath #rl2t_file)) + + (working (#installing #rl2t_file)) + + ; A directory as source needs special handling! + (if (= (exists #rl2t_src) 2) + ( + ; A directory as source means copying the whole thing as is + ; Use copyfiles for copying + (copyfiles + (source #rl2t_src) + (dest #rl2t_dst) + (optional "force" "askuser") + (all)) + ) + ( + ; Not a directory, copy the file to the correct destination + (set #rl2t_dstdir (pathonly #rl2t_dst)) + (makedir #rl2t_dstdir) + + (if #rl2t_usecopylib + ( + ; Use copylib for copying + (copylib + (source #rl2t_src) + (dest #rl2t_dstdir) + (optional "force" "askuser") + ) + ) + ( + ; Use copyfiles for copying + (copyfiles + (source #rl2t_src) + (dest #rl2t_dstdir) + (optional "force" "askuser") + ) + ) + ) ; if + ) + ) ; if + + ; Now delete the file/dir in the temporary storage area to conserve + ; disk space + (delete #rl2t_src (all) (optional "force")) + +) ; UPDATETEMP2DEST + +;------------------------------------------------------------------------ +; Cleanup the temporary directory created in RUNLHEX2TEMP +(procedure KILLTEMP + + (delete #rl2t_temppath (all) (optional "force")) + +) ; KILLTEMP + +;------------------------------------------------------------------------ +; Save a prefs file into a suitable subdirectory +(procedure SAVEPREFS #sps_basedir #sps_file + + (set #sps_name (tackon #sps_basedir #sps_file)) + (if (exists #sps_name) + ( + ; Yo. The file exists. Save it! + (set #sps_prefsdir (tackon (pathonly #sps_name) ".oldprefs")) + + (makedir #sps_prefsdir) + (copyfiles + (source #sps_name) + (dest #sps_prefsdir) + (optional "force" "askuser")) + ) + ) ; if + +); SAVEPREFS + +;------------------------------------------------------------------------ +; Ask the user if he wants to keep his/her prefs and cleanup +; things accordingly +(procedure SAVEPREFSEND #spe_basedir #spe_subdir #spe_appname + + ; This matches SAVEPREFS + (set #spe_prefsdir (tackon #spe_basedir (tackon #spe_subdir ".oldprefs"))) + + (if (exists #spe_prefsdir) + ( + ; We got prefs to check. default is "Yes, keep them" + (if (askbool (prompt (#prefsave-prompt #spe_appname)) + (help #prefsave-help) + (default 1)) + ( + ; Yo. Keep the old prefs! + (copyfiles + (source #spe_prefsdir) + (dest (tackon #spe_basedir #spe_subdir)) + (pattern "#?") + (optional "force" "askuser")) + ) + ) ; if + + ; Ok, done keeping prefs. Now kill the backup! + (delete #spe_prefsdir (all) (optional "force")) + ) + ) ; if + +); SAVEPREFSEND + +;------------------------------------------------------------------------ +; We can't handle this script without Installer 42.9 or better! +(if (< @installer-version 2752521) + ( + ; Big problem! + (message #wrongversion) + (exit (quiet)) + ) +) + +; find out how the user wants to install things +(welcome #welcome) + +(complete 0) + +;------------------------------------------------------------------------ +; We have several destinations to check as our package is unfortunately +; somewhat spread out. + + ; We assume a new installation on an A1200 without MUI or INet! + (set AddWorkAssign FALSE) + (set AddINetAssign TRUE) + (set InstallMUI FALSE) + (set AddMUIAssign FALSE) + (set InstallINet FALSE) + (set AddINetAssign FALSE) + (set IsUpdate FALSE) + + ; First find the Surfer base + + (set #surferdirbase (GETPATH "SurferPackage" "Work:" TRUE #surferdestdir-prompt #surferdestdir-help)) + + ; We have to create a drawer "Internet" there! + (set #surferdir (tackon #surferdirbase "Internet")) + + ; If this is a new installation, we check the diskspace! + (if (not (exists #surferdir)) + ( + ; For a new setup, we should leave some space! + (if (< (getdiskspace #surferdirbase) 4000000) + (abort (#no-diskspace #surferdirbase 4000000)) + ) + + ; Just to be sure. + (makedir #surferdir (infos)) + ) + ( + ; This must be an update! + (set IsUpdate TRUE) + ) + ) + + ; Ok, we found the correct destination now + (set @default-dest #surferdir) + + ; MUI only needs to be installed if there isn't a suitable version + ; already. So we need to check for MUI 14.107 first! + (if (< (getversion "LIBS:muimaster.library") 917611) + ( + ; Hmm. We don't have suitable MUI. Install it + (set InstallMUI TRUE) + (set AddMUIAssign TRUE) + ) + ( + ; Ok. A suitable MUI is there. In expert mode ask the user if he + ; wants to overwrite it with the old one. + (if (= @user-level 2) + ( + (if (askbool (prompt #muiinst-prompt) + (help #muiinst-help) + (default 0)) + ( + ; Ok. Install it anyway! + (set InstallMUI TRUE) + (set AddMUIAssign TRUE) + ) + ) ; if + ) + ) ; if + ) + ) ; if + + ; If we already have INet, check before simply installing it + ; This works a lot like the MUI check! + ; We require INet 7.100. + (if (<> "" (getassign "INet" "av")) + ( + (if (< (getversion "INet:libs/inet.library") 458852) + ( + ; Hmm. We don't have suitable INet. Install it + (set InstallINet TRUE) + (set AddINetAssign TRUE) + ) + ( + ; Ok. A suitable INet is there. In expert mode ask the user if he + ; wants to overwrite it with the old one. + (if (= @user-level 2) + ( + (if (askbool (prompt #inetinst-prompt) + (help #inetinst-help) + (default 0)) + ( + ; Ok. Install it anyway! + (set InstallINet TRUE) + (set AddINetAssign TRUE) + ) + ) ; if + ) + ) ; if + ) + ) ; if + ) + ( + ; Hmm. We don't have suitable INet. Install it + (set InstallINet TRUE) + (set AddINetAssign TRUE) + ) + ) ; if + + ; This is tricky. We want the boot-volume as default, but the + ; user might have reassigned it. In that case we assume that + ; s/he knows what s/he is doing! + (if InstallMUI + ( + (set #muidir (GETPATH "" "SYS:" TRUE (#destdir-prompt #muidir-info) #destdir-help)) + ) + ) ; if + + (set #envdir "ENVARC:") + (set #devsdir (GETPATH "" "DEVS:" TRUE (#destdir-prompt #devsdir-info) #destdir-help)) + (set #classesdir (GETPATH "" "SYS:Classes" TRUE (#destdir-prompt #classesdir-info) #destdir-help)) + (set #libsdir (GETPATH "" "LIBS:" TRUE (#destdir-prompt #libsdir-info) #destdir-help)) + (set #localedir (GETPATH "" "LOCALE:" TRUE (#destdir-prompt #localedir-info) #destdir-help)) + (set #fontsdir (GETPATH "" "FONTS:" TRUE (#destdir-prompt #fontsdir-info) #destdir-help)) + + (complete 5) + +;------------------------------------------------------------------------ +; First, we install lhex and Installer into C: This won't change and +; we need them. +(askdisk (dest "SurferDisk1") (prompt #ask-disk1) (help @askdisk-help)) + +(working (#installing "Installer")) +(copylib + (source "Installer") + (dest "C:") + (optional "force" "askuser") +) + +(complete 8) + +(working (#installing "lhex")) +(copylib + (source "lhex") + (dest "C:") + (optional "force" "askuser") +) + +(complete 5) + +;------------------------------------------------------------------------ +; Now install Inet, fonts.lha and locale.lha, because they reside on disk #1 +(if InstallINet + ( + (SAVEPREFS #surferdir "Inet/db/group") + (SAVEPREFS #surferdir "Inet/db/networks") + (SAVEPREFS #surferdir "Inet/db/protocols") + (SAVEPREFS #surferdir "Inet/db/services") + (SAVEPREFS #surferdir "Inet/db/syslog.conf") + (RUNLHEX "inet.lha" #surferdir "INet") + (SAVEPREFSEND #surferdir "Inet/db" "INet") + ) +) ; if +(complete 15) + +(RUNLHEX "locale.lha" #localedir #localedir-info) +(complete 18) + +(RUNLHEX "fonts.lha" #fontsdir #fontsdir-info) +(complete 19) + +;------------------------------------------------------------------------ +; On disk #2, we got work_(www|email|irc|ftp).lha, libs.lha, devs.lha, envarc.lha +(askdisk (dest "SurferDisk2") (prompt #ask-disk2) (help @askdisk-help)) + +(SAVEPREFS #surferdir "WWW/Bookmarks.html") +(SAVEPREFS #surferdir "WWW/MindWalker.prefs") +(RUNLHEX "SurferDisk2:work_www.lha" #surferdir #surfdir-info) +(SAVEPREFSEND #surferdir "WWW" "MindWalker") +(complete 20) + +(SAVEPREFS #surferdir "E-Mail/Voodoo.prefs") +(RUNLHEX "SurferDisk2:work_email.lha" #surferdir #surfdir-info) +(SAVEPREFSEND #surferdir "E-Mail" "Voodoo") +(complete 24) + +(RUNLHEX "SurferDisk2:work_irc.lha" #surferdir #surfdir-info) +(complete 28) +(RUNLHEX "SurferDisk2:work_ftp.lha" #surferdir #surfdir-info) +(complete 30) + +(RUNLHEX2TEMP "SurferDisk2:libs.lha" #libsdir #libsdir-info) +(UPD_TEMP2DEST TRUE "gtlayout.library") +(KILLTEMP) + +(complete 35) +(RUNLHEX2TEMP "SurferDisk2:devs.lha" #devsdir #devsdir-info) +(UPD_TEMP2DEST TRUE "networks/ppp.device") +(UPD_TEMP2DEST TRUE "networks/slip.device") +(UPD_TEMP2DEST FALSE "DataTypes") +(KILLTEMP) + +(complete 40) + +(SAVEPREFS #envdir "sana2/ppp0.config") +(SAVEPREFS #envdir "sana2/slip0.config") +(RUNLHEX "SurferDisk2:envarc.lha" #envdir #envdir-info) +(SAVEPREFSEND #envdir "sana2" #envdir-info) +(complete 42) + +;------------------------------------------------------------------------ +; On disk #3, we got classes.lha, locale.lha, fonts.lha, and MUI.lha +(askdisk (dest "SurferDisk3") (prompt #ask-disk3) (help @askdisk-help)) + +(RUNLHEX2TEMP "SurferDisk3:classes.lha" #classesdir #classesdir-info) +(UPD_TEMP2DEST TRUE "window.class") +(UPD_TEMP2DEST TRUE "arexx.class") +(UPD_TEMP2DEST TRUE "DataTypes/gif.datatype") +(UPD_TEMP2DEST TRUE "DataTypes/jpeg.datatype") +(UPD_TEMP2DEST TRUE "DataTypes/png.datatype") +(UPD_TEMP2DEST TRUE "DataTypes/xbm.datatype") +(UPD_TEMP2DEST TRUE "Gadgets/button.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/checkbox.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/clicktab.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/integer.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/layout.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/listbrowser.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/scroller.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/space.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/speedbar.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/string.gadget") +(UPD_TEMP2DEST TRUE "Gadgets/textfield.gadget") +(UPD_TEMP2DEST TRUE "Images/bevel.image") +(UPD_TEMP2DEST TRUE "Images/drawlist.image") +(UPD_TEMP2DEST TRUE "Images/glyph.image") +(UPD_TEMP2DEST TRUE "Images/label.image") +(UPD_TEMP2DEST TRUE "Images/penmap.image") +(KILLTEMP) + +(complete 62) +(RUNLHEX "SurferDisk3:work.lha" #surferdir #surfdir-info) +(complete 65) +; Install MUI only if needed! +(if InstallMUI + ( + (RUNLHEX "SurferDisk3:mui.lha" #muidir #muidir-info) + ) +) ; if +(complete 80) + +;------------------------------------------------------------------------ +; There is the config backup-directory that might not exist yet. +; Some stuff depends on it! +(makedir (tackon #surferdir "Surfer-Backup")) + +;------------------------------------------------------------------------ +; We might need to create a Work: Assign. This is basically +; Surfer 1.1 magic! +; This is a necessary hack: Surfer MUST reside in Work:Internet currently! +; (Surfer 1.1!) +(if (= "" (getassign "Work" "adv")) + (Set AddWorkAssign TRUE) +) ; if + +(if AddWorkAssign + ( + (set cmd (cat "Assign Work: \"" #surferdirbase "\"\n")) + (startup "INTERNET-SURFER" + (prompt (#startup-prompt "Surfer Package" cmd)) + (help #startup-help) + (command cmd) + ) + + ; If we have to add a Work: Assign, we better create one right now + ; The user might want to start the surfer right away! + (makeassign "Work" #surferdirbase) + ) +) +(complete 82) + +; MUI might need one, too on a new installation +(if AddMUIAssign + ( + (set cmd (cat "Assign MUI: " (tackon #muidir "MUI-AT") "\nAssign LIBS: MUI:Libs ADD\nAssign LOCALE: MUI:Locale ADD\n")) + (startup "MUI-AT" + (prompt (#startup-prompt "AT-MUI" cmd)) + (help #startup-help) + (command cmd) + ) + + (if (not @pretend) + ( + ; To help the poor fools + (makeassign "MUI" (tackon #muidir "MUI-AT")) + (run "Assign LIBS: MUI:Libs add") + (run "Assign LOCALE: MUI:Locale add") + )) + ) +) +(complete 85) + +; We should not forget INet! +(if AddINetAssign + ( + (set #t (tackon #surferdir "INet")) + (set cmd (cat "IF EXISTS \"" #t "\"\n Assign INet: \"" #t "\"\n Path INet:C ADD\nENDIF\n")) + (startup "INet" + (prompt (#startup-prompt "AT-INet" cmd)) + (help #startup-help) + (command cmd) + ) + + ; Magic to avoid clashes! + (if (<> "" (getassign "INet" "adv")) + (run "Path INet:c remove") + ) + + ; To help the poor fools + (if (not @pretend) + ( + (makeassign "INet" #t) + )) + + (run "Path INet:c add") + ) +) +(complete 90) + +;------------------------------------------------------------------------ +; Something nifty. The user might still have an unmodified startup +; where T: points to RAM: We can't have that on an A1200 or Surfer +; won't run due to lack of memory. RAM: has the special feature +; that it is always full. We make use of this and expect at least 10K +; free temporary space! +(if (< (getdiskspace "T:") 10000) + ( + (set #t (tackon #surferdir "Temp")) + ; Hmm. It seems that this guy is using RAM: + (set cmd (cat "If Not Exists \"" #t "\"\n MakeDir \"" #t "\"\nEndIf\nDelete >NIL: \"" (tackon #t "#?") "\" quiet all\nAssign T: \"" #t "\"\n")) + (startup "TEMPDIR" + (prompt (#startup-prompt "Surfer" cmd)) + (help #startup-help) + (command cmd) + ) + + (makedir #t) + (if (not @pretend) + ( + (makeassign "T" #t) + )) + ) +) +(complete 95) + +;------------------------------------------------------------------------ +; Finally create some information about where surfer resides now +(makedir "ENV:Surfer") +(makedir "ENVARC:Surfer") +(textfile (dest "ENV:Surfer/Path_SurferPackage") (append #surferdir)) +(textfile (dest "ENVARC:Surfer/Path_SurferPackage") (append #surferdir)) +(complete 97) + +;------------------------------------------------------------------------ +; Inform the user about MF-Light +(message #bonus-disk (all)) + +;------------------------------------------------------------------------ +; The user might want to update the configuration! This is valid for all +; user levels! +(user 2) +(if (askbool (prompt #ask-config) (help #ask-config-help) (default 1)) + ( + ; Just a try! + (run (tackon #surferdir "Internet-Setup")) + ) +) + +;------------------------------------------------------------------------ +; That's it! +(complete 100) + +(CLEANUP) +(exit) + +;------------------------------------------------------------------------ + +; *** EOT *** diff --git a/SampleScripts/Surfer-Install.info b/SampleScripts/Surfer-Install.info new file mode 100644 index 0000000000000000000000000000000000000000..ec8fb64022beff42f5bc677e445133b385ded652 GIT binary patch literal 487 zcmY+=y-LGS6bJBsJ|H4UGN@gOI4C}arV%2|96G5GdLsb+JayOwqgbqGPd;%wD zi|ytRLjNTHt:fred/result" + (prompt "Running 'info'") + (help "This will only work from the CLI!") + (confirm) +) + +(if @pretend + (makeassign "FRED" "T:" (safe)) + (makeassign "FRED" "T:fred") +) + +(rename "Fred:result" "Fred:data" + (prompt "Renaming 'result' to 'data'") + (help "So why wasn't it named that in the first place??") + (confirm) +) + +(delete "FRED:angie/printer.device" + (prompt "Going to delete Fred's printer.") + (help "That's nice...") + (confirm) +) + +(message "End of first set of tests!") + +(set name + (askdir + (prompt "OK, where was that directory??") + (help @askdir-help) + (default "FRED:") + ) +) + +(debug "Directory was " name) + +(set name + (askfile + (prompt "OK, where was that file??") + (help @askfile-help) + (default "FRED:angie") + ) +) + +(debug "File was " name) + +(set name + (askstring + (prompt "OK, what should I have named that data file?") + (help @askstring-help) + (default "happy_file") + ) +) + +(debug "String was " name) + +(set name + (asknumber + (prompt "How old are you?") + (help @asknumber-help) + (range 1 150) + (default 32) + ) +) + +(debug "Number was " name) + +(set name + (askchoice + (prompt "How do you rate things so far?") + (help @askchoice-help) + (choices "Pretty good" "OK" "Only fair" "Rather dismal") + (default 0) + ) +) + +(debug "Choice was " name) + +(set name + (askoptions + (prompt "What would you like to eat?") + (help @askoptions-help) + (choices "Hamburger" "Fries" "Salad" "Strawberry Shake" "Apple Pie") + (default 9) + ) +) + +(debug "Options bits were " name) + +(set name + (askbool + (prompt "Should Puerto Rico become the next state?") + (help "It's up to YOU.") + (choices "Make a State" "Nuke 'Em") + (default 0) + ) +) + +(debug "Result of AskBool was " name) + +(trap 1 + (askbool + (prompt "Please hit ABORT!") + (help "Pretty please...") + ) +) + +(abort + "Well, I hope you liked this test of the emergency installer system!" +) diff --git a/SampleScripts/install-test.info b/SampleScripts/install-test.info new file mode 100644 index 0000000000000000000000000000000000000000..1feab5ddb88a0d250cdfda7ddd6a9ad341c14c0e GIT binary patch literal 663 zcmZ{g&q~8U5XQf_YZF9hz=NWP#-k^_c<>;lPzxTE9_(2~JP1X__9O)tTBOg?rx1LR zfDd3wK?02(XLgeoi%!_#$2Whz-F$@bAQ55%4eVeQij`n5wCZy5H2kllEq}cG#-(*W zrA13V(!e%W5ZnxvD|wXVJ&I;R8u0mZRD#kxIN%GQFI2~2t2NP~_gcsEXq3|OFq@9)`bW~1o;K+~V1}{Vt&xmh9^_*mL4~nan;{Ql|d$uaRLVY8? zJUb@)Hr|}fcx&-|qLg(BW3!~bv~mQ|fb%}lRS*rC9_IAvs0IjC)8SwAUQ`XwN?#={ zsGOL{X?|R2o)O;!h~*CeM8qV%8B|VF`W9lhX=P5AOT@lYs~MhkeU|L3(63m#yYF