@database InstallerNG User documentation
@author Jens Tröger
@(C) 1999/2000 by Jens Tröger

@node MAIN "Well, some nice quotes..."

               Life is a strange thing
               Just when you think you learned how to use it
               It`s gone

                                                   @{i}Shakespears Sister@{ui}


               We talk about our flights
               In this queer dimension
               And how we are afraid
               To carry on alone
               And finish our direction... flying home

                                                   @{i}Linda Perry@{ui}


               They lowered my body in a dark hole
               The dry ground now covers my remains
               I stood at their side and watched them crying
               They can`t know, the tears they are in vain

                                                   @{i}Rage@{ui}


               Remember in this game we call life
               That no one said it`s fair

                                                   @{i}Axl Rose@{ui}


               Und du rufst in die Welt
               Daß sie dir nicht mehr gefällt
               Du willst `ne schönere erleben
               Doch es wird keine and`re geben

                                                   @{i}Witt/Heppner@{ui}


               Well who am I to complain
               About a bit of earthly pain?
                                                   @{i}Tito & Tarantula@{ui}


               How `bout not equating death with stopping?

                                                   @{i}Alanis Morissette@{ui}


               D'Oh!
                                                   @{i}Homer Simpson@{ui}


               Hörst Du die Engel singen?
               Hörst Du die Harfen klingen?
               Hat sich das Leiden nicht gelohnt?
               Fütter das Weiße Licht für mich!
                                                   @{i}OOMPH!@{ui}


 @{" Go on " link START}

@endnode
@node START "Installer NG"


                          @{b}InstallerNG v1.5 pre-release@{ub}

 ----------------------------------------------------------------------------------------
  @{b}                     THIS IS A PUBLIC BETA VERSION
        THUS THERE MAY BE MANY BUGS AND MISBEHAVIOURS AND MISSING FUNCTIONALITY.
                           USAGE IS YOUR OWN RISK.@{ub}

      Furthermore, the current version of the MUI gui-plugin is not complete! So be
               prepared for missing functionality or unexpected behaviour
 ----------------------------------------------------------------------------------------
  Maybe an error occurs while you use my InstallerNG. If this happens, follow these
  steps:
    - restart using the InstallerNG.debug version (included in the distribution)
    - note the Hunk/Offset trace and the error (if you use e.g. Mungwall/Enforcer)
    - send me a bugreport and please include:
          a) the script, which caused the error
          b) complete error description (what you did, what happend...)
 ----------------------------------------------------------------------------------------
   You may be upset about the errors and crashing of scripts, wich worked fine
   with the old C= Installer. Don't blame me! In the very most cases, bad programmed
   scripts are the reason. The C= Installer is a damn lazy and error-accepting
   tool. Please contact the author of the script.
 ----------------------------------------------------------------------------------------



 @{b}Introduction@{ub}
   @{" Introduction              " link INTRO}   - What`s this thing about?
   @{" Author                    " link AUTHOR}   - Thats me :-)
   @{" Thanks                    " link THANX}   - Thanks for help...
   @{" Disclaimer                " link DISCLAIMER}   - For all!

 @{b}The Installer@{ub}
   @{" What`s New                " link NEW}   - Cool things I extended
   @{" Incompatibilities         " link INCOMPATIBLE}   - Sorry for this!
   @{" Starting the Installer    " link RUNIT}   - Getting started
   @{" Trouble with other soft   " link TROUBLE}   - You should know about this
   @{" Help                      " link HELPME}   - I need some help

 @{b}Additional Information@{ub}
   @{" To Do                     " link TODO}   - There is soooo much left to do
   @{" History                   " link HISTORY}   - The history so far
   @{" Known Bugs                " link KNOWNBUGS}   - Shit!!!

@endnode
@node INTRO "Introduction"

  Today, the installation of software products can be a very complex
  procedure. This is caused by the sometimes large set of different files
  or a very lowlevel intervention into the systems resources. Especially
  for novice users this process can be difficult and the system may be
  destroyed (worst case...).

  This was the motivation for Commodore to build a tool, which covers
  the installation process and offers an easy to use and graphical
  interface. This thing was called the @{i}Installer@{ui}. The user just tells where
  and what to install and the Installer cares for the installation process
  itself, i.e. the Installer checks for the versions, copies the files to
  the correct destinations, sets up a correct environment for the installed
  tool and so on. The user can choose, whether he wants an easy installation
  (means, as less as possible queries) or if he wants to get notified for
  every action.

  If you are a programmer and you want to provide your user such an easy
  installation, you must write an @{i}Installer-Script@{ui}. This script is
  simply a textfile and contains a programm, written in a special language.
  This language is simple and offers very much functions for querying the user,
  for setting and getting system properties, for file handling, string manipulation
  and, last but not least, a lot of mathematical functions. Furthermore, put
  an icon into your archive, which contains special tooltypes (for tooltypes
  please refer to your workbench guide) for the Installer. When the user
  double-clicks this icon, the Installer will get started and then looks for
  your script to execute it.

@endnode
@node DISCLAIMER "Disclaimer"

  Since I really don`t like people, who release every damn shit as "Shareware", I decided
  to make this project "Freeware". Maybe an upcoming "developer version" (which includes
  a source-level debugger, a script creator etc...) will be "Shareware", but this
  InstallerNG won`t.

  @{i}This version 1.0+ pre-release is Freeware. You are allowed to spread this package,
  as long as the archive is complete and as long as no profit (in any way) will be made.
  You are also allowed to put this InstallerNG into your own releases for installing your
  stuff, as long as you put the guide also into your release. For commercial distributions
  you must contact the @{"author" link AUTHOR}. For additional information and rules
  please reade the .LICENSE file, which is also included in this archive.@{ui}

  Suggestions, bugreports, money are always welcome ;)

@endnode
@node HELPME "I need your help!"

  Maybe you can help me with one (or more) of the following things:
    - who would paint some nice icons for buttons and a cool logo?
    - help in network related things

@endnode
@node AUTHOR "That`s me ;)"

  @{b}Snail Mail@{ub}
    Jens Tröger
    i4/182 Dornoch Tce
    Highgate Hill, QLD, 4101
    Australia

  @{b}E-Mail@{ub}
    savage@light-speed.de

  @{b}WWW@{ub}
    http://savage.light-speed.de
    http://installerng.amiga-center.de (InstallerNG support page)

  @{b}IRC@{ub}
    Nick:     _savage
    Channel:  #amigager

