home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / lambdoc / atari.man next >
Encoding:
Text File  |  1989-03-15  |  35.2 KB  |  801 lines

  1. **************************************************************************
  2. [LAMBDA].1.38a.ATARI.ST [890309][\man\atari.man]: ATARI.ST Technical Notes
  3. **************************************************************************
  4. --------------------------------------------------------------------------
  5. [LAMBDA.TN.000].ATARI.ST.[1.37][890226] BOOTing LAMBDA, SHELL alternatives
  6. --------------------------------------------------------------------------
  7.  
  8. 0 CURRENT VERSION:   
  9.   
  10. LAMBDA.ATARI.ST [1.39a][890311][CC: SOZOBON <1.01: 1988>][LIBC: dLibs 1.2]
  11.  
  12. 1 INTRODUCTION.
  13.  
  14. LAMBDA is a lambda-calculus/combinatory-logic interpreter and combinatory-
  15. code generator. The present version [ATARI.ST][1.3X] of LAMBDA has a built-
  16. in line-editor [EDIT: derived from Ken Thompson's ED] and an internal shell 
  17. [META], incorporating a minimal number of TOS-supported commands/functions.
  18.  
  19. General information about ["type-free"] lambda-calculi and combinators can
  20. be recovered from the bibliography listed in the LAMBDA REFERENCE MANUAL
  21. [see: \man\lambda.man].
  22.  
  23. Roughly speaking, lambda-calculus is a theoretical tool/formalism equivalent
  24. to a Turing machine, as regards its definability power. In practice, lambda-
  25. calculus techniques have been also used, during the last ten years, in
  26. compiler-design for several functional programming languages, in automated
  27. reasoning [design of proof-assistants and proof-checkers] and in expert 
  28. systems [proof-pattern recognition].
  29.  
  30. In a sense, the lambda-calculus is at the root of the modern computability 
  31. theory and of our computing engines, whether ALGOLoidal or not [= merely
  32. FUNCtional]. As a mere theoretical tool, it has also a certain MUSEAL value,
  33. whence the idea to put it in the same environment with another master-piece 
  34. of computer art: Ken Thompson's ED [the root of the UN*X-like editors and 
  35. pattern-matching tools].
  36.  
  37. 1 CONTENTS.
  38.  
  39. The present archive contains the last ATARI.ST version of the binary,  
  40. general LAMBDA-documentation [default in: \man\lambda.man], a list of 
  41. system-specific features [LAMBDA.ATARI.ST: Technical Notes; default 
  42. edited in: \man\atari.man], applying to this implementation and, 
  43. optionally, a public domain Bourne-like SHELL [if present, either 
  44. \bin\gsh.prg or else ARChived in: \etc\pd_shell].
  45.  
  46.    NOTE: MACintosh [MFS], MSDOS, UN*X [BSD] as well as UN*X-like [e. g. 
  47.    MINIX] variants of the present implementation are also available.
  48.  
  49. 2 THE PUBLIC DOMAIN SHELL.
  50.  
  51. The SHELL interpreter [if present, in: \bin] and the corresponding 
  52. documentation [if present, in: \doc] are identified as:
  53.  
  54.    BIN: GSH.PRG = GULAM, by Prabhaker Mateti, BETA-test: 1.03.04.05.
  55.         NB: The binary is patched according to a procedure described 
  56.         in the [GSH] DIGEST in order to fit the ATARI.ST UK-KEYBOARD 
  57.         settings. Archived is also the original US-KEYBOARD variant, 
  58.         as posted on the [UUNET].NEWS [last: January 1989].
  59.    MAN: A REFERENCE MANUAL FOR GULAM (c) 1987 Prabhaker Mateti,
  60.    DOC: [GSH] PROFILES: sample initialization scripts for GULAM,
  61.    DOC: [GSH] DIGEST: [UUNET].NEWS discussions [1987-88] around GULAM.
  62.  
  63. Both LAMBDA and the SHELL are stand-alone programs. Other Bourne-like 
  64. SHELLs can be used in conjunction with LAMBDA [see: section 5 below]. 
  65.  
  66.    NOTE: Since the SHELL interpreter identified here as GSH.PRG, as 
  67.    well as the appended SHELL documenation have been posted several 
  68.    times already on the [UUNET].NEWS.[comp.binaries.atari.st], the 
  69.    LAMBDA-package archived here may NOT contain the SHELL. 
  70.  
  71. The ATARI.ST version of LAMBDA identifies a SHELL according to specific 
  72. internal conventions ["shell-types"], as described below. Several [non-
  73. public domain] software-alternatives are listed later in these notes. 
  74.     
  75. 3 BOOTING LAMBDA: THE "PRIVATE" ENVIRONMENT.
  76.  
  77. BOOTing LAMBDA is a system-specific operation. Described here are only 
  78. the ATARI.ST modes. (This applies to any ATARI.ST [MEGA] configuration.) 
  79.  
  80. While BOOTing it on ATARI.ST, LAMBDA initializes a "private" environment 
  81. consisting of the following variables (below, a <drive>-id is as identified 
  82. by TOS; it can be a physical volume, a ram-disk, a hard-disk partition,
  83. etc.):
  84.  
  85.         $HOME   = {home-drive:} 
  86.                 = HOME- [and/or BOOT-]drive id for LAMBDA,
  87.                   NB: if any, the $SHELL is also located on $HOME
  88.         $BIN    = {bin-drive:}\bin\ 
  89.                 = directory of executables accessible from LAMBDA
  90.                   NB: by default, the system $EDITOR is located on $BIN
  91.         $LIB    = {lib-drive:}\lib\
  92.                 = directory for various libraries, 
  93.                   default location for the alternate font-files
  94.                   $LIB\<font-name>.fnt [must be FED-format]
  95.         $TMP    = {tmp-drive:}\tmp\
  96.                 = directory for temporary files, 
  97.                   NB: used only by LAMBDA's built-in EDITor
  98.         $SHELL  = {home-drive:}\bin\<shell-type>sh.prg
  99.                   NB: <shell-type> ranges over {a,b,c,g,m,s}
  100.         $EDITOR = {bin-drive:}\bin\ed.prg
  101.                 = system editor 
  102.                   NB: this can be anything, within reason, if you 
  103.                   don't like LAMBDA's built-in EDITor.
  104.  
  105. In order to have full compatibility with the different "environment styles" 
  106. supported by the ATARI.ST machines, these "environmental" variables are 
  107. NEVER EXPORTED. Communication with the environment of the external SHELL 
  108. must be insured separately, by customizing as appropriate the current SHELL's 
  109. initialization script (running examples for several popular ATARI.ST shell 
  110. interpreters are also included in the archive).
  111.  
  112. LAMBDA recognizes its [physical or environmental] BOOT-location and, if no 
  113. other action is taken, it initializes, by default, the internal environmental 
  114. variables to the appropriate locations on $BOOT.
  115.  
  116.    EXAMPLES:
  117.  
  118.    (1) if LAMBDA is started from the DESKTOP, on internal disk a: 
  119.        [with an ATARI 1040ST], the following configuration is set:
  120.  
  121.       home-drive = bin-drive = lib-drive = tmp-drive = $BOOT = a:
  122.       $BIN       = a:\bin\
  123.       $LIB       = a:\lib\
  124.       $TMP       = a:\tmp\
  125.       $SHELL     = a:\bin\<default-shell-type>sh.prg
  126.       $EDITOR    = a:\bin\ed.prg
  127.  
  128.    (2) if started from a SHELL, $BOOT becomes the SHELL's actual $cwd-drive, 
  129.        no matter where is the SHELL located physically.
  130.  
  131. The BOOT-configuration can be altered in several ways, by calling LAMBDA 
  132. [or LAMBDA.TTP, as a DESKTOP program] with the appropriate option and/or 
  133. even at run-time (from the internal shell [META]).
  134.  
  135. The corresponding alteration flags are UN*X-like and the LAMBDA-options 
  136. affecting the drive-specifications, etc. are described below [as part of:
  137. LAMBDA.ATARI.ST Technical Notes].
  138.  
  139. --------------------------------------------------------------------------
  140. [LAMBDA.TN.001].ATARI.ST.[1.37][890226][Technical Note 001] LAMBDA-options
  141. --------------------------------------------------------------------------
  142.  
  143. 4. BOOTING LAMBDA WITH OPTIONS: lambda {, -bcefhilpstx<modifier> }
  144.  
  145.    [0] The LAMBDA-options follow, in general, the UN*X option pattern:
  146.  
  147.    format: -[lower-case-letter][upper-case-letter]<modifier>
  148.    
  149.    For [TOS-only]: upper-case option/modifier specifications are 
  150.    also allowed in order to accommodate the DESKTOP TTP-style calls.
  151.  
  152.    defaults: [DEFAULT][DEFAULT-ON-FAILURE]
  153.    - if not specified explicitly, the <modifier> has a [DEFAULT]
  154.    - outside its legal range, a <modifier> has a [DEFAULT-ON-FAILURE]
  155.        
  156.    [1] DRIVE-id specifications [TOS only]: options -behltx<drive>.
  157.   
  158.    Following TOS, a legal <drive>-id ranges over [a-p][A-P]:
  159.    - an illegal specification restores the [DEFAULT-ON-FAILURE],         
  160.    - if the modifier <drive> is absent, the [DEFAULT] is restored.
  161.   
  162.    On BOOTing LAMBDA, the default-drive configuration is as follows: 
  163.    - the OLD-DRIVE id     = [DEFAULT-ON-FAILURE] is set to [a:] and 
  164.    - the CURRENT-DRIVE id = [DEFAULT] is read off from the environment.
  165.   
  166.    The LAMBDA-options -behltx<drive> alter the default setting to <drive>.
  167.  
  168.    The -bh<drive> setting can be also altered interactively from [META]: 
  169.              [meta][path: <drive>], [meta][home: <drive>].
  170.  
  171.    For the [MSDOS]-style, see the [LAMBDA.MSDOS Technical Notes].
  172.  
  173.   [2] SHELL-type specification [TOS-only]: options -s[S]<shell-type>
  174.  
  175.    A legal <shell-type>-id ranges over {a,b,c,g,m,s,A,B,C,G,M,S}
  176.    - an illegal specification restores the [DEFAULT] = [DEFAULT-ON-FAILURE],         
  177.    - if the <shell-type> specification is absent, the [DEFAULT] is restored.
  178.   
  179.    On BOOTing LAMBDA, the default <shell-type> is as follows: 
  180.    - BOOTing from DESKTOP: default <shell-type> = [m]  
  181.    - BOOTing from a SHELL [the <shell-type> [g] is recognized internally]: 
  182.              IF the SHELL has <shell-type> [g] 
  183.                     THEN the default <shell-type> = [g] 
  184.              ELSE        the default <shell-type> = [m].
  185.    This setting can be also altered interactively from [META]: 
  186.              [meta][sys: <shell-type>][sh+].
  187.  
  188.   [3] PROMPT-type specifications: options -p[P]<prompt-number> 
  189.       DEFAULT-PROMPTs [TOS-only]: MAIN [>], META [!], EDIT [>]
  190.   
  191.   NB: The SHELL has PROMPT as set by the shell initialization sequence.
  192.   NB: [TOS-only]: Only the PROMPT of the [MAIN] interpreter is altered.
  193.  
  194.   [4] Most LAMBDA-options are system-dependent and agree, in general, 
  195.       with the following compiler #ifdef-alternatives:
  196.  
  197.       - [BSD]:      UN*X BSD and MAC [HFS-only] versions
  198.       - [GEM]:      ATARI.ST and MSDOS versions supporting GEM 
  199.       - [MAC]:      MACintosh [MFS-only] versions  
  200.       - [MINIX]:    MINIX versions [supported by PCs and/or ATARI.ST]
  201.       - [MSDOS]:    PC [MSDOS-only] versions
  202.       - [RESERVED]: versions supporting a GRAPHICS SHELL [NO GEM]
  203.       - [TOS]:      ATARI.ST [TOS-only] versions
  204.        
  205.   -b[B]<drive>   [TOS][MSDOS]
  206.                  Define BIN- [and EDITOR-] drive/volume
  207.                         default: CURRENT-DRIVE 
  208.                         default on failure: OLD-DRIVE
  209.   -c[C]          [RESERVED][BSD][MINIX]
  210.                  Switch OFF the [META]-interactive setting
  211.                  Read BOOT-environment from <LAMBDA.LOG>-script on start.
  212.                         defaults: [OFF][IGNORE][READ-LAMBDA-OPTIONS]
  213.   -e[E]<drive>   [TOS][MSDOS] 
  214.                  Define system-EDITOR-drive/volume 
  215.                         default: CURRENT-DRIVE 
  216.                         default on failure: OLD-DRIVE
  217.                         [TOS]: default system-EDITOR: ed.prg
  218.   -f[F]          [RESERVED][MSDOS][TOS-variant] 
  219.                  Set MSDOS environment-style ON 
  220.                         default: OFF
  221.   -h[H]<drive>   [TOS][MSDOS]
  222.                  Set HOME- [and SHELL-] drive/volume
  223.                         default: CURRENT-DRIVE  
  224.                         default on failure: OLD-DRIVE
  225.   -i[I]          [TOS]
  226.                  Switch ON the [META]-interactive setting:
  227.                         <next-command>     is passed on to [MAIN]
  228.                         <next-command> + 1 is passed on to [META] 
  229.                         default: OFF
  230.   -l[L]<drive>   [TOS][MSDOS]
  231.                  Define LIB- [and FONTs-] drive/volume 
  232.                         default: CURRENT-DRIVE  
  233.                         default on failure: OLD-DRIVE
  234.                         [TOS] default FONT-format .FED: <font-name>.fnt
  235.   -p[P]<prompt-number> 
  236.                  [BSD][TOS][MSDOS][MAC]
  237.                  Define LAMBDA-prompt character <prompt-number>: 
  238.                         0: [EMPTY][SPACE]
  239.                         1: [_][UNDERSCORE]
  240.                         2: [:] 
  241.                         3: [#]
  242.                         4: [$]
  243.                         5: [%]
  244.                         6: [~]
  245.                         7: [EMPTY][BELL]
  246.                         8: [>]
  247.                         9: [DEFAULT-PROMPT]
  248.                         default: [DEFAULT]-PROMPT  
  249.                         default on failure: [DEFAULT]-PROMPT
  250.   -r[R]          [RESERVED][GEM]
  251.                  Re-shell on exit with <current-shell-type>
  252.                         default: [IGNORE]
  253.   -r[R]<new-shell-type> 
  254.                  [RESERVED][GEM]
  255.                  Re-shell on exit with <new-shell-type>
  256.                         default on failure: <current-shell-type>
  257.   -s[S]<shell-type>
  258.                  [BSD][TOS][MSDOS]
  259.                  Define <shell-type>: [a][b][c][g][m][s]
  260.                         default [on failure]: [m] or [g]
  261.                  [TOS]: default shells: msh.prg, gsh.prg
  262.                  [TOS]: default shell-location $HOME\bin.
  263.   -t[T]          [TOS][MSDOS] 
  264.                  Define TMP-drive/volume
  265.                         default: CURRENT-DRIVE  
  266.                         default on failure: OLD-DRIVE
  267.   -x[X]          [TOS][MSDOS] 
  268.                  Define BOOT-drive/volume as OLD-DRIVE
  269.                         default: CURRENT-DRIVE
  270.   -x[X]<drive>   [TOS][MSDOS]
  271.                  Define BOOT-drive/volume as <drive>
  272.                         default: CURRENT-DRIVE
  273.                         default on failure: OLD-DRIVE
  274.  
  275.   [5] Conflicting flags. In cases where the supplied optional flag-list 
  276.       leads to conflicting actions, the flag last specified overrides 
  277.       the options already set by previous flags. 
  278.  
  279. 5 BOOTING LAMBDA: THE EXTERNAL SHELL[-TYPE]S.
  280.  
  281. If used in conjunction with a SHELL, LAMBDA has a SHELL-MODE, activated by 
  282. the command [sh+], in order to pass user commands to the surrounding shell. 
  283. In short, in SHELL-MODE, any command-line that is not directly interpretable 
  284. in LAMBDA and/or in its internal shell [META] is passed on as such to the 
  285. current SHELL. The SHELL-MODE can be de-activated with [META]-command [sh-]. 
  286.  
  287. LAMBDA uses the following internal setting in order to recognize calling 
  288. conventions of external SHELLs. Exact specifications for the different 
  289. call-types are given elsewhere in the [LAMBDA.ATARI.ST Technical Notes]. 
  290. Here only some actual [software-] products, fitting the call-types built 
  291. in LAMBDA are mentioned. This list is, certainly, not exhaustive.
  292.  
  293. ___________________________________________________________________________
  294. | <shell-type>:     <name>:   <call-type>:  actual program: [origin] <id> |
  295. |-------------------------------------------------------------------------|
  296. |[m] "MY-SHELL"     msh.prg   external  [Mark Williams] MSH [2.01-3.0+]   |
  297. |                   msh.prg   external  [G. Poletiek]   GPsh [Craft 2.02] |
  298. |                   msh.prg   external  [D. Beckemeyer] The Micro C-shell |
  299. |[g] "GULAM-type"   gsh.prg   internal  [P. Mateti][PD] GULAM 1.03.04.05  |
  300. |[b] "BOURNE-type"  bsh.prg   external  [D. Beckemeyer] The Micro C-shell |
  301. |                   bsh.prg   external  [Mark Williams] MSH [2.01-3.0+]   |
  302. |[c] "C-SHELL-type" csh.prg   external  [D. Beckemeyer] CSH [multitasking]|
  303. |[s] "SYSTEM-type"  ssh.prg   internal  [G. Poletiek]   GPsh [Craft 2.02] |
  304. |[a] "ATARI-type"   ash.prg   external  [J. Nowlin][PD] ASH [1986-1987]]  |
  305. |_________________________________________________________________________|
  306.  
  307. Here, the shell's <name> is part of the internal conventions used by LAMBDA 
  308. to identify the current <shell-type>. In order to be able to use optimally 
  309. the external shell interpreter in conjunction with LAMBDA, actual programs 
  310. fitting the specified <call-type> must be renamed accordingly.
  311.  
  312.    Other [possibly new] software alternatives should be first tested as if 
  313.    having the "universal" (and most robust) <shell-type> [m] and/or [b].
  314.  
  315. The first two listed <shell-type>s [m], [g] are defaults. The explanation 
  316. for the use of TWO actual defaults is as follows:   
  317.  
  318.    Shells of type [g] are recognized internally. So, the <shell-type> [g] 
  319.    is the default-shell only if LAMBDA is actually called from [a program
  320.    initialized by] a shell of type [g]. In particular, a "stack of calls"
  321.    containing a "caller of type [g]" will be always recognized by LAMBDA
  322.    as a shell of type [g] (try the sequences: [Xsh][gsh][lambda] and/or
  323.    [gsh][Xsh][lambda] with [Xsh] being any other shell-interpreter...) 
  324.  
  325.    Any other <shell-type> is recognized externally; that is: the user must 
  326.    specify explicitly the current "external" <shell-type> in order to be 
  327.    able to use properly a system-call via LAMBDA. So, if the shell is not 
  328.    recognized at "boot-time", the default <shell-type> should be [m]. 
  329.    
  330.    Somewhat metaphorically, the [ATARI] DESKTOP is also a shell of type [m], 
  331.    since a limited number of system-commands can be also executed directly, 
  332.    via [META] [= the internal shell of LAMBDA].  
  333.  
  334. If the call-type is "external", a new copy of the [external] shell is 
  335. executed [with -i and/or -c flag], while calling the shell. 
  336.  
  337. An "internal" call-type uses the TOS [system] variable `_shell_p' in order 
  338. to access the actual shell-interpreter. In most cases, there is no need 
  339. for a new incarantion of the shell, in order to execute a command via an 
  340. "internal" call.
  341.  
  342.    NOTE. In the case of `gulam', the call-type is also "internal" in a 
  343.    slightly different sense: while executing a shell-command via `gulam'
  344.    and - often - while calling `gulam' directly, LAMBDA uses actually
  345.    `gulam'-routines from the currently running copy of the shell. This 
  346.    means that a new copy of `gulam' is executed only in exceptional 
  347.    circumstances. This implementation technique has been motivated by 
  348.    the fact that `gulam' uses a special [dynamic] memory-allocation 
  349.    strategy, incompatible with several LAMBDA-triggered processes. 
  350.    Whenever using LAMBDA in conjunction with `gulam', the user should 
  351.    keep in mind that the latter is not to be considered as a usual TOS
  352.    program and should rather avoid direct TOS-calls to it (by [EXEC] 
  353.    or [exec], say).
  354.  
  355.    NOTE. Typically, a RETURN-FROM-[CURRENT]-GULAM-TO-LAMBDA is obtained 
  356.    by typing an empty command-line [CARRIAGE RETURN], whereas a RETURN-
  357.    FROM-[A-NEW-COPY-OF]-GULAM is obtained, as in the case of almost any 
  358.    other ATARI.ST shell-interpreter, by typing explicitly [exit].
  359.  
  360. 6 THE INTERNAL LAMBDA-SHELL: [META].
  361.  
  362. A limited number of system-specific commands are interpreted by the 
  363. internal shell of LAMBDA: [META]. If somewhat metaphorically, the LAMBDA-
  364. user may think of [META] as being just "another room" within LAMBDA. In 
  365. fact, the built-in editor [EDIT] is already "yet another LAMBDA-room". 
  366.  
  367. The LAMBDA-command [meta] forces an explicit EXIT-TO-META. Alternatively, 
  368. the LAMBDA-option -i allows the user to execute a single LAMBDA-[MAIN]-
  369. specific command before EXITing-TO-META. 
  370.  
  371.    From [META], we can re-boot LAMBDA by [boot], discarding trailing 
  372.    in-core term libraries, we can execute a new copy of LAMBDA with 
  373.    <new-options>, by asking [alter] <new-options> and we may call 
  374.    explicitly an external SHELL, if any, in several distinct ways.
  375.  
  376.    The [MAIN]-interpreter allows only two distinct escapes to an 
  377.    external SHELL: via a system-shell-call or via a TOS-Pexec-call. 
  378.    The [META]-choice is somewhat larger, by passing on the ENVironment
  379.    inherited by LAMBDA to the child process. A SHELL that is able 
  380.    to remember its original caller [= "where it comes from"] will 
  381.    accurately distinguish among different types of escape from 
  382.    [META] (try, e. g., [set] with the Mark Williams shell, inspecting 
  383.    the SHELL-variable `camefrom'). Such variants are useful if the 
  384.    current memory-management looks suspect.  
  385.  
  386. [META] understands and executes at least the following UN*X-like commands 
  387. [ignoring the standard UN*X options]: [cd <path>], [date], [du], [ls], 
  388. [mkdir <path>], [pwd], [rmdir <path>]. On an ATARI.ST, the LAMBDA-[META]-
  389. command [mem] shows the memory currently available to the user; a would-be 
  390. equivalent of the multi-user [quota], on UN*X systems. Note also that the 
  391. UN*X-like commands [cat <file-name>] and [rm <file-name>] are active only 
  392. via the [MAIN]-interpreter, although they are actually triggered by [META].
  393.  
  394.    Identically labelled [META]-commands have precedence over external SHELL 
  395.    commands. For instance, [ls] is executed by TOS via [META], and not by 
  396.    the external SHELL, unless we use an explicit [META]-escape to the later.
  397.  
  398. Any other TOS-program <program-name>.tos, any TOS-program with <options>: 
  399. <program-name>.ttp <options>, <program-name>.prg <options>, as well as most 
  400. GEM-programs can be called from LAMBDA, via its [META]-interpreter-part, 
  401. either from the [MAIN]-"room" or from the [META]-"room" of LAMBDA.
  402.  
  403. The [EDIT]-"room" allows a similar SHELL-escape and a limited number of
  404. [META]-specific commands (try single-key H for [help] within the built-in 
  405. EDITor).
  406.  
  407. For details, see the appropriate [LAMBDA.ATARI.ST Technical Notes], below.
  408.  
  409. ---------------------------------------------------------------------------
  410. [LAMBDA.TN.002].ATARI.ST.[1.37][890228][Technical Note 002] System commands
  411. ---------------------------------------------------------------------------
  412.  
  413. 7. LAMBDA.ATARI.ST [TOS] SYSTEM/SHELL SUPPORTED COMMANDS.
  414.  
  415.    WARNING: The [MAIN][META] system/shell commands are case-sensitive.
  416.  
  417. alter <new-options>: [META]
  418.    boot a new copy of LAMBDA with <new-options>, externally
  419.  
  420.    DIAGNOSTICS: 
  421.    executes a new copy of LAMBDA, in the [META]-environment specified 
  422.    by the <new-options>, returns to current [META] on exit; it assumes 
  423.    that enough memory is available in order to keep the new copy of 
  424.    LAMBDA in core
  425.  
  426. black: [MAIN][META]
  427.    set black-on-white fore/background [XOR current fore/background]
  428.  
  429.    DIAGNOSTICS: 
  430.    [black-on-white] is set if starting from [white-on-black]
  431.  
  432. boot: [META]
  433.    re-boot a new copy of LAMBDA, internally
  434.  
  435.    DIAGNOSTICS: 
  436.    this is a actually a simulation; in fact, the old copy is used, in 
  437.    the same [META]-environment, although the command-history counter 
  438.    is reset and the current core term-library is deleted  
  439.  
  440. cat <file-name>: [MAIN] 
  441.    view/visit <file-name>
  442.  
  443.    DIAGNOSTICS:
  444.    expects interactive response on paging (see the SINGLE-KEY sub-menu); 
  445.    as a general rule, the interactive mode can be disabled by [talk-];
  446.    the paging is done according to the current screen-display setting:
  447.    graphics-display is used only if graphics-mode is set explicitly 
  448.    by [graphics+]; here, the <file-name> must either refer to an ASCII
  449.    file located in the current working directory or else be a full path 
  450.    specification according to the TOS conventions; in particular, the
  451.    wildcard `*' is accepted as a word-part of <file-name>, although it 
  452.    will match only a single item (the one first encountered)   
  453.   
  454.    [SINGLE-KEY sub-menu]:
  455.                B[b]        = BACK TO TOP of <file-name>
  456.                e[E]        = EDIT <file-name> with built-in editor
  457.                Q[Q]        = QUIT VIEWing <file-name>
  458.                <other key> = SHOW NEXT page of <file-name>
  459.  
  460.    in interactive mode, this function (and the SINGLE-KEY sub-menu) is 
  461.    also available from the built-in EDITor as [V <file-name>]
  462.  
  463. cd <directory-path>: [MAIN][META]
  464.    change/set current working directory path to <directory-path>
  465.  
  466.    DIAGNOSTICS:
  467.    changing the current directory accross volumes is a licit operation
  468.    cd [without-argument]  = cd $HOME (internal [META]-environment)
  469.    cd <drive-name>:       = cd <drive-name>:\<last-visited-sub-directory>
  470.    cd {drive-name:}\      = set cwd to (the root of) {drive-name:}\
  471.  
  472. cls: [MAIN][META]
  473.    clear screen and home cursor
  474.  
  475. cursor[+][-]: [MAIN][META]
  476.    enable | disable cursor
  477.  
  478. date: [MAIN][META]
  479.    show system date and time
  480.  
  481.    DIAGNOSTICS: 
  482.    CST is considered only, local time is ignored; if the system [TOS] 
  483.    time is not reasonably set, some historically memorable date is 
  484.    printed; the IKBD-time is also ignored
  485.  
  486. du: [MAIN][META]
  487.    show disk usage for disk holding the current working directory
  488.  
  489.    DIAGNOSTICS: 
  490.    the free space displayed is measured in bytes/sectors; the total space 
  491.    [and the current cluster size on the inspected volume] is also shown
  492.  
  493. ed {<options>} <file-name>: [MAIN][META]
  494.    call the system-editor {current-bin-drive}:\bin\ed.prg in order to 
  495.    edit the <file-name> with <options>
  496.  
  497.    DIAGNOSTICS: 
  498.    the calling routine assumes that the command line <options> <file-name> 
  499.    is parsed as appropriate by the editor; the system editor [ed.prg] can 
  500.    be any TOS/GEM editor with a reasonable TOS interface; recommended pd/
  501.    commercial programs to this purpose: any `micro-Emacs' (for instance, 
  502.    the GNU micro-Emacs), `stedi.prg', `tempus.prg', etc.; most [ATARI.ST] 
  503.    text-processors should also do the job
  504.  
  505. env: [META]
  506.    print current [internal] [META]-environment
  507.  
  508.    DIAGNOSTICS: 
  509.    shows the contents of $HOME, $BIN, $LIB, $TMP, $SHELL and $EDITOR 
  510.    [none of these are exported to external programs]
  511.  
  512. EXEC <program-absolute-path> {<options>}: [MAIN][META]
  513.    execute <program-absolute-path>.prg {<options>}
  514.  
  515.    DIAGNOSTICS:
  516.    the <program-absolute-path> is taken modulo the current working 
  517.    directory, although an absolute path-specification of the kind 
  518.    {drive:}\<program-path> is always recognized as such
  519.  
  520. exec <program-name> {<options>}: [MAIN][META]
  521.    execute {current-bin-drive:}\bin\<program-name>.prg {<options>}
  522.  
  523. exit: [MAIN][META]
  524.    [MAIN]: exit [MAIN] [= current LAMBDA] to immediate parent process 
  525.    [META]: exit [META] to remote parent process 
  526.  
  527. font <font-name>: [MAIN][META]
  528.    load a new font-set from {current-lib-drive:}\lib\<font-name>.fnt
  529.  
  530.    DIAGNOSTICS: 
  531.    this is an experimental feature: it calls an external font-loader 
  532.    {current-bin-drive:}\bin\ldfont.prg to load a new font set from 
  533.    {current-lib-drive:}\lib\<font-name>.fnt; the default fonts are
  534.    restored before loading the new set; graphics-mode is switched off,
  535.    if necessary
  536.  
  537.    NOTE: 
  538.    The pd font-loader supplied with the LAMBDA-package assumes that the 
  539.    {current-lib-drive:}\lib\<font-name>.fnt is in FED-format. Apparently, 
  540.    it uses directly the TOS `Malloc()'; as a consequence, it will almost 
  541.    always cause memory fragmentation, conflicting with processes that 
  542.    allocate memory dynamically (as, e. g., [edit]). This kind of problem 
  543.    can be circumvented by loading the new font-file from a different 
  544.    copy of LAMBDA or from a copy of the current SHELL that has not been 
  545.    invoked by the current LAMBDA.  
  546.  
  547. graphics[+][-]: [MAIN][META]
  548.    enable | disable graphics display mode
  549.  
  550.    DIAGNOSTICS:
  551.    the graphics-mode affects directly the built-in paging routines, 
  552.    although the latter are unable to recognize the graphics-mode if 
  553.    this has not been set explicitly by [graphics+]
  554.  
  555. help: [MAIN][interactive][META]
  556.    [MAIN]: displays the [MAIN] interpreter's help-page and, in [talk+]- 
  557.            mode, a full list of LOCAL commands currently available 
  558.    [META]: displays the [META] help-page [= a list of specific commands 
  559.            available via the internal shell]
  560.  
  561.    DIAGNOSTICS:
  562.    in [MAIN][talk+][graphics-]-mode, expects interactive response on 
  563.    paging (since there are two pages to look up)
  564.  
  565. home: [META][interactive]
  566.    set new current $HOME-drive: [a-p][A-P]
  567.  
  568.    DIAGNOSTICS:
  569.    expects interactive response; as usual, this is disabled by [talk-]
  570.  
  571. install: [META]
  572.    generates the current [BOOT] directory-structure as specified by 
  573.    the [internal] [META]-environment, if necessary
  574.  
  575.    DIAGNOSTICS: 
  576.    reads the contents of $HOME, $BIN, $LIB, $TMP [none of these are 
  577.    exported to external programs] and makes the appropriate directories 
  578.    [if not already present], locating the $SHELL and the $EDITOR
  579.  
  580. leave: [META]
  581.    exit silently [META] to the immediate parent process [no return-value]
  582.  
  583. local: [MAIN][META]
  584.    displays the list of LOCAL [ATARI.ST] commands currently available
  585.  
  586. ls: [MAIN][META]
  587.    [long] list contents of current working directory
  588.  
  589.    DIAGNOSTICS: 
  590.    identifies sub-directories and displays file-length statistics, no 
  591.    date/time stamp; the directory listing is as seen by TOS; whenever 
  592.    applicable [system][hidden][read-only][written-to]-modes are also 
  593.    reported
  594.  
  595. mem: [MAIN][META]
  596.    show the [largest chunk of] free memory currently available
  597.  
  598.    DIAGNOSTICS:
  599.    with shell-type [g], shows also the free list of all such chuncks
  600.    and the corresponding "owners" 
  601.  
  602. meta: [MAIN]
  603.    escape to the internal shell [META]
  604.  
  605.    DIAGNOSTICS:
  606.    specific [MAIN]-commands are disabled; specific [META]-commands are 
  607.    enabled; LOCAL commands available in [MAIN] are retained
  608.  
  609. metashell: [META]
  610.    TOS-escape to the current shell, in [META]-environment
  611.  
  612.    DIAGNOSTICS: 
  613.    `Pexec()'-call to the current shell, in [META]-environment, according 
  614.    to the internal conventions concerning shell-types
  615.  
  616.    NOTE:
  617.    The [META]-environment has a "private" segment (the one that can be 
  618.    inspected by [meta][env]) which is never exported. This type of call 
  619.    will only pass the external environment, as inherited by [META] on 
  620.    BOOT, to the current shell, without inserting this "private" segment.
  621.    For shell-type [g], this is an internal call, using the same copy of 
  622.    the current shell.
  623.  
  624. mkdir <directory-path>: [MAIN][META]
  625.    make new <directory-path>
  626.  
  627.    DIAGNOSTICS: 
  628.    the <directory-path> is taken modulo cwd; mkdir assumes that all 
  629.    intermediate nodes exist
  630.  
  631. path: [META][interactive]
  632.    set new current $PATH-drive: [a-p][A-P]
  633.  
  634.    DIAGNOSTICS:
  635.    expects interactive response; as usual, this is disabled by [talk-]
  636.  
  637. quit: [META]
  638.    exit META to the immediate parent process with return-value
  639.  
  640. rm <file-name>: [MAIN]
  641.    delete [= unlink] <file-name>
  642.  
  643. rmdir <directory-path>: [MAIN][META]
  644.    remove <directory-path>
  645.  
  646.    DIAGNOSTICS: 
  647.    the <directory-path> is taken modulo cwd; rmdir assumes that all 
  648.    intermediate nodes exist
  649.  
  650. sh[+][-]: [MAIN][META]
  651.    activate | deactivate the current shell
  652.  
  653.    DIAGNOSTICS:
  654.    the open-mode triggered by [sh+] is echoed only in [MAIN] interactive 
  655.    mode, as set by [talk+] 
  656.  
  657. shell: [META]
  658.    TOS-escape to the current shell, in [NULL]-environment
  659.  
  660.    DIAGNOSTICS: 
  661.    `Pexec()'-call to the current shell, in [NULL]-environment, according 
  662.    to the internal conventions concerning shell-types; an equivalent 
  663.    escape is: !!
  664.  
  665.    NOTE: 
  666.    For shell-type [g], this is an internal call (using the same copy of 
  667.    the current shell).
  668.  
  669. sound[+][-]: [MAIN][META]
  670.    enable | disable sound bell
  671.  
  672. sys: [META][interactive]
  673.    change the current shell-type: { a, b, c, g, m, s }
  674.  
  675.    DIAGNOSTICS:
  676.    expects interactive response; as usual, this is disabled by [talk-];
  677.    there is no need to set explicitly the shell-type [g] (the "internal" 
  678.    default); also, the shell-type [g] cannot be altered if a shell of 
  679.    type [g] is actually present in the environment
  680.  
  681.    WARNING: 
  682.    Lying to [META], with [sys <shell-type>], is harmless only for the 
  683.    "external" shell-types [a][b][c][m], in which case, renaming the 
  684.    current shell to the "external" default [msh.prg] would sometimes
  685.    work, although not exactly as specified elsewhere in the [Technical 
  686.    Notes].
  687.  
  688. talk[+][-]: [MAIN][META]
  689.    enable | disable interactive mode
  690.  
  691.    DIAGNOSTICS:
  692.    controls also the verbosity of [MAIN][META] error reports and the
  693.    auto-numbering of the [MAIN] command-history
  694.  
  695.    NOTE: 
  696.    Actually, these are not pure "system"-commands (for details see the 
  697.    REFERENCE MANUAL), although they affect the status of those system 
  698.    commands that require interactive response. In particular, the 
  699.    [talk-]-mode [= non-interactive] will also switch off the TOS error 
  700.    reporting for most processes triggered by [META].
  701.  
  702. TOS <program-absolute-path>: [MAIN][META]
  703.    execute <program-absolute-path>.tos
  704.  
  705.    DIAGNOSTICS:
  706.    the <program-absolute-path> is taken modulo the current working 
  707.    directory; an absolute path-specification {drive:}\<program-path> 
  708.    is always recognized
  709.  
  710. tos <program-name>: [MAIN][META]
  711.    execute {current-bin-drive:}\bin\<program-name>.tos
  712.  
  713. TTP <program-absolute-path> {<options>}: [MAIN][META]
  714.    execute <program-absolute-path>.ttp {<options>}
  715.  
  716.    DIAGNOSTICS:
  717.    the <program-absolute-path> is taken modulo the current working 
  718.    directory; absolute specifications {drive:}\<program-path> are
  719.    always recognized
  720.  
  721. ttp <program-name> {<options>}: [MAIN][META]
  722.    execute {current-bin-drive:}\bin\<program-name>.ttp {<options>}
  723.  
  724. version: [MAIN][META]
  725.    print the current version of the LAMBDA-interpeter
  726.  
  727. white: [MAIN][META]
  728.    set white-on-black fore/background [XOR current fore/background]
  729.    
  730.    DIAGNOSTICS: 
  731.    [white-on-black] is set if starting from [black-on-white]
  732.  
  733. !: [MAIN][META]
  734.    SYSTEM-escape to the current shell 
  735.  
  736.    DIAGNOSTICS: 
  737.    pending memory available, executes a `system()'-call to the current 
  738.    shell, according to the internal conventions concerning shell-types
  739.  
  740.    NOTE: 
  741.    For shell-type [g], the action of the !-escape is differentiated as
  742.    follows: 
  743.  
  744.       (1) [MAIN]: internal call (using the same copy of the shell),
  745.       (2) [META]: proper system-call (re-initializing a new shell).
  746.     
  747. !!: [MAIN][META]
  748.    TOS-escape to the current shell, in [NULL]-environment
  749.  
  750.    DIAGNOSTICS: 
  751.    `Pexec()'-call to the current shell, in [NULL]-environment, according 
  752.    to the internal conventions concerning shell-types
  753.  
  754.    NOTE: 
  755.    For shell-type [g], this is an internal call (using the same copy of 
  756.    the current shell).
  757.  
  758. <any-other-string-sequence>: [MAIN][META]
  759.    in [sh+]-mode: as interpreted by the current shell, if any
  760.  
  761.    DIAGNOSTICS: 
  762.    assumes that a minimal environment consisting of: <shell-type>, actual 
  763.    shell-location, actual location of binaries, font-library location, 
  764.    etc. has been correctly set and that the current shell knows about
  765.    this "private" [META]-environment; the latter kind of information can 
  766.    be passed on via the shell's initialization script; typical echoes on 
  767.    failure: `?', `No shell', a [TOS] error report, etc.
  768.  
  769. 8 ACKNOWLEDGEMENTS.
  770.  
  771.   I am indebted to Willem L. van der Poel and to his former associates 
  772.   at the University of Technology in Delft [The Netherlands] for the 
  773.   general ideas underlying the present implementation(s).
  774.  
  775.   Corrado Boehm [Universita di Roma, Italy] and some of his students 
  776.   have contributed with numerous suggestions of improvement, concerning 
  777.   the kernel LAMBDA-interpreter [MAIN] (especially in its MACintosh 
  778.   variant).
  779.  
  780.   The [ATARI.ST] implementation has made copious use of the excellent
  781.   public domain C-library of Dale Schumacher (i. e. the LIBC called 
  782.   "dLibs 1.2").
  783.  
  784.   The main development work on LAMBDA has been done on a VAX 750 
  785.   cum BSD 4.2, whereas the specific ATARI.ST enhancements have been 
  786.   obtained by using valuable [if somewhat rival] C-tools signed (c) 
  787.   and/or derived from (c) material released by the Mark Williams 
  788.   Comp., Microsoft and Borland International.
  789.  
  790. 9 MAIL.
  791.  
  792.   Since we a living in a [perpetually] changing environment, some of the 
  793.   e-mail boxes/paths below may not be actual. On failure, try the postal 
  794.   address: the reliability of the Dutch postal services has significantly 
  795.   increased by the recent privatization [January 1, 1989]...
  796.  
  797.   Adrian Rezus: Meyhorst 91-01, 6537 KJ Nijmegen, The Netherlands.
  798.                 adriaan @ {decvax!,cernvax!}mcvax!{kunivv1,kunivv3}.
  799.   [DECNET][RELAY][FOR TECHNICAL LAMBDA-MATTERS ONLY]:
  800.                 boehm @ vaxrma.decnet.cern = [Corrado Boehm][Rome][Italy].
  801.