@endnode
@node THANX "I want to thank..."

  Special thanx for...

  @{b}patience and testing the InstallerNG again and again@{ub}
    Jens Langner
    Kai Hofmann
    Sven Steiniger

  @{b}interesting talks about coding@{ub}
    Olaf Barthel
    Michael Rock
    Sven Steiniger

  @{b}additional@{ub}
    James Maurice Battle - for his icon and the nice picture
    Stefan Ruppert - for help in datatype related stuff

  @{b}translations@{ub}
    français: Didier Giron/Philippe Bovier, Pascal Chiozzi

  And last, but really not least, all those people, who have sent me so many
  nice & fanatic mails and who are the important reason, that i will go on with
  writing this program...

    Tino Wildenhain           Marcin Orlowski
    Robert Reiswig            Jon Peterson
    Lee Stoneman              Hartwig Tauber
    Andrea Valinotto          Oliver Fabre
    Christian Hattemer        Richard Malmgren
    Daniel Confora            John Antony Newmann
    Frank Pagels              Matthias Betke
    Henning Kiel              Pascal Chiozzi
    Jeff Grimmet              Didier Giron
    Kai Hofmann               Marco Schärfchen
    Linus McCabe              Jean François Fabre
    Marko Seppanen            Stefan Kost
    Markus Merding            
    Martin Steigerwald
    Oywind Falch
    Philippe Bovier
    Pieter Frenssen
    Thomas Klein
    Soyeb Aswat
    Tobias Abt
    Alasdair Simpson
    Jens Weichert
    Dobes Vandermeer
    Joel Newkirk
    Grzegorz Kraszewski
    John Pullicino
    Dirk Stöcker
    Rainer Müller
    Herve Dupont

@endnode
@node INCOMPATIBLE "Still not 100% perfect"

  The C= Installer is a mess... buggy, bad language handling and weird
  type constructs. I tried to do a better job, but one aim was, to stay
  compatible with the C= installer. Thus, the InstallerNG has also some
  'weird' features (note: these are no bugs, these are features!), but
  on the other hand, I think I built a better compiler kernel and a much
  better interpreter :)

  If you want to compile 'buggy' scripts, you can switch on the LAZYCOMPILE
  option at startup to skip any check procedures!

@endnode
@node TODO "What ist left to do"

  @{b}Personal aims@{ub}
    - a LISP like operator to prevent expressions from evaluation; this would enable
      a polymorph structured datatype 
    - when copying whole directories: show a gauge for the file and a gauge for
      the complete work
    - automatically turn off the UN!X-Dirs commodity to avoid path conflicts
    - retry option for DOS errors
    - reduce the memory overkill
    - remove all @{"known Bugs" link KNOWNBUGS}
    - new function: CREATE-ICON
    - implement the delete-skript creation (maybe an option to select whether the
      InstallerNG should create an uninstall shell-script or an uninstall
      installer-script)
    - variable spy, source-level debugger

  @{b}Suggestions by others@{ub}
    - a special WELCOME panel with a (timed) intro picture @{i}(Thomas Kessler)@{ui}
    - background pattern for the InstallerNG window @{i}(Matthias Andre)@{ui}
    - a GUI library that supports skins (like AmigaAMP) @{i}(Jens Langner)@{ui}
    - reading compressed scripts would be very useful @{i}(Tobias Abt)@{ui}
    - icon ressource drawer, such that a user can automatically install preferred
      icons (GlowIcons, NewIcons, MWB, ...) for several data types (e.g. *.html,
      *.doc etc) @{i}(Marco Schärfchen)@{ui}
    - lowlevel function to partition and install alien file systems via special
      functions @{i}(Thomas Mache)@{ui}
    - when running the installer with a *.lha file instead of a script (new tooltype
      ARCHIVE ?) the installer will extract a file "install" from the archive and
      uses this for installing directly from the archive @{i}(Dirk Stöcker)@{ui}
    - something like a "global logfile" which holds all installed
      packages @{i}(Alasdair Simpson)@{ui}
    - image buttons @{i}(Danial Canfora)@{ui}
    - a function INCLUDE to read external sources (thus: writing a preprocessor?)
      @{i}(Kai Hofmann)@{ui}
    - automatic creation of directories via ASKDIR @{i}(Alexander Reiffinger)@{ui}
    - online registration for software @{i}(Jürgen Haage)@{ui}
    - give Installer a "gauge-port" such that a command (started with the EXECUTE
      function) can signal its current working state (useful: pipe the lha-output
      to a special tool which converts it and sends working-state-signals to
      Installer) @{i}(Ignatios Sourvakis)@{ui}
    - show device-list when invalid directory was typed in ASKDIR/ASKFILE functions
      @{i}(Jens Langner)@{ui}

  @{b}Language extensions@{ub}
    - CLOS: new functions DEFINE-CLASS, MAKE-INSTANCE, DEFINE-METHOD,
      INVOKE-METHOD etc.
    - CATCH and THROW (or enhance the ONERROR and TRAP functions)
    - continuations: CALL-CC
    - allow guarded expressions

  @{b}Does this make sense ?@{ub}
    - type inferencing
    - saving the compiled program as binary for a later reloading
    - use XPK-functions for unpacking
    - add constants to the language: e.g. (SETCONST a 5)
    - shared library interface for simple libcalls:
        raw:      (LIBCALL "dos" -198 "d1" 50)   ; Delay(50)
                  (LIBCALL "intuition" -78)      ; CloseWorkBench()
        FD files: (LIBCALL "dos.Delay(50)")
                  (LIBCALL "intuition.CloseWorkBench()")

  @{b}Wildest dream :)@{ub}
    Create executables. Running this executable has the same effect as running
    the installer and a script. This should reduce the resources in any way.

@endnode
@node HISTORY "The history of this Program"

  @{u}1.5 pre-release (current...)@{uu}
    April 8, 2001
      - added tooltypes NER=NOERRORREQUESTER/S (to supress error requesters on runtime)
        and IGNOREERRORS/S (if NER then this switch forces the installerNG to ignore
        runtime errors)
    March 6, 2001
      - enhanced the scanner with flexible error handling, ie iNG does not quit by
        finding syntax errors, but goes on (this technique might be somehow lead to
        unstable compiling, but is at least better than just quitting)
      - tree evaluation protocols warnings to the iNG debug console
    February 19, 2001
      - the semantic checker still ignored the BACK parameter-function, which led
        to "Wrong Number of Args" warning under some circumstances @{i}(Martin Steigerwald)@{ui}
      - GETENV now ignores \n as the EOF character for variables @{i}(Martin Steigerwald)@{ui}
    February 12, 2001
      - builtin GUI: Floattext skiped characters greater than 128 at the beginning
        of a text (e.g. MESSAGE) @{i}(Steven Norburn)@{ui}
      - finaly quick-hacked a wordwrap for the PROMPT texts
    February 6, 2001
      - added new text to the catalogs (see catalogs/CHANGES)
      - COPYFILES/COPYLIB now request whether or not to abort the copy process
      - if MINUSER (and therewith DEFUSER) is "expert" then WELCOME skips the
        user-level selection @{i}(Steven Norburn)@{ui}
    February 5, 2001
      - ICONONFO together with GETTOOLTYPE did set the target variable to zero (instead
        of leaving it untouched) if the tooltype did not exist; fixed @{i}(Steven Norburn)@{ui}
    February 4, 2001
      - the COPYFILES/COPYLIB "Cancel" button eventually works, but does not quit
        the installation (as the old Installer does)
      - extended the GUI-API for handling the COPYFILES/COPYLIB "Cancel" button
      - removed a mistake in the <savage/macros.h> file, which caused wrong local
        "exception handling" @{i}(ZZA)@{ui}
    February 2, 2001
      - fixed a bug in the builtin GUI which appeared calling ASKCHOICE/ASKOPTIONS
        with several CHOICEs @{i}(Martin Steigerwald/Jens Langner)@{ui}
    December 17, 2000
      - fixed a bug of the builtin GUI which caused the InstallerNG to crash, when
        someone opens/closes the Help window @{i}(Mario Cattaneo, Jochen Becher)@{ui}
    December 15, 2000
      - added new function CALL-PLUGIN which allows to call external functionality
        using a typed API
    December 12, 2000
      - restructured the external libraries (gui, compiler-modules, function-plugins);
        see "External Resources" in the Programmers.guide for further details and
        have a look in the archives LIBS directory
    December 6, 2000
      - added the RESIDENT parameter to the SETENV function such that one can set
        resident environment variables (i.e. enable var creation in both ENV: and
        ENVARC: directory)
    November 19, 2000
      - prepared SavGUI for picture buttons; documented an enhanced the compile API
    November 16, 2000
      - added a new typechecker.module, which is fun to run and discover all the
        (in my opinion) overseen type errors; it's in an early and experimental state!
    November 12, 2000
      - enhanced the error information handling of the GUI; so the GUI-API and
        GUI library come in a new version v41.0
    November 6, 2000
      - modified the STARTUP function and (hopefully) removed its misbehaviour
      - fixed a misbehaviour of DELETE together with ALL or INFOS arguments
      - InstallerNG performes a memory flush at startup (NOTE: this causes 3 Mungwall
        hits!) @{i}(Holger Jeromin)@{ui}
    November 1, 2000
      - both NULL and NIL are now builtin string constants representing the
        empty string
      - forgot to lock the InstallerNG windows when opening a file requester
      - added proportional gadgets to the MEDIA windows, if neccessary
      - removed a little bug in ASKBOOL which caused the gadgets to show on some
        wrong positions
    October 30, 2000
      - COPYFILE (in CONFIRM mode) allows easy change of the target directory via
        a file requester
      - pressing RMB over a file- or dir-selection panel brings up the drives
        list (same as in reqtools.library) @{i}(Holger Jeromin)@{ui}
      - all the MEDIA functions should now work without any problems
        special thanks to @{i}Stefan Ruppert@{ui} for his needful example sources!
    October 28, 2000
      - *MEDIA functions should work in general, but maybe not fully functional
        (SETMEDIA); 
    October 1, 2000
      - the compiler did not perform semantic checks anymore, works again now
      - debugged console handling
    September 28, 2000
      - using the EFFECT (and maybe WELCOME or PROCEDURE) function as "then" or
        "else" argument to the IF function could cause enforcer hits @{i}(Steven Norburn)@{ui}
    September 10, 2000
      - added one more example script
      - added new function CURRENTDIR for changing InstallerNG's current working
        directory (this should ease the copy work!)
    August 4, 2000
      - ABORT skiped the text in NOVICE mode
    July 14, 2000
      - fixed the bug (??) caused by MCP's "Solid Window Sizing" feature
    July 9, 2000
      - created directories are also commented with the package name
      - if a function is of type STRING and if an error happens while such a function
        evaluates its arguments, it returns now an empty string rather than a 0 to
        avoid NULL read/writes
    July 1, 2000
      - added functions SAVE-PROPERTY-OBJECT/READ-PROPERTY-OBJECT @{i}(Stefan Kost)@{ui}
      - added functions CAST-INT and CAST-STRING for stronger type handling
      - several important internal changes to the interpreter to support types
        of the parameter functions (problem submitted by @{i}Stefan Kost@{ui})
    June 30, 2000
      - the scanner read ALT-SPACE not as an intertoken space, as it should do

  @{u}1.4 pre-release(June 25, 2000)@{uu}
    June 25, 2000
      - removed an enforcer hit with screennotify.library @{i}(Jens Langner)@{ui}
    June 24, 2000
      - you can change the "Advanced Options" (see WELCOME) while the installing
        process using a menu
      - removed a type-casting bug in COMPARE @{i}(Stefan Kost)@{ui}
    June 14, 2000
      - added module support, i.e. after a successful compilation, the InstallerNG
        loads and executes modules (or: plugins), which may work with or modify the
        compiled program; possible modules could be a pretty printer (in work),
        type inferencing (planed), generation of executables (planed), optimizer
        (planed), .... whatever
      - added new debug message, if the user attempts to modify a constant
        value like TRUE, FAIL, ...
      - ASKFILE/ASKDIR raised a LONG-READ from NULL, iff the user tried to
        switch to the parent dir of the volume list
    June 1, 2000
      - added screennotify.library support
    May 3, 2000
      - RUN now defines NIL: as std input and InstallerNG's console for
        std output for the command @{i}(Jens Langner)@{ui}
    March 25, 2000
      - NOP caused enforcer hits, when the optional parameter was missing
    March 20, 2000
      - ABORT did not abort @{i}(Jean-François Fabre)@{ui}
    March 19, 2000
      - added new function FLUSHLIBS @{i}(Oliver Wagner)@{ui}
    March 14, 2000
      - COPYLIB now shows file size and date as additional information (thus,
        updated the installergui.library too, changed GUI-API)
    March 4, 2000
      - SETENV understands now RESIDENT for writing persitent environment variable
        data (AmigaOS 3.0+)
      - COPYLIB did not recognize missing destination files
      - ASKDISK now skips the panel if the requested disk/assign is already
        available @{i}(Jean-François Fabre)@{ui}
      - ASKNUMBER did not correct DEFAULT value for the integer field,
        if it was out of RANGE @{i}(Jean-François Fabre)@{ui}
    February 24, 2000
      - NOP can have one argument now, which is NOP's result value (useful to
        do soomething like "return (x)" in a PROCEDURE
    February 14, 2000
      - GETVERSION still returned 0.0 when it found a Resident structure
    February 8, 2000
      - ASKCHOICE did throw an enforce hit in special cases when using
        empty strings as arguments to CHOICES @{i}(Dirk Stöcker)@{ui}
      - included new french catalog @{i}(Didier Giron/Philippe Bovier)@{ui}
    February 3, 2000
      - problem with window locking when using "Make new dir" within a
        ASKFILE/ASKDIR function call (builtin gui)

    @{b}.oO 2 MONTH IN AUSTRALIA Oo.@{ub}

    December 1, 1999
      - setting "Pretend"/"Install real" had no effect @{i}(Kai Hofmann)@{ui}
    November 25, 1999
      - extended catalog to version 2.0
      - InstallerNG now cares for versions of the catalog files
      - OPENWBOBJECT now supports "Always confirm" mode
    November 24, 1999
      - implemented OPENWBOBJECT/CLOSEWBOBJECT/SHOWWBOBJECT functions
    November 17, 1999
      - MAKEASSIGN throwed an enforcer hit with some special arguments
      - removed an illegal memory access, which happened when using TRACE/RETRACE
    November 11, 1999
      - WELCOME did not set its help texts
    November 10, 1999
      - added a CHANGES file to the "catalogs" drawer to inform the user of the
        required changes of the catalog
      - modified the german catalog
      - added a new semantic check, which marks strings/numbers/variables as
        "useless" inside of an expression list @{i}(suggested by Jens Langner)@{ui}
    November 9, 1999
      - fixed a bug of the compiler kernel, which crashed the syntax tree in
        very special cases @{i}(Dietmar Eilert & his buggy GoldED script)@{ui}
    November 4, 1999
      - ICONINFO had problems with lower case symbolnames
    November 3, 1999
      - SWING ignored the @proceed-button variable
    November 1, 1999
      - GETDISKSPACE is now compatible to the v44+ Installer
      - MUI-GUI: added BACK support, added "Console Log"
      - "Abort installation" turns only into "Back" button, iff more than one
        TRACE was defined
      - in error case, MESSAGE returned type NUMBER instead of type STRING
      - TRACE/RETRACE constellations did not work correctly when RETRACE'ing
        several times
    October 31, 1999
      - fixed a mistake in the GUI-API includes
    October 28, 1999
      - recompiled everything with SAS-C
      - COPYFILES/COPYLIB support OPTIONAL with "nofail" and "oknodelete"
    October 24, 1999
      - nesting of SWING should now work fine
    October 20, 1999
      - included updated french catalog @{i}(Philippe Bovier)@{ui}
    October 17, 1999
      - SHOWMEDIA, SETMEDIA, CLOSEMEDIA now supporting sound
    October 16, 1999
      - added OPENWBOBJECT, SHOWWBOBJECT, CLOSEWBOBJECT to the InstallerNG to keep
        compatibility with the original Installer v44.7+ (currently, these are dummies)
    October 13, 1999
      - using CTRL-F lets you now raise an error ("Error in script"), which helps you
        to correctly clean up your script environment (refer to ONERROR)
      - extended the math.installer example script with a Fibonacci implementation
      - running from shell without valid arguments now causes an error message
    October 9, 1999
      - no more logging, if the created directory alrady existed

  @{u}1.3 pre-release (October 8, 1999)@{uu}
    October 8, 1999
      - fixed an enforcer-hit (caused by strtol of the amiga.lib)
      - fixed a silly COMPARE bug @{i}(Kai Hofmann)@{ui}
      - small changes to the Install script
    October 6, 1999
      - ASKCHOICE/ASKOPTIONS did throw an error, if there were no evaluated CHOICES
      - in case of an interpretation error: the InstallerNG executed the ONERROR
        functions before the requester, so in case of an ignore, the script worked
        with a cleaned-up environment
      - SYMBOLSET/SYMBOLVAL did not work case-insensitive, which could cause
        tricky errors @{i}(Carsten Scholling, Jens Langner)@{ui}
    October 5, 1999
      - updated the @{"Known Bugs" link KNOWNBUGS} section
    October 4, 1999
      - some changes to the builtin gui @{i}(Jens "Nervensäge" Langner)@{ui}
      - added new builtin variable @PROCEED-BUTTON for customizing the text of
        the "Proceed with install"-button @{i}(Kai Hofmann)@{ui}
      - REBOOT supports the SAFE parameter-function
    October 1, 1999
      - REBOOT does not work in pretend mode (like C= Installer v44.7)
    September 30, 1999
      - when the InstallerNG asks for a file or dir (ASKFILE/ASKDIR functions)
        you can now drop icons into its window to change the current directory
    September 29, 1999
      - added new function to the GUI-API
      - if InstallerNG opens a custom screen (see the EFFECT function), then the
        different console windows open on that screen too
    September 28, 1999
      - added new cool example script
      - the InstallerNG should now create correct logfiles (but the content
        may differ from C= installer's logfiles!)
    September 26, 1999
      - added the logging to a custom console window (should be useful for
        programming and debugging scripts)
      - WELCOME: selecting a log destination did modify the user-mode!
    September 23, 1999
      - TOOLTYPE: if the destination icon did not contain any tooltypes, the
        InstallerNG throwed an enforcer hit
    September 21, 1999
      - made heavy changes to the confirmation behaviour of several functions, such
        that CONFIRM can now have 0/1/2 as its arguments
      - the compiler should accept CONFIRM with no argument too
      - STARTUP now inserts the call to 's:user-startup' into the
        's:startup-sequence', if the call does not appear (currently,
        only the builtin gui!)
    September 20, 1999
      - CONFIRM evaluates to 2 (means expert), if the argument is illegal
      - when it prompted, ASKBOOL ignored the @user-level
    September 15, 1999
      - my installergui.library now supports dis-/enabling of the windows, the BACK
        function and the HELP parameter function
    September 11, 1999
      - EXECUTE/REXX/RUN built the arguments in a wrong way
      - GETASSIGN returned a NULL instead of an empty string, if it could not
        find the related assign/volume

  @{u}1.2 pre-release (September 7, 1999)@{uu}
    September 6, 1999
      - function EFFECT will fall back to the "Workbench" screen, if the custom
        screen for the InstallerNG fails
      - included the .license file (thanx to @{i}Jens Langner@{ui})
      - removed an enforcer hit in the builtin gui
    September 2, 1999
      - when done with the installation, the "Proceed..." button gets renamed to
        "Finish" @{i}(James Maurice Battle)@{ui}
    September 1, 1999
      - fixed small problem with reading version strings @{i}(Jens Langner)@{ui}
      - if started from WB, then the variable @ICON was set to the script (wrong)
        and is now set to the icon path
      - @ICON is now a constant and, thus, cannot be modified
    August 30, 1999
      - RUN also supports @EXECUTE-DIR for now
      - added the forgotten @ABORT-BUTTON support (builtin GUI only)

  @{u}1.1 pre-release (Aug 30, 1999)@{uu}
    August 29, 1999
      - modified the version-string handling and the catalog files
      - builtin GUI: fixed some Enforcer-Hits in the Listview and in the makedir
                     window of the ASKFILE function
    August 27, 1999
      - COPYFILES crashed with the installergui.library @{i}(James Maurice Battle)@{ui}
      - builtin GUI: the InstallerNG now opens with an optimized window size,
                     if the gui was not snapshoted @{i}(Tobias Abt)@{ui}
    August 25, 1999
      - if a WORKING follows another WORKING, the last one was not correctly
        layouted (i.e. it appeared in the window frame) @{i}(Sven Steiniger)@{ui}
      - sometimes the InstallerNG asked the "Really quit" question two times
        @{i}(Jens Langner, Dirk Stöcker)@{ui}
      - scanner could read wrong numbers in special cases

  @{u}1.0 pre-release (August 24, 1999)@{uu}
    August 23, 1999
      - if an condition (see IF, WHILE, UNTIL) evaluated to an zero-length
        string value, this is now handled as value FALSE of type NUMBER
      - moving the locked window to an EFFECT screen caused an enforcer hit
    August 22, 1999
      - every new InstallerNG process can open its own EFFECT screen
      - now cares for the return value of Intuition.CloseScreen()
      - simplified the GUI-API: igui_WakeApp(), igui_KickWakeApp() and igui_SleepApp()
        are no longer part of the API, the gui has to care for this itself
    August 17, 1999
      - COPYLIB does nothing if soure-version equals dest-version @{i}(Jens Langner)@{ui}
      - reading the version of files with resident-structures (e.g. shared-libs
        or devices) always returned version 0.0
      - sometimes the GUI was locked, although the installer waits for
        user input
    August 15, 1999
      - COMPARE evaluated an empty string to a number of value zero and, thus,
        could produce type conflicts
      - the installer now sets a return code: RETURN_OK (0) if everything was
        fine or RETURN_FAIL (20) if any error occured  @{i}(??)@{ui}
      - "@installer-version" now equals 44.6 (Installer version of OS3.5)
    August 14, 1999
      - new function NOP :-)
      - finished the MUI API
      - finished some new functions of the OS3.5 Installer tool:
        EFFECT/TRACE/RETRACE/BACK
    August 4, 1999
      - hopefully finished the new builtin BOOPSI-GUI
      - many, many, many internal fixes and rewrites and modifications and
        other work and discussions with users

  @{u}0.8 (June 23, 1999)@{uu}
    June 23, 1999
      - when no error occured inside of a TRAP function, then TRAP raised an
        "Unknown error"
      - pressing "Abort" inside of a TRAP function caused the "Are you sure to quit"
        requester to pop-up
      - fixed an Enforcer-Hit in COMPARE
      - setting a variable to @EACH-NAME (see FOREACH) caused Mung-Hits outside
        of that FOREACH function @{i}(Jens Langner)@{ui}
    June 18, 1999
      - the system does no longer block when the installer closes down
    June 8, 1999
      - DATABASE doesn't return "680x0/PPC" anymore; if you want to check for a
        PPC, use the (DATABASE "ppc") function
    June 7, 1999
      - EQU (= ...) raised a type conflict when first argument was a string and the
        second one a string-encoded numer @{i}(Jens Langner)@{ui}
      - SELECT evaluated (n-1)th node instead of the n-th node @{i}(Jens Langner)@{ui}
    June 3, 1999
      - ported the source code from StormC to SAS-C and recompiled the
        complete projects with SAS-C
    May 29, 1999
      - removed the @system-language variable and modified the behavior
        of @language to be compatible with C= @{i}(Jens Langner)@{ui}
      - COPYFILES now also shows the filename of the source @{i}(Jens Langner)@{ui}
    April 9/10, 1999
      - reworked the error handling and the type system
      - added functions PUT-PROPERTY, GET-PROPERTY and REMOVE-PROPERTY to realize
        LISP-like property-lists for symbold and, thus, to implement a really simple
        kind of OOP (let`s call this @{i}SOOP@{ui})
    April 8, 1999
      - modified the interpreter kernel for better multi-threading
      - reworked CONCURRENT-DO and the stacktrace protocols
    April 7, 1999
      - CONCURRENT-DO crashed sometimes because of the stacktrace protocol; fixed this
        bug, but, thus, the interpreter kernel is a bit slower now! (i should remove this
        function... it`s a bit superfluous, isn`t it?)
    March 26, 1999
      - added new installmode NOSYSDELETE, which forbids to delete files from system
        drawers @{i}(Alexander Reiffinger)@{ui}
      - COPYFILES/COPYLIB supports now OPTIONAL/DELOPTS (thus i rewrote the functions for
        cloning and deleting files, hope they are still correct!)
    March 24, 1999
      - sending CTRL-F to any of the slave-processes, caused the MUI gui to hang up
    March 23, 1999
      - optimized code
      - removed possible type conflicts in some math functions
      - DELETE now supports OPTIONAL and DELOPTS
    March 22, 1999
      - TOOLTYPE now works correctly with SETTOOLTYPE (sorry, i simply forgot to
        implement this feature ;-)
    March 21, 1999 (beginning of Spring ;)
      - sending CTRL-F caused the installer to execute all the ONERROR functions
      - ALWAYSCONFIRM overwrote PROMPT and HELP strings everytime
      - by setting the tooltypes of the InstallerNG itself, you may now preset the
        working environment @{i}(Tino Wildenhain)@{ui}
    March 19, 1999
      - removed/optimized some code
    March 13, 1999
      - a stacktrace is dumped in the case of a runtime error and if the SHOWDEBUG option
        is switched on
      - GETSUM is now compatible to the algorithm of the C= installer @{i}(Marcin Orlowski)@{ui}
    March 11, 1999
      - scanner/parser errors are now located correctly @{i}(Jens Langner)@{ui}
    March 10, 1999
      - REXX did not support PROMPT/HELP/CONFIRM
      - added new installmode (thus, new Tooltype/Shell-Argument) ALWAYSCONFIRM, which
        @{u}always@{uu} asks the user for confirmation of every action @{i}(??)@{ui}
      - added new Tooltypes/Shell-Arguments DEBUGMODE, CREATEUNINSTALL, COPYFILECOMMENT
        @{i}(Jens Langner)@{ui}
    March 2, 1999
      - added new function RANDOM
    February 23, 1999
      - added new function SWING to allow special UNDO/REDO environments
    February 22, 1999
      - DELETE failed if the destination file was nonexistent
    February 21, 1999
      - WELCOME and the other functions which use the applications name, now use the value
        of "@APP-NAME" (which is initially set to "APPNAME") instead of the "APPNAME"
        startup argument
      - optionally set the comment for every copied file to the packages name
        (i.e. the value of "@APP-NAME") @{i}(Thomas Klein)@{ui}

  @{u}0.7 (February 16, 1999)@{uu}
    February 15, 1999
      - GETASSIGN now returns NULL instead of an empty string (as noted in the original
        installer documetation), if the assign is not valid @{i}(Tobias Abt)@{ui}
      - small face-liftings @{i}(Jens Langner)@{ui}
      - special thanx to @{i}Jens Langner@{ui}: he wrote a function to center too long
        texts inside of (buggy!) MUI Floattext objects
    February 14, 1999
      - GETASSIGN now expands the result, if this is a valid path @{i}(Jens Langner)@{ui}
      - FINDBOARD now returns the number of existing boards @{i}(Tobias Abt)@{ui}
    February 5, 1999
      - the german catalog contained some mistakes
      - the semantic-checker skiped the procedures @{i}(Jens Langner)@{ui}
    February 3, 1999
      - COPYFILES and PATTERN didn`t work together
      - quitting while COPYFILES was waiting for user confirmation left
        file-locks unreleased
      - the semantic checker now reports missing user-level of CONFIRM
      - while creating a full path, MAKEDIR overwrote existing drawer-icons
    January 22, 1999
      - because of ignoring runtime-errors, some enforcer hits raised when the installer
        used NULL-vars of type string @{i}(Tino Wildenhain)@{ui}
      - the builtin-variable @PRETEND was not of type number @{i}(Tino Wildenhain)@{ui}
      - added gauge to show the continuation of scanning/parsing @{i}(Tino Wildenhain)@{ui}
      - if debug-mode is on, then runtime-errors will also be written to the debug console
    January 17, 1999
      - facelifted the gui @{i}(Tino Wildenhain)@{ui}
    January 16, 1999
      - variables named "ADD", "SUB", "MUL", "DIV" where scanned as function symbols
        @{i}(Jens Langner)@{ui}
    December 17, 1998
      - seems that @{i}MUIA_List_Format, "P=\33c"@{ui} (ver 19.8 of Floattext class) does not
        work - there is no line wrapping! thus the InstallerNG does not center the text
      - the scanner now handles all C= Installer v42.6 escape sequences in the same way
      - COPYLIB does nothing when source-files version equals dest-files version
      - hopefully fixed the COPYFILES bug
    December 14, 1998
      - supports now binary and hex numbers
      - calling empty procedures caused enforcer hits
    November 25, 1998
      - when InstallerNG runs in debug mode, uninitialized vars and pattern errors are
        reported
      - the InstallerNG uses several own console windows for debug-, uninstall- and
        standard-output
      - REXX now works (thanx to @{i}Olaf Barthel@{ui}, @{i}Andrea Vallinotto@{ui}, @{i}Jeff Grimmett@{ui})
    November 24, 1998
      - when InstallerNGs "Debug" option is on, every access to an uninitialized
        variable will be reported
      - OPTIONAL/DELOPTS are working correct (only as local definitions), but are not
        yet supported by COPYFILES/COPYLIB/DELETE @{i}(Olaf Barthel)@{ui}
      - DELETE always removed the .info files
      - error requester of DOS-errors was unreadable, when IoErr() delivered 0
      - forgot to unlock the target directory, if DELETE failed
      - the builtin pattern-matcher now works the same way like the original one (removed
        Charles Bloom`s matcher, sorry) @{i}(Olaf Barthel)@{ui}
    November 23, 1998
      - ONERROR did not execute all previous defined ONERROR functions @{i}(Olaf Barthel)@{ui}
    November 22, 1998
      - hopefully re-bugfixed lost changes from Oct 1, 1998 till my crash on
        Oct 9, 1998:
          October 9, 1998
            - the debug version deliveres much more information
            - when running from WB, the builtin variable @icon did not hold the complete
              path to the script @{i}(Marko Seppanen)@{ui}
          October 8, 1998
            - several builtin variables weren`t accessable
            - started to use a custom pattern matcher, to be more compatible to the
              C= installer (thanx to @{i}Charles Bloom@{ui} for CRBLIB source)
          October 2, 1998
            - added @{i}/*@{ui} and @{i}*/@{ui} for multi-lined comments to the language
          October 1, 1998
            - while the semantic checks, you may optionally skip the errors/warnings or you
              can create a dump of them @{i}(Jens Langner, Sven Steiniger)@{ui}
    November 21, 1998
      - TRAP now catches only the specified error and raises an interpreter error
        for none-catched errors
    November 19, 1998
      - wrote the TRAP function @{i}(special thanx to Olaf Barthel)@{ui}
    November 16, 1998
      - nesting TRAP/ONERROR/PROCEDURE confused the parser and caused weired structured
        syntax-trees @{i}(Sven Steiniger)@{ui}
      - error-handling of unknown user functions (PROCEDURE) caused an enforcer hit
    November 10, 1998
      - debug output is ON by default
      - removed scanner error for multilined comments


  @{b}On November 9, my HD crashed and I lost all changes from October 1 till now. Thus
  I have to rewrite lost parts, update some tools and so on. Special thanx to
  @{i}Jens Langner@{ui} for fast help and for beeing my "backup server" :)@{ub}


  @{u}0.6 (October 1, 1998)@{uu}
    October 1, 1998
      - ASKNUMBER did show the "range" comment everytime
      - TOOLTYPE`s SETPOSITION wrote zeros, although no SETPOSITION was given
    September 28, 1998
      - CONCURRENT-DO gives every new child process a specific number
      - modified the scanner, but forgot to also modify the builtin variable names :)
    September 26, 1998
      - when an error occurs, then InstallerNG also shows the name of the buggy function
    September 25, 1998
      - COPYFILES didn`t raise an error, if the SOURCE does not exist @{i}(Thomas Lenz)@{ui}
    September 24, 1998
      - RUN, EXECUTE did not accept more than one argument to build the command, which
        has to be started
      - new function DELAY
      - you can quit the installer everytime, by sending the CTRL-F signal
        to its process @{i}(Oliver Brunner)@{ui}
    September 20, 1998
      - changed the catalog file
      - now DOS errors are also be shown
      - execution of a script can now be continued with the next function
        (please be prepared, that this may lead into new errors!)
    September 9, 1998
      - new function REBOOT
      - the scanner now removes "<ESC>[2p" sequences at the beginning of every
        string @{i}(Jens Langner)@{ui}
    September 4, 1998
      - set all "@..-help" variables to their correct text values
      - localized the ASKBOOL function
    September 3, 1998
      - ASKFILE always returned the path part of the selected file
    September 1, 1998
      - DATABASE should now recognize the Picasso96 graphics system
        @{i}(thanks to "DaMato" Jens Langner)@{ui}
    August 31, 1998
      - first public beta version released

  @{u}0.5 (August 28, 1998)@{uu}
    August 28, 1998
      - removing of inner LET environments (LET env inside of a LET environment) failed
      - DATABASE can now read the current system date and time
      - new function LET
    August 16, 1998
      - new function CONCURRENT-DO
      - started to make big parts of the InstallerNG reentrant, to prepare
        the implementation of a new function (see above)
    August 1, 1998
      - DELETE should be much faster, if you don`t use pattern matching
      - disabling the DEBUG output also disabled the interpretation of the
        arguments of the DEBUG function
    July 31, 1998
      - SELECTing the n-th node of a list failed under different conditions
    July 30, 1998
      - switching on/off the creation of the uninstall-script did not work
      - functions, which use CONFIRM/COMMAND/SETTOOLTYPE/GETTOOLTYPE did not work anymore
        (because i modified the environment handling yesterday...)
    July 29, 1998
      - string-format routines of several functions optimized
      - PROTECT was a bit buggy...
      - MAKEASSIGN did not work correct with SAFE removing of system assigns
      - reworked the whole environment handling
    July 28, 1998
      - some functions still overwrote the local environment of the outside-function
        (if there was one)
      - the raw body of the uninstall-script will be printed to CON:
      - ASKNUMBER now corrects a DEFAULT which is out of RANGE
    July 27, 1998
      - COMPLETE reworked and optimized
      - when using CONFIRM for the COPYFILES functions, the copy failed @{i}(Falk Zühlsdorff)@{ui}

  @{u}0.4 (July 26, 1998)@{uu}
    July 26, 1998
      - added keyfile support: if no keyfile is available, then the InstallerNG
        always runs in pretend mode
      - functions using CONFIRM now asking for confirmation, even in pretend mode
    July 25, 1998
      - in pretend mode, COPYFILES/COPYLIB always raised the "bad source" error @{i}(Dirk Stöcker)@{ui}
    July 24, 1998
      - updated the guide, espacially the "enhanced functions" (see @{"What`s new" link NEW})
      - DATABASE now returns correct values and supports the checkvalue functionality
      - if an identifier contained chars with ascii-code greater than 0x7F, then this
        caused the scanner to interpret this char as an intertoken space
      - ASKCHOICE/ASKOPTION skipped the last choice @{i}(Dirk Stöcker)@{ui}
      - "@installer-version" now equals 43.3 (as the latest C= installer version is)
        @{i}(Dirk Stöcker)@{ui}
      - new variable "@installer-ng-version" which is 0 iff the script does not run on the
        InstallerNG, otherwise it is set to the version of the InstallerNG
        @{i}(Dirk Stöcker)@{ui}
    July 23, 1998
      - MAKEASSIGN always caused an enforcer hit
      - Menu "Quit" did not work
    July 13, 1998
      - added the FINDBOARD function
    July 12, 1998
      - updated the @{"Known Bugs" link KNOWNBUGS} list :(
      - optimized the lowlevel code of DATABASE
    July 10, 1998
      - dedicated to Dirk Stöcker: debug output also prints access to uninitialized variables
      - EXISTS modified the wrong environment or caused an enforcer hit @{i}(Dirk Stöcker)@{ui}
      - ASKCHOICE/ASKOPTION returned wrong results if several CHOICES had zero length
        argument(s) @{i}(Dirk Stöcker)@{ui}
    July 9, 1998
      - DATABASE now identifies PPC processors and the CV graphics card
    July 7, 1998
      - ASKNUMBER/COPYLIB prompted weired CONFIRM message
      - mixing strings with numbers for comparison results in a infinity loop
      - added: ability to send the output of DEBUG to nil:
      - the logfile will now be created as "T:installer_log_file"
      - MAKEDIR stopped creating new directories before it reached the end of the
        destination path @{i}(Sven Steiniger)@{ui}
      - the reduction of an arbitrary path reached a polling, iff the first component
        of this path was an invalid device @{i}(Sven Steiniger)@{ui}
    July 5, 1998
      - reworked the string-format routines (thanx for trick: @{i}Sven Steiniger@{ui})
      - relational functions raised type conflict error when a number was compared to a
        signed string number
    July 3, 1998
      - DELETE supports the OPTIONAL/DELOPTS settings
      - reworked the pattern-match routines to prepare custom code for the matching
        process itself
    July 2, 1998
      - COPYLIB has had problems with DEST path @{i}(Jens Langner)@{ui}
      - COPYLIB now makes correct version check even if CONFIRM is not set @{i}(Jens Langner)@{ui}
      - WELCOME now really quits when pressing the "Abort" button @{i}(Jens Langner)@{ui}
    July 1, 1998
      - reworked my linker library to work with all data models (FAR, NEAR, NEAR_A6) and
        found some small mistakes. hope i did not add new ones ;)
    June 29, 1998
      - OPTIONAL now modifies the global environment, not the local one of the functions
        DELETE/COPYFILES/COPYLIB @{i}(Dietmar Eilert)@{ui}
      - string-format without args ("string") now returns correct type @{i}(Sven Steiniger)@{ui}
      - MAKEDIR now works correct too, when the path of the directory was given without
        a slash (MAKEDIR "ram:bla") @{i}(Sven Steiniger)@{ui}
      - CONFIRM accepts no longer zero arguments (switch on LAZYCOMPILE to skip)
        @{i}(Sven Steiniger)@{ui}
      - remove the "Scanning, parsing and... " message, when the installer starts to
        interpret the functions before a WELCOME @{i}(Sven Steiniger)@{ui}
    June 26, 1998
      - ASKFILE/ASKDIR should handle the SOURCE and DEST parameters correct @{i}(Falk Zühlsdorff)@{ui}
      - STARTUP now modifies "user-startup", but still does no modification to
        "startup-sequence"

  @{u}0.3 (June 26, 1998)@{uu}
  - every function which has related parameter-functions now creates a dynamic
    runtime environment for the results of the parameter-functions
  - added new functions: BEEP, SETENV, SIMULATE-ERROR, COMPARE
  - added new tooltype/cli-argument: LAZYCOMPILE
  - fixed dozens of silly bugs :)

  @{u}0.2 (June 1, 1998)@{uu}
  - grammar rewritten (and thus, most parts of parser/tree-evaluator)
  - bugfixing and optimisations
  - added serial output to most of the functions (debug-beta version)

  @{u}0.1 (somewhere in fall 1997)@{uu}
  Started in october 1997 this project. Earlier (august) first formal descriptions.
  First working parts (scanner, parser  ...) in november. Added the GUI (first
  version: MUI by Stefan Stunz) in november too.
  Fully functional versions in january/february 1998.

@endnode
@node NEW "What is new here???"

  Here you find all the things I added to the Interpreter.
  Note: if you use these new features and run the script on the original
  Installer you may run into errors. Thats why a version check is very important!

  @{b}No restrictions@{ub}
    The original installer has some terrible restrictions: maximum string-length,
    maximum size of a string value. The InstallerNG makes none of these:
    a string (and the value of a string variable too) can be as long as it fits
    into your memory.

  @{b}Nice GUI@{ub}
    The builtin-gui is based on a BOOPSI class-collection, which was also written
    by me; these classes allow easy font-adaption, resizing and support the MagicWB
    pens. Additionally, you may "plug-in" other gui-systems (like MUI, BGui, ...)
    via a shared library named "installergui.library".

    Furthermore, the help window can stay open, while you install your packages;
    this is a builtin feature and should be provided by every GUI

  @{b}Comfortable WB-Start@{ub}
    If you run the InstallerNG from WB and give it no script via tooltypes
    a requester pops up which asks you whether you want to load a script by a
    file-requester or if you want to app-iconify the installer. If you drop a
    script-file on the application icon the InstallerNG gets started.

  @{b}Returncode@{ub}
    The InstallerNG now returns RETURN_OK (0) if everything of the installation
    went fine, or, in case of an error, it returns RETURN_FAIL (20). This could
    be useful, if you call the InstallerNG from a script and the script wants
    to check whether the InstallerNG was successfull or not.

  @{b}Flexible interpretation@{ub}
    If an error raises while the interpretation process, InstallerNG provides
    to continue at the very next function. Please be careful with this option,
    because going on may lead to some other errors, but often it`s really useful to
    finish the (uncomplete) installation.

  @{b}New builtin variables@{ub}
    @installer-ng-version
      the version of the InstallerNG
    @proceed-button
      holds the text for the "Proceed with install"-button

  @{b}Constants@{ub}
    - TRUE/DOSTRUE and FALSE/DOSFALSE are now constants and cannot be modified
    - NOVICE, AVERAGE and EXPERT are builtin constants, so you can use them instead
      of 0, 1 and 2 (usefull for CONFIRM and USER functions)

  @{b}New Tooltypes/CLI-Arguments@{ub}
    LAZYCOMPILE: if set, then the InstallerNG is as lazy as the C= installer
                 is. that means, InstallerNG skips its semantic check procedures
                 to be more compatible
    DEBUGMODE: if set, then InstallerNG will switch on it`s debugmode
    CREATEUNINSTALL=CUI: if set, then InstallerNG creates an uninstall skript
    COPYFILECOMMENT=CFC: if set, every copied file will be commented with the package name
    ALWAYSCONFIRM: if set, every action has to be confirmed in every user-level!
    NOSYSDELETE: if set, calls to DELETE from system drawers will be ignored

  @{b}Interuptable Interpretation@{ub}
    The InstallerNG can be interupted everytime by sending the CTRL-F signal to its
    process. This option allows to break out of infinite loops (thanks to @{i}Oliver
    Brunner@{ui} for this suggestion)

  @{b}Local environments@{ub}
    Everytime you want to, you are allowed to create a new environment (i.e. to declare
    several new variables). Inside this environment you can run some code, which uses
    the local variables prior the global ones. See the function LET for more details.

  @{b}SOOP - Simple Object Oriented Programing@{ub}
    With help of the new functions PUT-PROPERTY, GET-PROPERTY and REMOVE-PROPERTY the
    InstallerNG implements LISP-like property-lists for symbols. Imagine of a symbol
    as an object and the properties as the objects attributes. Furthermore, if you write
    PROCEDURE`s, which are able to operate on an object`s attributes, you just can produce
    simple OO code :)    ...without a class hierarchy, but object oriented!

  @{b}UNDO-REDO environments@{ub}
    Using the function SWING you are able to build an environment, in which you can
    "swing" from one (topmost) function to the next. When reaching the last one, the
    installation may proceed. This looks/works much like the MS-Setup program :)

    With v44 of the C= installer, you are able to simulate such an environment by
    special TRACE/RETRACE/BACK functions (have a look at the C= installer documentation)

  @{b}Full installation control@{ub}
    If you want to, the InstallerNG asks for confirmation of every action, no mattter
    what the script-programmer codes in his installer script

  @{b}AppWindow@{ub}
    InstallerNG can now act as an socalled "AppWindow", i.e. you may drop files into
    the window and InstallerNG uses them. This only works, when the InstallerNG asks
    for a file or directory (see ASKFILE, ASKDIR)

  @{b}Compiler Modules@{ub}
    After the compiler phase, the InstallerNG tries to call some modules in
    libs:installerngmodules, which may perform actions on the compiled program
    (i.e. produce executables or something like that)

  @{b}Enhanced Functions@{ub}
    DATABASE, EXISTS

  @{b}New Functions@{ub}
    BEEP, COMPARE, CURRENTDIR, DELAY, FINDBOARD, LET, NOP, RANDOM, REBOOT, SETENV,
    SIMULATE-ERROR, SWING, GET-PROPERTY, PUT-PROPERTY, REMOVE-PROPERTY,
    SAVE-PROPERTY-OBJECT, READ-PROPERTY-OBJECT, CAST-INT, CAST-STRING

@endnode
@node KNOWNBUGS "Known Bugs, not yet removed   *sorry*"

  @{b}My own bugs@{ub}
    - seems that the builtin gui has sometimes trouble with e.g. PAL screens and
      the user has to click 2 times or refresh the gui by resizing to show the new
      content; currently i could not locate anything @{i}(Kai Hofmann)@{ui}

  @{b}Thats not my fault...@{ub}
    - DATABSE crashes the system if there is no ppc-processor in the system but
      the ppc.library is installed
    - trying to open "powerpc.library" without having a PPC processor or WarpOS installed
      causes lots of enforcer hits

  @{b}Still there, but covered@{ub}
    - Enforcer Hit: LONG-WRITE to 00000000
      when the scanner tries to read hex-values >$7fffffff, the ANSI-C function
      @{i}strtol("80000000", NULL, 16)@{ui} causes this hit (because of a MOVE.L A2,(A0)
      with A0=NULL at the end of this function)
      solution: call @{i}strtol()@{ui} with a dummy pointer


@endnode
@node TROUBLE "Trouble with other soft"

  @{b}@{u}UN!X-Dirs@{uu}@{ub}
    Some people may use this commodity. But please note: if you work
    with *X, then something like '/bla' means to be a mounted volume
    (the amiga equivalent is 'bla:'). A software package may now come
    with several subdirs and, thus, an install script would like to
    copy from '/mytools' to your destination. This collides with UN!X-
    Dirs and a "Volume not mounted" requester pops up.
    @{i}SOLUTION:@{ui} Turn off UN!X-Dirs before installing soft!

@endnode
@node RUNIT "How can I start the Installer"

  Just like nearly every other Amiga tool, you can start the Installer either
  through a @{"shell" link STARTCLI} or from @{"Workbench" link STARTWB}.

@endnode
@node STARTCLI "Running from Shell/CLI"

  The Installer can be started by simply typing its name and the script file. The
  script file argument is the only one argument, which you must specify! Every
  other argument is optional. This is the argument template of the InstallerNG:

    SCRIPT/A,APPNAME/K,MINUSER/K,DEFUSER/K,LOGFILE/K,LANGUAGE/K,
    NOPRETEND/S,NOLOG/S,NOPRINT/S,LAZYCOMPILE/S,DEBUGMODE/S,
    CREATEUNINSTALL=CUI/S,COPYFILECOMMENT=CFC/S,ALWAYSCONFIRM/S,
    NOSYSDELETE=NSD/S,NOERRORREQUESTER=NER/S,IGNOREERRORS/S

  APPNAME specifies the name of the application you want to install. Usually
  this is the name of your tool. MINUSER sets the minimal operation mode for
  the Installer and DEFUSER presets the operation mode. The user may change
  the operation mode by selecting a mode in the first welcome panel (refer to
  the @{"WELCOME" link WELCOME} function). Use LOGFILE to set the file, which
  will be handled as an installation protocol or set NOLOG, if you want to
  forbid any logging actions. NOPRINT disables the logging to the standard
  printer. If you set NOPRETEND then the user cannot turn on the pretend mode.
  In pretend mode, the Installer just simulates an installation process. The
  LANGUAGE specifies the language, which should be used in the script.

  The rest of the arguments is valid only for the InstallerNG and they set
  the "Advanced options". LAZYCOMPILE turns off any check procedure at startup
  and the InstallerNG does not look for errors during compilation. DEBUGMODE
  turns on the debug console and prints useful warnings. Use CREATEUNINSTALL
  to produce an uninstall script from the current installation session. If you
  run this produced script again with the Installer, it will de-install the
  package. COPYFILESCOMMENT just comments every copied file with the name
  of the current application name (see APPNAME argument) by appending the old
  file comment to the application name. For full installation control, you should
  set the ALWAYSCONFIRM argument, which forces the Installer to ask for
  confirmation everytime. NOSYSDELETE avoids the deletion from system drawers
  like C: or LIBS: or whatever...

@endnode
@node STARTWB "Running from WB"

  If you run the Installer from Workbench, you can set up a working environment for
  it by specifying tooltypes.

    SCRIPT=<scriptfile>
    APPNAME=<name>
    MINUSER=<novice|average|expert>
    DEFUSER=<novice|average|expert>
    LOGFILE=<logfile>
    LANGUAGE=<language>
    PRETEND
    LOG
    NOPRINT
    ICONIFY @{fg fill}{NG}@{fg text}
    LAZYCOMPILE @{fg fill}{NG}@{fg text}
    DEBUGMODE @{fg fill}{NG}@{fg text}
    CREATEUNINSTALL @{fg fill}{NG}@{fg text}
    COPYFILECOMMENT @{fg fill}{NG}@{fg text}
    ALWAYSCONFIRM @{fg fill}{NG}@{fg text}
    NOSYSDELETE @{fg fill}{NG}@{fg text}
    NOERRORREQUESTER @{fg fill}{NG}@{fg text}
    IGNOREERRORS @{fg fill}{NG}@{fg text}

  Except the ICONIFY tooltype, these tooltypes are equal to the @{"shell" link STARTCLI} arguments and,
  thus, I do not write the meaning here again.

  ICONIFY holds, if you give no SCRIPT argument. Usually, the Installer would ask,
  whether the user wants to load a script or just iconify the Installer. Using this
  tooltype forces the Installer to immediately iconify.

@endnode

