Annotation of researchv10no/cmd/spitbol/spitv35.man, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: 
                      4: 
                      5: 
                      6: 
                      7: 
                      8:                              *      *      *
                      9: 
                     10: 
                     11: 
                     12: 
                     13: 
                     14:                         M A C R O   S P I T B O L
                     15:                         M A C R O   S P I T B O L
                     16: 
                     17:                         -------------------------
                     18: 
                     19: 
                     20: 
                     21:                     PROGRAM REFERENCE MANUAL (Rev. G)
                     22: 
                     23:                     ---------------------------------
                     24: 
                     25: 
                     26: 
                     27:                      VAX/VMS Version 3.5 (BCAB-2132)
                     28: 
                     29:                      -------------------------------
                     30: 
                     31: 
                     32: 
                     33: 
                     34: 
                     35:                   Copyright   (c)   1980    by    DEWAR
                     36:                   INFORMATION    SYSTEMS   CORPORATION.
                     37:                   This   manual   may   be   reporduced
                     38:                   provided  that this Dewar Information
                     39:                   Systems    Copyright    Notice     is
                     40:                   incorporated.
                     41: 
                     42: 
                     43: 
                     44:                   VAX,   VMS,  DECwriter  and  PDP  are
                     45:                   registered trademarks of the  Digital
                     46:                   Equipment Corporation.
                     47: 
                     48: 
                     49: 
                     50: 
                     51:                   DEWAR INFORMATION SYSTEMS CORPORATION
                     52:                            221 West Lake Street
                     53:                       Oak Park, Illinois USA  60302
                     54: 
                     55:                               (312) 524-1644
                     56: 
                     57: 
                     58: 
                     59: 
                     60: 
                     61: 
                     62: 
                     63: 
                     64: 
                     65: 
                     66: 
                     67: 
                     68: 
                     69: 
                     70: 
                     71: 
                     72: 
                     73: 
                     74: 
                     75: 
                     76: 
                     77: 
                     78: 
                     79: 
                     80: 
                     81: 
                     82: 
                     83: 
                     84: 
                     85: 
                     86: 
                     87: 
                     88: 
                     89: 
                     90: 
                     91: 
                     92: 
                     93: 
                     94: 
                     95: 
                     96:            Please replace this page with the Table of Contents
                     97:            Please replace this page with the Table of Contents
                     98:                                (At the end)
                     99:                                (At the end)
                    100: 
                    101: 
                    102: 
                    103: 
                    104: 
                    105: 
                    106: 
                    107: 
                    108: 
                    109: 
                    110: 
                    111: 
                    112: 
                    113: 
                    114: 
                    115: 
                    116: 
                    117: 
                    118: 
                    119: 
                    120: 
                    121: 
                    122: 
                    123: 
                    124: 
                    125: 
                    126: 
                    127: 
                    128: 
                    129: 
                    130: 
                    131:     This  report  is  parallel  to  the  University of Leeds Technical
                    132:     Report Number 94, "Macro Spitbol - Decsystem 10 Version,"  McCann,
                    133:     Holden  and Dewar, Dec. 1976.  Differences will be found primarily
                    134:     in Section 12.
                    135: 
                    136: 
                    137:                              Revision History
                    138:                              ________ _______
                    139: 
                    140:     This document has been revised as follows :
                    141: 
                    142:     Dec 1976        to correspond with        SPITBOL Version 3.0
                    143:     Mar 1978        to correspond with        SPITBOL Version 3.3
                    144:     Sep 1978        to correspond with        SPITBOL Version 3.4
                    145:     Feb 1979        to correspond with        SPITBOL Version 3.5
                    146: 
                    147: 
                    148: 
                    149:     VAX/VMS MACRO SPITBOL Version BCAB-2132 is designed to operate  on
                    150:     the  VAX 11/780 and VAX 11/750 computers running the VMS operating
                    151:     system version 2.0, 2.1, 2.2, 2.3 or 2.4.
                    152: 
                    153: 
                    154: 
                    155: 
                    156: 
                    157: 
                    158: 
                    159: 
                    160: 
                    161: 
                    162: 
                    163: 
                    164: 
                    165: 
                    166: 
                    167: 
                    168: 
                    169: 
                    170: 
                    171: 
                    172: 
                    173: 
                    174: 
                    175: 
                    176: 
                    177: 
                    178: 
                    179: 
                    180: 
                    181: 
                    182: 
                    183: 
                    184: 
                    185: 
                    186: 
                    187: 
                    188: 
                    189: 
                    190: 
                    191:          MACRO SPITBOL V3.5
                    192:                                                    PAGE 1 - [1]
                    193:          Introduction
                    194: 
                    195: 
                    196: 
                    197:                           *-------------------*
                    198:                             [1]  Introduction
                    199:                           | [1]  Introduction |
                    200:                           *-------------------*
                    201: 
                    202:     MACRO SPITBOL  is  an  implementation  of  the  SNOBOL4   computer
                    203:     language  which  was  coded  during 1974/75. In speed and external
                    204:     style  it resembles the earlier SPITBOL  implementations  for  the
                    205:     IBM 360   and  UNIVAC 1100  series  computers  but  internally  it
                    206:     differs  considerably  from  these  since  the  source   code   is
                    207:     converted  to  a reverse polish string which is then used to drive
                    208:     interpretive routines.  MACRO SPITBOL is  available  with  a  high
                    209:     degree  of  compatibility  on  a  range of computers running under
                    210:     widely differing operating  systems.   This  report  reflects  the
                    211:     above   fact   by  providing  in  its  first  nine  sections  such
                    212:     documentation  and  information  for  users  as  is  substantially
                    213:     machine   independent,  with  a  final  section  giving  essential
                    214:     information peculiar to each  particular  implementation.   It  is
                    215:     assumed  that  the  reader  is familiar with the standard version,
                    216:     referred to simply as SNOBOL4 in the remainder of the  report  and
                    217:     described   in   the   essential   reference   book  "The  SNOBOL4
                    218:     Programming Language" by Griswold,  Poage  and  Polonsky,  Addison
                    219:     Wesley,  1971.   Version  3.4  of SNOBOL4 is the reference version
                    220:     for comparison.  There are  several  minor  incompatibilities  and
                    221:     some  features  are  not implemented.  There are several additions
                    222:     to the language in this implementation.
                    223: 
                    224: 
                    225: 
                    226: 
                    227: 
                    228: 
                    229: 
                    230: 
                    231: 
                    232: 
                    233: 
                    234: 
                    235: 
                    236: 
                    237: 
                    238: 
                    239: 
                    240: 
                    241: 
                    242: 
                    243: 
                    244: 
                    245: 
                    246: 
                    247: 
                    248: 
                    249: 
                    250: 
                    251: 
                    252: 
                    253: 
                    254:          MACRO SPITBOL V3.5
                    255:                                                    PAGE 2 - [1]
                    256:          Introduction
                    257: 
                    258: 
                    259:     In  general  an  attempt  has   been   made   to   retain   upward
                    260:     compatibility  wherever  possible.   Most  SNOBOL4  programs which
                    261:     operate correctly using  SNOBOL4  should  operate  correctly  when
                    262:     compiled  and  executed  using MACRO SPITBOL.  For brevity, in the
                    263:     remainder of the report MACRO SPITBOL will be referred  to  simply
                    264:     as SPITBOL.
                    265: 
                    266: 
                    267:     SPITBOL was initially designed and implemented by:
                    268: 
                    269:     Professor Robert B. K. Dewar,
                    270:     Courant Institute of Mathematical Sciences,
                    271:     251 Mercer Street,
                    272:     NEW YORK, N.Y. 10012.
                    273:     U.S.A.
                    274: 
                    275:     It has been further developed and is now maintained by:
                    276: 
                    277:     Dr.  Anthony P. McCann,
                    278:     Department of Computer Studies,
                    279:     University of Leeds,
                    280:     LEEDS, LS2 9JT,
                    281:     England.
                    282: 
                    283: 
                    284:     The VAX/VMS Version is the work of and is maintained by:
                    285: 
                    286:     Steven G. Duff
                    287:     c/o Dewar Information Systems Corporation
                    288:     221 West Lake Street
                    289:     Oak Park, Illinois  60302
                    290: 
                    291:     which  should  be  contacted to report problems or for information
                    292:     on distribution.
                    293: 
                    294:     The implementor gratefully acknowledges the assistance of  Thagard
                    295:     Research  in  providing  development  facilities  for  the VAX/VMS
                    296:     Version of SPITBOL.
                    297: 
                    298: 
                    299: 
                    300: 
                    301: 
                    302: 
                    303: 
                    304: 
                    305: 
                    306: 
                    307: 
                    308: 
                    309: 
                    310: 
                    311: 
                    312: 
                    313: 
                    314: 
                    315: 
                    316:          MACRO SPITBOL V3.5
                    317:                                                    PAGE 3 - [2]
                    318:          Summary of Differences
                    319: 
                    320: 
                    321: 
                    322:                      *-----------------------------*
                    323:                        [2]  Summary of Differences
                    324:                      | [2]  Summary of Differences |
                    325:                      *-----------------------------*
                    326: 
                    327:     The  principal  differences  between  SPITBOL  and   SNOBOL4   are
                    328:     summarised here.
                    329: 
                    330: 
                    331:  2.1  Features not Implemented
                    332:  2.1  Features not Implemented
                    333:  _____________ ___ ___________
                    334: 
                    335: 
                    336:      1.  The  capability  to  redefine  standard  system functions and
                    337:          predefined operators.  This restriction permits compile  time
                    338:          pre-evaluation  of  a wider range of expressions and patterns
                    339:          than would otherwise  be  possible.   It  affects  the  OPSYN
                    340:          function (see Section 5 for details).
                    341: 
                    342:      2.  The VALUE  and BACKSPACE functions.
                    343: 
                    344:      3.  The  keywords  &STFCOUNT  and  &FULLSCAN  .   The  heuristics
                    345:          associated with the QUICKSCAN mode of  pattern  matching  are
                    346:          complex  and for many programs do not result in a significant
                    347:          increase  in speed.  Accordingly only  FULLSCAN  matching  is
                    348:          provided  and  no  heuristics  are  applied.   In  particular
                    349:          deferred expressions are not assumed to match  at  least  one
                    350:          character.
                    351: 
                    352:      4.  The BLOCK datatype as in SNOBOL4B .
                    353: 
                    354:      5.  The  variable  PUNCH has no predefined association to a punch
                    355:          stream.   If  required,  the  programmer  should  include   a
                    356:          statement such as OUTPUT(.PUNCH,3) in his program.
                    357: 
                    358:      6.  SPITBOL does not permit exponentiation of two real numbers.
                    359: 
                    360:      7.  For  small  machines,  versions  of SPITBOL in which all real
                    361:          arithmetic capability is omitted are available - see  Section
                    362:          12.
                    363: 
                    364:      8.  Some  implementations  may  omit  a  few features.  A list is
                    365:          given in Section 12.
                    366: 
                    367: 
                    368: 
                    369: 
                    370: 
                    371: 
                    372: 
                    373: 
                    374: 
                    375: 
                    376: 
                    377: 
                    378: 
                    379: 
                    380: 
                    381:          MACRO SPITBOL V3.5
                    382:                                                    PAGE 4 - [2.2]
                    383:          Summary of Differences
                    384: 
                    385: 
                    386: 
                    387:  2.2  Features Implemented Differently
                    388:  2.2  Features Implemented Differently
                    389:  _____________ ___________ ___________
                    390: 
                    391:     Some of the differences here may necessitate program changes.
                    392: 
                    393: 
                    394:      1.  In SPITBOL the value of  &ANCHOR  is  obtained  only  at  the
                    395:          start  of the match.  In SNOBOL4, changing the value during a
                    396:          match can lead to unexpected results.
                    397: 
                    398:      2.  The pattern valued variables ABORT, ARB, BAL,  FAIL,   FENCE,
                    399:          REM,  SUCCEED  are write protected so that attempts to assign
                    400:          to them will fail.
                    401: 
                    402:      3.  The same stack is used for pattern matching and for  function
                    403:          calls.   Thus  the  diagnostic issued for an infinite pattern
                    404:          recursion is simply the standard stack overflow message.
                    405: 
                    406:      4.  Recovery from execution errors (see function SETEXIT ).
                    407: 
                    408:      5.  Input/Output.  In particular, FORTRAN I/O  is  not  provided.
                    409:          Dynamic  association  to  files is possible through the third
                    410:          argument and statement failure is possible if a  file  cannot
                    411:          be found as in
                    412:               INPUT(.IN,3,'INFIL')                :F(NOFILE)
                    413: 
                    414:      6.  The  TABLE function is implemented so that table elements can
                    415:          be rapidly accessed by the efficient  technique  of  hashing.
                    416:          In  order  to  set  a  suitable size for the hash table it is
                    417:          important to choose a reasonable value for  the  argument  of
                    418:          TABLE.   Use of an inappropriate value will not cause program
                    419:          failure but may delay access to elements or waste memory.
                    420: 
                    421:      7.  SPITBOL allows  some  datatype  conversions  not  allowed  in
                    422:          SNOBOL4.   For  example  a real value may be used in patterns
                    423:          and is converted to a string.  In  general  objects  will  be
                    424:          converted to an appropriate datatype if at all possible.
                    425: 
                    426:      8.  The  unary  .  (name)  operator applied to a natural variable
                    427:          yields  a NAME rather than a  STRING.   Since  this  NAME  is
                    428:          converted  to  a STRING when necessary, the difference is not
                    429:          normally noticed.  The only points at which   the  difference
                    430:          will  be  apparent  is  in  use  of  the  IDENT,  DIFFER  and
                    431:          DATATYPE functions  and when used as a TABLE subscript.
                    432: 
                    433:      9.  SPITBOL  permits  leading  and  trailing  blanks  on  numeric
                    434:          strings which are to be converted to  NUMERIC .
                    435: 
                    436:     10.  Several  of  the  built-in  functions are slightly different.
                    437:          They are identified by a * on their names in Section 5.
                    438: 
                    439:     11.  The count  of  statements  executed  includes  labelled  null
                    440:          statements and  the END statement.
                    441: 
                    442: 
                    443: 
                    444: 
                    445:          MACRO SPITBOL V3.5
                    446:                                                    PAGE 5 - [2.2]
                    447:          Summary of Differences
                    448: 
                    449:     12.  Constant  sub-expressions  and  patterns are pre-evaluated at
                    450:          compile time.  This  may  occasionally  result  in  execution
                    451:          errors   (e.g.   integer   overflow)  being  reported  during
                    452:          compilation.  Significant speed increases may be obtained  by
                    453:          ensuring  that in-line patterns are constant so that they may
                    454:          be  pre-evaluated.   Patterns  built  from   pattern   valued
                    455:          variables  (e.g.  ARB)  and  pattern  functions with constant
                    456:          arguments (e.g. ANY(*ARG), RTAB(0)) are themselves constant.
                    457: 
                    458:     13.  A compact and fast garbage collector is used which  needs  to
                    459:          distinguish   between  small  integers  and memory addresses.
                    460:          This effectively restricts the maximum size  of  any  SPITBOL
                    461:          object  (string,  array, table, code or expression block)  to
                    462:          be less than a value subsequently  referred  to  as  MXLEN  .
                    463:          This   is   in  practice  little  restriction  on  most  host
                    464:          computers.  Where, because of implementation needs, it  might
                    465:          prove  restrictive,  a  run time option is generally provided
                    466:          for setting this value to suit  a  user's  requirements  (see
                    467:          Section  12.  where  an  indication  of  the  default initial
                    468:          setting of MXLEN is also given).  Since the  value  of  MXLEN
                    469:          is  used  to initialise &MAXLNGTH , printing &MAXLNGTH during
                    470:          execution gives its exact value.   A  user  may  subsequently
                    471:          assign  a  smaller value to this keyword but values exceeding
                    472:          that of MXLEN may not be assigned to it.
                    473: 
                    474:     14.  A value of zero for &TRIM does  not  necessarily  imply  that
                    475:          trailing  blanks  will  be added to records in which they are
                    476:          not originally present - see Section 12.
                    477: 
                    478: 
                    479: 
                    480:  2.3  Additional Features
                    481:  2.3  Additional Features
                    482:  _______________ ________
                    483: 
                    484:     The following SPITBOL features are not found in SNOBOL4.
                    485: 
                    486: 
                    487:      1.  The  functions APPEND, BREAKX, CHAR, BUFFER,    EJECT,  EXIT,
                    488:          HOST,    INSERT,    LEQ,  LGE,        LLE,  LLT,  LNE,  LPAD,
                    489:          REVERSE, RPAD,      RSORT,  SETEXIT,  SORT,  SUBSTR   .   The
                    490:          sorting  functions,  the  extended  break pattern BREAKX, and
                    491:          the output formatting functions LPAD and RPAD are  especially
                    492:          useful.  See Section 5 for details of all these functions.
                    493: 
                    494:      2.  The keywords &ERRTEXT and &PROFILE.
                    495: 
                    496:      3.  The  symbolic  dump  optionally  includes elements of arrays,
                    497:          tables  and programmer defined datatypes. (See DUMP ).
                    498: 
                    499:      4.  An access trace mode is provided in  addition  to  the  other
                    500:          standard modes.  (See TRACE ).
                    501: 
                    502:      5.  A selection or alternative feature is provided.
                    503: 
                    504: 
                    505: 
                    506: 
                    507: 
                    508: 
                    509:          MACRO SPITBOL V3.5
                    510:                                                    PAGE 6 - [2.3]
                    511:          Summary of Differences
                    512: 
                    513:      6.  The second argument of CONVERT may be 'NUMERIC'.
                    514: 
                    515:      7.  The  assignment symbol , = , is treated as an ordinary binary
                    516:          operator  and the binary operator , ? , is  given  a  defined
                    517:          meaning as a pattern matching operator.
                    518: 
                    519:      8.  If  running  SPITBOL from an on-line terminal, options may be
                    520:          selected  to reduce the amount of  listing  information  sent
                    521:          to  the  terminal  or  to restrict this to compilation errors
                    522:          only. (See Section 12 for details).
                    523: 
                    524:      9.  Reflecting the fact that many current computer systems   have
                    525:          good  online  terminal  capabilities,  the  name  TERMINAL is
                    526:          available with pre-association for  input  and  output  to  a
                    527:          terminal on such systems - see Section 12.
                    528:          T     TERMINAL = EVAL(TERMINAL)     :S(T)
                    529:          acts  as a desk calculator.  TERMINAL may be detached but may
                    530:          not   then   be   re-associated.    If   this   feature    is
                    531:          unimplemented, TERMINAL acts as an ordinary variable.
                    532: 
                    533:     10.  Several  additional  control  cards  may  be  used  to select
                    534:          various compile time and run time options.
                    535: 
                    536:     11.  An   extended   character   set   is   available   in    some
                    537:          implementations.   Where  lower  case  letters  are  provided
                    538:          names such as "INPUT" and "input"  are  distinct.   In  gotos
                    539:          :f  and :s mean the same as :F and :S.  The Tab character, if
                    540:          available,  is  syntactically  identical  with  blank.    See
                    541:          Section 12.
                    542: 
                    543:     12.  The  assignment  &STLIMIT = -1 inhibits all checks on numbers
                    544:          of statements executed.
                    545: 
                    546:     13.  Built-in functions are available for sorting the elements  of
                    547:          tables and arrays.
                    548: 
                    549:     14.  A  additional datatype called a BUFFER is available.  Buffers
                    550:          are  character  arrays  with  a  fixed  allocation   and   an
                    551:          adjustable   size   which  may  vary  between  zero  and  the
                    552:          allocated size at any time.   Three  new  functions,  INSERT,
                    553:          APPEND  and BUFFER have been added to support the buffer type
                    554:          specifically,  and the CONVERT,  PROTOTYPE,  SIZE,  DATATYPE,
                    555:          SUBSTR,  COPY and pattern matching and replacement operations
                    556:          have been enhanced to provide support for buffers.
                    557: 
                    558: 
                    559: 
                    560: 
                    561: 
                    562: 
                    563: 
                    564: 
                    565: 
                    566: 
                    567: 
                    568: 
                    569: 
                    570: 
                    571:          MACRO SPITBOL V3.5
                    572:                                                    PAGE 7 - [2.4]
                    573:          Summary of Differences
                    574: 
                    575: 
                    576: 
                    577:  2.4  Syntax Differences
                    578:  2.4  Syntax Differences
                    579:  ___________ ___________
                    580: 
                    581:     This section describes differences in syntax between  SPITBOL  and
                    582:     SNOBOL4.  such  differences  should  not generally affect existing
                    583:     SNOBOL4 programs.
                    584: 
                    585: 
                    586:      1.  Reference  to  elements  of  arrays  which   are   themselves
                    587:          elements  of   arrays  is  possible  without  using  the ITEM
                    588:          function.  Thus the following are equivalent -
                    589:            A<J><K> = B<J><K>;       ITEM(A<J>,K) = ITEM(B<J>,K)
                    590: 
                    591:      2.  The compiler permits real  constants  to  be  followed  by  a
                    592:          FORTRAN style exponent E+xxx.
                    593: 
                    594:      3.  A  selection  or  alternative  construction  may  be  written
                    595:          anywhere that a value is permitted.  It consists of a  series
                    596:          of   expressions   separated   by   commas  and  enclosed  in
                    597:          parentheses:
                    598:            (e1,e2,e3,....,en)
                    599:          The semantics is to evaluate the  expressions  from  left  to
                    600:          right  until one succeeds and then use its value.  Failure is
                    601:          signalled if all evaluations fail.   This  feature  trivially
                    602:          provides  an  "or"  function for predicates and also has many
                    603:          other uses as shown by the following examples:
                    604:            A     = (EQ(B,3),GT(B,20)) B + 1
                    605:            NEXT  = (INPUT,'%EOF')
                    606:            MAXAB = (GT(A,B) A,B)
                    607:          The   alternative   structure   provides   an    IF-THEN-ELSE
                    608:          capability,  and  as  such  is  a useful programming feature.
                    609:          Note incidentally that the semantics of ordinary  parentheses
                    610:          is  a  correct  degenerate  case  of an alternative structure
                    611:          with one alternative.
                    612: 
                    613:      4.  The array brackets [] may be used instead of <>  if  desired.
                    614:          Thus X[I,J] and X<I,J> are equivalent.
                    615: 
                    616:      5.  By  treating  =  as  a  right  associative operator of lowest
                    617:          priority, multiple assignments within a single statement  may
                    618:          be  coded.   The  value  returned by an assignment is that of
                    619:          its right hand side.  After obeying
                    620:            A[I = INPUT] = INPUT
                    621:          I is the index of the element of the array  into  which  data
                    622:          has been read.
                    623: 
                    624:      6.  ?  is  defined  to  be an explicit pattern matching operator.
                    625:          It is left associative and has priority lower  than  that  of
                    626:          all  operators  except  =  .   It  returns  as  its value the
                    627:          substring matched from its left argument (a  string)  by  its
                    628:          right argument (a pattern).  Thus
                    629:            'ABCD' ? LEN(3) $ OUTPUT ? LEN(1) REM $ OUTPUT
                    630:          causes printing of
                    631:            ABC
                    632:            BC
                    633: 
                    634: 
                    635:          MACRO SPITBOL V3.5
                    636:                                                    PAGE 8 - [2.4]
                    637:          Summary of Differences
                    638: 
                    639: 
                    640: 
                    641: 
                    642: 
                    643: 
                    644: 
                    645: 
                    646: 
                    647: 
                    648: 
                    649: 
                    650: 
                    651: 
                    652: 
                    653: 
                    654: 
                    655: 
                    656: 
                    657: 
                    658: 
                    659: 
                    660: 
                    661: 
                    662: 
                    663: 
                    664: 
                    665: 
                    666: 
                    667: 
                    668: 
                    669: 
                    670: 
                    671: 
                    672: 
                    673: 
                    674: 
                    675: 
                    676: 
                    677: 
                    678: 
                    679: 
                    680: 
                    681: 
                    682: 
                    683: 
                    684: 
                    685: 
                    686: 
                    687: 
                    688: 
                    689: 
                    690: 
                    691: 
                    692: 
                    693: 
                    694: 
                    695: 
                    696: 
                    697:          MACRO SPITBOL V3.5
                    698:                                                    PAGE 9 - [3]
                    699:          Datatypes and Conversion
                    700: 
                    701: 
                    702: 
                    703:                     *-------------------------------*
                    704:                       [3]  Datatypes and Conversion
                    705:                     | [3]  Datatypes and Conversion |
                    706:                     *-------------------------------*
                    707: 
                    708:     This  section  details  the datatypes available in SPITBOL and the
                    709:     conversions which may be performed amongst them.
                    710: 
                    711: 
                    712:  3.1  Available Datatypes
                    713:  3.1  Available Datatypes
                    714:  ______________ _________
                    715: 
                    716: 
                    717:      1.  STRING
                    718:          Strings range  in  length  from  0  (null  string)  to  MXLEN
                    719:          characters   (subject  to  the  setting  of  &MAXLNGTH).  Any
                    720:          characters from the hardware set of the computer used to  run
                    721:          SPITBOL can appear in a string.
                    722: 
                    723:      2.  INTEGER
                    724:          Integers  are  generally  stored  in  the hardware complement
                    725:          form for the computer used to run SPITBOL and usually  occupy
                    726:          a single word.  See Section 12 for range.
                    727: 
                    728:      3.  REAL
                    729:          Available  if  floating  point  hardware  is  available  (sec
                    730:          10.2.4).  Stored according to the usual hardware  conventions
                    731:          of the computer on which SPITBOL is run.
                    732: 
                    733:      4.  ARRAY
                    734:          Arrays  may  not  exceed  MXLEN words in total size. 10 to 15
                    735:          words must be allowed for housekeeping information.
                    736: 
                    737:      5.  TABLE
                    738:          A table may have up to MXLEN elements.   Any  SPITBOL  object
                    739:          may  be  used  as  the name of a table element, including the
                    740:          null string.  See Section 5 for details.
                    741: 
                    742:      6.  PATTERN
                    743:          Pattern  structures  may  be  arbitrarily  large  within  the
                    744:          limits imposed by total available memory.
                    745: 
                    746:      7.  NAME
                    747:          A  name  can  be  obtained  from  any variable.  Note that in
                    748:          SPITBOL , the name operator (unary dot) applied to a  natural
                    749:          variable  yields  a  name,  not  a string as is the case with
                    750:          SNOBOL4.  Use  of  names  as  arguments  to  the  indirection
                    751:          operator  (unary  $)  is  much  faster than the use of string
                    752:          arguments.   Names  can  also  be  used   advantageously   in
                    753:          statements such as  INPUT(.IN)
                    754: 
                    755: 
                    756: 
                    757: 
                    758: 
                    759: 
                    760: 
                    761: 
                    762:          MACRO SPITBOL V3.5
                    763:                                                    PAGE 10 - [3.1]
                    764:          Datatypes and Conversion
                    765: 
                    766: 
                    767:      8.  EXPRESSION
                    768:          Any   expression  may  be  deferred  by  using  the  unary  *
                    769:          operator.
                    770: 
                    771:      9.  CODE
                    772:          A string representing a valid  program  can  be  compiled  at
                    773:          execution  time.   The  resulting CODE object may be executed
                    774:          in the same manner as the original program.
                    775: 
                    776:     10.  BUFFER
                    777:          The buffer type does not  exist  in  SNOBOL4;   it  has  been
                    778:          introduced  into  MACRO  SPITBOL  primarily to provide a more
                    779:          efficient mechanism for working with large strings.
                    780: 
                    781:          Buffers are packed character  arrays  created  with  a  fixed
                    782:          allocation  defining  the  maximum  number of characters they
                    783:          can ever contain.  Buffers are helpful in manipulating  large
                    784:          strings  efficiently.  The reason is that in-situ replacement
                    785:          of buffer  contents  is  possible  using  APPEND,  INSERT  or
                    786:          pattern  replacement, while any modification to a string must
                    787:          be achieved internally by first making a copy of the string.
                    788: 
                    789:          A buffer is like an array  in  that  it  cannot  be  extended
                    790:          beyond  its  allocation size.  The origin of the first buffer
                    791:          character is always one.   Buffer  creation  is  accomplished
                    792:          directly   with  the  BUFFER  function,  or  indirectly  with
                    793:          CONVERT.  In addition, every buffer  has  a  dynamic  defined
                    794:          size that can vary between zero and the maximum allocation.
                    795: 
                    796:          Once  a  buffer  has been created,  characters can be written
                    797:          into  specific  segments  using   the   INSERT   and   APPEND
                    798:          functions, or using pattern replacement.
                    799: 
                    800:          As  with  other aggregate types, two buffers are IDENTical if
                    801:          and only if they are the same object.
                    802: 
                    803:          Most standard functions will convert buffers to strings  when
                    804:          required.   Exceptions  to this are SUBSTR, which can be used
                    805:          to directly produce a string  from  a  section  of  a  buffer
                    806:          without  the  need  for  an intermediate conversion and SIZE,
                    807:          which  will  give  the  current  defined  size  of  a  buffer
                    808:          directly.   The  pattern  matching  and  pattern  replacement
                    809:          operations of the language will also accept a buffer name  as
                    810:          a  subject.   Pattern  matching  is  done  directly  from the
                    811:          buffer, and pattern replacement is  done  directly  into  the
                    812:          buffer as an INSERT function on the substring matched.
                    813: 
                    814:          In  addition,  PROTOTYPE  gives  the  prototype  string for a
                    815:          buffer, which is the integer allocation size  of  the  buffer
                    816:          object.   COPY  can be used to create a duplicate of a buffer
                    817:          to work with.  DATATYPE will, of course,  return  the  string
                    818:          "BUFFER" for any buffer object.
                    819: 
                    820: 
                    821: 
                    822: 
                    823: 
                    824:          MACRO SPITBOL V3.5
                    825:                                                    PAGE 11 - [3.2]
                    826:          Datatypes and Conversion
                    827: 
                    828: 
                    829: 
                    830:  3.2  Possible Datatype Conversions
                    831:  3.2  Possible Datatype Conversions
                    832:  _____________ ________ ___________
                    833: 
                    834:     As  far  as possible SPITBOL converts from one datatype to another
                    835:     as required.  The following  table  shows  which  conversions  are
                    836:     possible.    Blank  entries  indicate  that  the  conversions  are
                    837:     impossible, A indicates that conversion is always possible, and  U
                    838:     indicates  conversion  is usually possible, depending on the value
                    839:     involved.
                    840: 
                    841:                           CONVERT TO:
                    842: 
                    843:                        S I R A T P N E C B
                    844:                      +--------------------
                    845:                     S! A U U     A A U U U
                    846:                     I! A A A     A A A   A
                    847:                     R! A U A     A A A   A
                    848:             CONVERT A!       A U
                    849:              FROM:  T!       A A
                    850:                     P!           A
                    851:                     N! U U U     U A U U U
                    852:                     E!               A
                    853:                     C!                 A
                    854:                     B!                   A
                    855: 
                    856:             S       STRING
                    857:             I       INTEGER
                    858:             R       REAL
                    859:             A       ARRAY
                    860:             T       TABLE
                    861:             P       PATTERN
                    862:             N       NAME
                    863:             E       EXPRESSION
                    864:             C       CODE
                    865:             B       BUFFER
                    866: 
                    867: 
                    868: 
                    869: 
                    870: 
                    871: 
                    872: 
                    873: 
                    874: 
                    875: 
                    876: 
                    877: 
                    878: 
                    879: 
                    880: 
                    881: 
                    882: 
                    883: 
                    884: 
                    885: 
                    886: 
                    887: 
                    888:          MACRO SPITBOL V3.5
                    889:                                                    PAGE 12 - [3.3]
                    890:          Datatypes and Conversion
                    891: 
                    892: 
                    893: 
                    894:  3.3  Conversion Details
                    895:  3.3  Conversion Details
                    896:  _______________ _______
                    897: 
                    898:     This section gives detailed descriptions for each of the  possible
                    899:     conversions.
                    900: 
                    901: 
                    902:      1.  STRING --> INTEGER
                    903: 
                    904:          Leading  and  trailing blanks are ignored.  A leading sign is
                    905:          optional.  The sign, if  present,  must  immediately  precede
                    906:          the  digits.   A  null  or  all  blank string is converted to
                    907:          zero.
                    908: 
                    909:      2.  STRING --> REAL
                    910: 
                    911:          Leading and trailing blanks are ignored.  A leading  sign  if
                    912:          present,  must  immediately  precede  the number.  The number
                    913:          itself may be written in standard FORTRAN  type  format  with
                    914:          an  optional  exponent.   The  conversion is always accurate,
                    915:          the last bit  being  correctly  rounded.   A  null  or  blank
                    916:          string is converted to 0.0 .
                    917: 
                    918:      3.  STRING --> PATTERN
                    919: 
                    920:          A pattern is created which will match the string value.
                    921: 
                    922:      4.  STRING --> NAME
                    923: 
                    924:          The  result is the name of the natural variable which has the
                    925:          given string as its name.  This is identical  to  the  result
                    926:          of  applying  the  unary  dot  operator  to  the  variable in
                    927:          question.  The null string cannot be converted to a name.
                    928: 
                    929:      5.  STRING --> EXPRESSION
                    930: 
                    931:          The string must represent a legal  SPITBOL  expression.   The
                    932:          compiler  is  used  to convert the string into its equivalent
                    933:          expression and the result can be used anywhere an  expression
                    934:          is permitted.
                    935: 
                    936:      6.  STRING --> CODE
                    937: 
                    938:          The  string  must represent a legal SPITBOL program, complete
                    939:          with labels, and using  semicolons  to  separate  statements.
                    940:          The  compiler  is  used to convert the string into executable
                    941:          code.  The resulting code can be executed by transferring  to
                    942:          it  with  a  direct  GOTO  or by a normal transfer to a label
                    943:          within the code.
                    944: 
                    945:      7.  STRING --> BUFFER
                    946: 
                    947: 
                    948: 
                    949: 
                    950: 
                    951: 
                    952:          MACRO SPITBOL V3.5
                    953:                                                    PAGE 13 - [3.3]
                    954:          Datatypes and Conversion
                    955: 
                    956:          A buffer is created with an  allocation  size  equal  to  the
                    957:          size  of  the string, and the string value is copied into the
                    958:          buffer.  The null string cannot be converted to a buffer.
                    959: 
                    960: 
                    961: 
                    962: 
                    963: 
                    964: 
                    965: 
                    966: 
                    967: 
                    968: 
                    969: 
                    970: 
                    971: 
                    972: 
                    973: 
                    974: 
                    975: 
                    976: 
                    977: 
                    978: 
                    979: 
                    980: 
                    981: 
                    982: 
                    983: 
                    984: 
                    985: 
                    986: 
                    987: 
                    988: 
                    989: 
                    990: 
                    991: 
                    992: 
                    993: 
                    994: 
                    995: 
                    996: 
                    997: 
                    998: 
                    999: 
                   1000: 
                   1001: 
                   1002: 
                   1003: 
                   1004: 
                   1005: 
                   1006: 
                   1007: 
                   1008: 
                   1009: 
                   1010: 
                   1011: 
                   1012: 
                   1013: 
                   1014:          MACRO SPITBOL V3.5
                   1015:                                                    PAGE 14 - [3.3]
                   1016:          Datatypes and Conversion
                   1017: 
                   1018: 
                   1019:      8.  INTEGER --> STRING
                   1020: 
                   1021:          The result has no leading  or  trailing  blanks  and  leading
                   1022:          zeros  are  suppressed.  A minus sign is prefixed to negative
                   1023:          values.  Zero is converted to "0".
                   1024: 
                   1025:      9.  INTEGER --> REAL
                   1026: 
                   1027:          A real number is obtained by adding a zero  fractional  part.
                   1028:          Note  that  it  is  possible  to  lose  significance  in this
                   1029:          conversion if the mantissa of  the  real  representation  has
                   1030:          fewer digits than are available for an integer.
                   1031: 
                   1032:     10.  INTEGER --> PATTERN
                   1033: 
                   1034:          First  convert   to  a  STRING  and  then  treat as STRING to
                   1035:          PATTERN.
                   1036: 
                   1037:     11.  INTEGER --> NAME
                   1038: 
                   1039:          First convert to STRING and then treat as STRING to NAME.
                   1040: 
                   1041:     12.  INTEGER --> EXPRESSION
                   1042: 
                   1043:          The result is an EXPRESSION which when evaluated  yields  the
                   1044:          INTEGER as its value.
                   1045: 
                   1046:     13.  INTEGER --> BUFFER
                   1047: 
                   1048:          The  integer  is  first  converted  to a STRING which is then
                   1049:          converted to a buffer.
                   1050: 
                   1051:     14.  REAL --> STRING
                   1052: 
                   1053:          The real  number  is  converted  to  its  standard  character
                   1054:          representation.   Fixed  type  format  is  used  if possible,
                   1055:          otherwise  an  exponent  (using  E)   is   supplied.    Seven
                   1056:          significant  digits  are  generated, the last being correctly
                   1057:          rounded for all  cases.   Trailing  insignificant  zeros  are
                   1058:          suppressed after rounding has taken place.
                   1059: 
                   1060:     15.  REAL --> INTEGER
                   1061: 
                   1062:          This  conversion is only possible if the REAL is in the range
                   1063:          permitted  for  integers.   in  this  case,  the  result   is
                   1064:          obtained by truncating the fractional part.
                   1065: 
                   1066:     16.  REAL --> PATTERN
                   1067: 
                   1068:          First convert to STRING and then treat as STRING to PATTERN.
                   1069: 
                   1070:     17.  REAL --> NAME
                   1071: 
                   1072: 
                   1073: 
                   1074: 
                   1075: 
                   1076:          MACRO SPITBOL V3.5
                   1077:                                                    PAGE 15 - [3.3]
                   1078:          Datatypes and Conversion
                   1079: 
                   1080:          First convert to STRING and then treat as STRING to NAME.
                   1081: 
                   1082:     18.  REAL --> EXPRESSION
                   1083: 
                   1084:          The  result  is an expression which when evaluated yields the
                   1085:          REAL as its value.
                   1086: 
                   1087:     19.  REAL --> BUFFER
                   1088: 
                   1089:          First convert to STRING, then treat as STRING to BUFFER.
                   1090: 
                   1091:     20.  ARRAY --> TABLE
                   1092: 
                   1093:          The array must be two dimensional with a second dimension  of
                   1094:          2   or  an  error  occurs.   For  each  value  of  the  first
                   1095:          subscript, J , a table entry using the (J,1)  entry  as  name
                   1096:          and  the  (J,2)  entry  as value is created.  The table built
                   1097:          has a number of hash headers (see TABLE in Section  5)  equal
                   1098:          to the first dimension.
                   1099: 
                   1100:     21.  TABLE --> ARRAY
                   1101: 
                   1102:          The  table  must  have at least one element which is non-null
                   1103:          otherwise statement failure occurs.  The array  generated  is
                   1104:          two  dimensional with the first dimension equal to the number
                   1105:          of non-null entries in the table and the second dimension  is
                   1106:          two.   For  each entry, the (J,1) element in the array is the
                   1107:          the name and the (J,2) element is the value.
                   1108: 
                   1109:     22.  NAME --> STRING
                   1110: 
                   1111:          A NAME can be converted to a STRING only if it  is  the  name
                   1112:          of   a   natural  variable.   The  resulting  string  is  the
                   1113:          character name of the variable.
                   1114: 
                   1115:     23.  NAME --> INTEGER, REAL, PATTERN, EXPRESSION, CODE, BUFFER
                   1116: 
                   1117:          The NAME is first converted to a  STRING  (if  possible)  and
                   1118:          then the conversion proceeds as described for STRING.
                   1119: 
                   1120: 
                   1121: 
                   1122: 
                   1123: 
                   1124: 
                   1125: 
                   1126: 
                   1127: 
                   1128: 
                   1129: 
                   1130: 
                   1131: 
                   1132: 
                   1133: 
                   1134: 
                   1135: 
                   1136: 
                   1137: 
                   1138:          MACRO SPITBOL V3.5
                   1139:                                                    PAGE 16 - [4]
                   1140:          Operators
                   1141: 
                   1142: 
                   1143: 
                   1144:                             *----------------*
                   1145:                               [4]  Operators
                   1146:                             | [4]  Operators |
                   1147:                             *----------------*
                   1148: 
                   1149:     SPITBOL  operators  are  listed  without any detailed descriptions
                   1150:     since  they  correspond,  with  a  few  exceptions  noted  in  the
                   1151:     description of differences, to those of SNOBOL4.
                   1152: 
                   1153: 
                   1154:  4.1  Unary Operators
                   1155:  4.1  Unary Operators
                   1156:  __________ _________
                   1157: 
                   1158:     Unary  operators  all  have  equal  priority which is greater than
                   1159:     that of any binary operator.
                   1160: 
                   1161:     OPERATOR                DESCRIPTION
                   1162: 
                   1163:     ?                Interrogation - null if operand succeeds
                   1164:     &                Keyword
                   1165:     +                Indicates postive numeric operand
                   1166:     -                Negates numeric operand
                   1167:     *                Defers evaluation of expression
                   1168:     $                Indirection
                   1169:     .                Returns a name
                   1170:     ~                Negates failure or success of its operand
                   1171:     @                Assigns cursor position to its operand
                   1172: 
                   1173:          Unused unary operator symbols are   ! % / # =
                   1174: 
                   1175: 
                   1176: 
                   1177: 
                   1178: 
                   1179: 
                   1180: 
                   1181: 
                   1182: 
                   1183: 
                   1184: 
                   1185: 
                   1186: 
                   1187: 
                   1188: 
                   1189: 
                   1190: 
                   1191: 
                   1192: 
                   1193: 
                   1194: 
                   1195: 
                   1196: 
                   1197: 
                   1198: 
                   1199: 
                   1200: 
                   1201: 
                   1202: 
                   1203:          MACRO SPITBOL V3.5
                   1204:                                                    PAGE 17 - [4.2]
                   1205:          Operators
                   1206: 
                   1207: 
                   1208: 
                   1209:  4.2  Binary Operators
                   1210:  4.2  Binary Operators
                   1211:  ___________ _________
                   1212: 
                   1213:     Several of the associativites and priorities differ from those  of
                   1214:     SNOBOL4.
                   1215: 
                   1216:     OP.     ASSOCY. PRIO.           DEFINITION
                   1217: 
                   1218:     =       right   0       Assignment
                   1219:     ?       left    1       Pattern match
                   1220:     |       right   3       Pattern alternation
                   1221:     blank   right   4       Concatenation or pattern match
                   1222:     +       left    6       Arithmetic addition
                   1223:     -       left    6       Arithmetic subtraction
                   1224:     /       left    8       Arithmetic division
                   1225:     *       left    9       Arithmetic multiplication
                   1226:     $       left    12      Immediate pattern assignment
                   1227:     .       left    12      Conditional pattern assignment
                   1228: 
                   1229:     &       left    2       Undefined
                   1230:     @       right   5       Undefined
                   1231:     ~       left    7       Undefined
                   1232:     %       left    10      Undefined
                   1233:     _       right   13      Undefined
                   1234: 
                   1235: 
                   1236: 
                   1237: 
                   1238: 
                   1239: 
                   1240: 
                   1241: 
                   1242: 
                   1243: 
                   1244: 
                   1245: 
                   1246: 
                   1247: 
                   1248: 
                   1249: 
                   1250: 
                   1251: 
                   1252: 
                   1253: 
                   1254: 
                   1255: 
                   1256: 
                   1257: 
                   1258: 
                   1259: 
                   1260: 
                   1261: 
                   1262: 
                   1263: 
                   1264: 
                   1265: 
                   1266: 
                   1267:          MACRO SPITBOL V3.5
                   1268:                                                    PAGE 18 - [5]
                   1269:          Functions
                   1270: 
                   1271: 
                   1272: 
                   1273:                             *----------------*
                   1274:                               [5]  Functions
                   1275:                             | [5]  Functions |
                   1276:                             *----------------*
                   1277: 
                   1278:     This  section  defines  the  built-in  functions  of  SPITBOL, the
                   1279:     descriptions being given in alphabetical order.   In  most  cases,
                   1280:     the  arguments  are  pre-converted  to  some  particular datatype.
                   1281:     This is indicated in the function header by the notation:
                   1282:       FUNCTION(STRING,INTEGER,....)
                   1283:     If  the  corresponding  argument  cannot  be  converted   to   the
                   1284:     indicated  datatype,  an  error  occurs.   Sometimes  the range of
                   1285:     arguments  permitted  is  restricted,  in  which  case   arguments
                   1286:     outside  the  range  cause an error.  The usage "ARGUMENT" implies
                   1287:     that the argument can be of any datatype. "NUMERIC"  implies  that
                   1288:     either REAL or INTEGER arguments are acceptable.
                   1289: 
                   1290:     In  functions  such as ARRAY, DATA, DEFINE with a string prototype
                   1291:     argument, the string should not contain non-significant blanks.
                   1292: 
                   1293: 
                   1294:  5.1  ANY -- Pattern to Match Selected Character
                   1295:  5.1  ANY -- Pattern to Match Selected Character
                   1296:  ________ __ _______ __ _____ ________ _________
                   1297: 
                   1298:     ANY(STRING) or ANY(EXPRESSION)
                   1299: 
                   1300:     This function  returns   a  pattern  which  will  match  a  single
                   1301:     character  selected from the characters in the argument string.  A
                   1302:     null argument is not permitted.   If  an  expression  argument  is
                   1303:     used,  then  the  expression  is evaluated during pattern matching
                   1304:     and must yield a non-null string result.
                   1305: 
                   1306: 
                   1307:  5.2  APPEND * -- Append string to buffer
                   1308:  5.2  APPEND * -- Append string to buffer
                   1309:  ___________ _ __ ______ ______ __ ______
                   1310: 
                   1311:     APPEND(BUFFER,STRING)
                   1312: 
                   1313:     APPEND is used to append a string to the contents of  an  existing
                   1314:     buffer.     APPEND    is    defined    to    be    identical    to
                   1315:     INSERT(BUFFER,SIZE(BUFFER)+1,0,STRING).  The first  argument  must
                   1316:     be a buffer type or an error occurs.
                   1317: 
                   1318: 
                   1319:  5.3  APPLY * -- Apply function
                   1320:  5.3  APPLY * -- Apply function
                   1321:  __________ _ __ _____ ________
                   1322: 
                   1323:     APPLY(NAME,ARG,ARG,...)
                   1324: 
                   1325:     The  first argument is the name of a function to be applied to the
                   1326:     (possibly null) list  of  arguments  following.   Unlike  SNOBOL4,
                   1327:     SPITBOL  does  not  require  the  number of arguments to match the
                   1328:     function definition, extra arguments  being  ignored  and  missing
                   1329:     arguments being supplied as null strings.
                   1330: 
                   1331: 
                   1332: 
                   1333: 
                   1334: 
                   1335: 
                   1336:          MACRO SPITBOL V3.5
                   1337:                                                    PAGE 19 - [5.4]
                   1338:          Functions
                   1339: 
                   1340: 
                   1341: 
                   1342:  5.4  ARBNO -- Pattern for Iterated Match
                   1343:  5.4  ARBNO -- Pattern for Iterated Match
                   1344:  __________ __ _______ ___ ________ _____
                   1345: 
                   1346:     ARBNO(PATTERN)
                   1347: 
                   1348:     This  function  returns  a  pattern  which will match an arbitrary
                   1349:     number of occurrences of  the  pattern  argument,  including  zero
                   1350:     occurrences (this resulting in matching of the null string).
                   1351: 
                   1352: 
                   1353:  5.5  ARG * -- Obtain Argument Name
                   1354:  5.5  ARG * -- Obtain Argument Name
                   1355:  ________ _ __ ______ ________ ____
                   1356: 
                   1357:     ARG(NAME,INTEGER)
                   1358: 
                   1359:     The  first  argument  represents  the  name  of  a  function.  The
                   1360:     integer is the index of a formal argument to this  function.   The
                   1361:     NAME  of the selected argument is returned (this is converted to a
                   1362:     string on output).  ARG fails if the integer is out  of  range  of
                   1363:     the number of formal arguments.
                   1364: 
                   1365: 
                   1366:  5.6  ARRAY -- Generate Array Structure
                   1367:  5.6  ARRAY -- Generate Array Structure
                   1368:  __________ __ ________ _____ _________
                   1369: 
                   1370:     ARRAY(STRING,ARG) or ARRAY(INTEGER,ARG)
                   1371: 
                   1372:     The  string  represents  the protoype of an array to be allocated.
                   1373:     This is in the form
                   1374:        "LBD1:HBD1,LBD2:HBD2,...."
                   1375:     where  LBD1,HBD1  etc.   are  integers  specifying  low  and  high
                   1376:     bounds.   The  low  bound  (LBD) may be omitted for some or all of
                   1377:     the dimensions, in which case the colon may also be omitted and  a
                   1378:     low  bound of 1 is assumed.  The second argument (of any datatype)
                   1379:     is the initial value of all the elements in the array.  If  it  is
                   1380:     omitted,  the  initial  value of all the elements will be the null
                   1381:     string.  The second form of the call may be  used  to  create  one
                   1382:     dimensional  arrays  (vectors)  with  a  low  bound  of 1. SPITBOL
                   1383:     optimises accesses to elements of vectors.
                   1384: 
                   1385: 
                   1386:  5.7  BREAK -- Construct Scanning Pattern
                   1387:  5.7  BREAK -- Construct Scanning Pattern
                   1388:  __________ __ _________ ________ _______
                   1389: 
                   1390:     BREAK(STRING) or BREAK(EXPRESSION)
                   1391: 
                   1392:     This function returns a pattern which will match any string up  to
                   1393:     the  point  preceding  any  character which occurs in the argument
                   1394:     string.  A null argument  is  not  permitted.   If  an  expression
                   1395:     argument  is given, the resulting pattern causes the expression to
                   1396:     be  evaluated  during  pattern  matching.   In  this   case,   the
                   1397:     evaluated result must be a non-null string.
                   1398: 
                   1399: 
                   1400: 
                   1401: 
                   1402: 
                   1403: 
                   1404: 
                   1405: 
                   1406:          MACRO SPITBOL V3.5
                   1407:                                                    PAGE 20 - [5.8]
                   1408:          Functions
                   1409: 
                   1410: 
                   1411: 
                   1412:  5.8  BUFFER * -- Create buffer object
                   1413:  5.8  BUFFER * -- Create buffer object
                   1414:  ___________ _ __ ______ ______ ______
                   1415: 
                   1416:     BUFFER(INTEGER,STRING)
                   1417: 
                   1418:     This  function  creates  a buffer-type object (see the description
                   1419:     in the datatype section).   The  first  argument  is  the  integer
                   1420:     allocation  for  the  buffer  and  the second argument defines the
                   1421:     initial contents of the buffer.  The defined size  of  the  buffer
                   1422:     is  initialized  to  SIZE(STRING).  The allocation must be between
                   1423:     between 1 and &MAXLNGTH, and the size of the string must  be  less
                   1424:     than or equal to the allocated size, or an error will occur.
                   1425: 
                   1426: 
                   1427:  5.9  BREAKX * -- Construct Scanning Pattern
                   1428:  5.9  BREAKX * -- Construct Scanning Pattern
                   1429:  ___________ _ __ _________ ________ _______
                   1430: 
                   1431:     BREAKX(STRING) or BREAKX(EXPRESSION)
                   1432: 
                   1433:     BREAKX  returns  a  pattern  whose  initial match is the same as a
                   1434:     corresponding  BREAK  pattern.   However,  BREAKX   has   implicit
                   1435:     alternatives  which  on  subsequent  match failure permit scanning
                   1436:     past the first break character found and  up  to  the  next  break
                   1437:     character.   Note  that BREAKX may be used to  replace ARB in many
                   1438:     situations where BREAK cannot be used  easily.   For  example  the
                   1439:     following replacement can be made -
                   1440:        ARB ('CAT' ! 'DOG')  -->  BREAKX('CD') ('CAT' ! 'DOG')
                   1441:     In   the  case  of  an  expression  argument,  the  expression  is
                   1442:     evaluated during  pattern  matching  and  must  yield  a  non-null
                   1443:     string.   Note  that  evaluation of the expression is not repeated
                   1444:     on rematch attempts by extension.
                   1445: 
                   1446: 
                   1447: 
                   1448: 
                   1449: 
                   1450: 
                   1451: 
                   1452: 
                   1453: 
                   1454: 
                   1455: 
                   1456: 
                   1457: 
                   1458: 
                   1459: 
                   1460: 
                   1461: 
                   1462: 
                   1463: 
                   1464: 
                   1465: 
                   1466: 
                   1467: 
                   1468: 
                   1469: 
                   1470: 
                   1471: 
                   1472:          MACRO SPITBOL V3.5
                   1473:                                                    PAGE 21 - [5.10]
                   1474:          Functions
                   1475: 
                   1476: 
                   1477: 
                   1478:  5.10  CHAR * -- Convert Character Code to String
                   1479:  5.10  CHAR * -- Convert Character Code to String
                   1480:  __________ _ __ _______ _________ ____ __ ______
                   1481: 
                   1482:     CHAR(INTEGER)
                   1483: 
                   1484:     The CHAR function returns a one-character  string  containing  the
                   1485:     character  with  the  internal character code corresponding to the
                   1486:     given   argument.    The   string    returned    is    necessarily
                   1487:     machine-dependent.  In  general however, A = CHAR(N) is equivalent
                   1488:     to:
                   1489:        &ALPHABET (LEN(N) LEN(1) . A)
                   1490: 
                   1491:     If the given argument is not a non-negative integer in  the  range
                   1492:     of the host machine character set, an error is issued.
                   1493: 
                   1494: 
                   1495:  5.11  CLEAR * -- Clear Variable Storage
                   1496:  5.11  CLEAR * -- Clear Variable Storage
                   1497:  ___________ _ __ _____ ________ _______
                   1498: 
                   1499:     CLEAR(STRING)
                   1500: 
                   1501:     This  function  causes  the values of variables to be set to null.
                   1502:     In the simple case, where the argument is  omitted  or  null,  the
                   1503:     action  is  the  same as in SNOBOL4 (i.e. all variables cleared to
                   1504:     null).  An extension is available in SPITBOL.  The first  argument
                   1505:     may  be  a  string  which is a list of variable names separated by
                   1506:     commas.  These represent the names of variables whose  values  are
                   1507:     to be left unchanged.  For example -
                   1508:        CLEAR('ABC,CDE,EFG')
                   1509:     would  cause the value of all variables except ABC, CDE, EFG to be
                   1510:     set to the null string.
                   1511: 
                   1512: 
                   1513:  5.12  CODE * -- Compile Code
                   1514:  5.12  CODE * -- Compile Code
                   1515:  __________ _ __ _______ ____
                   1516: 
                   1517:     CODE(STRING)
                   1518: 
                   1519:     The effect of this function is to convert  the  argument  to  type
                   1520:     CODE  as  described in the section on type conversion.  The STRING
                   1521:     must represent a valid SPITBOL program complete  with  labels  and
                   1522:     using  semicolons  (;)  to  separate statements.  The call to CODE
                   1523:     fails if syntactic errors are found.  In this case it is  possible
                   1524:     to inspect &ERRTEXT to find the error message.  e.g.
                   1525:            C = CODE(CD)     :F<CODE(' OUTPUT = &ERRTEXT')>
                   1526:     SETEXIT  may  also  be  used  to  intercept these errors.  Another
                   1527:     extension over  SNOBOL4  is  that  the  code  string  may  contain
                   1528:     embedded  control  cards  (notably  -LIST  to cause listing of the
                   1529:     code) and comments delimited by semicolons.
                   1530: 
                   1531: 
                   1532: 
                   1533: 
                   1534: 
                   1535: 
                   1536: 
                   1537: 
                   1538: 
                   1539: 
                   1540:          MACRO SPITBOL V3.5
                   1541:                                                    PAGE 22 - [5.13]
                   1542:          Functions
                   1543: 
                   1544: 
                   1545: 
                   1546:  5.13  COLLECT -- Initiate Storage Regeneration
                   1547:  5.13  COLLECT -- Initiate Storage Regeneration
                   1548:  _____________ __ ________ _______ ____________
                   1549: 
                   1550:     COLLECT(INTEGER)
                   1551: 
                   1552:     The COLLECT function forces a garbage collection  which  retrieves
                   1553:     unused  storage  and returns it to the block of available storage.
                   1554:     The integer argument represents a minimum number of  words  to  be
                   1555:     made  available.   If  this  amount of storage cannot be obtained,
                   1556:     the COLLECT function fails.  On successful return, the  result  is
                   1557:     the   number   of   words   actually   obtained.    Although   the
                   1558:     implementation of COLLECT is the same as in  SNOBOL4,  the  values
                   1559:     obtained  will  be  quite different due to different internal data
                   1560:     representations.  Furthermore,  the  organization  of  SPITBOL  is
                   1561:     such  that  forcing  garbage  collections to occur before they are
                   1562:     required increases execution time.
                   1563: 
                   1564: 
                   1565:  5.14  CONVERT * -- Convert Datatypes
                   1566:  5.14  CONVERT * -- Convert Datatypes
                   1567:  _____________ _ __ _______ _________
                   1568: 
                   1569:     CONVERT(ARGUMENT,STRING)
                   1570: 
                   1571:     The returned result is obtained by converting the  first  argument
                   1572:     to  the type indicated by the string name of the datatype given as
                   1573:     the second argument.  The permitted conversions are  described  in
                   1574:     the  section  on  type  conversion.  Any conversions which are not
                   1575:     permitted cause failure of the CONVERT call.  The second  argument
                   1576:     may  be  'NUMERIC'  ,  in  which case the argument is converted to
                   1577:     INTEGER or REAL according to its form.
                   1578: 
                   1579: 
                   1580:  5.15  COPY * -- Copy Structure
                   1581:  5.15  COPY * -- Copy Structure
                   1582:  __________ _ __ ____ _________
                   1583: 
                   1584:     COPY(ARGUMENT)
                   1585: 
                   1586:     The COPY function returns a distinct copy of the object  presented
                   1587:     as  its argument.  This is only useful for arrays, tables, buffers
                   1588:     and program defined datatypes.  Note that SPITBOL permits  copying
                   1589:     of TABLES unlike SNOBOL4.
                   1590: 
                   1591: 
                   1592: 
                   1593: 
                   1594: 
                   1595: 
                   1596: 
                   1597: 
                   1598: 
                   1599: 
                   1600: 
                   1601: 
                   1602: 
                   1603: 
                   1604: 
                   1605: 
                   1606: 
                   1607: 
                   1608:          MACRO SPITBOL V3.5
                   1609:                                                    PAGE 23 - [5.16]
                   1610:          Functions
                   1611: 
                   1612: 
                   1613: 
                   1614:  5.16  DATA -- Create Datatype
                   1615:  5.16  DATA -- Create Datatype
                   1616:  __________ __ ______ ________
                   1617: 
                   1618:     DATA(STRING)
                   1619: 
                   1620:     The  argument  to  DATA  is  a  prototype  for  a  program defined
                   1621:     datatype in the form  of  a  function  call  with  arguments  e.g.
                   1622:     DATA('CMPLX(RE,IM)').   The  function  name  in  the string is the
                   1623:     name of the new datatype.  The argument names in  the  string  are
                   1624:     the  names  of  field selector functions used to access the fields
                   1625:     of  the  new  datatype.   Increased  efficiency  is  obtained   by
                   1626:     avoiding   the   use   of  duplicate  field  names  for  different
                   1627:     datatypes, although such multiple use is not forbidden.
                   1628: 
                   1629: 
                   1630:  5.17  DATATYPE * -- Obtain Datatype
                   1631:  5.17  DATATYPE * -- Obtain Datatype
                   1632:  ______________ _ __ ______ ________
                   1633: 
                   1634:     DATATYPE(ARGUMENT)
                   1635: 
                   1636:     DATATYPE returns the formal identification of the datatype of  its
                   1637:     argument.
                   1638: 
                   1639: 
                   1640:  5.18  DATE * -- Obtain Date
                   1641:  5.18  DATE * -- Obtain Date
                   1642:  __________ _ __ ______ ____
                   1643: 
                   1644:     DATE()
                   1645: 
                   1646:     DATE  returns  a  string giving the current date and possibly also
                   1647:     clock-on-the-wall-time (see Section 12.)
                   1648: 
                   1649: 
                   1650:  5.19  DEFINE -- Define a Function
                   1651:  5.19  DEFINE -- Define a Function
                   1652:  ____________ __ ______ _ ________
                   1653: 
                   1654:     DEFINE(STRING) or DEFINE(STRING,NAME)
                   1655: 
                   1656:     The DEFINE function is used to create  program  defined  functions
                   1657:     according  to  the prototype supplied as the argument.  The second
                   1658:     argument if  supplied,  names  the  label  at  the  entry  to  the
                   1659:     function.
                   1660: 
                   1661: 
                   1662:  5.20  DETACH -- Detach I/O Association
                   1663:  5.20  DETACH -- Detach I/O Association
                   1664:  ____________ __ ______ ___ ___________
                   1665: 
                   1666:     DETACH(NAME)
                   1667: 
                   1668:     NAME  is the name of a variable which has previously been input or
                   1669:     output associated   by appearing as the first  argument  of  INPUT
                   1670:     or  OUTPUT.   DETACH  cancels  the association of the variable but
                   1671:     does not affect the file to which it was associated.
                   1672: 
                   1673: 
                   1674: 
                   1675: 
                   1676: 
                   1677: 
                   1678: 
                   1679: 
                   1680:          MACRO SPITBOL V3.5
                   1681:                                                    PAGE 24 - [5.21]
                   1682:          Functions
                   1683: 
                   1684: 
                   1685: 
                   1686:  5.21  DIFFER * -- Test for Arguments Differing
                   1687:  5.21  DIFFER * -- Test for Arguments Differing
                   1688:  ____________ _ __ ____ ___ _________ _________
                   1689: 
                   1690:     DIFFER(ARGUMENT,ARGUMENT)
                   1691: 
                   1692:     DIFFER is a predicate function which fails if  its  two  arguments
                   1693:     are identical objects.  In SPITBOL
                   1694:        DIFFER(.ABC,'ABC')
                   1695:     succeeds  since  .ABC  is  a  NAME.  DIFFER and IDENT are the only
                   1696:     functions in  which  the  different  implementation  of  the  name
                   1697:     operator (unary dot) may give rise to problems.
                   1698: 
                   1699:     DIFFER also works on object of type BUFFER (see IDENT).
                   1700: 
                   1701: 
                   1702:  5.22  DUMP * -- Dump Storage
                   1703:  5.22  DUMP * -- Dump Storage
                   1704:  __________ _ __ ____ _______
                   1705: 
                   1706:     DUMP(INTEGER)
                   1707: 
                   1708:     The  DUMP  function  causes  a  dump  of  current values to occur.
                   1709:     After the dump is complete, execution  continues  unaffected  (the
                   1710:     DUMP  function  returns  the  null  string). If the argument is 1,
                   1711:     then the dump includes values of  all  non-constant  keywords  and
                   1712:     all  non-null  natural  variables.  If the argument is 2, then the
                   1713:     dump also  includes  values  of  all   non-null  array  and  table
                   1714:     elements  and  non-null field values of program defined datatypes.
                   1715:     The format of the latter  dump  is  self  explanatory  and  avoids
                   1716:     printing  any  structure  more  than  once.  A call to DUMP with a
                   1717:     zero argument is ignored.  This  allows  use  of  a  switch  value
                   1718:     which  can  be turned on and off globally.  A call to DUMP with an
                   1719:     argument greater than 2 produces a core dump in  the  same  format
                   1720:     as  that produced by a system abnormal end and should therefore be
                   1721:     used with discretion.
                   1722: 
                   1723: 
                   1724:  5.23  DUPL * -- Duplicate String or Pattern
                   1725:  5.23  DUPL * -- Duplicate String or Pattern
                   1726:  __________ _ __ _________ ______ __ _______
                   1727: 
                   1728:     DUPL(STRING,INTEGER) or DUPL(PATTERN,INTEGER)
                   1729: 
                   1730:     DUPL returns a result obtained by duplicating the  first  argument
                   1731:     the  number  of  times  indicated by the second.  A null string is
                   1732:     returned if INTEGER is zero and statement failure occurs if it  is
                   1733:     negative.
                   1734: 
                   1735: 
                   1736:  5.24  EJECT * -- Eject to new page
                   1737:  5.24  EJECT * -- Eject to new page
                   1738:  ___________ _ __ _____ __ ___ ____
                   1739: 
                   1740:     EJECT(INTEGER) or EJECT(STRING)
                   1741: 
                   1742:     The  argument must have previously appeared as the second argument
                   1743:     of a call of  OUTPUT to identify an output channel.  An  eject  to
                   1744:     the  top  of  the  next page of the output file occurs.  A null or
                   1745:     absent argument causes an eject on the standard output file.
                   1746: 
                   1747: 
                   1748: 
                   1749: 
                   1750:          MACRO SPITBOL V3.5
                   1751:                                                    PAGE 25 - [5.25]
                   1752:          Functions
                   1753: 
                   1754: 
                   1755: 
                   1756:  5.25  ENDFILE * -- Close a File
                   1757:  5.25  ENDFILE * -- Close a File
                   1758:  _____________ _ __ _____ _ ____
                   1759: 
                   1760:     ENDFILE(INTEGER) or ENDFILE(STRING)
                   1761: 
                   1762:     The argument must have previously appeared as the second  argument
                   1763:     of  a  call  of    INPUT  or  OUTPUT  to  identify an input/output
                   1764:     channel.  The file attached to the channel is  closed,  associated
                   1765:     storage  is  released  and  all variables associated with the file
                   1766:     are detached.  Thus ENDFILE should be used only  when  no  further
                   1767:     use  is  to  be  made of the file.  If the file is to be reread or
                   1768:     rewritten,  use  REWIND  (if  the  implementation  supports   this
                   1769:     function - see Section 12).
                   1770: 
                   1771: 
                   1772:  5.26  EQ -- Test for Equal
                   1773:  5.26  EQ -- Test for Equal
                   1774:  ________ __ ____ ___ _____
                   1775: 
                   1776:     EQ(NUMERIC,NUMERIC)
                   1777: 
                   1778:     EQ  is  a  predicate  function which succeeds if its two arguments
                   1779:     are equal.
                   1780: 
                   1781: 
                   1782:  5.27  EVAL * -- Evaluate Expression
                   1783:  5.27  EVAL * -- Evaluate Expression
                   1784:  __________ _ __ ________ __________
                   1785: 
                   1786:     EVAL(EXPRESSION)
                   1787: 
                   1788:     EVAL returns the result of  evaluating  its  expression  argument.
                   1789:     Note  that  a  string  can  be  converted  into  an  expression by
                   1790:     compiling it into CODE.  Thus EVAL in SPITBOL is  compatible  with
                   1791:     SNOBOL4  and  handles strings in the same way.  If an error occurs
                   1792:     in evaluating the argument,  &ERRTEXT is set and EVAL  fails.   To
                   1793:     avoid  such  errors  passing   unnoticed,  it  may  be well to use
                   1794:     SETEXIT to intercept them,  or use a FAIL  goto,  or  evaluate  in
                   1795:     -NOFAIL  mode.
                   1796: 
                   1797: 
                   1798:  5.28  EXIT * -- Exit to Save Load Module or to JCL
                   1799:  5.28  EXIT * -- Exit to Save Load Module or to JCL
                   1800:  __________ _ __ ____ __ ____ ____ ______ __ __ ___
                   1801: 
                   1802:     EXIT(INTEGER) or EXIT(STRING)
                   1803: 
                   1804:     This  function  resembles that introduced by Gimpel in SITBOL.  It
                   1805:     permits the saving of a core image at any point in  the  execution
                   1806:     of  a  SPITBOL  program  to  produce  a   load module  and in some
                   1807:     implementations it may be permissible to exit  from  SPITBOL  into
                   1808:     another  program.   For  an  often  executed program use of a load
                   1809:     module saves translation  and  initialisation  time.    A  garbage
                   1810:     collection  is  performed  in  order to compact store before it is
                   1811:     saved.  If initialising code is  label  free,  it  is  collectable
                   1812:     after  it  has  been  executed,  giving  a further opportunity for
                   1813:     economy.  The argument, N, may have the following values -
                   1814: 
                   1815: 
                   1816: 
                   1817: 
                   1818: 
                   1819: 
                   1820:          MACRO SPITBOL V3.5
                   1821:                                                    PAGE 26 - [5.28]
                   1822:          Functions
                   1823: 
                   1824: 
                   1825: 
                   1826:      1.  N > 0   Save the whole core  image  (includes  all  the  pure
                   1827:          SPITBOL  code  and  unused  stack space, so is wasteful). The
                   1828:          resulting load  module  is  free-standing  and  is  not  made
                   1829:          obsolete by changes to SPITBOL.
                   1830: 
                   1831:      2.  N  =  0   Interrupt program execution and return to JCL level
                   1832:          so  that  user  can  issue  JCL  commands  and  then   resume
                   1833:          execution if wished.  Does not save a core image.
                   1834: 
                   1835:      3.  N  <  0  Save the impure areas of memory only so that program
                   1836:          can be restarted by loading pure SPITBOL  code  +  the  saved
                   1837:          areas.   The  resulting load modules are considerably smaller
                   1838:          than for the case N = 1, but are made obsolete  and  must  be
                   1839:          regenerated as new versions of SPITBOL are released.
                   1840: 
                   1841:      4.  N  =  "string".   If  this feature is available, (see Section
                   1842:          12), then SPITBOL execution is  terminated  and  the  program
                   1843:          named by "string" is entered.
                   1844: 
                   1845: 
                   1846:     EXIT  returns  the null string and may occur in the program at any
                   1847:     position syntactically valid for a function  call.   No  mechanism
                   1848:     is  provided  for automatic re-attaching of files which are in use
                   1849:     at the time an EXIT call terminates a run.  Hence EXIT  calls  are
                   1850:     most  commonly  placed  after  initialising  code  and  before the
                   1851:     opening of input/output files for the program proper.  In  general
                   1852:     no  standard input file is available when a load module is run, so
                   1853:     references  to  variable  INPUT  will  fail  unless  it  has  been
                   1854:     detached  or  a  file is explicitly associated to it.  The absence
                   1855:     of a standard output file may create problems  (in  reporting  run
                   1856:     time  errors  in  particular).  SPITBOL  implementors will usually
                   1857:     provide  a  means  of  attaching  such  a  file  at   load   time.
                   1858:     Alternatively a user may prefer to include a statement
                   1859: 
                   1860:          OUTPUT(.OUTPUT,,'FILENAME')
                   1861: 
                   1862:     Failing  these  possibilities,  either  a default output file name
                   1863:     should be allocated or execution should end with a  special  error
                   1864:     code  if  printing  to  a non-existent standard file is attempted.
                   1865:     Section  12  gives  details  for  this  implementation.    Certain
                   1866:     listing options may be selected by choice of the argument value.
                   1867:       N  =  +1  or  -1. The output file will be given a heading and in
                   1868:     some implementations it  may  be  possible  to  re-specify  record
                   1869:     length  (only  to  a  smaller  value  than during compilation) and
                   1870:     other options.
                   1871:       N = +2 or -2. Heading omitted but  re-specification  of  options
                   1872:     may be possible.
                   1873:       N = +3 or -3. Heading omitted and no option re-specification.
                   1874: 
                   1875: 
                   1876: 
                   1877: 
                   1878: 
                   1879: 
                   1880: 
                   1881: 
                   1882:          MACRO SPITBOL V3.5
                   1883:                                                    PAGE 27 - [5.29]
                   1884:          Functions
                   1885: 
                   1886: 
                   1887: 
                   1888:  5.29  FENCE * -- Generate Fenced Pattern
                   1889:  5.29  FENCE * -- Generate Fenced Pattern
                   1890:  ___________ _ __ ________ ______ _______
                   1891: 
                   1892:     FENCE(PATTERN)
                   1893: 
                   1894:     FENCE(pattern)  returns  a  pattern value which is the same as the
                   1895:     given pattern, except that alternatives  within  the  pattern  are
                   1896:     only  seen  by  the  scanner  when  it  is  moving  in the forward
                   1897:     direction.    Pattern   backup   will    always    pass    through
                   1898:                                                                    not
                   1899:     FENCE(pattern).  Note that backup through FENCE(pattern) does  ___
                   1900:     cause  the  match to abort, as does the &FENCE pattern, it is that
                   1901:     alternatives within the Fenced pattern are not examined  when  the
                   1902:     scanner  is  backing  up.  For  example, this pattern will match a
                   1903:     string of text up to the next comma, or if there is no  comma,  to
                   1904:     the  end  of  the  string.   The text is put in STR, and the match
                   1905:     will only succeed if STR is non-null.
                   1906:             P = FENCE( BREAK(',') | REM ) $ STR  *DIFFER(STR)
                   1907:     Without the FENCE, failure of  the  DIFFER(STR)  would  cause  the
                   1908:     scanner  to try the REM alternative regardless of whether or not a
                   1909:     comma is found.
                   1910: 
                   1911:     FENCE is not available in all implementations.  See Section 12.
                   1912: 
                   1913: 
                   1914:  5.30  FIELD * -- Get Field Name
                   1915:  5.30  FIELD * -- Get Field Name
                   1916:  ___________ _ __ ___ _____ ____
                   1917: 
                   1918:     FIELD(NAME,INTEGER)
                   1919: 
                   1920:     FIELD returns the NAME  of  the  selected  field  of  the  program
                   1921:     defined  datatype whose name is the first argument.  If the second
                   1922:     argument is out of range (less than 1, or greater than the  number
                   1923:     of fields), the FIELD function fails.
                   1924: 
                   1925: 
                   1926:  5.31  GE -- Test for Greater or Equal
                   1927:  5.31  GE -- Test for Greater or Equal
                   1928:  ________ __ ____ ___ _______ __ _____
                   1929: 
                   1930:     GE(NUMERIC,NUMERIC)
                   1931: 
                   1932:     GE  is  a  predicate function which succeeds if the first argument
                   1933:     is greater than or equal to the second.
                   1934: 
                   1935: 
                   1936:  5.32  GT -- Test for Greater
                   1937:  5.32  GT -- Test for Greater
                   1938:  ________ __ ____ ___ _______
                   1939: 
                   1940:     GT(NUMERIC,NUMERIC)
                   1941: 
                   1942:     GT is a predicate function which succeeds if  the  first  argument
                   1943:     is greater than the second.
                   1944: 
                   1945: 
                   1946: 
                   1947: 
                   1948: 
                   1949: 
                   1950: 
                   1951: 
                   1952: 
                   1953:          MACRO SPITBOL V3.5
                   1954:                                                    PAGE 28 - [5.33]
                   1955:          Functions
                   1956: 
                   1957:  5.33  HOST * -- Obtain Information about Host Computer
                   1958:  5.33  HOST * -- Obtain Information about Host Computer
                   1959:  __________ _ __ ______ ___________ _____ ____ ________
                   1960: 
                   1961:     HOST(ARGUMENT,ARGUMENT,ARGUMENT)
                   1962: 
                   1963:     SPITBOL  runs on different mainframes with differing file formats,
                   1964:     file naming conventions etc.  which makes  it  desirable  in  some
                   1965:     programs  to  know  on  what machine the program is running.  HOST
                   1966:     called with null arguments returns a string of the form
                   1967:        "<COMPUTER NAME>:<OPERATING SYSTEM NAME>:<SITE NAME>"
                   1968:     which  satisfies  most  requirements  of  this   kind.    At   the
                   1969:     discretion  of  the SPITBOL implementor, non-null arguments may be
                   1970:     used to specify other features specific to the host.  See  Section
                   1971:     12 for details.
                   1972: 
                   1973: 
                   1974:  5.34  IDENT * -- Test for Identical
                   1975:  5.34  IDENT * -- Test for Identical
                   1976:  ___________ _ __ ____ ___ _________
                   1977: 
                   1978:     IDENT(ARGUMENT,ARGUMENT)
                   1979: 
                   1980:     IDENT  is a predicate function which succeeds if its two arguments
                   1981:     are identical.  In SPITBOL,
                   1982:        IDENT(.ABC,'ABC')
                   1983:     fails since .ABC is a NAME in SPITBOL.  Also, two values  of  type
                   1984:     BUFFER  will  be IDENTical if and only if they are the same buffer
                   1985:     object.  Apart from this, IDENT is compatible with SNOBOL4.
                   1986: 
                   1987: 
                   1988: 
                   1989: 
                   1990: 
                   1991: 
                   1992: 
                   1993: 
                   1994: 
                   1995: 
                   1996: 
                   1997: 
                   1998: 
                   1999: 
                   2000: 
                   2001: 
                   2002: 
                   2003: 
                   2004: 
                   2005: 
                   2006: 
                   2007: 
                   2008: 
                   2009: 
                   2010: 
                   2011: 
                   2012: 
                   2013: 
                   2014: 
                   2015: 
                   2016: 
                   2017: 
                   2018: 
                   2019:          MACRO SPITBOL V3.5
                   2020:                                                    PAGE 29 - [5.35]
                   2021:          Functions
                   2022: 
                   2023: 
                   2024: 
                   2025:  5.35  INPUT * -- Set Input Association
                   2026:  5.35  INPUT * -- Set Input Association
                   2027:  ___________ _ __ ___ _____ ___________
                   2028: 
                   2029:     INPUT(NAME,INTEGER,STRING) or INPUT(NAME,STRING,STRING)
                   2030: 
                   2031:     Rather than give a separate description of OUTPUT which  would  be
                   2032:     almost  exactly  parallel with that for INPUT, a joint description
                   2033:     is given  here.   Some  machine  dependency  is  likely  in  these
                   2034:     functions   -   see  Section  12  for  details  relating  to  this
                   2035:     implementation.
                   2036: 
                   2037:     The first argument is the name  of  a  variable  which  is  to  be
                   2038:     input/output  associated  and  is required, whereas the others are
                   2039:     optional.  The second argument  identifies  a  channel  which  may
                   2040:     subsequently   be  used  to  refer  to  the  association.   It  is
                   2041:     recommended that,  as  in  SNOBOL4,  the  second  argument  be  an
                   2042:     integer  but  the  use  of  a more general string is not excluded.
                   2043:     Different  channel  identifiers   are   required   for   accessing
                   2044:     different  files.   The  second  argument  may be omitted in which
                   2045:     case association is to the standard input  or  output  file.   The
                   2046:     chief  divergence between SNOBOL4 and SPITBOL is in the use of the
                   2047:     third argument, where SPITBOL permits the very useful  feature  of
                   2048:     dynamic  file  assignment.  The general form of the third argument
                   2049:     is a string
                   2050: 
                   2051:         <f>,R<r>,C<c>,I<i>,X<x>...      where
                   2052: 
                   2053:     <f> is an optional file name which is placed first;
                   2054: 
                   2055:     ,   is a delimiter used to mark  off  remaining  items  which  are
                   2056:         optional and may occur in any order;
                   2057: 
                   2058:     <r> is  the  maximum  record  length  in  characters  for the file
                   2059:         (default values are documented in Section 12);
                   2060: 
                   2061:     <c> is a carriage control  character  or  string  needed  in  some
                   2062:         implementations;
                   2063: 
                   2064:     <i> is   additional   channel   identification   needed   in  some
                   2065:         implementations  in  the  absence  of  <f>  to  associate  the
                   2066:         variable  with  a file attached by job control commands at the
                   2067:         start of a SPITBOL run;
                   2068: 
                   2069:     <x> symbolises   additional   fields    needed    in    particular
                   2070:         implementations.
                   2071: 
                   2072:     If  <f>  is  non-null,  when  the  statement is obeyed file <f> is
                   2073:     opened and assigned to the channel  corresponding  to  the  second
                   2074:     argument  and  normally  this  assignment should be performed once
                   2075:     only.  If several variables are  to  be  associated  to  the  same
                   2076:     channel,  <f>  should  be  omitted  from  all but the first of the
                   2077:     INPUT/OUTPUT calls.
                   2078: 
                   2079: 
                   2080: 
                   2081: 
                   2082: 
                   2083:          MACRO SPITBOL V3.5
                   2084:                                                    PAGE 30 - [5.35]
                   2085:          Functions
                   2086: 
                   2087:     Alternatively <f> can be omitted from all INPUT/OUTPUT  statements
                   2088:     relating  to  a  channel  provided  the  necessary assignments are
                   2089:     performed  by  suitable  job  control  commands  before  execution
                   2090:     starts.  Thus -
                   2091:        INPUT(.IN,2,'INFILE');    OUTPUT(.OU,7,'OUF')
                   2092:        INPUT(.IN,2);             OUTPUT(.OU,7)
                   2093:     will  have the same effect if in the latter case INFILE , OUF have
                   2094:     been suitably attached by JCL commands.  A call in  which  <f>  is
                   2095:     omitted  but  some  other  item  is present in the third argument,
                   2096:     alters the association of the channel  in  respect  of  that  item
                   2097:     only.   E.g.  INPUT(.X,,',R72')  sets the maximum record length to
                   2098:     72 characters.
                   2099: 
                   2100:     Error  messages  are  given  for   syntactically   invalid   third
                   2101:     arguments  but  in  the  case  where  the  file corresponding to a
                   2102:     syntactically valid file name  cannot  be  found,  then  statement
                   2103:     failure  occurs  and  may  be  tested  for  in  the usual way by a
                   2104:     conditional goto.  For the sake of portability and  compatibility,
                   2105:     programmers  are  strongly  urged  to use integer second arguments
                   2106:     (as in SNOBOL4) and short alphanumeric file  names  in  the  third
                   2107:     argument.   Further  details, particular to an implementation, are
                   2108:     given in Section 12.
                   2109: 
                   2110: 
                   2111:  5.36  INSERT * -- Insert string in buffer
                   2112:  5.36  INSERT * -- Insert string in buffer
                   2113:  ____________ _ __ ______ ______ __ ______
                   2114: 
                   2115:     INSERT(BUFFER,INTEGER,INTEGER,STRING)
                   2116: 
                   2117:     The function INSERT is defined to return null, but  has  the  side
                   2118:     effect  of  replacing  characters (pos, pos+1, ..., pos+length) in
                   2119:     the designated BUFFER with the characters  of  STRING.   "Pos"  is
                   2120:     given  by  the first INTEGER argument, and "length" by the second.
                   2121:     Note that if "length"  is  not  equal  to  SIZE(string)  then  the
                   2122:     trailing  contents  of  the  buffer  following  the  section to be
                   2123:     replaced will have  to  be  moved  by  INSERT  to  accomodate  the
                   2124:     STRING.
                   2125: 
                   2126:     If  the  inserted  string  cannot  fit,  or if the insertion would
                   2127:     leave a 'gap' of undefined characters  in  the  buffer,  then  the
                   2128:     INSERT call fails.
                   2129: 
                   2130:     If  the first argument is not a buffer type, then an error occurs.
                   2131:     (No conversion is attempted since it would be pointless).
                   2132: 
                   2133: 
                   2134: 
                   2135: 
                   2136: 
                   2137: 
                   2138: 
                   2139: 
                   2140: 
                   2141: 
                   2142: 
                   2143: 
                   2144: 
                   2145: 
                   2146: 
                   2147:          MACRO SPITBOL V3.5
                   2148:                                                    PAGE 31 - [5.37]
                   2149:          Functions
                   2150: 
                   2151: 
                   2152: 
                   2153:  5.37  INTEGER * -- Test for Integer
                   2154:  5.37  INTEGER * -- Test for Integer
                   2155:  _____________ _ __ ____ ___ _______
                   2156: 
                   2157:     INTEGER(NUMERIC)
                   2158: 
                   2159:     INTEGER is a predicate function which succeeds if its argument  is
                   2160:     integral.   It  fails  if  the  argument  cannot  be  converted to
                   2161:     numeric or has a non-integral value.
                   2162: 
                   2163: 
                   2164:  5.38  ITEM -- Select Array or Table Element
                   2165:  5.38  ITEM -- Select Array or Table Element
                   2166:  __________ __ ______ _____ __ _____ _______
                   2167: 
                   2168:     ITEM(ARRAY,INTEGER,INTEGER,....) or  ITEM(TABLE,ARGUMENT)
                   2169: 
                   2170:     ITEM returns the selected array or table element  by  name.   Note
                   2171:     that  the use of ITEM is never necessary in SPITBOL because of the
                   2172:     extended syntax for array references.
                   2173: 
                   2174: 
                   2175:  5.39  LE -- Test for Less or Equal
                   2176:  5.39  LE -- Test for Less or Equal
                   2177:  ________ __ ____ ___ ____ __ _____
                   2178: 
                   2179:     LE(NUMERIC,NUMERIC)
                   2180: 
                   2181:     LE is a predicate function which succeeds if  its  first  argument
                   2182:     is less than or equal to the second argument.
                   2183: 
                   2184: 
                   2185: 
                   2186: 
                   2187: 
                   2188: 
                   2189: 
                   2190: 
                   2191: 
                   2192: 
                   2193: 
                   2194: 
                   2195: 
                   2196: 
                   2197: 
                   2198: 
                   2199: 
                   2200: 
                   2201: 
                   2202: 
                   2203: 
                   2204: 
                   2205: 
                   2206: 
                   2207: 
                   2208: 
                   2209: 
                   2210: 
                   2211: 
                   2212: 
                   2213: 
                   2214: 
                   2215:          MACRO SPITBOL V3.5
                   2216:                                                    PAGE 32 - [5.40]
                   2217:          Functions
                   2218: 
                   2219: 
                   2220: 
                   2221:  5.40  LEN -- Generate Specified Length Pattern
                   2222:  5.40  LEN -- Generate Specified Length Pattern
                   2223:  _________ __ ________ _________ ______ _______
                   2224: 
                   2225:     LEN(INTEGER) or LEN(EXPRESSION)
                   2226: 
                   2227:     LEN   generates  a  pattern  which  will  match  any  sequence  of
                   2228:     characters of length  given  by  the  argument  which  must  be  a
                   2229:     non-negative  integer.   If  the  argument is an expression, it is
                   2230:     evaluated during pattern matching and must  yield  a  non-negative
                   2231:     integer.
                   2232: 
                   2233: 
                   2234:  5.41  LEQ * -- Test for Lexically Equal
                   2235:  5.41  LEQ * -- Test for Lexically Equal
                   2236:  _________ _ __ ____ ___ _________ _____
                   2237: 
                   2238:     LEQ(STRING,STRING)
                   2239: 
                   2240:     LEQ  is  a predicate which succeeds if its arguments are lexically
                   2241:     equal.   LEQ  differs  from  IDENT  in  that  its  arguments   are
                   2242:     converted to strings so that both the following succeed
                   2243:        LEQ(10,'10')             LEQ(.ABC,'ABC')
                   2244: 
                   2245: 
                   2246:  5.42  LGE * -- Test for Lexically Greater or Equal
                   2247:  5.42  LGE * -- Test for Lexically Greater or Equal
                   2248:  _________ _ __ ____ ___ _________ _______ __ _____
                   2249: 
                   2250:     LGE(STRING,STRING)
                   2251: 
                   2252:     LGE  is  a  predicate  which  succeeds  if  the  first argument is
                   2253:     lexically greater than or equal to the second argument.
                   2254: 
                   2255: 
                   2256:  5.43  LGT * -- Test for Lexically Greater
                   2257:  5.43  LGT * -- Test for Lexically Greater
                   2258:  _________ _ __ ____ ___ _________ _______
                   2259: 
                   2260:     LGT(STRING,STRING)
                   2261: 
                   2262:     LGT is a  predicate  which  succeeds  if  the  first  argument  is
                   2263:     lexically greater than the second argument.
                   2264: 
                   2265: 
                   2266:  5.44  LLE * -- Test for Lexically Less or Equal
                   2267:  5.44  LLE * -- Test for Lexically Less or Equal
                   2268:  _________ _ __ ____ ___ _________ ____ __ _____
                   2269: 
                   2270:     LLE(STRING,STRING)
                   2271: 
                   2272:     LLE  is  a  predicate  which  succeeds  if  the  first argument is
                   2273:     lexically less than or equal to the second argument.
                   2274: 
                   2275: 
                   2276: 
                   2277: 
                   2278: 
                   2279: 
                   2280: 
                   2281: 
                   2282: 
                   2283: 
                   2284: 
                   2285: 
                   2286: 
                   2287:          MACRO SPITBOL V3.5
                   2288:                                                    PAGE 33 - [5.45]
                   2289:          Functions
                   2290: 
                   2291: 
                   2292: 
                   2293:  5.45  LLT * -- Test for Lexically Less
                   2294:  5.45  LLT * -- Test for Lexically Less
                   2295:  _________ _ __ ____ ___ _________ ____
                   2296: 
                   2297:     LLT(STRING,STRING)
                   2298: 
                   2299:     LLT is a  predicate  which  succeeds  if  the  first  argument  is
                   2300:     lexically less than the second argument.
                   2301: 
                   2302: 
                   2303:  5.46  LNE * -- Test for Lexically Not Equal
                   2304:  5.46  LNE * -- Test for Lexically Not Equal
                   2305:  _________ _ __ ____ ___ _________ ___ _____
                   2306: 
                   2307:     LNE(STRING,STRING)
                   2308: 
                   2309:     LNE  is  a predicate which succeeds if its arguments are lexically
                   2310:     unequal.  LNE differs  from  DIFFER  in  that  its  arguments  are
                   2311:     converted to strings so that both the following fail
                   2312:        LNE(10,'10')                 LNE(.ABC,'ABC')
                   2313: 
                   2314: 
                   2315:  5.47  LOAD -- Load External Function
                   2316:  5.47  LOAD -- Load External Function
                   2317:  __________ __ ____ ________ ________
                   2318: 
                   2319:     LOAD(STRING,STRING)
                   2320: 
                   2321:     LOAD  is  used  to  make  external  functions available to SPITBOL
                   2322:     programs.  The first STRING is a prototype of the form:
                   2323: 
                   2324:        "function-name(type,type,...)result-type"
                   2325: 
                   2326:     The  indicated  types  can  be  any  of  "INTEGER",   "REAL"   (if
                   2327:     implemented)  or  "STRING" in which case the value is converted to
                   2328:     the designated type before being passed  to  (returned  from)  the
                   2329:     external  function.  Any other name for a type leaves the value in
                   2330:     an unconverted form.
                   2331: 
                   2332:     The second argument to LOAD is a library name where  the  function
                   2333:     is to be found.
                   2334: 
                   2335:     LOAD  is  highly  implementation  specific and is not available in
                   2336:     all implementations.  See Section 12 for details.
                   2337: 
                   2338: 
                   2339:  5.48  LOCAL * -- Get Name of Local
                   2340:  5.48  LOCAL * -- Get Name of Local
                   2341:  ___________ _ __ ___ ____ __ _____
                   2342: 
                   2343:     LOCAL(NAME,INTEGER)
                   2344: 
                   2345:     The value returned is the NAME  of  the  indicated  local  of  the
                   2346:     function  whose  name is given by the first argument.  LOCAL fails
                   2347:     if the second argument is out of range (less than  1,  or  greater
                   2348:     than the number of locals).
                   2349: 
                   2350: 
                   2351: 
                   2352: 
                   2353: 
                   2354: 
                   2355: 
                   2356: 
                   2357:          MACRO SPITBOL V3.5
                   2358:                                                    PAGE 34 - [5.49]
                   2359:          Functions
                   2360: 
                   2361: 
                   2362: 
                   2363:  5.49  LPAD * -- Left Pad
                   2364:  5.49  LPAD * -- Left Pad
                   2365:  __________ _ __ ____ ___
                   2366: 
                   2367:     LPAD(STRING,INTEGER,STRING)
                   2368: 
                   2369:     LPAD  returns  the  result  obtained  by  padding  out  the  first
                   2370:     argument on the  left  to  the  length  specified  by  the  second
                   2371:     argument,  using  the  pad character supplied by the one character
                   2372:     string third argument.  If the third argument is null or  omitted,
                   2373:     a  blank  is  used as the pad character.  If the first argument is
                   2374:     already long enough or too long, it is  returned  unchanged,  this
                   2375:     always  being the case if the second argument is negative or zero.
                   2376:     LPAD is useful for constructing columnar output.
                   2377: 
                   2378: 
                   2379:  5.50  LT -- Test for Less
                   2380:  5.50  LT -- Test for Less
                   2381:  ________ __ ____ ___ ____
                   2382: 
                   2383:     LT(NUMERIC,NUMERIC)
                   2384: 
                   2385:     LT is a predicate function which succeeds if  its  first  argument
                   2386:     is less than the second.
                   2387: 
                   2388: 
                   2389:  5.51  NE -- Test for Not Equal
                   2390:  5.51  NE -- Test for Not Equal
                   2391:  ________ __ ____ ___ ___ _____
                   2392: 
                   2393:     NE(NUMERIC,NUMERIC)
                   2394: 
                   2395:     NE  is  a  predicate  function which succeeds if its two arguments
                   2396:     are unequal.
                   2397: 
                   2398: 
                   2399:  5.52  NOTANY -- Build Character Select Pattern
                   2400:  5.52  NOTANY -- Build Character Select Pattern
                   2401:  ____________ __ _____ _________ ______ _______
                   2402: 
                   2403:     NOTANY(STRING) or NOTANY(EXPRESSION)
                   2404: 
                   2405:     NOTANY returns a pattern which will match any single character  in
                   2406:     the  subject  string,  provided  it  does  not occur in the string
                   2407:     argument.  A null argument is not permitted.  If the  argument  is
                   2408:     an  expression,  it  is evaluated during pattern matching and must
                   2409:     yield a non-null string.
                   2410: 
                   2411: 
                   2412: 
                   2413: 
                   2414: 
                   2415: 
                   2416: 
                   2417: 
                   2418: 
                   2419: 
                   2420: 
                   2421: 
                   2422: 
                   2423: 
                   2424: 
                   2425: 
                   2426: 
                   2427:          MACRO SPITBOL V3.5
                   2428:                                                    PAGE 35 - [5.53]
                   2429:          Functions
                   2430: 
                   2431: 
                   2432: 
                   2433:  5.53  OPSYN * -- Equate Functions and Operators
                   2434:  5.53  OPSYN * -- Equate Functions and Operators
                   2435:  ___________ _ __ ______ _________ ___ _________
                   2436: 
                   2437:     OPSYN(NAME,NAME,INTEGER)
                   2438: 
                   2439:     In contrast with SNOBOL4, the second argument must  always  be  an
                   2440:     already  defined  function name.  If the third argument is omitted
                   2441:     or zero, the first argument must  be  a  function  name.   If  the
                   2442:     third  argument  is 1 or 2 , the first argument must be resp.  one
                   2443:     of the undefined unary or binary  operators  (sec  4.1).   In  all
                   2444:     three  cases,  subsequent  use  of  the  first argument results in
                   2445:     calling of the function corresponding to the second argument  with
                   2446:     the  appropriate  arguments.   Note that names of system functions
                   2447:     or operators cannot appear as the first argument.
                   2448: 
                   2449: 
                   2450:  5.54  OUTPUT * -- Set Output Association
                   2451:  5.54  OUTPUT * -- Set Output Association
                   2452:  ____________ _ __ ___ ______ ___________
                   2453: 
                   2454:     OUTPUT(NAME,INTEGER,STRING) or OUTPUT(NAME,STRING,STRING)
                   2455: 
                   2456:     This function has  similar  arguments  and  behaves  similarly  to
                   2457:     INPUT, which should be consulted for a detailed description (2).
                   2458: 
                   2459: 
                   2460:  5.55  POS -- Define Positioning Pattern
                   2461:  5.55  POS -- Define Positioning Pattern
                   2462:  _________ __ ______ ___________ _______
                   2463: 
                   2464:     POS(INTEGER) or POS(EXPRESSION)
                   2465: 
                   2466:     POS  returns  a pattern which matches the null string provided the
                   2467:     value  of  the  cursor  is  equal  to  the  non-negative   integer
                   2468:     argument.   If  the  argument  is  an  expression, it is evaluated
                   2469:     during pattern matching and must yield a non-negative integer.
                   2470: 
                   2471: 
                   2472: 
                   2473: 
                   2474: 
                   2475: 
                   2476: 
                   2477: 
                   2478: 
                   2479: 
                   2480: 
                   2481: 
                   2482: 
                   2483: 
                   2484: 
                   2485: 
                   2486: 
                   2487: 
                   2488: 
                   2489: 
                   2490: 
                   2491: 
                   2492: 
                   2493: 
                   2494: 
                   2495:          MACRO SPITBOL V3.5
                   2496:                                                    PAGE 36 - [5.56]
                   2497:          Functions
                   2498: 
                   2499: 
                   2500: 
                   2501:  5.56  PROTOTYPE -- Retrieve Prototype
                   2502:  5.56  PROTOTYPE -- Retrieve Prototype
                   2503:  _______________ __ ________ _________
                   2504: 
                   2505:     PROTOTYPE(ARRAY) or PROTOTYPE(TABLE)
                   2506: 
                   2507:     PROTOTYPE returns the first argument used in the ARRAY,  TABLE  or
                   2508:     BUFFER function call which created the argument.
                   2509: 
                   2510: 
                   2511:  5.57  REMDR -- Remainder
                   2512:  5.57  REMDR -- Remainder
                   2513:  ___________ __ _________
                   2514: 
                   2515:     REMDR(INTEGER,INTEGER)
                   2516: 
                   2517:     REMDR  returns the remainder of dividing the first argument by the
                   2518:     second.  This has the same sign as the first argument.
                   2519: 
                   2520: 
                   2521:  5.58  REPLACE -- Translate Characters
                   2522:  5.58  REPLACE -- Translate Characters
                   2523:  _____________ __ _________ __________
                   2524: 
                   2525:     REPLACE(STRING,STRING,STRING)
                   2526: 
                   2527:     REPLACE  returns  the  result  of  applying  the   transformations
                   2528:     represented  by  the  second  and  third  arguments  to  the first
                   2529:     argument.  REPLACE fails if the second  and  third  arguments  are
                   2530:     unequal in length or null.
                   2531: 
                   2532: 
                   2533:  5.59  REVERSE * -- Reverse String
                   2534:  5.59  REVERSE * -- Reverse String
                   2535:  _____________ _ __ _______ ______
                   2536: 
                   2537:     REVERSE(STRING)
                   2538: 
                   2539:     REVERSE returns the result of reversing its argument.  Thus
                   2540:        REVERSE('ABC')            produces          'CBA'
                   2541: 
                   2542: 
                   2543:  5.60  REWIND -- Reposition File
                   2544:  5.60  REWIND -- Reposition File
                   2545:  ____________ __ __________ ____
                   2546: 
                   2547:     REWIND(INTEGER) or REWIND(STRING)
                   2548: 
                   2549:     The  argument must have previously appeared as the second argument
                   2550:     of a call of   INPUT or OUTPUT.  The file attached to the  channel
                   2551:     is  repositioned  so  that the next read or write operation starts
                   2552:     at the first record of the file.   Existing  associations  to  the
                   2553:     file   are   unaffected.   REWIND  may  not  be  provided  in  all
                   2554:     implementations - see Section 12.
                   2555: 
                   2556: 
                   2557: 
                   2558: 
                   2559: 
                   2560: 
                   2561: 
                   2562: 
                   2563: 
                   2564: 
                   2565: 
                   2566: 
                   2567:          MACRO SPITBOL V3.5
                   2568:                                                    PAGE 37 - [5.61]
                   2569:          Functions
                   2570: 
                   2571: 
                   2572: 
                   2573:  5.61  RPAD * -- Right Pad
                   2574:  5.61  RPAD * -- Right Pad
                   2575:  __________ _ __ _____ ___
                   2576: 
                   2577:     RPAD(STRING,INTEGER,STRING)
                   2578: 
                   2579:     RPAD  returns  the  result  obtained  by  padding  out  the  first
                   2580:     argument  on  the  right  to  the  length  specified by the second
                   2581:     argument, using the pad character supplied by  the  one  character
                   2582:     string  third argument.  If the third argument is null or omitted,
                   2583:     a blank is used as the pad character.  If the  first  argument  is
                   2584:     already  long  enough  or too long, it is returned unchanged, this
                   2585:     always being the case if the second argument is negative or  zero.
                   2586:     RPAD is useful for constructing columnar output.
                   2587: 
                   2588: 
                   2589:  5.62  RPOS -- Define Positioning Pattern
                   2590:  5.62  RPOS -- Define Positioning Pattern
                   2591:  __________ __ ______ ___________ _______
                   2592: 
                   2593:     RPOS(INTEGER) or RPOS(EXPRESSION)
                   2594: 
                   2595:     RPOS  returns a pattern which matches the null string provided the
                   2596:     indicated number  of  characters  remain  to  be  matched  in  the
                   2597:     subject   string.   If  the  argument  is  an  expression,  it  is
                   2598:     evaluated during pattern matching and must  yield  a  non-negative
                   2599:     integer.
                   2600: 
                   2601: 
                   2602:  5.63  RSORT -- Reverse Sort
                   2603:  5.63  RSORT -- Reverse Sort
                   2604:  ___________ __ _______ ____
                   2605: 
                   2606:     RSORT(ARRAY or TABLE,INTEGER or NAME)
                   2607: 
                   2608:     Performs  a sort in descending (reverse) order of key on the first
                   2609:     argument.  Consult SORT for details.
                   2610: 
                   2611: 
                   2612:  5.64  RTAB -- Create Tabbing Pattern
                   2613:  5.64  RTAB -- Create Tabbing Pattern
                   2614:  __________ __ ______ _______ _______
                   2615: 
                   2616:     RTAB(INTEGER) or RTAB(EXPRESSION)
                   2617: 
                   2618:     RTAB returns a pattern which matches from the current location  up
                   2619:     to  the  point  where the indicated number of characters remain to
                   2620:     be matched.  The argument must be a non-negative integer.  If  the
                   2621:     argument   is  an  expression,  it  is  evaluated  during  pattern
                   2622:     matching and must yield a non-negative integer.
                   2623: 
                   2624: 
                   2625: 
                   2626: 
                   2627: 
                   2628: 
                   2629: 
                   2630: 
                   2631: 
                   2632: 
                   2633: 
                   2634: 
                   2635: 
                   2636: 
                   2637:          MACRO SPITBOL V3.5
                   2638:                                                    PAGE 38 - [5.65]
                   2639:          Functions
                   2640: 
                   2641: 
                   2642: 
                   2643:  5.65  SETEXIT * -- Set Error Exit
                   2644:  5.65  SETEXIT * -- Set Error Exit
                   2645:  _____________ _ __ ___ _____ ____
                   2646: 
                   2647:     SETEXIT(NAME) or SETEXIT()
                   2648: 
                   2649:     SETEXIT allows interception of  execution  errors,  including  any
                   2650:     detected  during calls of CODE and EVAL .  The argument is a label
                   2651:     to  which  control  is  passed  if  a  subsequent  error   occurs,
                   2652:     providing  that  the  value  of the keyword &ERRLIMIT is non-zero.
                   2653:     The value of &ERRLIMIT is decremented when the error trap  occurs.
                   2654:     A  SETEXIT  call with a null argument causes cancellation of error
                   2655:     intercepts.  A subsequent error will terminate execution as  usual
                   2656:     with  an  error  message.   The  result returned by SETEXIT is the
                   2657:     previous intercept setting (i.e.  a  label  name  or  null  if  no
                   2658:     intercept  was  set).  This  can  be  used to save and restore the
                   2659:     SETEXIT conditions recursively.  The  error  routine  may  inspect
                   2660:     the  error code and text   in &ERRTYPE and &ERRTEXT , and take one
                   2661:     of the actions -
                   2662: 
                   2663: 
                   2664:      1.  Terminate execution by transferring  to  the  special  system
                   2665:          label,   ABORT  .   This causes error processing to resume as
                   2666:          though no error intercept had been set.
                   2667: 
                   2668:      2.  Branch to the special system label CONTINUE  .   This  causes
                   2669:          execution  to  resume by branching to the failure exit of the
                   2670:          statement in error.
                   2671: 
                   2672:      3.  Continue execution elsewhere by branching to another  section
                   2673:          of  the  program.   If  the error occurred inside a function,
                   2674:          execution is still 'down a level'.
                   2675: 
                   2676:      4.  Branch  to  label  RETURN  ,  FRETURN  ,   NRETURN   provided
                   2677:          &FNCLEVEL  is  non-zero.   This  avoids possible difficulties
                   2678:          with 3.
                   2679: 
                   2680:     The occurrence of  an  error  cancels  the  intercept.   An  error
                   2681:     routine  must  reissue  a SETEXIT call if error interception is to
                   2682:     continue.
                   2683: 
                   2684: 
                   2685: 
                   2686: 
                   2687: 
                   2688: 
                   2689: 
                   2690: 
                   2691: 
                   2692: 
                   2693: 
                   2694: 
                   2695: 
                   2696: 
                   2697: 
                   2698: 
                   2699: 
                   2700: 
                   2701:          MACRO SPITBOL V3.5
                   2702:                                                    PAGE 39 - [5.66]
                   2703:          Functions
                   2704: 
                   2705: 
                   2706: 
                   2707:  5.66  SIZE -- Get String or Buffer Size
                   2708:  5.66  SIZE -- Get String or Buffer Size
                   2709:  __________ __ ___ ______ __ ______ ____
                   2710: 
                   2711:     SIZE(STRING or BUFFER)
                   2712: 
                   2713:     SIZE returns an  integer  count  of  the  defined  length  of  its
                   2714:     argument.
                   2715: 
                   2716: 
                   2717:  5.67  SORT * -- Sort
                   2718:  5.67  SORT * -- Sort
                   2719:  __________ _ __ ____
                   2720: 
                   2721:     SORT(ARRAY or TABLE,INTEGER or NAME)
                   2722: 
                   2723:     This  routine  sorts  the  contents  of  the ARRAY or  TABLE first
                   2724:     argument in ascending order of key.  It differs from   RSORT  only
                   2725:     in  that  the  latter  sorts  in  descending order of key.  If the
                   2726:     first  argument  is  an  ARRAY  it  must  be  of   one   dimension
                   2727:     (subsequently  referred  to  as  a  VECTOR ), or two dimensions (a
                   2728:     MATRIX ).  Where the argument is a TABLE  ,  it  is  converted  by
                   2729:     SORT  to an array of 2 dimensions, the first column containing the
                   2730:     reference or key item and the second the  value,  in  exactly  the
                   2731:     same  way as  results from a call to CONVERT . This is then sorted
                   2732:     just as any other two dimensional array.  In all cases, the  items
                   2733:     to  be  sorted  may  be  of mixed dataypes and the sorting is done
                   2734:     primarily on datatype of key, using lexical ordering  of  datatype
                   2735:     names,  and secondarily on value.  Thus items of similar datatypes
                   2736:     become contiguously grouped in sorted order.  The  only  deviation
                   2737:     from  this  rule  is that mixed  INTEGER and REAL (NUMERIC ) items
                   2738:     are sorted as a single group and strings which  can  be  converted
                   2739:     to  NUMERIC  are  compared  numerically  against NUMERIC keys.  In
                   2740:     particular the NULL string is regarded as 0 or 0.0  in  comparison
                   2741:     with  them.   Note  that  compared  numerically,  100  >  "20" but
                   2742:     compared lexically "100" < "20".  A second argument, if  specified
                   2743:     for  an  ARRAY  or  TABLE,  must  be an integer corresponding to a
                   2744:     column index (1 or 2 for a TABLE). The keys are  then  taken  from
                   2745:     this  column,  and  during the sort, complete rows are permuted to
                   2746:     the order determined by key values.  If  the  second  argument  is
                   2747:     omitted,  the  default  column  used  is that corresponding to the
                   2748:     smallest  value  of  the   second   index   (e.g   -2   in   M   =
                   2749:     ARRAY('10,-2:+2')).   The  sorting  method  used  is  stable  with
                   2750:     respect to non-interchange of items having  equal  keys,  so  that
                   2751:     repeated  sorting  on  successive  columns may be used to effect a
                   2752:     total ordering.
                   2753: 
                   2754:     In the case of a VECTOR, the optional second argument may  be  the
                   2755:     NAME   of a field of a programmer defined datatype created by DATA
                   2756:     . In this case, if any of the values in the  VECTOR  are  of  this
                   2757:     type,  the  contents  of the field corresponding to NAME  are used
                   2758:     as the key.  If the second argument is  omitted,  the  sorting  is
                   2759:     carried out by using the values the VECTOR contains as keys.
                   2760: 
                   2761: 
                   2762: 
                   2763: 
                   2764: 
                   2765: 
                   2766: 
                   2767:          MACRO SPITBOL V3.5
                   2768:                                                    PAGE 40 - [5.67]
                   2769:          Functions
                   2770: 
                   2771:     The  sort  method  used is Heapsort (see for instance Horowitz and
                   2772:     Sahni, "Fundamentals of Data Structures",  Pitman  1977)  modified
                   2773:     so  that  no  interchanging of equal keys occurs.  It is efficient
                   2774:     in usage of both space and time, the time taken to  sort  N  items
                   2775:     being  proportional  to  N * log(N).   The  aggregate  obtained is
                   2776:     always a sorted copy of the original.  No extra store is used  for
                   2777:     the  sort  except  in  the case of a TABLE, where space sufficient
                   2778:     for conversion to an ARRAY is taken.  Examples of calls are
                   2779:     *  Assume USERS is an ARRAY of programmer defined datatypes
                   2780:     *  of the type created by       DATA('COMPUSER(NAME,TYME)')
                   2781:           SUS = RSORT(SORT(USERS,.NAME),.TYME)
                   2782:     which creates an array sorted  primarily  by  tyme  in  descending
                   2783:     order  and secondarily by name in alphabetic order.
                   2784:           MATX = SORT(SORT(SORT(MATX,3),2))
                   2785:     which sorts MATX respectively by columns 3, 2, 1.
                   2786:           V = SORT(V)
                   2787:     which sorts V  by its elements.
                   2788: 
                   2789: 
                   2790:  5.68  SPAN -- Create Spanning Pattern
                   2791:  5.68  SPAN -- Create Spanning Pattern
                   2792:  __________ __ ______ ________ _______
                   2793: 
                   2794:     SPAN(STRING) or SPAN(EXPRESSION)
                   2795: 
                   2796:     SPAN  creates  a  pattern  which, starting from the current cursor
                   2797:     position, will match the longest non-null sequence  of  characters
                   2798:     drawn  from  the  character  set  contained  in the argument.  The
                   2799:     argument is not permitted to be  null.   If  the  argument  is  an
                   2800:     expression,  it  is  evaluated  during  pattern  matching and must
                   2801:     yield a non-null string.
                   2802: 
                   2803: 
                   2804:  5.69  STOPTR * -- Stop Trace
                   2805:  5.69  STOPTR * -- Stop Trace
                   2806:  ____________ _ __ ____ _____
                   2807: 
                   2808:     STOPTR(NAME,STRING)
                   2809: 
                   2810:     STOPTR  terminates  tracing  for  the  name  given  by  the  first
                   2811:     argument.   The  second  argument  designates the respect in which
                   2812:     the trace is to be stopped and consists  of  one  of  the  strings
                   2813:     listed under the description of TRACE.
                   2814: 
                   2815: 
                   2816: 
                   2817: 
                   2818: 
                   2819: 
                   2820: 
                   2821: 
                   2822: 
                   2823: 
                   2824: 
                   2825: 
                   2826: 
                   2827: 
                   2828: 
                   2829: 
                   2830: 
                   2831: 
                   2832: 
                   2833:          MACRO SPITBOL V3.5
                   2834:                                                    PAGE 41 - [5.70]
                   2835:          Functions
                   2836: 
                   2837: 
                   2838: 
                   2839:  5.70  SUBSTR * -- Extract Substring
                   2840:  5.70  SUBSTR * -- Extract Substring
                   2841:  ____________ _ __ _______ _________
                   2842: 
                   2843:     SUBSTR(STRING or BUFFER,INTEGER,INTEGER)
                   2844: 
                   2845:     Extracts   a  substring  from  the  first  argument.   The  second
                   2846:     argument specifies the first character (1 = start of  string)  and
                   2847:     the  third  argument  gives  the number of characters.  An omitted
                   2848:     third argument specifies all remaining characters of  the  string.
                   2849:     Improper substrings cause statement failure.
                   2850: 
                   2851:     Note  that  no  conversion  to  string  is needed in the case of a
                   2852:     BUFFER argument, the substring  is  extracted  directly  from  the
                   2853:     buffer making SUBSTR quite efficient when working with buffers.
                   2854: 
                   2855: 
                   2856:  5.71  TAB -- Create Tabbing Pattern
                   2857:  5.71  TAB -- Create Tabbing Pattern
                   2858:  _________ __ ______ _______ _______
                   2859: 
                   2860:     TAB(INTEGER) or TAB(EXPRESSION)
                   2861: 
                   2862:     TAB  returns  a pattern which matches from the current location up
                   2863:     to the point where the indicated number of  characters  have  been
                   2864:     matched.   The  argument  must  be a non-negative integer.  If the
                   2865:     argument  is  an  expression,  it  is  evaluated  during   pattern
                   2866:     matching and must yield a non-negative integer.
                   2867: 
                   2868: 
                   2869:  5.72  TABLE * -- Create Table
                   2870:  5.72  TABLE * -- Create Table
                   2871:  ___________ _ __ ______ _____
                   2872: 
                   2873:     TABLE(INTEGER,,ARG)
                   2874: 
                   2875:     The  TABLE  function  creates  an associative table as in SNOBOL4.
                   2876:     However in SPITBOL, the table is implemented internally  using  an
                   2877:     efficient   hashing algorithm.  The integer argument is the number
                   2878:     of hash headers used.  If it is omitted, 11 is  used  by  default.
                   2879:     If  N  is  the number of entries in the table, and H is the number
                   2880:     of hash headers, the average number of probes  to  find  an  entry
                   2881:     rises  from  about 1.0 for small N, to N/2H if N is large compared
                   2882:     with H.  Since the overhead for hash headers is small compared  to
                   2883:     the  size of a table element, a useful guide is to use as argument
                   2884:     an estimate of the number of entries to be stored  in  the  table.
                   2885:     Any  second  argument  (permitted  for  SNOBOL4  compatibility) is
                   2886:     always ignored.  The optional third argument is a value  which  it
                   2887:     is  desired  to  have  returned  instead of the default NULL, when
                   2888:     table look-up is performed using a key which has not been  entered
                   2889:     into  the  TABLE.   This  is similar in effect to the usage of the
                   2890:     second argument of ARRAY.  In contrast  with  SNOBOL4,  where  the
                   2891:     first  reference  to an entry automatically creates a table entry,
                   2892:     in  SPITBOL  an  entry  is  inserted  in  a  table  only  when  an
                   2893:     assignment   is   explicitly  made.   Thus  table  look-up  for  a
                   2894:     currently missing key does not create an entry for  that  key  and
                   2895:     may be freely used.
                   2896: 
                   2897: 
                   2898: 
                   2899: 
                   2900: 
                   2901:          MACRO SPITBOL V3.5
                   2902:                                                    PAGE 42 - [5.73]
                   2903:          Functions
                   2904: 
                   2905: 
                   2906: 
                   2907:  5.73  TIME -- Get Timer Value
                   2908:  5.73  TIME -- Get Timer Value
                   2909:  __________ __ ___ _____ _____
                   2910: 
                   2911:     TIME()
                   2912: 
                   2913:     TIME  returns the integer number of milliseconds of processor time
                   2914:     since the start of execution.
                   2915: 
                   2916: 
                   2917:  5.74  TRACE * -- Initiate Trace
                   2918:  5.74  TRACE * -- Initiate Trace
                   2919:  ___________ _ __ ________ _____
                   2920: 
                   2921: 
                   2922:     The TRACE function, which is quite invaluable as a debugging  aid,
                   2923:     initiates  a  trace  of  the item whose name is given by the first
                   2924:     argument.  The second argument specifies the sense  of  the  trace
                   2925:     as follows -
                   2926: 
                   2927: 
                   2928:             'A' or 'ACCESS'               access
                   2929:             'V' or 'VALUE' or null        value
                   2930:             'K' or 'KEYWORD'              keyword
                   2931:             'L' or 'LABEL'                label
                   2932:             'F' or 'FUNCTION'             function call and return
                   2933:             'C' or 'CALL'                 function call
                   2934:             'R' or 'RETURN'               function return
                   2935: 
                   2936:     The  access trace mode introduced in SPITBOL consists of producing
                   2937:     trace output each  time  an  access  traced  item  is  referenced.
                   2938:     Attempts  to trace a function before a DEFINE statement for it has
                   2939:     been executed will fail.  If &STLIMIT  is  negative,  STCOUNT  may
                   2940:     not  be  traced.  To give a visual impression of depth of nesting,
                   2941:     a letter "I" is included in the trace output for  each  additional
                   2942:     level of function call.
                   2943: 
                   2944: 
                   2945:  5.75  TRIM -- Trim Trailing Blanks
                   2946:  5.75  TRIM -- Trim Trailing Blanks
                   2947:  __________ __ ____ ________ ______
                   2948: 
                   2949:     TRIM(STRING)
                   2950: 
                   2951:     TRIM  returns  the  result  of  trimming  trailing blanks from the
                   2952:     argument string.
                   2953: 
                   2954: 
                   2955:  5.76  UNLOAD * -- Unload Function
                   2956:  5.76  UNLOAD * -- Unload Function
                   2957:  ____________ _ __ ______ ________
                   2958: 
                   2959:     UNLOAD(NAME)
                   2960: 
                   2961:     NAME is the name of an external function which is to be  unloaded.
                   2962:     The  names  of  user defined functions may also appear in calls to
                   2963:     UNLOAD in which case the function becomes undefined.
                   2964: 
                   2965: 
                   2966: 
                   2967: 
                   2968: 
                   2969: 
                   2970: 
                   2971:          MACRO SPITBOL V3.5
                   2972:                                                    PAGE 43 - [6]
                   2973:          Keywords
                   2974: 
                   2975: 
                   2976: 
                   2977:                             *---------------*
                   2978:                               [6]  Keywords
                   2979:                             | [6]  Keywords |
                   2980:                             *---------------*
                   2981: 
                   2982:     The following is a list of the keywords  implemented  in  SPITBOL.
                   2983:     The  notation  (R)  after  the name indicates that the keyword may
                   2984:     only be read so that attempts to assign to it will  result  in  an
                   2985:     error.   With  the  exception  of  &STLIMIT,  values  assigned  to
                   2986:     numeric keywords  must be in the range 0 to MXLEN .
                   2987: 
                   2988: 
                   2989:      1.  &ABEND : Normally set to zero.  If it is set  to  a  non-zero
                   2990:          value  at  the  end of execution,  an ABEND dump may be given
                   2991:          if supported by the implementation.
                   2992: 
                   2993:      2.  &ABORT (R) :  Contains the pattern ABORT .
                   2994: 
                   2995:      3.  &ALPHABET (R) : Contains the full character set of  the  host
                   2996:          computer in natural collating sequence.
                   2997: 
                   2998:      4.  &ANCHOR  :  Set to one for anchored pattern matching mode and
                   2999:          to zero for  unanchored  mode.   Initial  value  is  zero  to
                   3000:          correspond  with  SNOBOL4.   However  unanchored  matching is
                   3001:          needed only rarely and is liable  to  be  very  expensive  in
                   3002:          runtime  unless  carefully  used,  so  in  general it is good
                   3003:          practice to start programs with the statement
                   3004:              &ANCHOR = 1
                   3005: 
                   3006:      5.  &ARB (R) :  Contains the pattern ARB .
                   3007: 
                   3008:      6.  &BAL (R) :  Contains the pattern BAL .
                   3009: 
                   3010:      7.  &CODE  :  Initially  zero.   In  implementations  where   the
                   3011:          concept   makes  sense,  values  found  to  be  in  &CODE  at
                   3012:          termination are used as ending codes (Section 12).
                   3013: 
                   3014:      8.  &DUMP : The standard value is zero.  If the value is zero  at
                   3015:          the  end  of  execution,  then  no symbolic dump is given.  A
                   3016:          value of one gives a dump including values  of  keywords  and
                   3017:          natural  variables.   If  the value is two, the dump includes
                   3018:          non-null array, table and program defined  datatype  elements
                   3019:          as  well.  The dump format is self explanatory and deals with
                   3020:          the case of branched  structures  including  circular  lists.
                   3021:          If  the  value exceeds two, an  ABEND dump may be produced as
                   3022:          well if the implementation supports this.
                   3023: 
                   3024: 
                   3025: 
                   3026: 
                   3027: 
                   3028: 
                   3029: 
                   3030: 
                   3031: 
                   3032: 
                   3033: 
                   3034:          MACRO SPITBOL V3.5
                   3035:                                                    PAGE 44 - [6]
                   3036:          Keywords
                   3037: 
                   3038: 
                   3039:      9.  &ERRLIMIT :  The  maximum  number  of  errors  which  can  be
                   3040:          trapped  using  the  SETEXIT function. &ERRLIMIT is initially
                   3041:          zero and when set non-zero by assignment, it  is  decremented
                   3042:          each  time  a  SETEXIT trap occurs.  SETEXIT has no effect on
                   3043:          normal error processing if &ERRLIMIT is zero.
                   3044: 
                   3045:     10.  &ERRTEXT : If an  execution  error  occurs,  then  the  error
                   3046:          message  text  corresponding to the error code is stored as a
                   3047:          string in &ERRTEXT.  It is possible to  assign  a  string  to
                   3048:          &ERRTEXT  which  is then used in a subsequent error report if
                   3049:          &ERRTYPE is assigned  a  value  out  of  the  range  used  by
                   3050:          SPITBOL  itself.  Such an assignment does not signal an error
                   3051:          as is the case with &ERRTYPE.
                   3052: 
                   3053:     11.  &ERRTYPE : If an execution error occurs, then the error  code
                   3054:          is  stored  as  an  integer  in  &ERRTYPE.  &ERRTYPE  may  be
                   3055:          assigned  a  value  in  which  case  an  immediate  error  is
                   3056:          signalled.   This may be useful in reporting program detected
                   3057:          errors.  Error codes used by  SPITBOL  all  fall  below  300.
                   3058:          Values  in  &ERRTEXT and &ERRTYPE are useful in SETEXIT error
                   3059:          intercept routines.
                   3060: 
                   3061:     12.  &FAIL (R) :  Contains the pattern FAIL .
                   3062: 
                   3063:     13.  &FENCE (R) :  Contains the pattern FENCE .
                   3064: 
                   3065:     14.  &FNCLEVEL (R) : Contains the current function nesting  level.
                   3066: 
                   3067:     15.  &FTRACE  :  The  standard  value  is  zero.   If  it  is  set
                   3068:          positive, each function  call  and  return  is  traced.   The
                   3069:          value  of &FTRACE is decremented  for each trace line printed
                   3070:          until the value reaches zero again.
                   3071: 
                   3072:     16.  &INPUT : Set to one for normal  input  (standard  value).  If
                   3073:          set to zero, all input associations are ignored.
                   3074: 
                   3075:     17.  &LASTNO  (R)  :  Contains  the  number  of the last statement
                   3076:          executed.
                   3077: 
                   3078:     18.  &MAXLNGTH : Contains the  maximum  permitted  string  length.
                   3079:          At  the  start  of execution its value is that given by MXLEN
                   3080:          (Section 12). It may be set to  smaller values but not  to  a
                   3081:          value exceeding MXLEN .
                   3082: 
                   3083:     19.  &OUTPUT  :  Set to one for normal output (standard value). If
                   3084:          set to zero, all output associations are ignored.
                   3085: 
                   3086:     20.  &PROFILE :  When  set  to  zero  (the   default),   statement
                   3087:          profiling  is disabled.  When set to one, statement profiling
                   3088:          is enabled.  When statement  profiling  is  enabled,  SPITBOL
                   3089:          keeps  track  of   the  count of each statement executed, and
                   3090:          the  amount  of  central  processor  time   accumulated   for
                   3091:          executing  each  statement.   If  profiling is enabled at any
                   3092:          time during an execution, the accumulated profile is  printed
                   3093:          on  the  standard output channel when the program terminates.
                   3094: 
                   3095: 
                   3096:          MACRO SPITBOL V3.5
                   3097:                                                    PAGE 45 - [6]
                   3098:          Keywords
                   3099: 
                   3100:          The profile also indicates the  average  time  for  executing
                   3101:          each statement.
                   3102: 
                   3103:          If  &PROFILE  is  set  to  two,  it  acts  as in the case for
                   3104:          &PROFILE=1, except that function calls  are  charged  to  the
                   3105:          statements which contain them.
                   3106: 
                   3107:          &PROFILE  is  not  available  in all implementations, and for
                   3108:          some machines where processor  time  is  not  available,  the
                   3109:          time  indicated may be wall time.  In all cases, the enabling
                   3110:          of the profile adds additional time to the execution, so  the
                   3111:          times indicated should be viewed as relative.
                   3112: 
                   3113:     21.  &REM (R) :  Contains the pattern REM .
                   3114: 
                   3115:     22.  &RTNTYPE  (R)  :  Contains  'RETURN',  'FRETURN' or 'NRETURN'
                   3116:          depending on  the  type  of  function  return  most  recently
                   3117:          executed.
                   3118: 
                   3119:     23.  &STCOUNT  :  Contains  a  count  of  the number of statements
                   3120:          executed unless &STLIMIT is negative.
                   3121: 
                   3122:     24.  &STLIMIT : The maximum number of statements permitted  to  be
                   3123:          executed.    Initially   50000  and  with  an  implementation
                   3124:          dependent maximum (Section 12)  beyond  which  it  cannot  be
                   3125:          set.    To  inhibit  this  check  on  numbers  of  statements
                   3126:          executed, assign a negative value to the keyword.  Thus
                   3127:                  &STLIMIT = -1
                   3128:          is equivalent to &STLIMIT = "infinity". This will  result  in
                   3129:          a  marginal  execution  speed  up  since  count  updating and
                   3130:          checking is omitted.  The value of  &STCOUNT  remains  frozen
                   3131:          at  the  value reached when &STLIMIT was set negative and the
                   3132:          number of statements executed is omitted from  the  execution
                   3133:          statistics.   Tracing  of  STCOUNT becomes no longer possible
                   3134:          since its value is not incremented.
                   3135: 
                   3136:     25.  &STNO (R) : The number of the current statement.
                   3137: 
                   3138:     26.  &SUCCEED (R) :  Contains the pattern SUCCEED .
                   3139: 
                   3140:     27.  &TRACE : Initial value of zero suppresses trace  output.   If
                   3141:          assigned  a positive value, trace output is generated and for
                   3142:          each line printed &TRACE is  decremented  by  one  until  the
                   3143:          value reaches zero again.
                   3144: 
                   3145:     28.  &TRIM  :  Set  to zero for normal input mode (default value).
                   3146:          If  the  value  is  set  non-zero,  all  input  records   are
                   3147:          automatically  trimmed  (trailing  blanks  are removed).  For
                   3148:          operating systems  having  file  formats  in  which  variable
                   3149:          length   records  may  have  trailing  blanks  suppressed,  a
                   3150:          setting of zero does not imply that  padding  to  a  standard
                   3151:          size  occurs,  merely  that  any  trailing  blanks  which are
                   3152:          actually present will be preserved.  For  most  applications,
                   3153:          initialising the value to 1 is to be recommended.
                   3154: 
                   3155: 
                   3156: 
                   3157: 
                   3158:          MACRO SPITBOL V3.5
                   3159:                                                    PAGE 46 - [7]
                   3160:          Program Listing and Control Cards
                   3161: 
                   3162: 
                   3163: 
                   3164:                 *----------------------------------------*
                   3165:                   [7]  Program Listing and Control Cards
                   3166:                 | [7]  Program Listing and Control Cards |
                   3167:                 *----------------------------------------*
                   3168: 
                   3169:     Normally  a  listing  of  the  source program is produced in which
                   3170:     statements are prefixed with a  statement  number.   This  listing
                   3171:     usually  starts  with  a  heading identifying the SPITBOL version,
                   3172:     and giving date  and  time  of  run.   Where  this  is  considered
                   3173:     inappropriate  it  may  be  suppressed  (Section  12). Many of the
                   3174:     control cards to be  described  permit  choice  of  other  listing
                   3175:     options.   Control  cards are identified by a minus sign in column
                   3176:     one.  They may occur anywhere in a source program and take  effect
                   3177:     when  they  are encountered.  Most of them are special features of
                   3178:     SPITBOL and are not available in  SNOBOL4.   The  full  names  are
                   3179:     given  for  each  of  them, but they may be abbreviated since only
                   3180:     the first four characters are significant to the compiler.
                   3181: 
                   3182: 
                   3183:  7.1  Listing Control Cards
                   3184:  7.1  Listing Control Cards
                   3185:  ____________ _______ _____
                   3186: 
                   3187:     Listing control cards are used to  alter  the  appearance  of  the
                   3188:     listing.   They  have no other effect on compilation or execution.
                   3189:     Listing control cards always occur individually.
                   3190: 
                   3191: 
                   3192: 
                   3193: 
                   3194:  7.1.1  -EJECT
                   3195:  7.1.1  -EJECT
                   3196: 
                   3197:     The -EJECT control card  causes  the  compilation  listing  to  be
                   3198:     skipped  to  the  top  of  the  next  page.  The current title and
                   3199:     subtitle (if any) are printed at the top of the page.
                   3200: 
                   3201: 
                   3202: 
                   3203: 
                   3204:  7.1.2  -SPACE
                   3205:  7.1.2  -SPACE
                   3206: 
                   3207:     The -SPACE control  card  causes  spaces  to  be  skipped  on  the
                   3208:     current  page.  If -SPACE occurs with no operand, then one line is
                   3209:     skipped.  Alternatively, an  unsigned  integer  can  be  given  in
                   3210:     columns  8-72  which represents the number of lines to be skipped.
                   3211:     If there is insufficient space on the current  page,  -SPACE  acts
                   3212:     like  -EJECT  and  the  listing  is  spaced to the top of the next
                   3213:     page.
                   3214: 
                   3215: 
                   3216: 
                   3217: 
                   3218: 
                   3219: 
                   3220: 
                   3221: 
                   3222: 
                   3223: 
                   3224: 
                   3225:          MACRO SPITBOL V3.5
                   3226:                                                    PAGE 47 - [7.1.3]
                   3227:          Program Listing and Control Cards
                   3228: 
                   3229:  7.1.3  -TITLE
                   3230:  7.1.3  -TITLE
                   3231: 
                   3232:     This card supplies a title for the source  program  listing.   The
                   3233:     text  of  the title is taken from columns 8-72 of the -TITLE card.
                   3234:     The subtitle is cleared to blanks, and an eject to the  next  page
                   3235:     occurs next time a line is listed.
                   3236: 
                   3237: 
                   3238:  7.1.4  -STITL
                   3239:  7.1.4  -STITL
                   3240: 
                   3241:     The  -STITL  card  is  used  to  supply  a subtitle for the source
                   3242:     program listing.  The text of the subtitle is taken  from  columns
                   3243:     8-72  of  the -STITL card.  An eject occurs to the top of the next
                   3244:     page next time a line is listed and the  current  title  (if  any)
                   3245:     and  the  newly  supplied subtitle are printed.  If both title and
                   3246:     subtitle are to be changed, then the -TITLE  card  should  precede
                   3247:     the -STITL card.
                   3248: 
                   3249: 
                   3250: 
                   3251: 
                   3252: 
                   3253: 
                   3254: 
                   3255: 
                   3256: 
                   3257: 
                   3258: 
                   3259: 
                   3260: 
                   3261: 
                   3262: 
                   3263: 
                   3264: 
                   3265: 
                   3266: 
                   3267: 
                   3268: 
                   3269: 
                   3270: 
                   3271: 
                   3272: 
                   3273: 
                   3274: 
                   3275: 
                   3276: 
                   3277: 
                   3278: 
                   3279: 
                   3280: 
                   3281: 
                   3282: 
                   3283: 
                   3284: 
                   3285: 
                   3286: 
                   3287: 
                   3288: 
                   3289:          MACRO SPITBOL V3.5
                   3290:                                                    PAGE 48 - [7.2]
                   3291:          Program Listing and Control Cards
                   3292: 
                   3293: 
                   3294: 
                   3295:  7.2  Option Control Cards
                   3296:  7.2  Option Control Cards
                   3297:  ___________ _______ _____
                   3298: 
                   3299:     The  option  control  cards  allow  selection  of various compiler
                   3300:     options.  In each case, there are two modes and a pair of  control
                   3301:     cards  which  permit  repeated flipping back and forth of the mode
                   3302:     within a program.  Several control options  may  be  specified  on
                   3303:     the  same  control  card  by  separating  the  names  with commas,
                   3304:     leaving no intervening blanks.  For example
                   3305:     -FAIL,LIST,PRINT
                   3306:     In the list below, the default option is named first.
                   3307: 
                   3308: 
                   3309: 
                   3310: 
                   3311:  7.2.1  -LIST -NOLIST
                   3312:  7.2.1  -LIST -NOLIST
                   3313: 
                   3314:     The -NOLIST option causes  suppression  of  the  normal  statement
                   3315:     listing.   This  may  be  useful  for  established program, or for
                   3316:     terminal  output.   If  compilation  errors  are   detected,   the
                   3317:     offending  statements are printed regardless of the setting of the
                   3318:     list mode.  Some implementations provide  a  run  time  option  to
                   3319:     select  NOLIST  mode  initially without the need to insert -NOLIST
                   3320:     into the program being run (Section 12).
                   3321: 
                   3322: 
                   3323: 
                   3324: 
                   3325:  7.2.2  -NOPRINT -PRINT
                   3326:  7.2.2  -NOPRINT -PRINT
                   3327: 
                   3328:     Normally control cards are not printed.  The -PRINT option  causes
                   3329:     them  to  be listed, provided the -LIST option is in effect.  This
                   3330:     option may be useful if serialization is used for updating.
                   3331: 
                   3332: 
                   3333: 
                   3334: 
                   3335:  7.2.3  -SINGLE -DOUBLE
                   3336:  7.2.3  -SINGLE -DOUBLE
                   3337: 
                   3338:     The compilation listing is normally singly  spaced.   The  -DOUBLE
                   3339:     option  causes  double  spacing  to  be  used,  with  a blank line
                   3340:     folowing each listed line.
                   3341: 
                   3342: 
                   3343: 
                   3344: 
                   3345: 
                   3346: 
                   3347: 
                   3348: 
                   3349: 
                   3350: 
                   3351: 
                   3352: 
                   3353: 
                   3354: 
                   3355: 
                   3356:          MACRO SPITBOL V3.5
                   3357:                                                    PAGE 49 - [7.2.4]
                   3358:          Program Listing and Control Cards
                   3359: 
                   3360: 
                   3361: 
                   3362:  7.2.4  -INXXX
                   3363:  7.2.4  -INXXX
                   3364: 
                   3365:     XXX in the above stands for an integer indicating  the  number  of
                   3366:     characters  to  be  read  from  each  record of the SPITBOL source
                   3367:     file.  The normal default is for  the  compiler  to  read  SPITBOL
                   3368:     statements  from  columns  1-72  of  the  input  image.  Longer or
                   3369:     shorter input  records  may  be  read  by  specifying  alternative
                   3370:     values  for  XXX.  If any value other than 72 is in use at the end
                   3371:     of translation, it is used as the maximum record length  for  data
                   3372:     read  from  the  standard  input  file.  For historical reasons, a
                   3373:     -IN72 card in effect at the end of compilation is taken  to  imply
                   3374:     a  maximum  record length of 80 for execution time data.  There is
                   3375:     however no need to restrict records to lengths of 72 or 80.
                   3376: 
                   3377: 
                   3378: 
                   3379: 
                   3380:  7.2.5  -ERRORS -NOERRORS
                   3381:  7.2.5  -ERRORS -NOERRORS
                   3382: 
                   3383:     Normally execution is allowed even when compilation errors  occur.
                   3384:     If  it  is  wished  to inhibit execution if compilation errors are
                   3385:     detected then the -NOERRORS option should be selected.
                   3386: 
                   3387: 
                   3388: 
                   3389: 
                   3390:  7.2.6  -FAIL -NOFAIL
                   3391:  7.2.6  -FAIL -NOFAIL
                   3392: 
                   3393:     In SNOBOL4 and in SPITBOL with the -FAIL mode set, a failure in  a
                   3394:     statement  with  no  conditional  goto  is ignored and the program
                   3395:     execution resumes with  the  next  statement  in  sequence.   This
                   3396:     convention  often leads to errors going undetected, particuarly in
                   3397:     the case of array references with  out  of  bound  subscripts  and
                   3398:     pattern  matches  which  the user anticipates will always succeed.
                   3399:     The -NOFAIL  option  changes  this  convention.   If  a  statement
                   3400:     lacking  a  conditional goto is compiled under the -NOFAIL option,
                   3401:     then if a failure occurs when  the  statement  is  executed,  this
                   3402:     produces  an execution error with a suitable message.  This option
                   3403:     is especially useful for student jobs and other  situations  where
                   3404:     many small programs are being debugged.
                   3405: 
                   3406: 
                   3407: 
                   3408: 
                   3409:  7.2.7  -EXECUTE -NOEXECUTE
                   3410:  7.2.7  -EXECUTE -NOEXECUTE
                   3411: 
                   3412:     Normally   execution  is  initiated  following  compilation.   The
                   3413:     -NOEXECUTE  option,  if  in  force  at  the  end  of  compilation,
                   3414:     inhibits  execution.   A  run  time option may be provided for the
                   3415:     same purpose (Section 12).
                   3416: 
                   3417: 
                   3418: 
                   3419: 
                   3420: 
                   3421: 
                   3422:          MACRO SPITBOL V3.5
                   3423:                                                    PAGE 50 - [8]
                   3424:          Errors
                   3425: 
                   3426: 
                   3427: 
                   3428:                              *-------------*
                   3429:                                [8]  Errors
                   3430:                              | [8]  Errors |
                   3431:                              *-------------*
                   3432: 
                   3433: 
                   3434:  8.1  Compilation Error Messages
                   3435:  8.1  Compilation Error Messages
                   3436:  ________________ _____ ________
                   3437: 
                   3438:     When the compiler detects an error, the offending line is  printed
                   3439:     with  a  marker  under  the  point at which the error was actually
                   3440:     detected  and  an  error  code  and  self-explanatory  message  is
                   3441:     printed.    Processing   of  the  statement  is  discontinued  and
                   3442:     compilation continues with the next  statement.   Execution  of  a
                   3443:     program  containing  errors is not suppressed unless the -NOERRORS
                   3444:     option has  been  set.   If  an  attempt  is  made  to  execute  a
                   3445:     statement  found  erroneous  by  the  compiler, an execution error
                   3446:     occurs.
                   3447: 
                   3448: 
                   3449:  8.2  Execution Error Messages
                   3450:  8.2  Execution Error Messages
                   3451:  ______________ _____ ________
                   3452: 
                   3453:     Extensive error checking is performed at run time.  When an  error
                   3454:     is  detected,  execution is terminated with an error message which
                   3455:     refers to the number of  the  erroneous  statement.   However,  as
                   3456:     described  in  Section  5,  it  is  possible  to  avoid  automatic
                   3457:     execution  termination  and  to   obtain   user   error   handling
                   3458:     facilities by means of the SETEXIT function.
                   3459: 
                   3460:     In  addition  to  the  errors  listed here, the implementation may
                   3461:     have additional system errors.  See Section 12.
                   3462: 
                   3463: 
                   3464:  8.3  Error Codes and Messages
                   3465:  8.3  Error Codes and Messages
                   3466:  __________ _____ ___ ________
                   3467: 
                   3468:     The following list details all error messages with  the  exception
                   3469:     of any which may be particular to certain implementations.
                   3470: 
                   3471:     Code                       Message
                   3472:     ____                       _______
                   3473: 
                   3474:       1   Addition left operand is not numeric
                   3475:       2   Addition right operand is not numeric
                   3476:       3   Addition caused integer overflow
                   3477:       4   Affirmation operand is not numeric
                   3478:       5   Alternation right operand is not pattern
                   3479:       6   Alternation left operand is not pattern
                   3480:       7   Compilation error encountered during execution
                   3481:       8   Concatenation left opnd is not string or pattern
                   3482:       9   Concatenation right opd is not string or pattern
                   3483:      10   Complementation operand is not numeric
                   3484:      11   Complementation caused integer overflow
                   3485:      12   Division left operand is not numeric
                   3486:      13   Division right operand is not numeric
                   3487:      14   Division caused integer overflow
                   3488:      15   Exponentiation right operand is not numeric
                   3489:      16   Exponentiation left operand is not numeric
                   3490: 
                   3491: 
                   3492:          MACRO SPITBOL V3.5
                   3493:                                                    PAGE 51 - [8.3]
                   3494:          Errors
                   3495: 
                   3496:      17   Exponentiation caused integer overflow
                   3497:      18   Exponentiation result is undefined
                   3498:      19   Exponentiation right operand is negative
                   3499:      20   Goto evaluation failure
                   3500:      21   Function called by name returned a value
                   3501:      22   Undefined function called
                   3502:      23   Goto operand is not a natural variable
                   3503:      24   Goto operand in direct goto is not code
                   3504:      25   Immediate assignment left operand is not pattern
                   3505:      26   Multiplication left operand is not numeric
                   3506:      27   Multiplication right operand is not numeric
                   3507:      28   Multiplication caused integer overflow
                   3508:      29   Undefined operator referenced
                   3509:      30   Pattern assignment left operand is not pattern
                   3510:      31   Pattern replacement right operand is not string
                   3511:      32   Subtraction left operand is not numeric
                   3512:      33   Subtraction right operand is not numeric
                   3513:      34   Subtraction caused integer overflow
                   3514:      35   Unexpected failure in -NOFAIL mode
                   3515:      36   Goto ABORT with no preceding error
                   3516:      37   Goto CONTINUE with no preceding error
                   3517:      38   Goto undefined label
                   3518:      39   External function argument is not string
                   3519:      40   External function argument is not integer
                   3520:      41   FIELD function argument is wrong datatype
                   3521:      42   Attempt to change value of protected variable
                   3522:      43   ANY evaluated argument is not string
                   3523:      44   BREAK evaluated argument is not string
                   3524:      45   BREAKX evaluated argument is not string
                   3525:      46   Expression does not evaluate to pattern
                   3526:      47   LEN evaluated argument is not integer
                   3527:      48   LEN evaluated argument is negative or too large
                   3528:      49   NOTANY evaluated argument is not string
                   3529:      50   POS evaluated argument is not integer
                   3530:      51   POS evaluated argument is negative or too large
                   3531:      52   RPOS evaluated argument is not integer
                   3532:      53   RPOS evaluated argument is negative or too large
                   3533:      54   RTAB evaluated argument is not integer
                   3534:      55   RTAB evaluated argument is negative or too large
                   3535:      56   SPAN evaluated argument is not string
                   3536:      57   TAB evaluated argument is not integer
                   3537:      58   TAB evaluated argument is negative or too large
                   3538:      59   ANY argument is not string or expression
                   3539:      60   APPLY first arg is not natural variable name
                   3540:      61   ARBNO argument is not pattern
                   3541:      62   ARG second argument is not integer
                   3542:      63   ARG first argument is not program function name
                   3543:      64   ARRAY first argument is not integer or string
                   3544:      65   ARRAY first argument lower bound is not integer
                   3545:      66   ARRAY first argument upper bound is not integer
                   3546:      67   ARRAY dimension is zero,negative or out of range
                   3547:      68   ARRAY size exceeds maximum permitted
                   3548:      69   BREAK argument is not string or expression
                   3549:      70   BREAKX argument is not string or expression
                   3550:      71   CLEAR argument is not string
                   3551:      72   CLEAR argument has null variable name
                   3552: 
                   3553: 
                   3554:          MACRO SPITBOL V3.5
                   3555:                                                    PAGE 52 - [8.3]
                   3556:          Errors
                   3557: 
                   3558:      73   COLLECT argument is not integer
                   3559:      74   CONVERT second argument is not string
                   3560:      75   DATA argument is not string
                   3561:      76   DATA argument is null
                   3562:      77   DATA argument is missing a left paren
                   3563:      78   DATA argument has null datatype name
                   3564:      79   DATA argument is missing a right paren
                   3565:      80   DATA argument has null field name
                   3566:      81   DEFINE first argument is not string
                   3567:      82   DEFINE first argument is null
                   3568:      83   DEFINE first argument is missing a left paren
                   3569:      84   DEFINE first argument has null function name
                   3570:      85   Null arg name or missing ) in DEFINE first arg.
                   3571:      86   DEFINE function entry point is not defined label
                   3572:      87   DETACH argument is not appropriate name
                   3573:      88   DUMP argument is not integer
                   3574:      89   DUMP argument is negative or too large
                   3575:      90   DUPL second argument is not integer
                   3576:      91   DUPL first argument is not string or pattern
                   3577:      92   EJECT argument is not a suitable name
                   3578:      93   EJECT file does not exist
                   3579:      94   EJECT file does not permit page eject
                   3580:      95   EJECT caused non-recoverable output error
                   3581:      96   ENDFILE argument is not a suitable name
                   3582:      97   ENDFILE argument is null
                   3583:      98   ENDFILE file does not exist
                   3584:      99   ENDFILE file does not permit endfile
                   3585:     100   ENDFILE caused non-recoverable output error
                   3586:     101   EQ first argument is not numeric
                   3587:     102   EQ second argument is not numeric
                   3588:     103   EVAL argument is not expression
                   3589:     104   EXIT argument is not suitable integer or string
                   3590:     105   EXIT action not available in this implementation
                   3591:     106   EXIT action caused irrecoverable error
                   3592:     107   FIELD second argument is not integer
                   3593:     108   FIELD first argument is not datatype name
                   3594:     109   GE first argument is not numeric
                   3595:     110   GE second argument is not numeric
                   3596:     111   GT first argument is not numeric
                   3597:     112   GT second argument is not numeric
                   3598:     113   INPUT third argument is not a string
                   3599:     114   Inappropriate second argument for INPUT
                   3600:     115   Inappropriate first argument for INPUT
                   3601:     116   Inappropriate file specification for INPUT
                   3602:     117   INPUT file cannot be read
                   3603:     118   LE first argument is not numeric
                   3604:     119   LE second argument is not numeric
                   3605:     120   LEN argument is not integer or expression
                   3606:     121   LEN argument is negative or too large
                   3607:     122   LEQ first argument is not string
                   3608:     123   LEQ second argument is not string
                   3609:     124   LGE first argument is not string
                   3610:     125   LGE second argument is not string
                   3611:     126   LGT first argument is not string
                   3612:     127   LGT second argument is not string
                   3613:     128   LLE first argument is not string
                   3614: 
                   3615: 
                   3616:          MACRO SPITBOL V3.5
                   3617:                                                    PAGE 53 - [8.3]
                   3618:          Errors
                   3619: 
                   3620:     129   LLE second argument is not string
                   3621:     130   LLT first argument is not string
                   3622:     131   LLT second argument is not string
                   3623:     132   LNE first argument is not string
                   3624:     133   LNE second argument is not string
                   3625:     134   LOCAL second argument is not integer
                   3626:     135   LOCAL first arg is not a program function name
                   3627:     136   LOAD second argument is not string
                   3628:     137   LOAD first argument is not string
                   3629:     138   LOAD first argument is null
                   3630:     139   LOAD first argument is missing a left paren
                   3631:     140   LOAD first argument has null function name
                   3632:     141   LOAD first argument is missing a right paren
                   3633:     142   LOAD function does not exist
                   3634:     143   LOAD function caused input error during load
                   3635:     144   LPAD third argument not a string
                   3636:     145   LPAD second argument is not integer
                   3637:     146   LPAD first argument is not string
                   3638:     147   LT first argument is not numeric
                   3639:     148   LT second argument is not numeric
                   3640:     149   NE first argument is not numeric
                   3641:     150   NE second argument is not numeric
                   3642:     151   NOTANY argument is not string or expression
                   3643:     152   OPSYN third argument is not integer
                   3644:     153   OPSYN third argument is negative or too large
                   3645:     154   OPSYN second arg is not natural variable name
                   3646:     155   OPSYN first arg is not natural variable name
                   3647:     156   OPSYN first arg is not correct operator name
                   3648:     157   OUTPUT third argument is not a string
                   3649:     158   Inappropriate second argument for OUTPUT
                   3650:     159   Inappropriate first argument for OUTPUT
                   3651:     160   Inappropriate file specification for OUTPUT
                   3652:     161   OUTPUT file cannot be written to
                   3653:     162   POS argument is not integer or expression
                   3654:     163   POS argument is negative or too large
                   3655:     164   PROTOTYPE argument is not table or array
                   3656:     165   REMDR second argument is not integer
                   3657:     166   REMDR first argument is not integer
                   3658:     167   REMDR caused integer overflow
                   3659:     168   REPLACE third argument is not string
                   3660:     169   REPLACE second argument is not string
                   3661:     170   REPLACE first argument is not string
                   3662:     171   Null or unequally long 2nd, 3rd args to REPLACE
                   3663:     172   REWIND argument is not a suitable name
                   3664:     173   REWIND argument is null
                   3665:     174   REWIND file does not exist
                   3666:     175   REWIND file does not permit rewind
                   3667:     176   REWIND caused non-recoverable error
                   3668:     177   REVERSE argument is not string
                   3669:     178   RPAD third argument is not string
                   3670:     179   RPAD second argument is not integer
                   3671:     180   RPAD first argument is not string
                   3672:     181   RTAB argument is not integer or expression
                   3673:     182   RTAB argument is negative or too large
                   3674:     183   TAB argument is not integer or expression
                   3675:     184   TAB argument is negative or too large
                   3676: 
                   3677: 
                   3678:          MACRO SPITBOL V3.5
                   3679:                                                    PAGE 54 - [8.3]
                   3680:          Errors
                   3681: 
                   3682:     185   RPOS argument is not integer or expression
                   3683:     186   RPOS argument is negative or too large
                   3684:     187   SETEXIT argument is not label name or null
                   3685:     188   SPAN argument is not string or expression
                   3686:     189   SIZE argument is not string
                   3687:     190   STOPTR first argument is not appropriate name
                   3688:     191   STOPTR second argument is not trace type
                   3689:     192   SUBSTR third argument is not integer
                   3690:     193   SUBSTR second argument is not integer
                   3691:     194   SUBSTR first argument is not string
                   3692:     195   TABLE argument is not integer
                   3693:     196   TABLE argument is out of range
                   3694:     197   TRACE fourth arg is not function name or null
                   3695:     198   TRACE first argument is not appropriate name
                   3696:     199   TRACE second argument is not trace type
                   3697:     200   TRIM argument is not string
                   3698:     201   UNLOAD argument is not natural variable name
                   3699:     202   Input from file caused non-recoverable error
                   3700:     203   Input file record has incorrect format
                   3701:     204   Memory overflow
                   3702:     205   String length exceeds value of MAXLNGTH keyword
                   3703:     206   Output caused file overflow
                   3704:     207   Output caused non-recoverable error
                   3705:     208   Keyword value assigned is not integer
                   3706:     209   Keyword in assignment is protected
                   3707:     210   Keyword value assigned is negative or too large
                   3708:     211   Value assigned to keyword ERRTEXT not a string
                   3709:     212   Syntax error.  Value used where name is required
                   3710:     213   Syntax error.  Statement is too complicated.
                   3711:     214   Syntax error.  Bad label or misplaced continuation line
                   3712:     215   Syntax error.  Undefined or erroneous entry label
                   3713:     216   Syntax error.  Missing END line
                   3714:     217   Syntax error.  Duplicate label
                   3715:     218   Syntax error.  Duplicated goto field
                   3716:     219   Syntax error.  Empty goto field
                   3717:     220   Syntax error.  Missing operator
                   3718:     221   Syntax error.  Missing operand
                   3719:     222   Syntax error.  Invalid use of left bracket
                   3720:     223   Syntax error.  Invalid use of comma
                   3721:     224   Syntax error.  Unbalanced right parenthesis
                   3722:     225   Syntax error.  Unbalanced right bracket
                   3723:     226   Syntax error.  Missing right paren
                   3724:     227   Syntax error.  Right paren missing from goto
                   3725:     228   Syntax error.  Right bracket missing from goto
                   3726:     229   Syntax error.  Missing right array bracket
                   3727:     230   Syntax error.  Illegal character
                   3728:     231   Syntax error.  Invalid numeric item
                   3729:     232   Syntax error.  Unmatched string quote
                   3730:     233   Syntax error.  Invalid use of operator
                   3731:     234   Syntax error.  Goto field incorrect
                   3732:     235   Subscripted operand is not table or array
                   3733:     236   Array referenced with wrong number of subscripts
                   3734:     237   Table referenced with more than one subscript
                   3735:     238   Array subscript is not integer
                   3736:     239   Indirection operand is not name
                   3737:     240   Pattern match right operand is not pattern
                   3738: 
                   3739: 
                   3740:          MACRO SPITBOL V3.5
                   3741:                                                    PAGE 55 - [8.3]
                   3742:          Errors
                   3743: 
                   3744:     241   Pattern match left operand is not string
                   3745:     242   Function return from level zero
                   3746:     243   Function result in NRETURN is not name
                   3747:     244   Statement count exceeds value of STLIMIT keyword
                   3748:     245   Translation/execution time expired
                   3749:     246   Stack overflow
                   3750:     247   Invalid control card
                   3751:     248   Attempted redefinition of system function
                   3752:     249   Expression evaluated by name returned value
                   3753:     250   Insufficient memory to complete dump
                   3754:     251   Keyword operand is not name of defined keyword
                   3755:     252   Error on printing to interactive channel
                   3756:     253   Print limit exceeded on standard output channel
                   3757:     254   Erroneous argument to HOST
                   3758:     255   Error during execution of HOST
                   3759:     256   SORT/RSORT 1st arg not suitable ARRAY or TABLE
                   3760:     257   Erroneous 2nd arg in SORT/RSORT of vector
                   3761:     258   SORT/RSORT 2nd arg out of range or non-integer
                   3762:     259   FENCE function argument is not pattern
                   3763:     261   Addition caused real overflow
                   3764:     262   Division caused real overflow
                   3765:     263   Multiplication caused real overflow
                   3766:     264   Subtraction caused real overflow
                   3767:     265   External function argument is not real
                   3768:     266   Exponentiation caused real overflow
                   3769:     267   Exponentiation right operand is real not integer
                   3770:     268   Inconsistent value assigned to profile keyword
                   3771:     269   BUFFER first argument is not integer
                   3772:     270   BUFFER second argument is not string or buffer
                   3773:     271   BUFFER initial value too big for allocation
                   3774:     272   BUFFER first argument is not positive
                   3775:     273   Buffer size is too big
                   3776:     274   Requested buffer allocation exceeds MXLEN
                   3777:     275   APPEND first argument is not buffer
                   3778:     276   APPEND second argument is not string
                   3779:     277   INSERT third argument not integer
                   3780:     278   INSERT second argument not integer
                   3781:     279   INSERT first argument not buffer
                   3782:     280   INSERT fourth argument not a string
                   3783:     281   CHAR argument not integer
                   3784:     282   CHAR argument not in range
                   3785: 
                   3786: 
                   3787: 
                   3788: 
                   3789: 
                   3790: 
                   3791: 
                   3792: 
                   3793: 
                   3794: 
                   3795: 
                   3796: 
                   3797: 
                   3798: 
                   3799: 
                   3800: 
                   3801: 
                   3802:          MACRO SPITBOL V3.5
                   3803:                                                    PAGE 56 - [9]
                   3804:          Programming Notes
                   3805: 
                   3806: 
                   3807: 
                   3808:                         *------------------------*
                   3809:                           [9]  Programming Notes
                   3810:                         | [9]  Programming Notes |
                   3811:                         *------------------------*
                   3812: 
                   3813:     The  internal organization of SPITBOL is quite different from that
                   3814:     of  SNOBOL4.   Consequently  the   relative   speed   of   various
                   3815:     operations  differs.   This  section attempts to give some idea of
                   3816:     how to obtain high efficiency in SPITBOL programs.
                   3817: 
                   3818: 
                   3819:  9.1  Space Considerations
                   3820:  9.1  Space Considerations
                   3821:  __________ ______________
                   3822: 
                   3823:     The ANY, NOTANY, BREAK, BREAKX, SPAN functions use  translate  and
                   3824:     test  tables  for  arguments  longer  than one character.  A table
                   3825:     allocated for this purpose will be M words long by  N  bits  wide,
                   3826:     where  M  is  64, 128 or 256 (machine dependent) and N is the word
                   3827:     length in bits of the host computer.  For  each  function  call  a
                   3828:     bit  column  is  used so that a single table suffices for N calls.
                   3829:     With a constant  argument,  the  table  entry  is  precomputed  at
                   3830:     compile  time  thus avoiding erosion of space by repeated calls in
                   3831:     a run time loop.   Single  character  arguments  incur  no   space
                   3832:     overhead .
                   3833: 
                   3834:     Integers  and reals have an overhead of one word above that needed
                   3835:     by the usual hardware representation.
                   3836: 
                   3837:     Multidimensional arrays have a  space  overhead  of  8 + 2D  words
                   3838:     where  D is the number of dimensions.  One dimensional arrays with
                   3839:     a low bound of 1 (vectors ) are  treated  specially  and  have  an
                   3840:     overhead of only three words.
                   3841: 
                   3842:     The  space  needed  for  non-null elements of tables is 4 words in
                   3843:     addition to space  for  the  element  itself.   Each  table   hash
                   3844:     header  is  one  word.   Thus  the  number  of headers can be made
                   3845:     reasonably large without using  much  additional  space.   Program
                   3846:     defined  datatypes  require  3 + F words, where F is the number of
                   3847:     fields.  They are thus quite  compact  and  can  be  used  freely.
                   3848:     Each  variable  block requires 8 words plus space for the variable
                   3849:     name, the characters of  which  are  packed  several  to  a  word,
                   3850:     usually  using  6,  7 or 8 bits for each character.  This space is
                   3851:     constant irrespective of whether the name has a single  use     or
                   3852:     is  used  multiply as a label, function, variable etc.  This space
                   3853:     is never reclaimed once  it  has  been   allocated.   It  is  thus
                   3854:     inefficient  to   use  variables  to build tables with the unary $
                   3855:     operator.  Instead use the TABLE datatype.  The interpretive  code
                   3856:     produced  by  the  compiler is held in code blocks  and is subject
                   3857:     to garbage collection when no longer  accessible.   Advantage  can
                   3858:     be  taken  of  this by writing label-free initialising code at the
                   3859:     head of a program.  Even if labels are present it is  possible  to
                   3860:     make  initialising  code   collectable  by the artifice of calling
                   3861:     CODE with a string argument in which the labels are redeclared.
                   3862: 
                   3863: 
                   3864: 
                   3865: 
                   3866: 
                   3867:          MACRO SPITBOL V3.5
                   3868:                                                    PAGE 57 - [9.1]
                   3869:          Programming Notes
                   3870: 
                   3871: 
                   3872:     Considerable amounts of store  are  used  in  repeatedly  building
                   3873:     patterns.    They  should  either  be  pre-assigned  to  variables
                   3874:     outside program loops  or  alternatively  if  written  in-line  in
                   3875:     loops,  should  be  constant  so  that  they may be precomputed at
                   3876:     compile time in order to avoid this overhead.
                   3877: 
                   3878:     Setting &TRIM non-zero  ensures  that  memory  is  not  wasted  in
                   3879:     storing trailing blanks in strings.
                   3880: 
                   3881:     The   COLLECT  function  can  be  used  to  obtain  very  detailed
                   3882:     information of memory utilization for various structures.
                   3883: 
                   3884:     Modifications to a string type require that the string  be  copied
                   3885:     internally  first.   This  means  that space must be available for
                   3886:     two copies of the string to  co-exist  in  memory  simultaneously.
                   3887:     If  the  string  is  large  this  can lead to unanticipated memory
                   3888:     usage.  For example, consider the input loop:
                   3889:         LOOP CORPUS = CORPUS INPUT  :S(LOOP)
                   3890:     As this reads more and more lines, CORPUS grows larger, and  large
                   3891:     amounts  of  memory  (and  processor  time)  are spent copying the
                   3892:     'old' value of CORPUS before INPUT is appended to it.  The  buffer
                   3893:     type  is  helpful in avoiding this situation,  since modifications
                   3894:     to buffers  (via  APPEND,  INSERT  and  pattern  replacement)  are
                   3895:     performed directly on the existing buffer contents.
                   3896: 
                   3897: 
                   3898:  9.2  Speed Considerations
                   3899:  9.2  Speed Considerations
                   3900:  __________ ______________
                   3901: 
                   3902:     To  a  greater  extent  than  is the case with SNOBOL4, there is a
                   3903:     loss of efficiency in  encoding  complex  structures  as  strings.
                   3904:     Use  arrays,  tables,  buffers and program defined datatypes where
                   3905:     possible since all of these are highly efficient in SPITBOL.   The
                   3906:     fast  associative  lookup  (hashing) feature of the TABLE makes it
                   3907:     a particularly recommended feature  to  be  exploited  in  a  wide
                   3908:     range of applications.
                   3909: 
                   3910:     Programmers  frequently  do  not  appreciate that execution speeds
                   3911:     may be reduced  by  an  order  of  magnitude  if  poorly  designed
                   3912:     patterns  fruitlessly  scan  data  in   unanchored mode.  With the
                   3913:     pattern  matching  primitives  of  SPITBOL,  it   is   rare   that
                   3914:     unanchored  matching  is  necessary and since anchored matching is
                   3915:     much less expensive it is worth  acquiring the habit of  initially
                   3916:     setting  &ANCHOR  non-zero.   If unanchored matching is needed for
                   3917:     some purpose, take care that it is not unduly wasteful  with  data
                   3918:     for which match failure is common.
                   3919: 
                   3920:     The  binary  $ pattern assignment is rather faster than the binary
                   3921:     . pattern assignment and may be used freely.  SPITBOL  precomputes
                   3922:     constant  expressions  before execution.  No efficiency is lost by
                   3923:     writing pre-evaluable patterns  in-line  rather  than  predefining
                   3924:     them.    Use of the unary * to defer computation is useful in some
                   3925:     cases.  For example, consider the in-line matches -
                   3926:         X ANY('PQR') BAL PAT 'X' RPOS(0)
                   3927:         X ANY('PQR') BAL *PAT 'X' RPOS(0)
                   3928:     The  second  form  is  more  efficient,  since  the  compiler  can
                   3929: 
                   3930: 
                   3931:          MACRO SPITBOL V3.5
                   3932:                                                    PAGE 58 - [9.2]
                   3933:          Programming Notes
                   3934: 
                   3935:     precompute  the  entire  pattern  where  PAT  occurs as a deferred
                   3936:     expression.
                   3937: 
                   3938:     The ANY, NOTANY, BREAK, BREAKX, SPAN,  RSORT, SORT  functions  are
                   3939:     fast and highly recommended.
                   3940: 
                   3941:     ARB  and  ARBNO  are  slow  and can very often be avoided by using
                   3942:     other  constructions.   Time  for  datatype  conversions  may   be
                   3943:     significant.    Where  efficiency  is  important,  avoid  repeated
                   3944:     unnecessary conversions.
                   3945: 
                   3946:     The SETEXIT error intercepts are fast and may be used for  program
                   3947:     control as well as for debugging.
                   3948: 
                   3949:     Tracing  or  I/O  associating  a variable substantially slows down
                   3950:     references to it but there is no residual access  penalty  if  the
                   3951:     trace or I/O associations  are removed by STOPTR or DETACH.
                   3952: 
                   3953:     The  unary  $  (indirect) operator applied to a string argument in
                   3954:     SPITBOL corresponds to a hash search of existing  variables.   The
                   3955:     process  of  applying $ to a NAME (including the name of a natural
                   3956:     variable),  is  much  faster,  which  is  why   unary  dot   (name
                   3957:     operator)  returns  a NAME instead of a string.  It is thus better
                   3958:     to use names rather than strings in applications such  as  passing
                   3959:     variable names or labels indirectly as in
                   3960:         F(.X)            rather than
                   3961:         F("X") .
                   3962: 
                   3963:     Use  of the REPLACE function is optimised when, on repeated calls,
                   3964:     the second and third arguments are found to  be  unchanged,  since
                   3965:     in this case the previously constructed replace table is re-used.
                   3966: 
                   3967:     The  buffer  type  is  recommended for containing and manipulating
                   3968:     large strings.   Pattern  replacement  can  be  specified  with  a
                   3969:     buffer  name as the subject; the replacement is done on the buffer
                   3970:     contents corresponding  to  the  substring  matched  as  with  the
                   3971:     INSERT function.
                   3972: 
                   3973: 
                   3974:  9.3  Other Notes
                   3975:  9.3  Other Notes
                   3976:  __________ _____
                   3977: 
                   3978:     The pattern match
                   3979:        &ALPHABET LEN(N) LEN(1) $ CHAR
                   3980:     is  useful  to  put  into  "CHAR"  the  Nth  character of the host
                   3981:     machine character set.
                   3982: 
                   3983: 
                   3984:     The interrogation operator, unary ? , is useful to  annihilate  an
                   3985:     expression  which  is  evaluated  for its side effects rather than
                   3986:     for its value.  For example
                   3987:        S BREAK(*DELIM) $ K *?(TABLE<K> = TABLE<K> + 1)
                   3988: 
                   3989: 
                   3990: 
                   3991: 
                   3992: 
                   3993: 
                   3994: 
                   3995:          MACRO SPITBOL V3.5
                   3996:                                                    PAGE 59 - [10]
                   3997:          Specimen Programs
                   3998: 
                   3999: 
                   4000: 
                   4001:                         *------------------------*
                   4002:                           [10] Specimen Programs
                   4003:                         | [10] Specimen Programs |
                   4004:                         *------------------------*
                   4005: 
                   4006:     Specimen programs of several  different  types  are  listed.   The
                   4007:     first  one  is  especially  simple and uses no special facilities.
                   4008:     The second and third are a little more ambitious and make  use  of
                   4009:     program  defined  datatypes  and  tables  respectively.  Program 4
                   4010:     serves no function apart from showing some of the  techniques  for
                   4011:     producing  trace  output  and  providing  user handling of errors.
                   4012:     The  job  control  commands  needed  to  run  these  programs  are
                   4013:     implementation dependent and hence are listed in Section 12.
                   4014: 
                   4015: 
                   4016: 
                   4017: 
                   4018: 
                   4019: 
                   4020: 
                   4021:  10.1  Program 1
                   4022:  10.1  Program 1
                   4023:  _____________ _
                   4024: 
                   4025:     This  program reads data appended to its end and scans each record
                   4026:     to count the number of vowels  it  contains.   A  listing  of  all
                   4027:     records  constituting  the  program  and data is shown and this is
                   4028:     followed by a copy of  the  output  produced  on  compilation  and
                   4029:     execution.   The  -NOLIST  card  indicates  that no listing of the
                   4030:     program is required.   Note  the  use  of  the  SPITBOL  selection
                   4031:     feature  in  the  statement labelled NOMORE and the plus used as a
                   4032:     statement continuation symbol in column 1 of the next  card.   The
                   4033:     data  for  the  run   follows  the  END label of the program.  The
                   4034:     output includes  the version number of the SPITBOL compiler  which
                   4035:     will  be  updated  as  new  versions are introduced.  Compile time
                   4036:     statistics, output  from  the  program  execution  and  statistics
                   4037:     relating to the run are listed.
                   4038: 
                   4039: 
                   4040: 
                   4041: 
                   4042: 
                   4043: 
                   4044: 
                   4045: 
                   4046: 
                   4047: 
                   4048: 
                   4049: 
                   4050: 
                   4051: 
                   4052: 
                   4053: 
                   4054: 
                   4055: 
                   4056: 
                   4057: 
                   4058: 
                   4059: 
                   4060:          MACRO SPITBOL V3.5
                   4061:                                                    PAGE 60 - [10.1]
                   4062:          Specimen Programs
                   4063: 
                   4064:   -NOLIST
                   4065:   -TITLE  P R O G R A M   1
                   4066:   *
                   4067:   *    PROGRAM TO COUNT THE VOWELS IN LINES OF TEXT
                   4068:   *
                   4069:             &ANCHOR  = &TRIM = 1
                   4070:             VOWELS   = BREAK('AEIOU') LEN(1)
                   4071:   *
                   4072:   *    LOOP TO READ NEXT LINE OF INPUT
                   4073:   *
                   4074:   INP       INP      = COPY = INPUT                     :F(END)
                   4075:             N        = 0
                   4076:   *
                   4077:   *    LOOP TO SEARCH FOR VOWELS
                   4078:   *
                   4079:   FINDVWLS  INP VOWELS =                                :F(NOMORE)
                   4080:             N        = N + 1                            :(FINDVWLS)
                   4081:   *
                   4082:   *    ALL VOWELS HAVE BEEN FOUND
                   4083:   *
                   4084:   NOMORE    OUTPUT   = RPAD(N,2) (EQ(N,1) ' VOWEL ' , ' VOWELS')
                   4085:   +           ' FOUND IN "' COPY '"'                    :(INP)
                   4086:   END
                   4087:   QWERTY
                   4088:   1900 AND DECSYSTEM-10 SPITBOL
                   4089:   THE SLITHY TOVES DID GYRE AND GIMBLE IN THE WABE
                   4090:   12 * 2 = 24
                   4091: 
                   4092: 
                   4093: 
                   4094: 
                   4095:   STORE USED     1360
                   4096:   STORE LEFT     4477
                   4097:   COMP ERRORS    0
                   4098:   REGENERATIONS  0
                   4099:   COMP TIME-MSEC 160
                   4100: 
                   4101: 
                   4102:   1  VOWEL  FOUND IN "QWERTY"
                   4103:   5  VOWELS FOUND IN "1900 AND DECSYSTEM-10 SPITBOL"
                   4104:   13 VOWELS FOUND IN "THE SLITHY TOVES DID GYRE AND GIMBLE IN THE WABE"
                   4105:   0  VOWELS FOUND IN "12 * 2 = 24"
                   4106: 
                   4107: 
                   4108:   NORMAL END
                   4109:   IN STATEMENT   8
                   4110:   STMTS EXECUTED 58
                   4111:   RUN TIME-MSEC  100
                   4112:   MCSEC / STMT   1724
                   4113:   REGENERATIONS  0
                   4114: 
                   4115: 
                   4116: 
                   4117: 
                   4118: 
                   4119: 
                   4120: 
                   4121: 
                   4122:          MACRO SPITBOL V3.5
                   4123:                                                    PAGE 61 - [10.2]
                   4124:          Specimen Programs
                   4125: 
                   4126: 
                   4127: 
                   4128:  10.2  Program 2
                   4129:  10.2  Program 2
                   4130:  _____________ _
                   4131: 
                   4132:     This  is  a  somewhat  more  complex  program for sorting a set of
                   4133:     records.  There is no -NOLIST card present and  so  a  listing  of
                   4134:     the  program  is  produced  by the compiler with statement numbers
                   4135:     placed on the left.  The output includes the sorted list and  then
                   4136:     following  the  execution  statistics is a dump resulting from the
                   4137:     assignment to keyword &DUMP in statement 2.  This illustrates  the
                   4138:     excellent  diagnostic  assistance  available  should a program not
                   4139:     behave as  expected.   The  structure  of  the  trees  is  readily
                   4140:     discernible   in   the  dump  of  the  NODEs  of  which  they  are
                   4141:     constituted.   (Note  that  this  program  could  also  have  been
                   4142:     written using the SORT feature.)
                   4143: 
                   4144: 
                   4145:   P R O G R A M   2                                               PAGE 1
                   4146: 
                   4147:           *    PROGRAM TO SORT A SET OF RECORDS ON A KEY USING A TREE SORTING
                   4148:           *    TECHNIQUE.
                   4149:           *
                   4150:           *    DATATYPE WITH THE NECESSARY 4 FIELDS
                   4151:           *
                   4152:   1                 DATA('NODE(KEY,DAT,PRED,SUCC)')
                   4153:   2                 &DUMP    = 2; &ANCHOR = &TRIM = 1
                   4154:           *
                   4155:           *    ROUTINE TO ADD "DATA" TO A TREE SORTED BY "KEY".
                   4156:           *    "ROOT" IS PASSED BY REFERENCE (IT IS A SPITBOL NAME)
                   4157:           *    AND POINTS TO THE TREE TO BE USED.
                   4158:           *
                   4159:   4                 DEFINE('ADNODE(KEY,DATA,ROOT)PTR')          :(ADNEND)
                   4160:           *
                   4161:           *    CREATE TREE INITIALLY IF NOT YET IN EXISTENCE
                   4162:           *
                   4163:   5       ADNODE    $ROOT    = IDENT($ROOT) NODE(KEY,DATA)      :S(RETURN)
                   4164:   6                 PTR      = $ROOT
                   4165:           *
                   4166:           *    SEARCH TO FIND INSERTION POINT IN TREE
                   4167:           *
                   4168:   7       SEARCH    LLE(KEY,KEY(PTR))                           :S(BEFORE)
                   4169:           *
                   4170:           *    HERE IF NODE FOLLOWS THAT IN TREE
                   4171:           *
                   4172:   8       AFTER     PTR      = DIFFER(SUCC(PTR)) SUCC(PTR)      :S(SEARCH)
                   4173:   9                 SUCC(PTR) = NODE(KEY,DATA)                  :S(RETURN)
                   4174:           *
                   4175:           *    HERE IF KEY PRECEDES THAT IN TREE
                   4176:           *
                   4177:   10      BEFORE    PTR      = DIFFER(PRED(PTR)) PRED(PTR)      :S(SEARCH)
                   4178:   11                PRED(PTR) = NODE(KEY,DATA)                  :(RETURN)
                   4179:   12      ADNEND
                   4180: 
                   4181: 
                   4182: 
                   4183: 
                   4184: 
                   4185: 
                   4186:          MACRO SPITBOL V3.5
                   4187:                                                    PAGE 62 - [10.2]
                   4188:          Specimen Programs
                   4189: 
                   4190:           *
                   4191:           *    ROUTINE TO PRINT A SORTED BINARY TREE
                   4192:           *
                   4193:   13                DEFINE('PRINTREE(TREE)')                    :(ENDPRT)
                   4194:   14      PRINTREE  DIFFER(PRED(TREE)) PRINTREE(PRED(TREE))
                   4195:   15                OUTPUT   = KEY(TREE) '  ' DAT(TREE)
                   4196:   16                DIFFER(SUCC(TREE)) PRINTREE(SUCC(TREE))     :(RETURN)
                   4197:   17      ENDPRT
                   4198:           *
                   4199:           *    RECORDS OF WHICH
                   4200:           *    '1609   GALILEO :   TELESCOPE'
                   4201:           *    IS TYPICAL ARE TO BE SORTED BY DATE AND BY INVENTOR.
                   4202:           *    SPLIT OUT THE RECORDS AND ADD TO TWO SORTED TREES.
                   4203:           *
                   4204:   18      SORT      INP      = INPUT                            :F(PRINT)
                   4205:   19                INP LEN(4) $ DATE SPAN(' ') (BREAK(':') ':') $ INVR
                   4206:           .               SPAN(' ') REM $ INVN
                   4207:   20                ADNODE(DATE,RPAD(INVR,16) INVN,.DATREE)
                   4208:   21                ADNODE(RPAD(INVR,16),DATE '  ' INVN,.INVRTREE) :(SORT)
                   4209:           *
                   4210:           *    JOB DONE APART FROM PRINTING THE SORTED TREES
                   4211:           *
                   4212:   22      PRINT     OUTPUT   = 'INVENTIONS SORTED BY DATE'; OUTPUT =
                   4213:   24                PRINTREE(DATREE) ; OUTPUT =
                   4214:   26                OUTPUT   = 'INVENTIONS SORTED BY INVENTOR'; OUTPUT =
                   4215:   28                PRINTREE(INVRTREE)
                   4216:   29      END
                   4217: 
                   4218: 
                   4219:   INVENTIONS SORTED BY DATE
                   4220: 
                   4221:   1609  GALILEO :         TELESCOPE
                   4222:   1835  TALBOT W F :      PHOTOGRAPHY
                   4223:   1876  BELL A G :        TELEPHONE
                   4224:   1896  DIESEL R :        DIESEL ENGINE
                   4225:   1896  MARCONI G :       RADIO
                   4226:   1903  WRIGHT O & W :    POWERED FLIGHT
                   4227: 
                   4228:   INVENTIONS SORTED BY INVENTOR
                   4229: 
                   4230:   BELL A G :        1876  TELEPHONE
                   4231:   DIESEL R :        1896  DIESEL ENGINE
                   4232:   GALILEO :         1609  TELESCOPE
                   4233:   MARCONI G :       1896  RADIO
                   4234:   TALBOT W F :      1835  PHOTOGRAPHY
                   4235:   WRIGHT O & W :    1903  POWERED FLIGHT
                   4236: 
                   4237: 
                   4238:   NORMAL END
                   4239:   IN STATEMENT   29
                   4240:   STMTS EXECUTED 146
                   4241:   RUN TIME-MSEC  160
                   4242:   MCSEC / STMT   1095
                   4243:   REGENERATIONS  0
                   4244: 
                   4245: 
                   4246: 
                   4247: 
                   4248:          MACRO SPITBOL V3.5
                   4249:                                                    PAGE 63 - [10.2]
                   4250:          Specimen Programs
                   4251: 
                   4252:     DUMP OF NATURAL VARIABLES
                   4253: 
                   4254:   DATE = '1896'
                   4255:   DATREE = NODE `1
                   4256:   INP = '1896    DIESEL R :          DIESEL ENGINE'
                   4257:   INPUT = '1896    DIESEL R :          DIESEL ENGINE'
                   4258:   INVN = 'DIESEL ENGINE'
                   4259:   INVR = 'DIESEL R :'
                   4260:   INVRTREE = NODE `2
                   4261:   OUTPUT = 'WRIGHT O & W :    1903  POWERED FLIGHT'
                   4262:   REM = PATTERN
                   4263: 
                   4264: 
                   4265:   DUMP OF KEYWORD VALUES
                   4266: 
                   4267:   &ANCHOR = 1
                   4268:   &CODE = 0
                   4269:   &DUMP = 2
                   4270:   &ERRLIMIT = 0
                   4271:   &ERRTEXT = ''
                   4272:   &ERRTYPE = 0
                   4273:   &FNCLEVEL = 0
                   4274:   &FTRACE = 0
                   4275:   &INPUT = 1
                   4276:   &LASTNO = 28
                   4277:   &MAXLNGTH = 3104
                   4278:   &OUTPUT = 1
                   4279:   &RTNTYPE = 'RETURN'
                   4280:   &STCOUNT = 146
                   4281:   &STLIMIT = 50000
                   4282:   &STNO = 29
                   4283:   &TRACE = 0
                   4284:   &TRIM = 1
                   4285: 
                   4286: 
                   4287:   NODE `1
                   4288:   KEY(DATREE) = '1876'
                   4289:   DAT(DATREE) = 'BELL A G :      TELEPHONE'
                   4290:   PRED(DATREE) = NODE `5
                   4291:   SUCC(DATREE) = NODE `3
                   4292: 
                   4293:   NODE `2
                   4294:   KEY(INVRTREE) = 'BELL A G :      '
                   4295:   DAT(INVRTREE) = '1876  TELEPHONE'
                   4296:   SUCC(INVRTREE) = NODE `4
                   4297: 
                   4298:   NODE `3
                   4299:   KEY(NODE `3) = '1896'
                   4300:   DAT(NODE `3) = 'MARCONI G :     RADIO'
                   4301:   PRED(NODE `3) = NODE `11
                   4302:   SUCC(NODE `3) = NODE `7
                   4303: 
                   4304: 
                   4305: 
                   4306: 
                   4307: 
                   4308: 
                   4309: 
                   4310:          MACRO SPITBOL V3.5
                   4311:                                                    PAGE 64 - [10.2]
                   4312:          Specimen Programs
                   4313: 
                   4314:   NODE `4
                   4315:   KEY(NODE `4) = 'MARCONI G :     '
                   4316:   DAT(NODE `4) = '1896  RADIO'
                   4317:   PRED(NODE `4) = NODE `6
                   4318:   SUCC(NODE `4) = NODE `8
                   4319: 
                   4320:   NODE `5
                   4321:   KEY(NODE `5) = '1609'
                   4322:   DAT(NODE `5) = 'GALILEO :       TELESCOPE'
                   4323:   SUCC(NODE `5) = NODE `9
                   4324: 
                   4325:   NODE `6
                   4326:   KEY(NODE `6) = 'GALILEO :       '
                   4327:   DAT(NODE `6) = '1609  TELESCOPE'
                   4328:   PRED(NODE `6) = NODE `12
                   4329: 
                   4330:   NODE `7
                   4331:   KEY(NODE `7) = '1903'
                   4332:   DAT(NODE `7) = 'WRIGHT O & W :  POWERED FLIGHT'
                   4333: 
                   4334:   NODE `8
                   4335:   KEY(NODE `8) = 'WRIGHT O & W :  '
                   4336:   DAT(NODE `8) = '1903  POWERED FLIGHT'
                   4337:   PRED(NODE `8) = NODE `10
                   4338: 
                   4339:   NODE `9
                   4340:   KEY(NODE `9) = '1835'
                   4341:   DAT(NODE `9) = 'TALBOT W F :    PHOTOGRAPHY'
                   4342: 
                   4343:   NODE `10
                   4344:   KEY(NODE `10) = 'TALBOT W F :    '
                   4345:   DAT(NODE `10) = '1835  PHOTOGRAPHY'
                   4346: 
                   4347:   NODE `11
                   4348:   KEY(NODE `11) = '1896'
                   4349:   DAT(NODE `11) = 'DIESEL R :      DIESEL ENGINE'
                   4350: 
                   4351:   NODE `12
                   4352:   KEY(NODE `12) = 'DIESEL R :      '
                   4353:   DAT(NODE `12) = '1896  DIESEL ENGINE'
                   4354: 
                   4355: 
                   4356: 
                   4357: 
                   4358: 
                   4359: 
                   4360: 
                   4361: 
                   4362: 
                   4363: 
                   4364: 
                   4365: 
                   4366: 
                   4367: 
                   4368: 
                   4369: 
                   4370: 
                   4371: 
                   4372:          MACRO SPITBOL V3.5
                   4373:                                                    PAGE 65 - [10.3]
                   4374:          Specimen Programs
                   4375: 
                   4376: 
                   4377: 
                   4378:  10.3  Program 3
                   4379:  10.3  Program 3
                   4380:  _____________ _
                   4381: 
                   4382:     This  program reads a set of keywords and then processes a file in
                   4383:     order to count the number of occurrences of the  keywords  in  the
                   4384:     text  held  in the file.  Notice the simple method of making input
                   4385:     and output associations to the various input and output  files  in
                   4386:     statements  2,  3  and  4.   A  table  created  in  statement 7 is
                   4387:     initialised with the keywords at statement 8.   The  pattern  used
                   4388:     to  break out words is written out of line since this ensures that
                   4389:     matching in the inner loop at label WORDLOOP executes  at  maximum
                   4390:     speed.   In a similar application where an in-line pattern must be
                   4391:     used (e.g. if the string value  of  PUNCTUATION  were  subject  to
                   4392:     change  during  execution),  then  the  statement  would  best  be
                   4393:     written using deferred expressions as
                   4394: 
                   4395:       WORDLOOP INP BREAK(*PUNCTUATION) . WORD SPAN(*PUNCTUATION) =
                   4396: 
                   4397:     since,  being  constant,  the  pattern  can  be  pre-evaluated  at
                   4398:     compile  time.   This saves repeatedly building the pattern in the
                   4399:     loop, leaving only the necessary processing of the current  string
                   4400:     in  PUNCTUATION  as  additional  work to be done compared with the
                   4401:     version in  the  program.   The  searching  for  and  counting  of
                   4402:     keywords  in statement 11  is done using the inherently efficient,
                   4403:     system-provided hashing capability  of  the  TABLE  datatype.   To
                   4404:     economise  in  table  lookups,  the  table  entry is assigned to a
                   4405:     temporary variable in statement 10  whilst  a  check  is  made  to
                   4406:     ensure  that  it  is non-null.  The call of CONVERT used to access
                   4407:     non-null entries in the table does not sort the keys,  so  that  a
                   4408:     separate  sorting process would be necessary if sorted output were
                   4409:     required.  A listing of the filed output is given.
                   4410: 
                   4411: 
                   4412: 
                   4413: 
                   4414: 
                   4415: 
                   4416: 
                   4417: 
                   4418: 
                   4419: 
                   4420: 
                   4421: 
                   4422: 
                   4423: 
                   4424: 
                   4425: 
                   4426: 
                   4427: 
                   4428: 
                   4429: 
                   4430: 
                   4431: 
                   4432: 
                   4433: 
                   4434: 
                   4435: 
                   4436:          MACRO SPITBOL V3.5
                   4437:                                                    PAGE 66 - [10.3]
                   4438:          Specimen Programs
                   4439: 
                   4440:     Contents of file KEYWDS
                   4441:     ________ __ ____ ______
                   4442: 
                   4443:     BREEZE
                   4444:     DAY
                   4445:     MOON
                   4446:     OCEAN
                   4447:     SEA
                   4448:     SHIP
                   4449:     SUN
                   4450:     THE
                   4451:     TWAS
                   4452:     WATER
                   4453: 
                   4454:     Contents of file KEYTXT
                   4455:     ________ __ ____ ______
                   4456: 
                   4457:     THE FAIR BREEZE BLEW, THE WHITE FOAM FLEW,
                   4458:     THE FURROW FOLLOWED FREE:
                   4459:     WE WERE THE FIRST THAT EVER BURST
                   4460:     INTO THAT SILENT SEA.
                   4461: 
                   4462:     DOWN DROPT THE BREEZE, THE SAILS DROPT DOWN,
                   4463:     'TWAS SAD AS SAD COULD BE;
                   4464:     AND WE DID SPEAK ONLY TO BREAK
                   4465:     THE SILENCE OF THE SEA!
                   4466: 
                   4467:     DAY AFTER DAY, DAY AFTER DAY,
                   4468:     WE STUCK, NOR BREATH NOR MOTION;
                   4469:     AS IDLE AS A PAINTED SHIP
                   4470:     UPON A PAINTED OCEAN.
                   4471: 
                   4472:     WATER, WATER, EVERY WHERE,
                   4473:     AND ALL THE BOARDS DID SHRINK;
                   4474:     WATER, WATER, EVERY WHERE,
                   4475:     NOR ANY DROP TO DRINK.
                   4476: 
                   4477:             SAMUEL TAYLOR COLERIDGE
                   4478: 
                   4479: 
                   4480:     Contents of file KEYOUT at end of run
                   4481:     ________ __ ____ ______ __ ___ __ ___
                   4482: 
                   4483:          KEYWORD    NUMBER OF OCCURRENCES
                   4484:          -------    --------------------
                   4485: 
                   4486:              SUN .  .  .  .  . 0
                   4487:             MOON .  .  .  .  . 0
                   4488:             SHIP .  .  .  .  . 1
                   4489:             TWAS .  .  .  .  . 1
                   4490:              DAY .  .  .  .  . 4
                   4491:              SEA .  .  .  .  . 2
                   4492:              THE .  .  .  .  . 9
                   4493:           BREEZE .  .  .  .  . 2
                   4494:            OCEAN .  .  .  .  . 1
                   4495:            WATER .  .  .  .  . 4
                   4496: 
                   4497: 
                   4498: 
                   4499: 
                   4500: 
                   4501:          MACRO SPITBOL V3.5
                   4502:                                                    PAGE 67 - [10.3]
                   4503:          Specimen Programs
                   4504: 
                   4505: 
                   4506:   P R O G R A M   3                                               PAGE 1
                   4507: 
                   4508:           -PRINT
                   4509:           -IN80
                   4510:           *    PROGRAM TO COUNT THE OCCURRENCES OF KEYWORDS IN A PIECE
                   4511:           *    OF TEXT.  THE SEARCH FOR KEYWORDS IS EFFICIENTLY PERFORMED
                   4512:           *    BY HASHING INTO A TABLE.
                   4513:           *
                   4514:   1                 &ANCHOR = &TRIM = 1
                   4515:   2                 INPUT(.KEYS,1,'KEYWDS')                     :F(NOFILE)
                   4516:   3                 INPUT(.INPUT,2,'KEYTXT')                    :F(NOFILE)
                   4517:   4                 OUTPUT(.OUT,3,)
                   4518:   5                 PUNCTUATION = " .,;:'!"
                   4519:   6                 WORDPAT  = BREAK(PUNCTUATION) $ WORD SPAN(PUNCTUATION)
                   4520:   7                 KEYTABLE = TABLE(31)
                   4521:           *
                   4522:           *    LOOP IN WHICH KEYWORDS ARE READ IN AND HASHED INTO KEYTABLE
                   4523:           *
                   4524:   8       KEYLOOP   KEYTABLE<KEYS> = 0                          :S(KEYLOOP)
                   4525:           *
                   4526:           *    A SPACE IS ADDED TO LINES OF TEXT TO ENSURE MATCH SUCCESS
                   4527:           *
                   4528:   9       READLOOP  INP      = INPUT ' '                        :F(CONVERT)
                   4529:           *
                   4530:           *    INDIVIDUAL WORDS ARE EXTRACTED BY PATTERN MATCHING
                   4531:           *
                   4532:   10      WORDLOOP  INP WORDPAT =
                   4533:   11                KEYTABLE<WORD> = DIFFER(ENTRY = KEYTABLE<WORD>) ENTRY + 1
                   4534:   12                DIFFER(INP)                       :S(WORDLOOP)F(READLOOP)
                   4535:           *
                   4536:           *    FAILURE POINT
                   4537:           *
                   4538:   13      NOFILE    OUTPUT  = 'MISSING INPUT FILE'              :(END)
                   4539:   14      CONVFL    OUTPUT  = 'NO KEYWORDS FOUND'               :(END)
                   4540:           *
                   4541:           *    EXTRACT THE ENTRIES FROM THE TABLE INTO AN ARRAY
                   4542:           *
                   4543:   15      CONVERT   A        = CONVERT(KEYTABLE,'ARRAY')        :F(CONVFL)
                   4544:   16                OUT      = '     KEYWORD    NUMBER OF OCCURRENCES'
                   4545:   17                OUT      = '     -------    ---------------------'
                   4546:   18                OUT      =
                   4547:           *
                   4548:           *    PRINT THE ENTRIES
                   4549:           *
                   4550:   19                 I        = 1
                   4551:   20      PRINT    OUT   = LPAD(A[I,1],13) DUPL(' . ',5) A[I,2] :F(END)
                   4552:   21                I        = I + 1                            :(PRINT)
                   4553:   22      END
                   4554: 
                   4555: 
                   4556: 
                   4557: 
                   4558: 
                   4559: 
                   4560: 
                   4561: 
                   4562: 
                   4563:          MACRO SPITBOL V3.5
                   4564:                                                    PAGE 68 - [10.4]
                   4565:          Specimen Programs
                   4566: 
                   4567: 
                   4568: 
                   4569:  10.4  Program 4
                   4570:  10.4  Program 4
                   4571:  _____________ _
                   4572: 
                   4573:     This program  is  included  merely  to  show  how  errors  may  be
                   4574:     handled,  use  of  the  -NOFAIL  option  and  the  nature of trace
                   4575:     output.
                   4576: 
                   4577: 
                   4578:     Statement 1 sets the keyword &TRACE to permit printing  of  up  to
                   4579:     40  lines of trace output and the next two statements indicate the
                   4580:     items to be traced.  In statement 4 a limit of 10 is  set  on  the
                   4581:     number  of  errors  to be intercepted and processed by the program
                   4582:     itself, whilst the destination label in  the  event  of  an  error
                   4583:     occurring  is  identified  in  the  next statement.  The next line
                   4584:     contains a syntax error which results in the printing of an  error
                   4585:     message.   Following  statement  14 is a -NOFAIL control card, the
                   4586:     effect of which  is  to  cause  generation  of  special  code  for
                   4587:     subsequent  statements  containing  no conditional goto so that if
                   4588:     such a  statement  does,  contrary  to  the  implied  expectation,
                   4589:     actually  fail,  an  error  message  is  produced.  This can be of
                   4590:     great diagnostic value.   The  output  from  the  run  illustrates
                   4591:     various  points.   Execution  of  the program was not inhibited by
                   4592:     the compilation error.  The number of any statement where a  trace
                   4593:     association  is active is embedded in asterisks and printed on the
                   4594:     left so that starting with statement 4, we can trace the  flow  of
                   4595:     control  through the program on account of the trace intercept set
                   4596:     on the keyword &STCOUNT.  It will be  seen  that  the  compilation
                   4597:     error  in  statement 6 results in an execution error and that this
                   4598:     in turn causes a transfer of control to statement  18  where  user
                   4599:     processing  of  the error message is provided.  At statement 7 the
                   4600:     ACCESS trace of the INPUT variable produces lines of trace  output
                   4601:     indicating  the  value  which  it  currently  holds.   The jump to
                   4602:     statement 10 followed by the STOPTR statement results  in  turning
                   4603:     off  the  &STCOUNT trace.   An attempt to jump to the non-existent
                   4604:     label L100 produces a failure,  followed  immediately  by  another
                   4605:     when  an  attempt is made to form the sum 3 + 'L200'.  The loop at
                   4606:     statements 16 and 17 reads 10 elements into the array A  and  then
                   4607:     as  the  array  is  accessed outside its bounds, a statement error
                   4608:     occurs which is converted  to  a  run  time  failure  because  the
                   4609:     statement  was  compiled  in  -NOFAIL mode.  Had this not been the
                   4610:     case the loop could have run for many seconds before  the  integer
                   4611:     value  in I finally overflowed.  A correct program of course would
                   4612:     have had a conditional goto such as
                   4613: 
                   4614:                               :F(ARRAY.FULL.OR.DATA.USED.UP)
                   4615: 
                   4616:     in statement 16.  The  failure  terminates  execution  because  at
                   4617:     statement  13  the  limit  on the number of errors to be tolerated
                   4618:     was reset to zero.
                   4619: 
                   4620: 
                   4621: 
                   4622: 
                   4623: 
                   4624: 
                   4625: 
                   4626: 
                   4627:          MACRO SPITBOL V3.5
                   4628:                                                    PAGE 69 - [10.4]
                   4629:          Specimen Programs
                   4630: 
                   4631:     P R O G R A M   4                                              PAGE 1
                   4632: 
                   4633:           -PRINT
                   4634:           *
                   4635:           *    PROGRAM TO DEMONSTRATE TRACING AND ERROR HANDLING
                   4636:           *
                   4637:   1                 &TRACE   = &ANCHOR = &TRIM = 40
                   4638:   2                 TRACE(.INPUT,'ACCESS')
                   4639:   3                 TRACE(.STCOUNT,'K')
                   4640:   4                 &ERRLIMIT = 10
                   4641:   5                 SETEXIT(.ERROR)
                   4642:   6                 STATEMENT , WHICH SHOULD FAIL TO COMPILE
                   4643:                               ^
                   4644:   ERROR 223 -- SYNTAX ERROR.  INVALID USE OF COMMA
                   4645: 
                   4646:   7       LOOP                                             :S($INPUT)F(FAIL)
                   4647:   8       L1        OUTPUT   = '"L1"'                           :(LOOP)
                   4648:   9       L2        OUTPUT   = '"L2"'                           :(LOOP)
                   4649:   10      STOPTR    OUTPUT   = 'STOPTR'
                   4650:   11                STOPTR(.STCOUNT,'K')                        :(LOOP)
                   4651:   12      FAIL      X        = 3 + INPUT
                   4652:   13                &ERRLIMIT =
                   4653:   14                A        = ARRAY(10);     I = 1
                   4654:           -NOFAIL
                   4655:   16      READ      A<I>     = INPUT
                   4656:   17                I        = I + 1                            :(READ)
                   4657:           *
                   4658:           *    ERROR INTERCEPT ROUTINE
                   4659:           *
                   4660:   18      ERROR     OUTPUT   = 'ERROR NO.  '  &ERRTYPE '  IN STATEMENT'
                   4661:           .            &LASTNO
                   4662:   19                OUTPUT   = 'REASON FOR FAILURE :- '  &ERRTEXT
                   4663:   20                OUTPUT   =
                   4664:   21                SETEXIT(.ERROR)                             :(CONTINUE)
                   4665:   22      END
                   4666: 
                   4667: 
                   4668:   STORE USED     1279
                   4669:   STORE LEFT     4558
                   4670:   COMP ERRORS    1
                   4671:   REGENERATIONS  0
                   4672:   COMP TIME-MSEC 400
                   4673: 
                   4674: 
                   4675: 
                   4676: 
                   4677: 
                   4678: 
                   4679: 
                   4680: 
                   4681: 
                   4682: 
                   4683: 
                   4684: 
                   4685: 
                   4686: 
                   4687: 
                   4688: 
                   4689:          MACRO SPITBOL V3.5
                   4690:                                                    PAGE 70 - [10.4]
                   4691:          Specimen Programs
                   4692: 
                   4693:   ****4*******  &STCOUNT = 4
                   4694:   ****5*******  &STCOUNT = 5
                   4695:   ****6*******  &STCOUNT = 6
                   4696:   ****18******  &STCOUNT = 7
                   4697:   ERROR NO.  7  IN STATEMENT  6
                   4698:   ****19******  &STCOUNT = 8
                   4699:   REASON FOR FAILURE :- COMPILATION ERROR ENCOUNTERED DURING EXECUTION
                   4700:   ****20******  &STCOUNT = 9
                   4701: 
                   4702:   ****21******  &STCOUNT = 10
                   4703: 
                   4704:   ****7*******  &STCOUNT = 11
                   4705:   ****7*******  INPUT = 'L2'
                   4706:   ****9*******  &STCOUNT = 12
                   4707:   "L2"
                   4708:   ****7*******  &STCOUNT = 13
                   4709:   ****7*******  INPUT = 'STOPTR'
                   4710:   ****10******  &STCOUNT = 14
                   4711:   STOPTR
                   4712:   ****11******  &STCOUNT = 15
                   4713:   ****7*******  INPUT = 'L1'
                   4714:   "L1"
                   4715:   ****7*******  INPUT = 'L100'
                   4716: 
                   4717: 
                   4718:   ERROR NO.  38  IN STATEMENT  7
                   4719:   REASON FOR FAILURE :- GOTO UNDEFINED LABEL
                   4720: 
                   4721:   ****12******  INPUT = 'L200'
                   4722:   ERROR NO.  2  IN STATEMENT  12
                   4723:   REASON FOR FAILURE :- ADDITION RIGHT OPERAND IS NOT NUMERIC
                   4724: 
                   4725:   ****16******  INPUT = '1.111111'
                   4726:   ****16******  INPUT = '2.2'
                   4727:   ****16******  INPUT = '3.3'
                   4728:   ****16******  INPUT = '4.4'
                   4729:   ****16******  INPUT = '5.5'
                   4730:   ****16******  INPUT = '6.6'
                   4731:   ****16******  INPUT = '7.7'
                   4732:   ****16******  INPUT = '8.8'
                   4733:   ****16******  INPUT = '9.9'
                   4734:   ****16******  INPUT = '10.10'
                   4735: 
                   4736: 
                   4737:   ERROR 035 -- UNEXPECTED FAILURE IN -NOFAIL MODE
                   4738: 
                   4739:   IN STATEMENT   16
                   4740:   STMTS EXECUTED 51
                   4741:   RUN TIME-MSEC  280
                   4742:   MCSEC / STMT   5490
                   4743:   REGENERATIONS  0
                   4744: 
                   4745: 
                   4746: 
                   4747: 
                   4748: 
                   4749: 
                   4750: 
                   4751:          MACRO SPITBOL V3.5
                   4752:                                                    PAGE 71 - [11]
                   4753:          Implementation Information
                   4754: 
                   4755: 
                   4756: 
                   4757:                    *---------------------------------*
                   4758:                      [11] Implementation Information
                   4759:                    | [11] Implementation Information |
                   4760:                    *---------------------------------*
                   4761: 
                   4762:     SPITBOL  is  implemented  on  a   wide   variety   of   computers.
                   4763:     Condsiderable  efforts have been made to achieve compatibility and
                   4764:     portability between versions but inevitably  there  are  features,
                   4765:     values  or  limitations  particular  to each implementation.  This
                   4766:     section gives details for the VAX/VMS implementation.
                   4767: 
                   4768:     Note that version BCAB-2132  of  SPITBOL  or  higher  requires  at
                   4769:     least VMS version 2.
                   4770: 
                   4771: 
                   4772:  11.1  &CODE
                   4773:  11.1  &CODE
                   4774:  ___________
                   4775:     The  default  value  for  &CODE  in  VAX/VMS SPITBOL is one.  This
                   4776:     avoids a "successful completion" message  from  VMS  which  occurs
                   4777:     when &CODE is zero on exit.
                   4778: 
                   4779:     The  value  of  &CODE  is  used on exit as the return code to VMS.
                   4780:       There are two exceptions:
                   4781: 
                   4782:     - &CODE = 998 will print a message on termination  to  the  effect
                   4783:       that the standard output channel is not available.
                   4784: 
                   4785:     - &CODE  =  999  will print a message on termination to the effect
                   4786:       that execution was suppressed  (either  via  startup  switch  or
                   4787:       control card).
                   4788: 
                   4789:     The  VMS message number 196648 corresponds to "CLI-F-ABORT" and is
                   4790:     useful to signal general program failure  to  the  command  stream
                   4791:     via $STATUS/$SEVERITY.
                   4792: 
                   4793: 
                   4794:  11.2  &ERRTEXT
                   4795:  11.2  &ERRTEXT
                   4796:  ______________
                   4797:     The  initial  value  of &ERRTEXT contains the startup command line
                   4798:     text, excluding the command name and any trailing  comment.   When
                   4799:     reloading  from  a saved EXIT(n) file, if the value of n was -2 or
                   4800:     -1, the new command line will replace the value of &ERRTEXT.
                   4801: 
                   4802: 
                   4803:  11.3  &STLIMIT
                   4804:  11.3  &STLIMIT
                   4805:  ______________
                   4806:     The default value for &STLIMIT is one billion.  Maximum  value  is
                   4807:     2,147,403,647.   Note  that statement counting and checking can be
                   4808:     disabled by setting the value of &STLIMIT to -1.
                   4809: 
                   4810: 
                   4811: 
                   4812: 
                   4813: 
                   4814: 
                   4815: 
                   4816: 
                   4817: 
                   4818: 
                   4819: 
                   4820:          MACRO SPITBOL V3.5
                   4821:                                                    PAGE 72 - [11.4]
                   4822:          Implementation Information
                   4823: 
                   4824:  11.4  &TRIM
                   4825:  11.4  &TRIM
                   4826:  ___________
                   4827:     Records are never implicitly padded with blanks  on  output.   For
                   4828:     input,  any  trailing  blanks  received depend on the file and the
                   4829:     value of &TRIM.
                   4830: 
                   4831: 
                   4832:  11.5  Buffers
                   4833:  11.5  Buffers
                   4834:  _____________
                   4835:     VAX/VMS  SPITBOL  contains  an  additional  datatype  called   the
                   4836:     BUFFER.   This  is  described  in  the  section  on datatypes.  In
                   4837:     addition, new functions BUFFER, INSERT and APPEND have been  added
                   4838:     to  support  buffers.   These functions are described in detail in
                   4839:     Section 5.
                   4840: 
                   4841: 
                   4842: 
                   4843: 
                   4844: 
                   4845: 
                   4846: 
                   4847: 
                   4848: 
                   4849: 
                   4850: 
                   4851: 
                   4852: 
                   4853: 
                   4854: 
                   4855: 
                   4856: 
                   4857: 
                   4858: 
                   4859: 
                   4860: 
                   4861: 
                   4862: 
                   4863: 
                   4864: 
                   4865: 
                   4866: 
                   4867: 
                   4868: 
                   4869: 
                   4870: 
                   4871: 
                   4872: 
                   4873: 
                   4874: 
                   4875: 
                   4876: 
                   4877: 
                   4878: 
                   4879: 
                   4880: 
                   4881: 
                   4882: 
                   4883: 
                   4884: 
                   4885: 
                   4886:          MACRO SPITBOL V3.5
                   4887:                                                    PAGE 73 - [11.6]
                   4888:          Implementation Information
                   4889: 
                   4890: 
                   4891: 
                   4892:  11.6  Character Set for VAX/VMS SPITBOL
                   4893:  11.6  Character Set for VAX/VMS SPITBOL
                   4894:  _______________ ___ ___ _______ _______
                   4895: 
                   4896:     Character codes can  be  a  considerable  locus  of  confusion  in
                   4897:     SPITBOL.   The  SNOBOL4  language  does  not  define  a "standard"
                   4898:     graphic set, so in general an attempt has been made to conform  to
                   4899:     the   original  IBM/360 EBCDIC symbology where possible (excluding
                   4900:     the 'extended graphics').  This is the character style most  often
                   4901:     used in references and manuals.
                   4902: 
                   4903:     The  point where this is most likely to cause problems is with the
                   4904:     binary   bar   (alternation),   which   in   many   other    ASCII
                   4905:     implementations  is  the exclamation point.  Such programs as make
                   4906:     use of this convention must be editted -  OPSYN cannot be used  to
                   4907:     redefine  a  system  operator's  semantics in MACRO SPITBOL.  Note
                   4908:     also that the unary not-sign may be different.
                   4909: 
                   4910:     The correspondence between the  SNOBOL4 and VAX/VMS Macro  SPITBOL
                   4911:     source program character set is as follows:
                   4912: 
                   4913:     Character Name
                   4914:     _________ ____
                   4915:                         IBM SNOBOL4
                   4916:                         ___ _______
                   4917:                                        VAX/VMS SPITBOL
                   4918:                                        _______ _______
                   4919: 
                   4920:     Digits
                   4921:                         0..9
                   4922:                                        0..9
                   4923:     Letters
                   4924:                         A..Z
                   4925:                                        A..Z a..z
                   4926:     Left Parenthesis
                   4927:                         (
                   4928:                                        (
                   4929:     Right Parenthesis
                   4930:                         )
                   4931:                                        )
                   4932:     Left Angle Bracket
                   4933:                         <
                   4934:                                        < or [
                   4935:     Right Angle Bracket
                   4936:                         >
                   4937:                                        > or ]
                   4938:     Colon
                   4939:                         :
                   4940:                                        :
                   4941:     Semicolon
                   4942:                         ;
                   4943:                                        ;
                   4944:     Comma
                   4945:                         ,
                   4946:                                        ,
                   4947:     Equal Sign
                   4948:                         =
                   4949:                                        =
                   4950:     Double Quote
                   4951: 
                   4952: 
                   4953:          MACRO SPITBOL V3.5
                   4954:                                                    PAGE 74 - [11.6]
                   4955:          Implementation Information
                   4956: 
                   4957:                         "
                   4958:                                        "
                   4959:     Single Quote
                   4960:                         '
                   4961:                                        '
                   4962:     Negation
                   4963:                         <Not-Sign>
                   4964:                                        ~
                   4965:     Query
                   4966:                         ?
                   4967:                                        ?
                   4968:     Dollar Sign
                   4969:                         $
                   4970:                                        $
                   4971:     Point
                   4972:                         .
                   4973:                                        .
                   4974:     Exponentiation
                   4975:                         **
                   4976:                                        ** or !
                   4977:     Percent
                   4978:                         %
                   4979:                                        %
                   4980:     Asterisk
                   4981:                         *
                   4982:                                        *
                   4983:     Divide
                   4984:                         /
                   4985:                                        /
                   4986:     Plus
                   4987:                         +
                   4988:                                        +
                   4989:     Minus
                   4990:                         -
                   4991:                                        -
                   4992:     At
                   4993:                         @
                   4994:                                        @
                   4995:     Blank
                   4996:                         <Blank>
                   4997:                                        <Blank> or <Tab>
                   4998:     Alternation
                   4999:                         |
                   5000:                                        |
                   5001:     Number Sign
                   5002:                         #
                   5003:                                        #
                   5004:     Ampersand
                   5005:                         &
                   5006:                                        &
                   5007:     Underscore
                   5008:                         not avail.
                   5009:                                        _
                   5010: 
                   5011: 
                   5012: 
                   5013: 
                   5014: 
                   5015:          MACRO SPITBOL V3.5
                   5016:                                                    PAGE 75 - [11.7]
                   5017:          Implementation Information
                   5018: 
                   5019: 
                   5020: 
                   5021:  11.7  Form of DATE String
                   5022:  11.7  Form of DATE String
                   5023:  __________ __ ____ ______
                   5024:     DATE() returns an 22 character string of the form:
                   5025: 
                   5026:                           MM-DD-YYYY HH:MM:SS.CC
                   5027: 
                   5028:                                                            M      D
                   5029:     These  wall-time  components  designate  respectively: _onth, _ay,
                   5030:     Y     H     M       S                      C
                   5031:     _ear, _our, _inute, _econd and Hundredths (_enti-) seconds.
                   5032: 
                   5033: 
                   5034:  11.8  Errors
                   5035:  11.8  Errors
                   5036:  ____________
                   5037:     In addition to the errors  issued  by  the  interpreter,  the  VMS
                   5038:     interface  may  detect a number of conditions which it will report
                   5039:     using the default VMS condition handler.
                   5040: 
                   5041:     There follows the list of SPITBOL's VMS-specific errors,  and  the
                   5042:     severity  of  the  error.  Errors which have a severity of warning
                   5043:     or less can be suppressed  with the /NOWARN startup  command  line
                   5044:     switch.   (An  exception are the messages generated as a result of
                   5045:     an exception caused by a LOADed function image.)   Errors  with  a
                   5046:     listed  severity  of "Severe" will generally cause execution to be
                   5047:     aborted  with  the  DCL   $STATUS  and   $SEVERITY   symbols   set
                   5048:     appropriately.   Although  more  messages  may  be  added  in  the
                   5049:     future, existing message symbols and values will not.
                   5050: 
                   5051: 
                   5052:      Error Name    Severity          Description
                   5053: 
                   5054:      EXIT           Info     EXIT Module Saved - <Filename>
                   5055: 
                   5056:      EXSUP          Info     Execution Suppressed
                   5057: 
                   5058:      INSVIRMEM      Severe   Insufficient Virtual Memory
                   5059:        This can occur if the value specified on the /MINT switch, or
                   5060:     if
                   5061:        the value of the system VIRTUALPAGECNT parameter is too low (it
                   5062:        should generally be at least 4000.)
                   5063: 
                   5064:      LINETRUNC      Warning  Input Source Line Truncated
                   5065: 
                   5066:      LOADCRC        Severe   Load Incompatible, Please Retranslate
                   5067:     Source
                   5068:        SPITBOL has been modified since the EXIT(-n) module was saved.
                   5069: 
                   5070:      LOADMEM        Severe   <No longer used>
                   5071: 
                   5072:      LOADOPEN       Severe   Can't Open LOAD File - <Filename>
                   5073: 
                   5074:      LOADMAP        Severe   Error Mapping LOAD File - <Filename>
                   5075: 
                   5076:      LOADUNEXCOND   Warning  Loaded Function Failed To Handle
                   5077:                                Condition At PC=<Hex PC>
                   5078:        An external LOADed function was invoked and generated an
                   5079:     exception
                   5080:        condition which it did not handle.  Check to see that the image
                   5081: 
                   5082: 
                   5083:          MACRO SPITBOL V3.5
                   5084:                                                    PAGE 76 - [11.8]
                   5085:          Implementation Information
                   5086: 
                   5087:        base address was properly specified.
                   5088: 
                   5089:      LOADUNEXTRY    Warning  Will Attempt to Recover By Forcing
                   5090:     Failure
                   5091:        A loaded function was unable to return an acceptable result, so
                   5092:        SPITBOL attempts to continue execution by simulating failure.
                   5093: 
                   5094:      LOADVERS       Severe   Load Versions Incompatible,
                   5095:                                Please Retranslate Source
                   5096:        The version of SPITBOL used to save an EXIT(-n) module was not
                   5097:        the same as the one being used to load it.
                   5098: 
                   5099:      NOSYSOUT       Severe   Output File Not Accessable
                   5100:        The /LIST= or /OUT= device/file could not be opened for
                   5101:     writing.
                   5102: 
                   5103:      NOTEXITMOD     Severe   File is Not a Saved EXIT File -
                   5104:     <Filename>
                   5105:        The file implied or specified by /LOAD was not a saved SPITBOL
                   5106:        EXIT(-n) file.
                   5107: 
                   5108:      OPENOUT        Severe   Error Opening <Filename> as Output
                   5109: 
                   5110:      OPENIN         Severe   Error Opening <Filename> as Input
                   5111: 
                   5112:      PAUSE          Info     Paused at Statement <Stmt #>
                   5113:        This is issued as a consequence of executing an EXIT(0).  Enter
                   5114:        CONTINUE to resume execution.
                   5115: 
                   5116:      STACKOVFL      Severe   Virtual Stack Space Exhausted
                   5117:        This is a severe stack overflow which will not be seen (SPITBOL
                   5118:        will issue its own stack overflow through the standard error
                   5119:        handling mechanism) unless SPITBOL is improperly linked.
                   5120: 
                   5121:      SYNTAX         Severe   Syntax Error In Command Line
                   5122: 
                   5123:      BADLINK        Severe   Incorrectly specified BASE(s) in SPITBOL
                   5124:     link
                   5125:        The symbol LOAD_BASE is higher than the start of the
                   5126:     interpreter
                   5127:        (BASE=) or STACK_LIMIT is too close to LOAD_BASE.
                   5128: 
                   5129:      LOADBADINT     Warning  Loaded function returned invalid
                   5130:                                integer result pointer
                   5131: 
                   5132:      LOADBADREAL    Warning  Loaded function returned invalid real
                   5133:                                number result ptr
                   5134: 
                   5135:      LOADBADSTRING  Warning  Loaded function returned invalid string
                   5136:                                descriptor
                   5137: 
                   5138:      LOADBADUNCONV  Warning  Loaded function returned bad block for
                   5139:                                unconverted result
                   5140: 
                   5141: 
                   5142: 
                   5143: 
                   5144: 
                   5145:          MACRO SPITBOL V3.5
                   5146:                                                    PAGE 77 - [11.9]
                   5147:          Implementation Information
                   5148: 
                   5149: 
                   5150: 
                   5151:  11.9  EXIT Function Usage
                   5152:  11.9  EXIT Function Usage
                   5153:  __________ ________ _____
                   5154:     The EXIT  function  has  been  implemented  in  all  forms  except
                   5155:     positive  integer  arguments  (that  is  to say, there is no total
                   5156:     image save).  Each of the forms is described below.
                   5157: 
                   5158: 
                   5159:  11.9.1  EXIT(0) Usage
                   5160:  11.9.1  EXIT(0) Usage
                   5161:     EXIT(0) will pause the program with a message;  a  DCL  "CONTINUE"
                   5162:     command  will  continue  execution.  The message can be suppressed
                   5163:     with the /NOWARN command line option.
                   5164: 
                   5165: 
                   5166:  11.9.2  EXIT(String) Usage
                   5167:  11.9.2  EXIT(String) Usage
                   5168:     EXIT(string) will cause SPITBOL  to  exit  and  "string"  will  be
                   5169:     given  to  the command interpreter as the next command.  Note that
                   5170:     this subsumes the normal SPITBOL  semantics  of  EXIT(string)  for
                   5171:     chain  execution  if the string is of the form "RUN image".  It is
                   5172:     also possible to initiate a command file  (including  one  written
                   5173:     by   the   program   itself)   if  the  string  is  of  the  form:
                   5174:     "@command-file".
                   5175: 
                   5176: 
                   5177:  11.9.3  EXIT(-n) Usage
                   5178:  11.9.3  EXIT(-n) Usage
                   5179:     EXIT(-n) is implemented, and will save the impure segments of  the
                   5180:     interpreter  in  a  specially formatted block mode file.  The name
                   5181:     for this file is the same as the  standard  input  file,  with  an
                   5182:                       S       EX
                   5183:     extension ".SEX" (SPITBOL EXit!) under the default directory.   If
                   5184:     such  a  file already exists, it will be reused (with an extension
                   5185:     of space if required), otherwise a new file  is  allocated.    The
                   5186:     startup   switch   "/LOAD[=filename]"   can  be  used  to  load  a
                   5187:     previously saved .SEX file.  If the "=filename" is  not  specified
                   5188:     on  the  load, the default LOAD name is the same as that described
                   5189:     above.  Specification of  /LOAD  does  not  obviate  the  need  to
                   5190:     specify  a standard input file, although it need not have the same
                   5191:     name as the save file,  and trivially could be "NL:" if no use  is
                   5192:     to be made of the standard input channel.
                   5193: 
                   5194:     Certain  remarks are in order regarding this form of EXIT.  When a
                   5195:     previously saved .SEX file is loaded, SPITBOL  performs  a  number
                   5196:     of  fairly  extensive  checks to verify that the segment was saved
                   5197:     under the same version of SPITBOL that is being used to  load  it.
                   5198:     If  it is not, the load will not work and one of a number of fatal
                   5199:     errors will be issued.  The conclusion should  be  that  the  file
                   5200:     created  by  EXIT  is not really analogous to a "permanent" object
                   5201:     or executable binary.   The  original  source  and  data  must  be
                   5202:     retained in the event that a retranslation is indicated.
                   5203: 
                   5204:     One  other point should be noted as regards EXIT(-n).  Neither the
                   5205:     status of open files, nor the contents of LOAD(...)  functions  is
                   5206:     preserved  across  an  EXIT(-n);  this includes the standard input
                   5207:     and output files, which are instead associated anew when the  exit
                   5208:     module  is reloaded using the filenames given on the /LOAD startup
                   5209:     line.   In general, INPUT(...), OUTPUT(...)  and  LOAD(...)  calls
                   5210:     must  be  made  after  the  call  to  EXIT(-n).   In addition, the
                   5211: 
                   5212: 
                   5213:          MACRO SPITBOL V3.5
                   5214:                                                    PAGE 78 - [11.9.3]
                   5215:          Implementation Information
                   5216: 
                   5217:     load-time  values  (default  or  explicit)  of  /MINC  and   /MINT
                   5218:     override  whatever  values were in effect when the exit module was
                   5219:     saved (SPITBOL will, however,  always  attempt  to  obtain  enough
                   5220:     virtual  space  to  hold  the  impure  data  of  the  exit module,
                   5221:     regardless of the setting of /MINT.)  If the EXIT(-1) or  EXIT(-2)
                   5222:     forms  are  used,  then  the load-time values of the other startup
                   5223:     command line switches override the  values  at  the  time  of  the
                   5224:     EXIT.
                   5225: 
                   5226: 
                   5227:  11.10  FENCE(PATTERN)
                   5228:  11.10  FENCE(PATTERN)
                   5229:  _____________________
                   5230:     VAX/VMS  SPITBOL contains an additional intrinsic pattern matching
                   5231:     function called FENCE.  This function is described  in  Section  5
                   5232:     in detail.
                   5233: 
                   5234: 
                   5235:  11.11  HOST
                   5236:  11.11  HOST
                   5237:  ___________
                   5238:     The  only defined entry to HOST is when all arguments are null, in
                   5239:     which case, HOST() returns the identifying string of the form:
                   5240: 
                   5241:                   VAX:VMS:sitename:username:accountname
                   5242: 
                   5243:     "Sitename" is derived from  a  translation  of  the  logical  name
                   5244:     "SYS$SITENAME"  to  obtain  a  site name both for HOST and for the
                   5245:     banner.  The translated string must be 28 or fewer characters.
                   5246: 
                   5247: 
                   5248:  11.12  Range of Integers
                   5249:  11.12  Range of Integers
                   5250:  ____________ __ ________
                   5251:     Integers are represented in a single  VAX  32-bit  longword.   The
                   5252:     range for integers is: [ -2,147,483,648 , +2,147,483,647 ].
                   5253: 
                   5254: 
                   5255: 
                   5256: 
                   5257: 
                   5258: 
                   5259: 
                   5260: 
                   5261: 
                   5262: 
                   5263: 
                   5264: 
                   5265: 
                   5266: 
                   5267: 
                   5268: 
                   5269: 
                   5270: 
                   5271: 
                   5272: 
                   5273: 
                   5274: 
                   5275: 
                   5276: 
                   5277: 
                   5278: 
                   5279: 
                   5280: 
                   5281:          MACRO SPITBOL V3.5
                   5282:                                                    PAGE 79 - [11.13]
                   5283:          Implementation Information
                   5284: 
                   5285: 
                   5286: 
                   5287:  11.13  INPUT/OUTPUT
                   5288:  11.13  INPUT/OUTPUT
                   5289:  ___________________
                   5290:     All  VAX/VMS  Macro  SPITBOL  I/O is processed through RMS (Record
                   5291:     Management Services).  The general form of the  INPUT/OUTPUT  call
                   5292:     in Macro SPITBOL is:
                   5293: 
                   5294:                       XXXPUT(Var,Filearg1,Filearg2)
                   5295: 
                   5296:     "Filearg1"  may  be any Macro SPITBOL object that can be converted
                   5297:     to a name (e.g. number or string).  It has no significance to  the
                   5298:     I/O  system  as  such,  however  it represents a unique binding to
                   5299:     this I/O channel,  and it can thus be used in subsequent calls  to
                   5300:     INPUT,  OUTPUT,  REWIND,  ENDFILE and EJECT.  If Filearg1 is null,
                   5301:     an INPUT call refers to the standard  input  channel  association,
                   5302:     and  an  OUTPUT  call  similarly  refers  to  the  standard output
                   5303:     channel.   It  is  permitted  to  reassign  these   channels   via
                   5304:     INPUT/OUTPUT,  but note that SPITBOL does not allow null arguments
                   5305:     to REWIND or ENDFILE.
                   5306: 
                   5307:     "Filearg2" differs slightly from the form shown in Section  5  for
                   5308:     the INPUT and OUTPUT functions, and has the form:
                   5309: 
                   5310:                        "Filespec/Switch/Switch/..."
                   5311: 
                   5312:     where  all  components,  including  "Filespec"  are  optional.  If
                   5313:     Filespec is given, the current channel (if any) is closed out  and
                   5314:     a  new  association  to the given Filespec is created.  "Filespec"
                   5315:     is  given   in   standard   VMS/RMS   form   for   a   device/file
                   5316:     specification.   If  the  Filespec  is  omitted  then any switches
                   5317:     specified are processed  for  the  association,  but  the  present
                   5318:     association  to  the  channel  remains  unchanged.   If the entire
                   5319:     Filearg2 is null, then this  reduces  to  simply  I/O  associating
                   5320:     "Var" to the channel designated by Filearg1.
                   5321: 
                   5322:     Any  given "Filearg1" channel can be associated for both INPUT and
                   5323:     OUTPUT, however any such dual associations must  be  formed  prior
                   5324:     to  opening  the  channel  in order to avoid an RMS error when the
                   5325:     channel is used in a  manner  for  which  is  was  not  originally
                   5326:     opened.   A  channel  is opened for I/O activity indirectly due to
                   5327:     the first I/O reference to it.  The call to  INPUT  or  OUTPUT  by
                   5328:     itself  causes no I/O activity, but only establishes the nature of
                   5329:     the variable-to-channel and channel-to-file associations that  can
                   5330:     be   used  later.   The  first  I/O  reference  to  a  channel  or
                   5331:     channel-associated variable causes either an OPEN or CREATE to  be
                   5332:     issued.   The  OPEN  (an existing file) is issued unless an OUTPUT
                   5333:     association to the channel has been made, in which case  a  CREATE
                   5334:     (new  file)  will  be issued.  The occurrence of some switches can
                   5335:     modify this default action.
                   5336: 
                   5337:     Note that all I/O sequential in nature; the default mode  of  file
                   5338:     creation  is  variable-length,  carriage  return  delimited record
                   5339:     attributes.   It is possible to  process  existing  indexed  files
                   5340:     transparently  through RMS, however, sequential access is the only
                   5341:     processing   mode   available,   regardless    of    the    file's
                   5342:     characteristics.
                   5343: 
                   5344: 
                   5345:          MACRO SPITBOL V3.5
                   5346:                                                    PAGE 80 - [11.13.1]
                   5347:          Implementation Information
                   5348: 
                   5349: 
                   5350: 
                   5351:  11.13.1  FILEARG2 SWITCHES
                   5352:  11.13.1  FILEARG2 SWITCHES
                   5353:     The   following   switches  are  available  for  specification  on
                   5354:     Filearg2.  They must be specified in upper-case.  In  many  cases,
                   5355:     it  is  possible  to  precede  the  switch name by the prefix "NO"
                   5356:     which indicates that the condition indicated by the switch  is  to
                   5357:     be  inverted  for  this channel.  For switches which apply only to
                   5358:     terminal I/O, their presence is ignored when  dealing  with  other
                   5359:     devices or files.
                   5360: 
                   5361:         SWITCH           _ _ _ _ _ _ _ _ _ _ _
                   5362:         ______           D_E_S_C_R_I_P_T_I_O_N
                   5363: 
                   5364:          /CCO   Cancel   terminal   control  O  on  subsequent  output
                   5365:                 operations.
                   5366:          /CIF   If  the  named  file  already  exists,  it  is   used.
                   5367:                 Otherwise,  a  new  file  is created.  Note that if an
                   5368:                 existing  sequential  variable-length  file  is  being
                   5369:                 processed,  /EOF  must  also  be  specified  since RMS
                   5370:                 cannot  rewrite   records   in   such   files.    This
                   5371:                 restriction does not apply to indexed files.
                   5372:          /CR    Set  CR/LF  file  attributes  for  CREATE  operations.
                   5373:                 Note that an  output  association  to  "TT:/-CR"  will
                   5374:                 thus  suppress the usual carriage return and line feed
                   5375:                 after each output assignment to the terminal.
                   5376:          /DLT   Delete the file when it is closed.
                   5377:          /EOF   Position  to  end-of-file  on  open.   If  an   OUTPUT
                   5378:                 association  has  been made, the presence of /EOF will
                   5379:                 cause an OPEN to be issued rather than a CREATE.
                   5380:          /FTN   Set  FORTRAN-type  carriage  control  attributes   for
                   5381:                 CREATE.   This  switch  is mutually exclusive with the
                   5382:                 "CR" switch.
                   5383:          /MXV   Maximize the version number of the file  on  a  CREATE
                   5384:                 between  any specified version and one higher than the
                   5385:                 highest existing verion.
                   5386:          /PTA   Purge the terminal type-ahead  buffer  for  subsequent
                   5387:                 terminal input on this channel.
                   5388:          /RNE   For  a  terminal  input-associated channel, subsequent
                   5389:                 input is not to be echoed.
                   5390:          /RNF   For terminal-associated  input,  control-U,  control-R
                   5391:                 and  DELETE  characters are passed in the input string
                   5392:                 and are not taken as control characters.
                   5393:          /SCF   Submit this file to the system standard  batch  stream
                   5394:                 when it is closed.
                   5395:          /SPL   Submit  this  file  to the system standard spool queue
                   5396:                 when it is closed.
                   5397:          /SUP   Supercede any existing file on CREATE.
                   5398:          /TEF   Truncate the file to actual EOF when it is closed.
                   5399: 
                   5400: 
                   5401: 
                   5402: 
                   5403: 
                   5404: 
                   5405: 
                   5406: 
                   5407: 
                   5408: 
                   5409:          MACRO SPITBOL V3.5
                   5410:                                                    PAGE 81 - [11.13.2]
                   5411:          Implementation Information
                   5412: 
                   5413: 
                   5414: 
                   5415:  11.13.2  I/O EXAMPLES
                   5416:  11.13.2  I/O EXAMPLES
                   5417:     Here are a few examples of INPUT/OUTPUT calls.  The  colons  (":")
                   5418:     represent code sequences which are not shown.
                   5419: 
                   5420:     1. Attach  the user's terminal for input without echoing the first
                   5421:        line read in.
                   5422: 
                   5423:             INPUT(.TTNE,1,'TT:/RNE')
                   5424:                      :
                   5425:             FIRST_LINE = TTNE
                   5426:             INPUT(.TTNE,1,'/NORNE')
                   5427:                      :
                   5428: 
                   5429: 
                   5430:     2. Write  to  a  new  file  OUT.DAT  and  spool  it  when  SPITBOL
                   5431:        terminates.
                   5432: 
                   5433:             OUTPUT(.OUTFILE,1,'OUT.DAT/SPL')
                   5434: 
                   5435: 
                   5436:     3. Write  to  an  intermediate  file, then rewind it, read through
                   5437:        it, and delete it.
                   5438: 
                   5439:             INPUT(.INTER,1,'SCRATCH.DAT/DLT')
                   5440:             OUTPUT(.INTER,1)
                   5441:                     :
                   5442:        WRITELOOP
                   5443:             INTER = X
                   5444:                     :
                   5445:             REWIND(1)
                   5446:        READLOOP
                   5447:             X = INTER   :F(EXIT)
                   5448:                     :
                   5449:        EXIT
                   5450:             ENDFILE(1)
                   5451:        END
                   5452: 
                   5453: 
                   5454:     4. Append the record "***END***" to an existing file:
                   5455: 
                   5456:             OUTPUT(.OLDFILE,1,'OLDFILE.DAT/EOF/CIF')
                   5457:             OLDFILE = '***END***'
                   5458:        END
                   5459: 
                   5460: 
                   5461: 
                   5462: 
                   5463: 
                   5464: 
                   5465: 
                   5466: 
                   5467: 
                   5468: 
                   5469: 
                   5470: 
                   5471: 
                   5472:          MACRO SPITBOL V3.5
                   5473:                                                    PAGE 82 - [11.14]
                   5474:          Implementation Information
                   5475: 
                   5476: 
                   5477: 
                   5478:  11.14  Linking SPITBOL
                   5479:  11.14  Linking SPITBOL
                   5480:  ______________ _______
                   5481: 
                   5482: 
                   5483:     SPITBOL is delivered pre-linked and ready for use.  Some sites  or
                   5484:     users  may  wish  to  link their own copies.  Modifications to the
                   5485:     source are not encouraged, as it renders much more  difficult  the
                   5486:     process  of  diagnosing  trouble  reports.  If trouble reports are
                   5487:     submitted, the implementor requests that the original,  unmodified
                   5488:     interpreter be used to provide the necessary information.
                   5489: 
                   5490:     The normal link command is:
                   5491: 
                   5492:          $
                   5493:          _ LINK/SYMB=SYS$SYSTEM:SPITBOL/EXE=SYS$SYSTEM:SPITBOL -
                   5494:          $
                   5495:          __     SYS$LIBRARY:SPITBOL/OPT
                   5496: 
                   5497:     The recommended SPITBOL.OPT linker options file is:
                   5498: 
                   5499:          SPITV35,SPITGO,SPITMSGS,SPITSYS,SPITIOSYS,-
                   5500:          SYS$SYSTEM:SYS.STB/SELECT
                   5501:          BASE=%X100000
                   5502:          IOSEGMENT=128
                   5503:          STACK=10
                   5504:          SYMBOL=LOAD_BASE,%X7FE00
                   5505:          SYMBOL=STACK_LIMIT,%X10000
                   5506: 
                   5507:     Note  that  VAX/VMS  SPITBOL  is  a  licensed product and sources,
                   5508:     objects and executable images are for use only  on  the  system(s)
                   5509:     where  the  license  applies.   This applies both to the delivered
                   5510:     files as well as any modified versions of them.
                   5511: 
                   5512: 
                   5513:  11.15  Terminal Listing Options
                   5514:  11.15  Terminal Listing Options
                   5515:  _______________ _______ _______
                   5516:     If  the  standard  output  channel  is  a  terminal   device,   an
                   5517:     abbreviated  listing  format  is  used  by default.  See below for
                   5518:     details.
                   5519: 
                   5520: 
                   5521: 
                   5522: 
                   5523: 
                   5524: 
                   5525: 
                   5526: 
                   5527: 
                   5528: 
                   5529: 
                   5530: 
                   5531: 
                   5532: 
                   5533: 
                   5534: 
                   5535: 
                   5536: 
                   5537: 
                   5538: 
                   5539: 
                   5540:          MACRO SPITBOL V3.5
                   5541:                                                    PAGE 83 - [11.16]
                   5542:          Implementation Information
                   5543: 
                   5544: 
                   5545: 
                   5546:  11.16  LOAD Function Usage
                   5547:  11.16  LOAD Function Usage
                   5548:  ___________ ________ _____
                   5549:     The LOAD function is implemented with the  general  philosophy  of
                   5550:     permitting  a  true  dynamic  load  of  externally  linked  images
                   5551:     without  any  necessity  for  resorting  to  MACRO-32  or  similar
                   5552:     machine-level  coding.  The first argument to LOAD is as described
                   5553:     in Section 5.  The second argument  string  is  the  name  of  the
                   5554:     image  to  be  loaded.   The usual defaults (those of the process)
                   5555:     apply to this  name;   the  default  extension  is  ".EXE".   This
                   5556:     string  should  never  be null, that form is reserved for a future
                   5557:     implementation of a static LOAD.
                   5558: 
                   5559:     The  general  process  for  creating  a  LOADable  image  can   be
                   5560:     summarized as follows:
                   5561: 
                   5562:       1. Prepare  and  debug  the  external  subroutine(s) you want to
                   5563:          link into  a  loadable  function.   The  code  should  be  as
                   5564:          thoroughly   checked   out  as  possible.    Debugging  under
                   5565:          control of SPITBOL is difficult, and in extreme  cases,  bugs
                   5566:          can  corrupt  the  interpreter's  store,  making them all but
                   5567:          impossible to locate.
                   5568: 
                   5569:          Any language(s) can  be  used  to  program  the  subprograms,
                   5570:          however  users of high-level languages usually need to follow
                   5571:          some special guidelines (see below).
                   5572: 
                   5573:       2. Link an image consisting of the modules required.  The  image
                   5574:          must  be  linked  at  a  suitable base address if it contains
                   5575:          positionally dependent content (see below).  The link  should
                   5576:          incorporate  a  search  of  SPITBOL's  symbol  table to avoid
                   5577:          duplication of  the  run-time  library  in  the  image's  own
                   5578:          virtual  space.   The  image  must  have  a  defined transfer
                   5579:          address in user space.
                   5580: 
                   5581:       3. Run the  SPITBOL  program  and  issue  the  LOAD  call.   The
                   5582:          function can now be used as an ordinary SPITBOL function.
                   5583: 
                   5584:     Details on each of these steps follow.
                   5585: 
                   5586: 
                   5587: 
                   5588: 
                   5589: 
                   5590: 
                   5591: 
                   5592: 
                   5593: 
                   5594: 
                   5595: 
                   5596: 
                   5597: 
                   5598: 
                   5599: 
                   5600: 
                   5601: 
                   5602: 
                   5603: 
                   5604:          MACRO SPITBOL V3.5
                   5605:                                                    PAGE 84 - [11.16.1]
                   5606:          Implementation Information
                   5607: 
                   5608: 
                   5609: 
                   5610:  11.16.1  High-Level Languages and LOAD
                   5611:  11.16.1  High-Level Languages and LOAD
                   5612:     Images  invoked  by  LOAD are not entered via the image activator.
                   5613:     Instead,  SPITBOL  gets  to  them  via   an   ordinary   CALL-type
                   5614:     instruction  to  the  entry  point  of  the image.  Note that most
                   5615:     "high-level  languages"  do  not  support  the  declaration  of  a
                   5616:     parameterized subprogram as an image entry point.
                   5617: 
                   5618:     To  permit  the use of such languages for LOAD functions, a module
                   5619:     to solve the problem just described is provided with  the  SPITBOL
                   5620:     delivery  in  SYS$LIBRARY:SPITHLS.OBJ.   This  module  defines  an
                   5621:     entry point, and  then  jumps  one  word  past  the  global  label
                   5622:     SPIT$LOAD_ENTRY.   (The  one  word  is  to  bypass the procedure's
                   5623:     register save mask.)  This means that the entry subprogram of  any
                   5624:     LOADable   function    which   uses   SPITHLS.OBJ  must  be  named
                   5625:     SPIT$LOAD_ENTRY.
                   5626: 
                   5627: 
                   5628:  11.16.2  Calling Conventions for LOAD
                   5629:  11.16.2  Calling Conventions for LOAD
                   5630:     All  arguments  to  LOAD  are  transmitted  to  the  function   by
                   5631:     reference  pointers  to  values  on the stack (in P1 space).  (The
                   5632:     only exception  is  unconverted  arguments  which  are  passed  by
                   5633:     reference  to  a  block  in SPITBOL's dynamic area.)  The function
                   5634:     may  overwrite  these  stacked  values  freely,  since  they   are
                   5635:     discarded  when  the  function  returns.   It goes without further
                   5636:     comment that in no case should an attempt ever be  made  to  store
                   5637:     outside the defined length of the value.
                   5638: 
                   5639:     If  a  LOADed function requires a dynamically sized memory area to
                   5640:     work in, the LOAD prototype can specify a 'junk'  parameter  which
                   5641:     can  be  a  string  of the appropriate length when the function is
                   5642:     called.  LOADed functions should under  no  circumstances  attempt
                   5643:     to  dynamically  map  their  own  virtual  memory since this would
                   5644:     likely interfere with SPITBOL's own allocation process.
                   5645: 
                   5646:     It may, for  some  applications,  be  helpful  to  be  aware  that
                   5647:     arbitrary binary data can be stored in strings and buffers.
                   5648: 
                   5649: 
                   5650:  11.16.3  Return Conventions for LOAD
                   5651:  11.16.3  Return Conventions for LOAD
                   5652:     When  an  external  function  is  ready  to  return, it may signal
                   5653:     success or  failure,  and  if  it  succeeds,  it  must  return  an
                   5654:     appropriate  result  of  the  type described by the LOAD prototype
                   5655:     for the function.
                   5656: 
                   5657:     Success or failure is indicated on return by the low order bit  of
                   5658:     R0,  according  to the normal VAX/VMS convention (the remainder of
                   5659:     the register is ignored).
                   5660: 
                   5661:     If the low bit of R0 is set on  return,  this  indicates  success,
                   5662:     and  R1  points  to  an  integer  value,  real  value,  or  string
                   5663:     descriptor as appropriate for the function.   This  is  the  value
                   5664:     that will be returned to SPITBOL as the result of the call.
                   5665: 
                   5666: 
                   5667: 
                   5668: 
                   5669:          MACRO SPITBOL V3.5
                   5670:                                                    PAGE 85 - [11.16.3]
                   5671:          Implementation Information
                   5672: 
                   5673:     Many   high-level   languages   do  not  have  the  capability  of
                   5674:     returning  values  in  this  manner,  so   SYS$LIBRARY:SPITHLS.OBJ
                   5675:     contains  two  additional  entry  points, SPIT$SUCCESS_RETURN(obj)
                   5676:     and SPIT$FAIL_RETURN().  These are co-routine  entry  points  that
                   5677:     can  be called using the VAX/VMS standard calling conventions, and
                   5678:     will make adjustments to the  stack,  R0  and  R1  and  return  to
                   5679:     SPITBOL.   "Obj" is the address of the returned value when success
                   5680:                                                         must
                   5681:     is  to  be  indicated.   Both of these entry points must be called
                   5682:     from the same level as when the function was  originally  entered,
                   5683:     that  is,  at the same point in execution where the function would
                   5684:     normally return.
                   5685: 
                   5686:     Before the LOADed function is invoked, and also  when  the  result
                   5687:     is  being  checked,  SPITBOL  establishes a condition handler that
                   5688:     will receive control if any exceptions  occur.   These  exceptions
                   5689:     typically  are  the result of an error in the function itself,  an
                   5690:     improper specification of argument or result  types  in  the  LOAD
                   5691:     call,    or  an  improper  link  of a non-PIC function (see below)
                   5692:     causing invalid addresses to  be  returned  to  SPITBOL.   In  any
                   5693:     event,  this handler will, after printing a message indicating the
                   5694:     cause of the error, attempt recovery by  forcing  failure  of  the
                   5695:     function  call.   This  will  generally allow SPITBOL execution to
                   5696:     continue.  Note that this handler will  only  receive  control  in
                   5697:     the  event  that  the  user's function does not properly field the
                   5698:     condition itself.
                   5699: 
                   5700: 
                   5701:  11.16.4  Linking External Functions
                   5702:  11.16.4  Linking External Functions
                   5703:     Like the old saw  about   how  to  shave  a  gorilla,  linking  an
                   5704:                                          very
                   5705:     function image for LOAD must be done ____ carefully.  As  a  rule,
                   5706:     you  will  have  an  easier  time  of it if the image to be linked
                   5707:     contains solely position independent content  (PIC),  though  this
                   5708:     is not absolutely necessary.
                   5709: 
                   5710:     SPITBOL  reserves a set of pages between an address defined by the
                   5711:     link-time symbol LOAD_BASE, and the bottom of the interpreter  for
                   5712:     loading  images.    LOAD_BASE  is  defined in the SPITBOL.OPT link
                   5713:     options file and is normally hex 7FE00
                   5714: 
                   5715:     When requested by a LOAD(...) call  to  load  an  external  image,
                   5716:     SPITBOL  first  allocates the next available page in this area for
                   5717:     image information, and maps the image itself directly  above  this
                   5718:     page,  taking  as  many  pages  as required.  The base address (if
                   5719:     any) specified to the linker when the image was generated  has  no
                   5720:     effect  on the base address of the load.   So even if the image is
                   5721:     not PIC, it is possible to predict  in  advance  where  the  image
                   5722:     will  be  loaded.  Knowing this, the image can be linked with this
                   5723:     location as the  base  address.   Note  that  if  several  non-PIC
                   5724:     images  are to be loaded with different LOAD(...) calls, the order
                   5725:     of the loading is significant.
                   5726: 
                   5727:     As an example, suppose you have an object module called  PROCSTATS
                   5728:     produced  by VAX/VMS Fortran V2 (non-PIC) which you wish to use as
                   5729:     a LOAD function.  You would link the image with a  linker  command
                   5730:     such as:
                   5731: 
                   5732: 
                   5733: 
                   5734:          MACRO SPITBOL V3.5
                   5735:                                                    PAGE 86 - [11.16.4]
                   5736:          Implementation Information
                   5737: 
                   5738:            $ LINK/MAP PROCSTATS,SYS$LIBRARY:SPITHLS,-
                   5739:              SYS$SYSTEM:SPITBOL/SELECTIVE_SEARCH,PROCSTATS/OPT
                   5740: 
                   5741:     The  reason for linking against SPITBOL's symbol table is to avoid
                   5742:     including the VMS shareable run-time library  in  the  image.   In
                   5743:     some  cases,  there will also be global symbols of interest in the
                   5744:     interpreter  to  which  the  program  will   need   access.    The
                   5745:     PROCSTATS.OPT  options  file  would contain at least one statement
                   5746:     to  define  the  base  address  of  the   image   of   the   form:
                   5747:     "BASE=%X80000".    This  is  one  page  above  the usual LOAD_BASE
                   5748:     (%X7FE00) to leave room for the image data page  which  is  always
                   5749:     allocated first by SPITBOL.
                   5750: 
                   5751:     If  additional  non-PIC images were to be linked, the total amount
                   5752:     of virtual space used by images to be loaded first would  have  to
                   5753:     be  calculated,  in  order  to  determine  the  actual load (base)
                   5754:     address. For images which are entirely PIC, the  base  address  is
                   5755:     irrelevant.   Note that for languages such as Fortran, the code is
                   5756:     PIC but the pure data is not.
                   5757: 
                   5758: 
                   5759:  11.16.5  Unconverted Values and Results for LOAD
                   5760:  11.16.5  Unconverted Values and Results for LOAD
                   5761:     If a type other than "INTEGER", "STRING", or "REAL"  is  indicated
                   5762:     in  the  first  argument of the call to LOAD, the value is said to
                   5763:     be "unconverted."
                   5764: 
                   5765:     In the case of passed arguments, a pointer to the  internal  block
                   5766:     for  the  argument is given to the program.  The first longword of
                   5767:     any such block is a SPITBOL block-type  word.   The  remainder  of
                   5768:     the  block  is vertically encoded depending on the block-type.  No
                   5769:     discussion of the internals of the interpreter are provided  here.
                   5770:     The  source  listing  gives  a complete description of the storage
                   5771:     blocks  for  SPITBOL   and   should   be   consulted   by   anyone
                   5772:     contemplating using unconverted values.
                   5773: 
                   5774:     In  the  case  of  returned  values,  a pointer to the unconverted
                   5775:     result must  be  in  R1  (returned  value  register).   The  block
                   5776:     pointed  to must be in SPITBOL-correct format, including the value
                   5777:     of the block-type  word.   It  will  be  copied  by  SPITBOL  into
                   5778:     dynamic memory upon return.
                   5779: 
                   5780: 
                   5781: 
                   5782: 
                   5783: 
                   5784: 
                   5785: 
                   5786: 
                   5787: 
                   5788: 
                   5789: 
                   5790: 
                   5791: 
                   5792: 
                   5793: 
                   5794: 
                   5795: 
                   5796: 
                   5797:          MACRO SPITBOL V3.5
                   5798:                                                    PAGE 87 - [11.17]
                   5799:          Implementation Information
                   5800: 
                   5801: 
                   5802: 
                   5803:  11.17  MXLEN
                   5804:  11.17  MXLEN
                   5805:  ____________
                   5806:     The   value   of   MXLEN  is  approximately  1,000,000.   This  is
                   5807:     controlled by the "BASE=..." option  in  the  SPITBOL.OPT   linker
                   5808:     options  file.   It is not recommended that this value be reduced,
                   5809:     as it will limit the size  of  objects,  and  reduce  the  virtual
                   5810:     space available for mapping in external (LOAD) images.
                   5811: 
                   5812: 
                   5813:  11.18  Real Arithmetic
                   5814:  11.18  Real Arithmetic
                   5815:  ___________ __________
                   5816:     Available  in  single  precision  with  a  printing  accuracy of 6
                   5817:     digits.
                   5818: 
                   5819: 
                   5820:  11.19  Extended Character Set
                   5821:  11.19  Extended Character Set
                   5822:  _______________ _________ ___
                   5823:     All 256 8-bit ASCII codes are in  &ALPHABET.   The  tab  character
                   5824:     may be used lexically in place of the space.
                   5825: 
                   5826: 
                   5827:  11.20  REWIND
                   5828:  11.20  REWIND
                   5829:  _____________
                   5830:     Available.
                   5831: 
                   5832: 
                   5833:  11.21  Running SPITBOL
                   5834:  11.21  Running SPITBOL
                   5835:  ______________ _______
                   5836: 
                   5837: 
                   5838:     SPITBOL  must  be  started with a command line in order to specify
                   5839:     filenames for the standard channels, and  to  explicitly  override
                   5840:     any  default  processing options.  This means that SPITBOL must be
                   5841:     installed as a foreign command so that it can  recieve  a  command
                   5842:     line.   If  SPITBOL  has  not been installed as a foreign command,
                   5843:     this can be done individually by the  user  by  entering  the  VMS
                   5844:     command:
                   5845: 
                   5846:                          $
                   5847:                          _ SPIT*BOL :== $SPITBOL
                   5848: 
                   5849:     The  system  manager  normally  adds  this to the systemwide login
                   5850:     command file as a part of the SPITBOL  delivery  process,  so  the
                   5851:     above should not be necessary.
                   5852: 
                   5853:     The general form of the SPITBOL startup command line is:
                   5854: 
                   5855:             $ SPITBOL/switch... input-file/switch... "Any Text
                   5856: 
                   5857:     The  input-file  sets  the  identity of the standard input channel
                   5858:     for SPITBOL.   The default extension  for  this  file  is  ".SPT".
                   5859:     The  standard input channel represents the program source, and any
                   5860:     data for  the  preassociated  INPUT  variable.   Such  data  input
                   5861:     should  thus  immediately  follow the END statement of the source.
                   5862:     All switches are optional.
                   5863: 
                   5864:     If no input-file is given, or  if  SPITBOL  is  unable  to  get  a
                   5865:     command line, the default input-file will be SYS$INPUT.
                   5866: 
                   5867: 
                   5868: 
                   5869: 
                   5870:          MACRO SPITBOL V3.5
                   5871:                                                    PAGE 88 - [11.21]
                   5872:          Implementation Information
                   5873: 
                   5874:     The  initial  value of the startup command line as provided by the
                   5875:     VMS Command Line Interpreter (CLI) is  assigned  to  the  &ERRTEXT
                   5876:     keyword.  This makes it possible to examine the command line as it
                   5877:     is given to SPITBOL, in order  to  determine  filenames,  switches
                   5878:     and  the like.   (The assignment to &ERRTEXT is made just prior to
                   5879:     execution, and is  not  affected  by  any  preceeding  compilation
                   5880:     errors.)   Note that the CLI will compress runs of tabs and blanks
                   5881:     into single blanks, and place all unquoted  text  in  upper  case.
                   5882:     Also  note that the command string begins with the first non-blank
                   5883:                following
                   5884:     character  _________  the VMS command name.   CLI "comments" (text
                   5885:     following an unquoted "!" on the  command  line)  are  not  passed
                   5886:     either.
                   5887: 
                   5888:     SPITBOL  recognizes  a  double-quote (") as an end-of-command line
                   5889:     delimiter.  Any text following the double-quote  will  be  ignored
                   5890:     by  SPITBOL,  but  will  appear  intact  in  the  initial value of
                   5891:     &ERRTEXT.  This provides a mechanism for  passing  arbitrary  text
                   5892:     into  the  program  from the command line.  The CLI will not alter
                   5893:     the text following this double quote.
                   5894: 
                   5895:     It should be pointed out that the availability of startup  command
                   5896:     line  text  in  &ERRTEXT is an addition in VAX/VMS SPITBOL, and is
                   5897:     not  necessarily  portable  to  other   implementations   of   the
                   5898:     language.
                   5899: 
                   5900:     In  some  cases,  there  may  be  a SPITBOL application or utility
                   5901:     program for which a "custom" command  may  be  desired.   This  is
                   5902:     easily achieved with a definition something like:
                   5903: 
                   5904:         $
                   5905:         _ SPUTIL :== $SPITBOL/OUT=TT:/LOAD=SYS$LIBRARY:SPUTIL NL:
                   5906: 
                   5907:              $
                   5908:     Typing  "_SPUTIL"  as  a VMS command will then load the saved EXIT
                   5909:     file named SPUTIL in SYS$LIBRARY and execute it with the  standard
                   5910:     output  file assigned to the terminal.  Other permutations will be
                   5911:     useful depending on the particular application.
                   5912: 
                   5913: 
                   5914: 
                   5915: 
                   5916: 
                   5917: 
                   5918: 
                   5919: 
                   5920: 
                   5921: 
                   5922: 
                   5923: 
                   5924: 
                   5925: 
                   5926: 
                   5927: 
                   5928: 
                   5929: 
                   5930: 
                   5931: 
                   5932: 
                   5933: 
                   5934: 
                   5935:          MACRO SPITBOL V3.5
                   5936:                                                    PAGE 89 - [11.21.1]
                   5937:          Implementation Information
                   5938: 
                   5939: 
                   5940: 
                   5941:  11.21.1  Startup Switches
                   5942:  11.21.1  Startup Switches
                   5943:     Startup switches are optional in the sense that there are  defined
                   5944:     defaults  for  all  of  them  that  should be adequate most of the
                   5945:     time.  Switch names can be abbreviated to the minimum  unambiguous
                   5946:     length.  A syntax error in the startup command line will cause the
                   5947:     interpreter to exit with a message.
                   5948: 
                   5949:     Switches may appear at any point in the command  line;   they  are
                   5950:     processed  left-to-right.   There  are no 'file-specific' switches
                   5951:     as with some VMS languages, all switches are global.  The  use  of
                   5952:     multiple  input  files separated either by commas or plus signs is
                   5953:     not
                   5954:     ___ supported.
                   5955: 
                   5956:     These are the switches provided on  the  SPITBOL  startup  command
                   5957:     line:
                   5958: 
                   5959: 
                   5960:      1.  /CRC /NOCRC
                   5961:          This  switch  is  only  meaningful  on a /LOAD=... operation,
                   5962:          where the specification of  /NOCRC  will  bypass  the  cyclic
                   5963:          reducdancy  check of the SPITBOL code region.  The purpose of
                   5964:          this check is to insure that the  version  of  SPITBOL  being
                   5965:          used  is  the same as the version under which the exit module
                   5966:          was saved.  As SPITBOL  also  checks  version  identification
                   5967:          data  and  other  parameters, the overhead for this check may
                   5968:          be considered unnecessary for frequently used  load  modules.
                   5969:          In  such  cases,  /NOCRC  can  be  profitably specified.  The
                   5970:          default is /CRC.
                   5971: 
                   5972:      2.  /CSTATS /NOCSTATS
                   5973:          This  switch  will  suppress  the  printing  of   compilation
                   5974:          statistics  on  the  output  file.  "/CSTATS" is the default.
                   5975:          If /NOLIST has been specified, the default is /NOCSTATS.
                   5976: 
                   5977:      3.  /ESTATS /NOESTATS
                   5978:          This  switch  will  suppress  the   printing   of   execution
                   5979:          statistics  on  the  output  file.  "/ESTATS" is the default.
                   5980:          If  /NOLIST  has  been  specified,  then   the   default   is
                   5981:          /NOESTATS.
                   5982: 
                   5983:      4.  /EXECUTE /NOEXECUTE
                   5984:          This  switch  has  the  same  logical effect as a  -NOEXECUTE
                   5985:          control card in the source  program.   SPITBOL  will  process
                   5986:          the  source  program,  and  then  exit  with  a  message that
                   5987:          Execution Was Suppressed.  The default is "/EXECUTE".
                   5988: 
                   5989:      5.  /LIST[=filename] /NOLIST
                   5990:          The /LIST switch allows specification  of  the  filename  for
                   5991:          the  standard  output  channel.   If  a  terminal  device  is
                   5992:          specified for the  /LIST  switch,  then  form  feeds  in  the
                   5993:          program  listing  will be suppressed.  The default device and
                   5994:          account for this  file  is  the  same  as  that  under  which
                   5995:          SPITBOL  is  being run.  The default name for the output file
                   5996:          is the input  file's  name,  and  the  default  extension  is
                   5997: 
                   5998: 
                   5999:          MACRO SPITBOL V3.5
                   6000:                                                    PAGE 90 - [11.21.1]
                   6001:          Implementation Information
                   6002: 
                   6003:          ".LIS".   The  program listing and compilation statistics are
                   6004:          sent to this file.  If neither of  /OUTPUT=...  or  /NOOUTPUT
                   6005:          are  also  specified  on  the  command  line,  then execution
                   6006:          output is also directed to this file.  This  includes  OUTPUT
                   6007:          assigned text and TRACE and DUMP output.
                   6008: 
                   6009:          The  /NOLIST  switch  indicates that source listing is not to
                   6010:          be generated. /NOLIST also causes an implicit  /NOESTATS  and
                   6011:          /NOCSTATS.   Note  that  the  appearance  of /NOLIST does not
                   6012:          mean that no output will  be  sent  to  the  standard  output
                   6013:          channel.   However,  if the program makes no reference to the
                   6014:          standard output channel, then if /NOLIST is  specified,  this
                   6015:          channel will never be opened.
                   6016: 
                   6017:          /LIST  with  no  filename  inverts  the  effect of a previous
                   6018:          /NOLIST  spec.   That  is,   enables   source   listing   and
                   6019:          compilation statistics.
                   6020: 
                   6021:      6.  /MINC=nnn
                   6022:          This  switch  controls the number of pages by which SPITBOL's
                   6023:          working store is expanded when it becomes  exhausted.   Under
                   6024:          normal  circumstances,  it should not be necessary to specify
                   6025:          this switch, however, "/MINC=0" will prevent  any  additional
                   6026:          allocation  to SPITBOL past the MINT allocation, and may thus
                   6027:          be useful  in  preventing  the  unrestrained  growth  of  the
                   6028:          interpreter.
                   6029: 
                   6030:          Even  if  MINC is non-zero, there are three cases which could
                   6031:          concievably cause dynamic allocation of a SPITBOL  object  to
                   6032:          fail.  These are:
                   6033: 
                   6034:             - The  size  of  the object exceeds &MAXLNGTH (MXLEN).  As
                   6035:               this is initially greater than one million,  this  fault
                   6036:               is  very  unlikely  to  occur  except as the result of a
                   6037:               programming error.
                   6038: 
                   6039:             - If allocation would cause the virtual  memory  quota  to
                   6040:               be  exceeded,  SPITBOL  will  print  a  MEMORY  OVERFLOW
                   6041:               error, and terminate execution.  This is  also  unlikely
                   6042:               on most systems.
                   6043: 
                   6044:             - If  SPITBOL  has  been  linked  allowing  RMS buffers to
                   6045:               extend  in   P0  space  (linker  option  P0BUFS  -   the
                   6046:               default),  then  with  a  large number of simultaneously
                   6047:               open files  an  RMS  space  extension  would  block  the
                   6048:               contiguous  growth  of  the  dynamic  area  and  cause a
                   6049:               memory overflow.
                   6050: 
                   6051:          The default for this switch is "/MINC=20" which is 10K  bytes
                   6052:          or about 2,000 SPITBOL 'words.'
                   6053: 
                   6054:      7.  /MINT=nnn
                   6055:          This  switch  controls  the amount of  virtual memory (in 512
                   6056:          Byte pages) that will be  initally  allocated  for  SPITBOL's
                   6057:          working   storage   areas.   The  SPITBOL  VMS  interface  is
                   6058:          designed to  permit  these  working  storage  areas  to  grow
                   6059: 
                   6060: 
                   6061:          MACRO SPITBOL V3.5
                   6062:                                                    PAGE 91 - [11.21.1]
                   6063:          Implementation Information
                   6064: 
                   6065:          indefinitely,  as  long as the region remains contiguous, and
                   6066:          there are pages available  in  the  process'  virtual  quota.
                   6067:          However,  SPITBOL will not request additional memory from VMS
                   6068:          unless it cannot get  enough  by  regenerating  its  existing
                   6069:          store.   So,  this switch may be useful in some situations to
                   6070:          avoid garbage collector  thrashing.   The  default  for  this
                   6071:          switch  is  "/MINT=200"  which  is  equivalent to  about 100K
                   6072:          bytes, or 25,000 SPITBOL 'words' (VAX Longwords).
                   6073: 
                   6074:          For most applications, the performance  will  increase  quite
                   6075:          dramatically  as  real  memory  is made available.  Past that
                   6076:          point, additional working set will improve  performance  only
                   6077:          marginally.   As  the  dynamic  space  is  allowed  to become
                   6078:          increasingly  virtual,  performance   will   very   gradually
                   6079:          deteriorate  because  of  the  thrashing caused (principally)
                   6080:          during garbage collection.  Thus as a general  guide,  it  is
                   6081:          usually  best  to  minimize garbage collection at the expense
                   6082:          of additional memory.
                   6083: 
                   6084:          Stack space is not included in the  MINT  allocation.   Stack
                   6085:          is allocated automatically as needed.
                   6086: 
                   6087:      8.  /OUTPUT[=Filename]
                   6088:          The  /OUTPUT=filename  switch  requests an alternate file for
                   6089:          the standard output  channel  at  execution  time.   If  this
                   6090:          switch  is  not  specified, then execution output is directed
                   6091:          at the same file  as  the  source  listing  (/LIST=filename).
                   6092:          This  file  is not opened until execution begins.  If at that
                   6093:          time the channel cannot  be  opened,  SPITBOL  exits  with  a
                   6094:          fatal status.
                   6095: 
                   6096:          /NOOUTPUT   directs  any  execution-time  references  to  the
                   6097:          standard output channel to the null device (NL:)
                   6098: 
                   6099:          /OUTPUT with no  filename  restores  the  default  condition.
                   6100:          That is, execution output is appended to the listing output.
                   6101: 
                   6102:          Note that /OUTPUT and /LIST are not synonymous.
                   6103: 
                   6104:      9.  /PAGE /NOPAGE
                   6105:          If  this  switch  is specified, page separators in the source
                   6106:          listing and statistics will be a few blank lines, instead  of
                   6107:          form  feeds.   "/PAGE"  is  the  default, unless the standard
                   6108:          output channel (see /OUTPUT switch) is a terminal,  in  which
                   6109:          case "/NOPAGE" is the default.
                   6110: 
                   6111:          At  startup,  LIB$LP_LINES  is called to get the page length.
                   6112:          From  the  value  returned  (66  unless  the   logical   name
                   6113:          SYS$LP_LINES  is  assigned), six  is subtracted to leave room
                   6114:          for page shoulders.
                   6115: 
                   6116:     10.  /WARN /NOWARN
                   6117:          When /NOWARN is indicated on the command  line,  only  errors
                   6118:          and  severe  errors  in  the  VMS  interface  logic  will  be
                   6119:          reported on  SYS$ERROR.   This  can  be  useful  to  suppress
                   6120:          messages  regarding source line truncation, exit module saves
                   6121: 
                   6122: 
                   6123:          MACRO SPITBOL V3.5
                   6124:                                                    PAGE 92 - [11.21.1]
                   6125:          Implementation Information
                   6126: 
                   6127:          and similar messages. /WARN, the  default,  causes  reporting
                   6128:          of such conditions.
                   6129: 
                   6130:          This  switch does not affect in any way SPITBOL's handling of
                   6131:          errors with respect to the program.
                   6132: 
                   6133:     11.  /WIDTH=nnn
                   6134:          SPITBOL attempts to compute a proper width for  the  standard
                   6135:          output  file.   The switch "/WIDTH=n" can be used to override
                   6136:          any  default.    Otherwise,   if   the   output   device   is
                   6137:          record-oriented  (including  spooled  files),  the default is
                   6138:          the buffer for the  device  as  indicated  by  VMS.   If  the
                   6139:          buffer  size  cannot  be  obtained,  or  is outside the range
                   6140:          [0..255], then a final default of 132 (decimal) is applied.
                   6141: 
                   6142: 
                   6143: 
                   6144: 
                   6145: 
                   6146: 
                   6147: 
                   6148: 
                   6149: 
                   6150: 
                   6151: 
                   6152: 
                   6153: 
                   6154: 
                   6155: 
                   6156: 
                   6157: 
                   6158: 
                   6159: 
                   6160: 
                   6161: 
                   6162: 
                   6163: 
                   6164: 
                   6165: 
                   6166: 
                   6167: 
                   6168: 
                   6169: 
                   6170: 
                   6171: 
                   6172: 
                   6173: 
                   6174: 
                   6175: 
                   6176: 
                   6177: 
                   6178: 
                   6179: 
                   6180: 
                   6181: 
                   6182: 
                   6183: 
                   6184: 
                   6185:          MACRO SPITBOL V3.5
                   6186:                                                    PAGE 93 - [11.22]
                   6187:          Implementation Information
                   6188: 
                   6189: 
                   6190: 
                   6191:  11.22  Stack Overflow
                   6192:  11.22  Stack Overflow
                   6193:  ____________ ________
                   6194:     SPITBOL  stack  is  located  in  P0  (program)  space.   It  grows
                   6195:     downwards  as  needed  from  LOAD_BASE  to STACK_LIMIT.  These two
                   6196:     values are defined in the SPITBOL Link options file.  In  general,
                   6197:     these  values  are  set  such  that stack overflow is not possible
                   6198:     unless a program is truly out of control.
                   6199: 
                   6200: 
                   6201:  11.23  TERMINAL
                   6202:  11.23  TERMINAL
                   6203:  _______________
                   6204:     TERMINAL  is  available  and  is  associated  with  SYS$INPUT  and
                   6205:     SYS$OUTPUT.   The  first  assignment  or  access to TERMINAL opens
                   6206:     this channel.
                   6207: 
                   6208: 
                   6209:  11.24  Time
                   6210:  11.24  Time
                   6211:  ___________
                   6212:     All execution times in the VAX/VMS Macro  SPITBOL  system  are  in
                   6213:     CPU  time  increments  of 10 (milliseconds).  This covers both the
                   6214:     times shown in the statistics, and  the  time  retrieved  via  the
                   6215:     system TIME function.  Wall time is available through DATE.
                   6216: 
                   6217: 
                   6218: 
                   6219: 
                   6220: 
                   6221: 
                   6222: 
                   6223: 
                   6224: 
                   6225: 
                   6226: 
                   6227: 
                   6228: 
                   6229: 
                   6230: 
                   6231: 
                   6232: 
                   6233: 
                   6234: 
                   6235: 
                   6236: 
                   6237: 
                   6238: 
                   6239: 
                   6240: 
                   6241: 
                   6242: 
                   6243: 
                   6244: 
                   6245: 
                   6246: 
                   6247: 
                   6248: 
                   6249: 
                   6250: 
                   6251: 
                   6252: 
                   6253:          MACRO SPITBOL V3.5
                   6254:                                                    PAGE 94 - [12]
                   6255:          Implementation Information
                   6256: 
                   6257: 
                   6258: 
                   6259:                     *--------------------------------*
                   6260:                       [12] Installation and Delivery
                   6261:                     | [12] Installation and Delivery |
                   6262:                     *--------------------------------*
                   6263: 
                   6264:     This  section  of  the  SPITBOL  manual  describes the process for
                   6265:     unpackaging and installing the  VAX/VMS  MACRO  SPITBOL  software.
                   6266:     This  section  is  also provided in hardcopy form with the 1600BPI
                   6267:     tape to facilitate the  installation  process.   If  this  is  the
                   6268:     first  time  you  have performed the delivery, please read through
                   6269:     these directions before starting;  the  delivery  process  is  not
                   6270:     highly  automated, and there will be a number of decisions for you
                   6271:     to make.
                   6272: 
                   6273:     There are four steps to be  initially  performed  to  deliver  and
                   6274:     install the software package.
                   6275: 
                   6276: 
                   6277:      1.  Get  the files from the tape into the proper directories, and
                   6278:          link  the  interpreter.    The   directories   involved   are
                   6279:          SYS$LIBRARY:,  SYS$HELP:,  and  SYS$SYSTEM:.  Be certain that
                   6280:          these VMS standard logical names are  defined  to  correspond
                   6281:          to  valid  directories  on the system disk before undertaking
                   6282:          the software installation.
                   6283: 
                   6284:      2.  Establish the  VMS  environment  and  commands  necessary  to
                   6285:          execute MACRO SPITBOL.
                   6286: 
                   6287:      3.  Generate  the  reference  manual  and help file.  The program
                   6288:          which does this is a SPITBOL program, so this  serves  as  an
                   6289:          installation checkout.
                   6290: 
                   6291:      4.  Delete  and/or  copy  off  any optional files which you don't
                   6292:          want to keep.
                   6293: 
                   6294:     Each of these steps is now detailed in turn.
                   6295: 
                   6296: 
                   6297:     NOTE:
                   6298:     NOTE:
                   6299:     _____ This  version  of  MACRO  SPITBOL requires version 2 of VMS.
                   6300:     If you are running any  version  1  of  VMS  you  cannot  use  the
                   6301:     interpreter.   You  must first upgrade your system to version 2 of
                   6302:     VMS before attempting to install MACRO SPITBOL.
                   6303: 
                   6304: 
                   6305: 
                   6306: 
                   6307: 
                   6308: 
                   6309: 
                   6310: 
                   6311: 
                   6312: 
                   6313: 
                   6314: 
                   6315: 
                   6316: 
                   6317: 
                   6318:          MACRO SPITBOL V3.5
                   6319:                                                    PAGE 95 - [12.1]
                   6320:          Implementation Information
                   6321: 
                   6322: 
                   6323: 
                   6324:  12.1  Transferring Delivery Files
                   6325:  12.1  Transferring Delivery Files
                   6326:  __________________ ________ _____
                   6327: 
                   6328: 
                   6329:     Follow these steps:
                   6330: 
                   6331: 
                   6332:      1.  Log on to the hardcopy system console  using  the  privileged
                   6333:          SYSTEM  account.   Be certain that your default is set to the
                   6334:          system  disk.   "BYPASS"  privilege  is  recommended  as   it
                   6335:          insures  that  there  will be no snags in renaming or copying
                   6336:          files.
                   6337: 
                   6338:      2.  If there  are  any  existing  files  or  directories  for  an
                   6339:          earlier  version  of  SPITBOL,  they should be deleted.  (The
                   6340:          new version  is  strictly  upward  compatible  with  previous
                   6341:          versions.)   If  it  does  not already exist, create an empty
                   6342:          scratch directory named SYS$DISK:[SPITBOL] with the command:
                   6343: 
                   6344:                          $
                   6345:                          _ CRE/DIR SYS$DISK:[SPITBOL]
                   6346: 
                   6347: 
                   6348:      3.  Set your default to the SPITBOL directory using the command:
                   6349: 
                   6350:                        $
                   6351:                        _ SET DEFAULT SYS$DISK:[SPITBOL]
                   6352: 
                   6353: 
                   6354:      4.  Mount the delivery tape on a drive with a command such as:
                   6355: 
                   6356:                               $
                   6357:                               _ MOUNT MT:/OVER=ID
                   6358: 
                   6359: 
                   6360:      5.  Copy all files from the  tape  into  the  directory  using  a
                   6361:          command similar to:
                   6362: 
                   6363:                                 $
                   6364:                                 _ COPY MT:*.* *
                   6365: 
                   6366: 
                   6367:      6.  Dismount the tape with a command such as:
                   6368: 
                   6369:                                 $
                   6370:                                 _ DISMOUNT MT:
                   6371: 
                   6372: 
                   6373:      7.  Enter the command:
                   6374: 
                   6375:                                   $
                   6376:                                   _ @SPITBOL
                   6377: 
                   6378:          This   command   file  will  rename  files  to  their  proper
                   6379:          directories, and link the interpreter image.
                   6380: 
                   6381:     Sites with a previous release  of  the  interpreter  may  want  to
                   6382:     print  a  copy of [SPITBOL]RELNOTES.LIS which documents changes in
                   6383:     this release.
                   6384: 
                   6385: 
                   6386: 
                   6387: 
                   6388:          MACRO SPITBOL V3.5
                   6389:                                                    PAGE 96 - [12.2]
                   6390:          Implementation Information
                   6391: 
                   6392: 
                   6393: 
                   6394:  12.2  Installing MACRO SPITBOL
                   6395:  12.2  Installing MACRO SPITBOL
                   6396:  ________________ _____ _______
                   6397: 
                   6398: 
                   6399:      1.  Enter the commands:
                   6400: 
                   6401:                     $
                   6402:                     _ SPIT*BOL :== $SYS$SYSTEM:SPITBOL
                   6403:                     $
                   6404:                     _ ASSIGN/SYS "<site-name>" SYS$SITENAME
                   6405: 
                   6406:          In the above, "<site-name>" is  any  text  string  of  28  or
                   6407:          fewer   characters  which  SPITBOL  will  use  for  the  site
                   6408:          identification.
                   6409: 
                   6410:          Using an editor, place the first of the above definitions  in
                   6411:          the  systemwide  login  command  file  to define them for all
                   6412:          users.   (The  name  of  this  file  varies  from  system  to
                   6413:          system,  SYLOGIN.COM  and  SYSLOGIN.COM  in  SYS$MANAGER:  is
                   6414:          typical.  If your site has not established such a file,  then
                   6415:          users   will  have  to  define  this  command  in  their  own
                   6416:          LOGIN.COM files.)   The ASSIGN  command  should  be  inserted
                   6417:          into SYS$MANAGER:SYSTARTUP.COM .
                   6418: 
                   6419:      2.  In  general,  if  SPITBOL  is  to  be  used frequently, it is
                   6420:          recommended that it be installed as a shareable image.   This
                   6421:          can  be  done  (from  the  SYSTEM  account) using the command
                   6422:          lines:
                   6423: 
                   6424:                    $ MCR INSTALL
                   6425:                    SYS$SYSTEM:SPITBOL.EXE/SHARE/OPEN/HEADER
                   6426: 
                   6427:          SPITBOL  should  not   normally   be   installed   with   any
                   6428:          privileges.
                   6429: 
                   6430: 
                   6431: 
                   6432:  12.3  Interpreter Checkout and Documentation Generation
                   6433:  12.3  Interpreter Checkout and Documentation Generation
                   6434:  _________________ ________ ___ _____________ __________
                   6435: 
                   6436: 
                   6437:      1.  Set your default to SYS$LIBRARY:
                   6438: 
                   6439:      2.  Enter the command:
                   6440: 
                   6441:                     $
                   6442:                     _ SPIT GPMDOC " {SET INPUT,SPITBOL.GPM}
                   6443: 
                   6444:          Note the blank  following  the  double  quote  in  the  above
                   6445:          ____ ___ _____  _________  ___  ______  _____  __  ___  _____
                   6446:          command.  This blank is significant and must be  included  as
                   6447:          ________  ____ _____ __ ___________ ___ ____ __  ________  __
                   6448:          shown.
                   6449:          ______  If all is well, this will cause the system to ask  if
                   6450:          you  want  to  produce the manual.  Answer "yes".  Generating
                   6451:          the approximately 100 page manual takes about  5  minutes  on
                   6452:          an  unloaded  VAX 11/780.  If it is working, a message should
                   6453:          appear on your console for every page produced.
                   6454: 
                   6455: 
                   6456: 
                   6457: 
                   6458: 
                   6459: 
                   6460:          MACRO SPITBOL V3.5
                   6461:                                                    PAGE 97 - [12.3]
                   6462:          Implementation Information
                   6463: 
                   6464:          After this, you will be asked if you  want  to  generate  the
                   6465:          help  file.   Again  answer  "yes".   The generated file is a
                   6466:          reformatted  version  of  the  manual  itself,  in  VMS  help
                   6467:          library format.
                   6468: 
                   6469:          When this concludes, the GPMDOC program exits.
                   6470: 
                   6471:      3.  Print  SYS$LIBRARY:GPMDOC.LIS  on  a  132 column line printer
                   6472:          and examine the listing to be sure that  the  interpreter  is
                   6473:          functioning  properly.   Look  at  the  2  line header on the
                   6474:          first listing page and be certain  that  the  site  name  you
                   6475:          defined above appears there.
                   6476: 
                   6477:      4.  Print  SYS$LIBRARY:SPITBOL.MAN on (if possible) an 80 column,
                   6478:          8.5x11 inch, white paper printer.  An  LA120  DECwriter  will
                   6479:          do  if there is plenty of time available.  If any interactive
                   6480:                                                    $
                   6481:          device is  used,  be  certain  to  type  "_ SET TERM/NOBROAD"
                   6482:          before  starting.   The table of contents is at the back - it
                   6483:          should be moved to the indicated place at the beginning.
                   6484: 
                   6485:      5.  You should now decide if you  want  to  add  the  SPITBOL.HLP
                   6486:          help  file to the system help file.  (The only reason for not
                   6487:          so doing would be that it consumes about 300 blocks  of  disk
                   6488:          space).   If  you  decide  to  do  this,  set your default to
                   6489:          SYS$HELP: and enter the following commands:
                   6490: 
                   6491:                       $
                   6492:                       _ LIB/COMPR=KEYSIZ:31/HELP HELPLIB
                   6493:                       $
                   6494:                       _ LIB/REPLACE/HELP HELPLIB SPITBOL
                   6495:                       $
                   6496:                       _ LIB/COMPRESS/HELP HELPLIB
                   6497:                       $
                   6498:                       _ PURGE HELPLIB.HLB
                   6499: 
                   6500: 
                   6501: 
                   6502: 
                   6503:  12.4  Delivery File Cleanup
                   6504:  12.4  Delivery File Cleanup
                   6505:  ______________ ____ _______
                   6506: 
                   6507: 
                   6508:     The delivery and  installation  process  is  concluded.   At  this
                   6509:     point,  some  sites  may  choose  to  delete some of the delivered
                   6510:     files in order to free up as much system disk space  as  possible.
                   6511:     To  such  an  end,  a list of all delivered and generated files is
                   6512:     given here, grouped by  their  function.   Examine  the  list  and
                   6513:     delete the ones you don't want.
                   6514: 
                   6515: 
                   6516:      1.  BASIC INTERPRETER:
                   6517:          Basic  interpreter  files  consist  of  the executable image,
                   6518:          objects, and sources.
                   6519: 
                   6520:          The executable image  is  built  as  SYS$SYSTEM:SPITBOL.EXE .
                   6521:          This  file must not be deleted.  Also, SYS$SYSTEM:SPITBOL.STB
                   6522:          is the corresponding symbol table  file  which  can  be  used
                   6523:          when  linking images for use by LOAD(...).  It should also be
                   6524:          retained.
                   6525: 
                   6526: 
                   6527: 
                   6528: 
                   6529:          MACRO SPITBOL V3.5
                   6530:                                                    PAGE 98 - [12.4]
                   6531:          Implementation Information
                   6532: 
                   6533:          The  objects  are  in  SYS$LIBRARY:  and  named  SPITSYS.OBJ,
                   6534:          SPITIOSYS,  SPITGO,  SPITMSGS and SPITV35.  It is recommended
                   6535:          that    these    files     be     kept.      In     addition,
                   6536:          SYS$LIBRARY:SPITBOL.OPT  is the standard SPITBOL link options
                   6537:          file and should be retained if the objects are.
                   6538: 
                   6539:          The sources are in SYS$LIBRARY and have  the  same  names  as
                   6540:          the  objects  except  that the file extensions are different.
                   6541:          SPITGO.MAR is the entry  point,  and  provides  command  line
                   6542:          processing,   initialization   and   basic  file  assignment.
                   6543:          SPITSYS.MAR   contains   the    VMS    interface    routines.
                   6544:          SPITIOSYS.MAR  contains  the VMS interface routines for input
                   6545:          and output operations.  SPITV35.MAR is  the  source  for  the
                   6546:          interpreter  itself.  SPITMSGS.MSG is the source text for the
                   6547:          error messages  of  the  system.  It  is  input  to  the  VMS
                   6548:          "MESSAGE" processor.
                   6549: 
                   6550:          SPITMACS.MAR  and  SPITMACS.MLB  comprise  the  macro library
                   6551:          which is required for assembling any of these sources.
                   6552: 
                   6553:          These source files will  be  of  academic  interest  to  most
                   6554:          sites,  and  can  be  profitably deleted since they consume a
                   6555:          substantial quantity of disk space.
                   6556: 
                   6557:      2.  INTERPRETER SUPPORT FILES:
                   6558:          On SYS$LIBRARY: will be found SPITHLS in .OBJ and .MAR  form.
                   6559:          These  files  are  used  in  conjunction  with  the LOAD(...)
                   6560:          feature and should not be deleted.  In  any  event  they  are
                   6561:          quite small.
                   6562: 
                   6563:      3.  DOCUMENTATION FILES:
                   6564:          The   delivery  process  outlined  above  uses  and  produces
                   6565:          several files that relate to MACRO SPITBOL documentation.
                   6566: 
                   6567:          In SYS$LIBRARY: will be found SPITBOL.GPM and  SPITTEXT.GPM .
                   6568:          These  two  files,  together, comprise the needed information
                   6569:          to generate both the manual and help file text.  They can  be
                   6570:          deleted once the manual and/or help file has been produced.
                   6571: 
                   6572:          The    delivery    process    generates    the    manual   in
                   6573:          SYS$LIBRARY:SPITBOL.MAN. Once a good copy of  this  has  been
                   6574:          printed, this file can be deleted.
                   6575: 
                   6576:          The  help  file  text  is  produced  in SYS$HELP:SPITBOL.HLP.
                   6577:          This should be deleted only if no use is made of it.  If  you
                   6578:          have  added it to the system help library, keep the .HLP file
                   6579:          in case a future VMS delivery reinitializes the  system  help
                   6580:          file.
                   6581: 
                   6582:          The   delivery   process   generates  a  SPITBOL  listing  in
                   6583:          SYS$LIBRARY:GPMDOC.LIS.  This file is of  no  value  once  it
                   6584:          has been checked out, and can be deleted.
                   6585: 
                   6586: 
                   6587: 
                   6588: 
                   6589: 
                   6590: 
                   6591:          MACRO SPITBOL V3.5
                   6592:                                                    PAGE 99 - [12.4]
                   6593:          Implementation Information
                   6594: 
                   6595:      4.  GPMDOC:
                   6596:          GPMDOC  is  the  text processing program (written in SPITBOL)
                   6597:          that produces the manual and  help  text  files.   It  is  an
                   6598:          interesting  program  in  its  own right, and for that reason
                   6599:          you may wish to keep it.  Otherwise, all of the GPMDOC  files
                   6600:          can be deleted, they are in SYS$LIBRARY:
                   6601: 
                   6602:          GPMDOC.SPT is the basic GPMDOC program source.
                   6603: 
                   6604:          GPMBIF.GPM  is  a  file  of  auxiliary  definitions needed by
                   6605:          GPMDOC when it starts up.
                   6606: 
                   6607:          GPMDOC.GPM  is  part  of  the  reference  documentation   for
                   6608:          GPMDOC.   To  generate this documentation, set the default to
                   6609:          SYS$LIBRARY: and enter the commands:
                   6610: 
                   6611:               $
                   6612:               _ SPIT GPMDOC -
                   6613:               $
                   6614:               __ " {SET OUTPUT,GPMDOC.MAN}{SET INPUT,GPMDOC.GPM}
                   6615:               $
                   6616:               _ PRINT/DELETE GPMDOC.MAN
                   6617:               $
                   6618:               _ DELETE GPMDOC.LIS;*
                   6619: 
                   6620: 
                   6621:          JUSTIFY (.FOR, .OBJ, .EXE and .OPT) is a LOAD image  used  by
                   6622:          GPMDOC  that   performs  right-justification of text strings.
                   6623:          It is not essential to the operation  of  GPMDOC  (though  it
                   6624:          runs  slightly  faster  with it.)  However, JUSTIFY is a good
                   6625:          example of use of the LOAD(...) function feature, and  should
                   6626:          be retained for that reason.
                   6627: 
                   6628:      5.  MISCELLANEOUS FILES:
                   6629:          The  file  [SPITBOL]SPITBOL.COM  and  it's  scratch directory
                   6630:          [SPITBOL]  are  of  no  use  once  the  delivery   has   been
                   6631:          successfully   completed,   and  should  be  deleted.    This
                   6632:          directory also contains RELNOTES.LIS.   These  release  notes
                   6633:          are  primarily  directed  at sites with an earlier release of
                   6634:          the system, and may be kept or deleted as desired.
                   6635: 
                   6636:          SYS$LIBRARY:DIF.SPT is a file comparator program  similar  to
                   6637:          the   PDP-11  "CMP"  program.   It  runs significantly faster
                   6638:          and, in  most  cases,  more  accurately  than  the  V2.4  VMS
                   6639:          "DIFFERENCES"  command and for that reason may be of value to
                   6640:          some sites.  The command format for DIF is described  in  its
                   6641:          source.
                   6642: 
                   6643: 
                   6644: 
                   6645: 
                   6646: 
                   6647: 
                   6648: 
                   6649: 
                   6650: 
                   6651: 
                   6652: 
                   6653: 
                   6654: 
                   6655: 
                   6656: 
                   6657: 
                   6658: 
                   6659: 
                   6660:     ! ...................................... 16, 17
                   6661:     $ ...................................... 16, 56, 57, 58
                   6662:     $SEVERITY .............................. 75
                   6663:     $STATUS ................................ 75
                   6664:     % ...................................... 16
                   6665:     & ...................................... 16
                   6666: 
                   6667:     &ABEND ................................. 43
                   6668:     &ABORT ................................. 43
                   6669:     &ALPHABET .............................. 43, 58
                   6670:     &ANCHOR ................................ 4, 43, 57
                   6671:     &ARB ................................... 43
                   6672: 
                   6673:     &BAL ................................... 43
                   6674:     &CODE .................................. 43, 71
                   6675:     &DUMP .................................. 43
                   6676:     &ERRLIMIT .............................. 44
                   6677:     &ERRTEXT ............................... 5, 21, 25, 38, 44, 71, 88
                   6678: 
                   6679:     &ERRTYPE ............................... 38, 44
                   6680:     &FAIL .................................. 44
                   6681:     &FENCE ................................. 44
                   6682:     &FNCLEVEL .............................. 38, 44
                   6683:     &FTRACE ................................ 44
                   6684: 
                   6685:     &FULLSCAN .............................. 3
                   6686:     &INPUT ................................. 44
                   6687:     &LASTNO ................................ 44
                   6688:     &MAXLNGTH .............................. 5, 9, 44, 90
                   6689:     &OUTPUT ................................ 44
                   6690: 
                   6691:     &PROFILE ............................... 5, 44
                   6692:     &REM ................................... 45
                   6693:     &RTNTYPE ............................... 45
                   6694:     &STCOUNT ............................... 45
                   6695:     &STFCOUNT .............................. 3
                   6696: 
                   6697:     &STLIMIT ............................... 6, 42, 45, 71
                   6698:     &STNO .................................. 45
                   6699:     &SUCCEED ............................... 45
                   6700:     &TRACE ................................. 45
                   6701:     &TRIM .................................. 5, 45, 57, 71
                   6702: 
                   6703:     * ...................................... 16, 57
                   6704:     + ...................................... 16
                   6705:     - ...................................... 16
                   6706:     -DOUBLE ................................ 48
                   6707:     -EJECT ................................. 46
                   6708: 
                   6709: 
                   6710: 
                   6711: 
                   6712: 
                   6713: 
                   6714:                                      Index - i
                   6715: 
                   6716: 
                   6717: 
                   6718: 
                   6719: 
                   6720:     -EXECUTE ............................... 49
                   6721:     -FAIL .................................. 49
                   6722:     -IN .................................... 49
                   6723:     -LIST .................................. 21, 48
                   6724:     -NOERRORS .............................. 49, 50
                   6725:     -NOEXECUTE ............................. 49, 89
                   6726: 
                   6727:     -NOFAIL ................................ 25, 49
                   6728:     -NOLIST ................................ 48
                   6729:     -NOPRINT ............................... 48
                   6730:     -PRINT ................................. 48
                   6731:     -SINGLE ................................ 48
                   6732: 
                   6733:     -SPACE ................................. 46
                   6734:     -TITLE ................................. 46
                   6735:     . ...................................... 16, 57
                   6736:     .EXE ................................... 83
                   6737:     .SEX ................................... 77
                   6738: 
                   6739:     .SPT ................................... 87
                   6740:     / ...................................... 16
                   6741:     /CCO ................................... 80
                   6742:     /CIF ................................... 80
                   6743:     /CR .................................... 80
                   6744: 
                   6745:     /CRC ................................... 89
                   6746:     /CSTATS ................................ 89
                   6747:     /DLT ................................... 80
                   6748:     /EOF ................................... 80
                   6749:     /ESTATS ................................ 89
                   6750: 
                   6751:     /EXECUTE ............................... 89
                   6752:     /FTN ................................... 80
                   6753:     /LIST .................................. 89
                   6754:     /LOAD .................................. 71, 77
                   6755:     /MINC .................................. 77, 90
                   6756: 
                   6757:     /MINT .................................. 77, 90
                   6758:     /MXV ................................... 80
                   6759:     /NOCRC ................................. 89
                   6760:     /NOCSTATS .............................. 89
                   6761:     /NOESTATS .............................. 89
                   6762: 
                   6763:     /NOEXECUTE ............................. 89
                   6764:     /NOLIST ................................ 89
                   6765:     /NOOUTPUT .............................. 91
                   6766:     /NOPAGE ................................ 91
                   6767:     /NOWARN ................................ 75, 91
                   6768: 
                   6769: 
                   6770: 
                   6771: 
                   6772: 
                   6773: 
                   6774:                                      Index - ii
                   6775: 
                   6776: 
                   6777: 
                   6778: 
                   6779: 
                   6780:     /OUTPUT ................................ 91
                   6781:     /PAGE .................................. 91
                   6782:     /PTA ................................... 80
                   6783:     /RNE ................................... 80
                   6784:     /RNF ................................... 80
                   6785:     /SCF ................................... 80
                   6786: 
                   6787:     /SPL ................................... 80
                   6788:     /SUP ................................... 80
                   6789:     /TEF ................................... 80
                   6790:     /WARN .................................. 91
                   6791:     /WIDTH ................................. 92
                   6792: 
                   6793:     <> ..................................... 7
                   6794:     = ...................................... 6, 7, 16
                   6795:     ? ...................................... 6, 7, 16, 58
                   6796:     @ ...................................... 16
                   6797:     ABEND .................................. 43, 43
                   6798: 
                   6799:     ABORT .................................. 4, 38, 43
                   6800:     ALTERNATION ............................ 73
                   6801:     ALTERNATIVE ............................ 5, 7
                   6802:     ANCHOR ................................. 43
                   6803:     ANCHORED MATCHING ...................... 57
                   6804: 
                   6805:     ANY .................................... 18, 56, 58
                   6806:     APPEND ................................. 5, 10, 18, 57
                   6807:     APPLY .................................. 18
                   6808:     ARB .................................... 4, 20, 43, 58
                   6809:     ARBNO .................................. 19, 58
                   6810: 
                   6811:     ARG .................................... 19
                   6812:     ARRAY .................................. 9, 15, 18, 19, 39, 41
                   6813:     ARRAYS ................................. 19, 56, 57
                   6814:     ASSOCIATIVE LOOKUP ..................... 57
                   6815:     BACKSPACE .............................. 3
                   6816: 
                   6817:     BAL .................................... 4, 43
                   6818:     BLOCK .................................. 3
                   6819:     BREAK .................................. 19, 56, 58
                   6820:     BREAKX ................................. 5, 20, 56, 58
                   6821:     BUFFER ................................. 5, 20
                   6822: 
                   6823:     BUFFERS ................................ 6, 10, 30, 57, 57, 58, 72
                   6824:     CHAR ................................... 5, 21
                   6825:     CHARACTER SET .......................... 6, 73, 87
                   6826:     CLEAR .................................. 21
                   6827:     CLI .................................... 88
                   6828: 
                   6829: 
                   6830: 
                   6831: 
                   6832: 
                   6833: 
                   6834:                                     Index - iii
                   6835: 
                   6836: 
                   6837: 
                   6838: 
                   6839: 
                   6840:     CMP .................................... 99
                   6841:     CODE ................................... 10, 21, 38, 56
                   6842:     CODE BLOCKS ............................ 56
                   6843:     COLLECT ................................ 22, 57
                   6844:     COMMAND LINE ........................... 87
                   6845:     CONDITION HANDLERS ..................... 85
                   6846: 
                   6847:     CONTINUE ............................... 38
                   6848:     CONTROL CARDS .......................... 6, 46
                   6849:     CONVERT ................................ 5, 22, 39
                   6850:     COPY ................................... 22
                   6851:     CPU TIME ............................... 93
                   6852: 
                   6853:     DATA ................................... 18, 23, 39
                   6854:     DATATYPE ............................... 4, 23
                   6855:     DATATYPE CONVERSIONS ................... 4, 11, 12, 58
                   6856:     DATE ................................... 23, 75
                   6857:     DCL .................................... 75
                   6858: 
                   6859:     DEBUGGING .............................. 42, 58, 83
                   6860:     DEFERRED EXPRESSION .................... 58, 65
                   6861:     DEFINE ................................. 18, 23
                   6862:     DELIVERY ............................... 94
                   6863:     DETACH ................................. 23, 58
                   6864: 
                   6865:     DIF.SPT ................................ 99
                   6866:     DIFFER ................................. 4, 24
                   6867:     DUMP ................................... 5, 24
                   6868:     DUPL ................................... 24
                   6869:     EBCDIC ................................. 73
                   6870: 
                   6871:     EJECT .................................. 5, 24, 79
                   6872:     END .................................... 4
                   6873:     ENDFILE ................................ 25, 79
                   6874:     ERRORS ................................. 50, 75
                   6875:     EVAL ................................... 25, 38
                   6876: 
                   6877:     EXIT ................................... 5, 25, 71, 77
                   6878:     EXPRESSION ............................. 10
                   6879:     FAIL ................................... 4, 44
                   6880:     FENCE .................................. 4, 27, 44, 78
                   6881:     FIELD .................................. 27
                   6882: 
                   6883:     FRETURN ................................ 38
                   6884:     FULLSCAN ............................... 3
                   6885:     FUNCTION ............................... 56
                   6886:     FUNCTIONS .............................. 18
                   6887:     GARBAGE COLLECTION ..................... 5, 22, 25, 56, 91
                   6888: 
                   6889: 
                   6890: 
                   6891: 
                   6892: 
                   6893: 
                   6894:                                      Index - iv
                   6895: 
                   6896: 
                   6897: 
                   6898: 
                   6899: 
                   6900:     GE ..................................... 27
                   6901:     GORILLA ................................ 85
                   6902:     GOTOS .................................. 6
                   6903:     GPMDOC ................................. 96, 99
                   6904:     GT ..................................... 27
                   6905:     HASH ................................... 56
                   6906: 
                   6907:     HASHING ................................ 4, 41, 57
                   6908:     HELP LIBRARY ........................... 97
                   6909:     HOST ................................... 5, 27, 78
                   6910:     I/O .................................... 79
                   6911:     I/O ASSOCIATION ........................ 58
                   6912: 
                   6913:     I/O SWITCHES ........................... 79
                   6914:     IBM .................................... 1, 73
                   6915:     IDENT .................................. 4, 28
                   6916:     IF-THEN-ELSE ........................... 7
                   6917:     INPUT .................................. 23, 25, 29, 36, 77, 79
                   6918: 
                   6919:     INSERT ................................. 5, 10, 30, 57
                   6920:     INSTALL ................................ 96
                   6921:     INSTALLATION ........................... 94, 96
                   6922:     INTEGER ................................ 9, 14, 31, 39
                   6923:     INTEGERS ............................... 56, 78
                   6924: 
                   6925:     INTERROGATION .......................... 58
                   6926:     ITEM ................................... 7, 31
                   6927:     JUSTIFY ................................ 99
                   6928:     KEYWORDS ............................... 43
                   6929:     LABEL .................................. 56
                   6930: 
                   6931:     LE ..................................... 31
                   6932:     LEN .................................... 32
                   6933:     LEQ .................................... 5, 32
                   6934:     LGE .................................... 5, 32
                   6935:     LGT .................................... 32
                   6936: 
                   6937:     LIB$LP_LINES ........................... 91
                   6938:     LINKER ................................. 82, 82, 87
                   6939:     LISTING ................................ 46
                   6940:     LISTING OPTIONS ........................ 82
                   6941:     LLE .................................... 5, 32
                   6942: 
                   6943:     LLT .................................... 5, 33
                   6944:     LNE .................................... 5, 33
                   6945:     LOAD ................................... 33, 77, 77, 83, 99
                   6946:     LOAD MODULE ............................ 25
                   6947:     LOAD_BASE .............................. 82, 85, 86, 93
                   6948: 
                   6949: 
                   6950: 
                   6951: 
                   6952: 
                   6953: 
                   6954:                                      Index - v
                   6955: 
                   6956: 
                   6957: 
                   6958: 
                   6959: 
                   6960:     LOCAL .................................. 33
                   6961:     LONGWORD ............................... 91
                   6962:     LPAD ................................... 5, 34
                   6963:     LT ..................................... 34
                   6964:     MACRO-32 ............................... 83
                   6965:     MATRIX ................................. 39
                   6966: 
                   6967:     MAXIMUM SIZE ........................... 5
                   6968:     MXLEN .................................. 5, 9, 9, 9, 43, 44, 87, 90
                   6969:     NAME ................................... 4, 9, 15, 39, 58
                   6970:     NE ..................................... 34
                   6971:     NL: .................................... 77
                   6972: 
                   6973:     NOTANY ................................. 34, 56, 58
                   6974:     NRETURN ................................ 38
                   6975:     NULL STRING ............................ 39
                   6976:     NUMERIC ................................ 4, 39
                   6977:     ON-LINE TERMINAL ....................... 6
                   6978: 
                   6979:     OPERATORS .............................. 16
                   6980:     OPSYN .................................. 35, 73
                   6981:     OPTIONS FILE ........................... 82
                   6982:     OUTPUT ................................. 23, 24, 25, 29, 35, 36,
                   6983:                                             77, 79
                   6984: 
                   6985:     P0BUFS ................................. 90
                   6986:     PATTERN ................................ 9
                   6987:     PATTERN MATCHING OPERATOR .............. 6
                   6988:     PATTERN REPLACEMENT .................... 57
                   6989:     PIC .................................... 85, 85, 86
                   6990: 
                   6991:     POS .................................... 35
                   6992:     POSITION INDEPENDENCE .................. 85, 85
                   6993:     PRE-EVALUATION ......................... 3, 5, 57, 65
                   6994:     PROGRAM DEFINED DATATYPES .............. 23, 56, 57
                   6995:     PROTOTYPE .............................. 36
                   6996: 
                   6997:     PUNCH .................................. 3
                   6998:     QUICKSCAN .............................. 3
                   6999:     REAL ................................... 9, 14, 39
                   7000:     REAL ARITHMETIC ........................ 3, 87
                   7001:     REALS .................................. 56
                   7002: 
                   7003:     RELEASE NOTES .......................... 99
                   7004:     RELNOTES.LIS ........................... 99
                   7005:     REM .................................... 4, 45
                   7006:     REMDR .................................. 36
                   7007:     REPLACE ................................ 36, 58
                   7008: 
                   7009: 
                   7010: 
                   7011: 
                   7012: 
                   7013: 
                   7014:                                      Index - vi
                   7015: 
                   7016: 
                   7017: 
                   7018: 
                   7019: 
                   7020:     RETURN ................................. 38
                   7021:     REVERSE ................................ 5, 36
                   7022:     REWIND ................................. 36, 79, 87
                   7023:     RMS .................................... 79, 90
                   7024:     RPAD ................................... 5, 37
                   7025:     RPOS ................................... 37
                   7026: 
                   7027:     RSORT .................................. 5, 6, 37, 39, 58
                   7028:     RTAB ................................... 37
                   7029:     SELECTION .............................. 5, 7
                   7030:     SETEXIT ................................ 4, 5, 21, 25, 38, 44, 44
                   7031:     SHAREABLE IMAGE ........................ 96
                   7032: 
                   7033:     SIZE ................................... 39
                   7034:     SNOBOL4 ................................ 73
                   7035:     SNOBOL4B ............................... 3
                   7036:     SORT ................................... 5, 6, 39, 58
                   7037:     SPACE OVERHEAD ......................... 56
                   7038: 
                   7039:     SPAN ................................... 40, 56, 58
                   7040:     SPEED CONSIDERATIONS ................... 57
                   7041:     SPIT$FAIL_RETURN ....................... 85
                   7042:     SPIT$LOAD_ENTRY ........................ 84
                   7043:     SPIT$SUCCESS_RETURN .................... 85
                   7044: 
                   7045:     SPITHLS ................................ 84, 85, 85
                   7046:     STACK .................................. 91
                   7047:     STACK OVERFLOW ......................... 93
                   7048:     STACK_LIMIT ............................ 93
                   7049:     STITL .................................. 47
                   7050: 
                   7051:     STOPTR ................................. 40, 58
                   7052:     STRING ................................. 9, 12
                   7053:     SUBSTR ................................. 5, 41
                   7054:     SUCCEED ................................ 4, 45
                   7055:     SWITCHES ............................... 87
                   7056: 
                   7057:     SYS$HELP ............................... 94
                   7058:     SYS$INPUT .............................. 87
                   7059:     SYS$LIBRARY ............................ 82, 84, 85, 85, 94
                   7060:     SYS$LIBRARY: ........................... 98
                   7061:     SYS$LP_LINES ........................... 91
                   7062: 
                   7063:     SYS$SITENAME ........................... 96
                   7064:     SYS$SYSTEM ............................. 85, 94
                   7065:     SYSLOGIN.COM ........................... 96
                   7066:     SYSTARTUP.COM .......................... 96
                   7067:     TAB .................................... 41
                   7068: 
                   7069: 
                   7070: 
                   7071: 
                   7072: 
                   7073: 
                   7074:                                     Index - vii
                   7075: 
                   7076: 
                   7077: 
                   7078: 
                   7079: 
                   7080:     TAB CHARACTER .......................... 6
                   7081:     TABLE .................................. 4, 4, 9, 15, 39, 39, 41,
                   7082:                                             56, 57
                   7083:     TABLES ................................. 56, 57
                   7084:     TERMINAL ............................... 6, 93
                   7085:     TERMINAL I/O ........................... 80
                   7086: 
                   7087:     TIME ................................... 42, 93
                   7088:     TRACE .................................. 5, 42
                   7089:     TRACING ................................ 58
                   7090:     TRIM ................................... 42
                   7091:     UNANCHORED MODE ........................ 57
                   7092: 
                   7093:     UNIVAC ................................. 1
                   7094:     UNLOAD ................................. 42
                   7095:     VALUE .................................. 3
                   7096:     VARIABLE ............................... 56
                   7097:     VECTOR ................................. 39
                   7098: 
                   7099:     VECTORS ................................ 19, 56
                   7100:     VMS .................................... 94
                   7101:     WORD ................................... 91
                   7102:     [] ..................................... 7
                   7103:     | ...................................... 17
                   7104: 
                   7105:     ~ ...................................... 16, 16
                   7106: 
                   7107: 
                   7108: 
                   7109: 
                   7110: 
                   7111: 
                   7112: 
                   7113: 
                   7114: 
                   7115: 
                   7116: 
                   7117: 
                   7118: 
                   7119: 
                   7120: 
                   7121: 
                   7122: 
                   7123: 
                   7124: 
                   7125: 
                   7126: 
                   7127: 
                   7128: 
                   7129: 
                   7130: 
                   7131: 
                   7132: 
                   7133: 
                   7134:                                     Index - viii
                   7135: 
                   7136: 
                   7137:                                  TABLE OF CONTENTS
                   7138:                                  _____ __ ________
                   7139: 
                   7140: 
                   7141:          Section                        Title
                   7142:          Page
                   7143: 
                   7144: 
                   7145: 
                   7146:               Introduction
                   7147:     1         Introduction                                          1
                   7148: 
                   7149:               Summary of Differences
                   7150:     2         Summary of Differences                                3
                   7151:     2.1         Features not Implemented                            3
                   7152:     2.2         Features Implemented Differently                    4
                   7153:     2.3         Additional Features                                 5
                   7154:     2.4         Syntax Differences                                  7
                   7155: 
                   7156:               Datatypes and Conversion
                   7157:     3         Datatypes and Conversion                              9
                   7158:     3.1         Available Datatypes                                 9
                   7159:     3.2         Possible Datatype Conversions                       11
                   7160:     3.3         Conversion Details                                  12
                   7161: 
                   7162:               Operators
                   7163:     4         Operators                                             16
                   7164:     4.1         Unary Operators                                     16
                   7165:     4.2         Binary Operators                                    17
                   7166: 
                   7167:               Functions
                   7168:     5         Functions                                             18
                   7169:     5.1         ANY -- Pattern to Match Selected Character          18
                   7170:     5.2         APPEND * -- Append string to buffer                 18
                   7171:     5.3         APPLY * -- Apply function                           18
                   7172:     5.4         ARBNO -- Pattern for Iterated Match                 19
                   7173:     5.5         ARG * -- Obtain Argument Name                       19
                   7174:     5.6         ARRAY -- Generate Array Structure                   19
                   7175:     5.7         BREAK -- Construct Scanning Pattern                 19
                   7176:     5.8         BUFFER * -- Create buffer object                    20
                   7177:     5.9         BREAKX * -- Construct Scanning Pattern              20
                   7178:     5.10        CHAR * -- Convert Character Code to String          21
                   7179:     5.11        CLEAR * -- Clear Variable Storage                   21
                   7180:     5.12        CODE * -- Compile Code                              21
                   7181:     5.13        COLLECT -- Initiate Storage Regeneration            22
                   7182:     5.14        CONVERT * -- Convert Datatypes                      22
                   7183:     5.15        COPY * -- Copy Structure                            22
                   7184:     5.16        DATA -- Create Datatype                             23
                   7185:     5.17        DATATYPE * -- Obtain Datatype                       23
                   7186:     5.18        DATE * -- Obtain Date                               23
                   7187:     5.19        DEFINE -- Define a Function                         23
                   7188:     5.20        DETACH -- Detach I/O Association                    23
                   7189:     5.21        DIFFER * -- Test for Arguments Differing            24
                   7190:     5.22        DUMP * -- Dump Storage                              24
                   7191:     5.23        DUPL * -- Duplicate String or Pattern               24
                   7192:     5.24        EJECT * -- Eject to new page                        24
                   7193:     5.25        ENDFILE * -- Close a File                           25
                   7194:     5.26        EQ -- Test for Equal                                25
                   7195:     5.27        EVAL * -- Evaluate Expression                       25
                   7196:     5.28        EXIT * -- Exit to Save Load Module or to JCL        25
                   7197:     5.29        FENCE * -- Generate Fenced Pattern                  27
                   7198: 
                   7199: 
                   7200:                                          i
                   7201: 
                   7202: 
                   7203:                              TABLE OF CONTENTS (CON'T)
                   7204:                              _____ __ ________ _______
                   7205: 
                   7206: 
                   7207:          Section                        Title
                   7208:          Page
                   7209: 
                   7210:     5.30        FIELD * -- Get Field Name                           27
                   7211:     5.31        GE -- Test for Greater or Equal                     27
                   7212:     5.32        GT -- Test for Greater                              27
                   7213:     5.33        HOST * -- Obtain Information about Host Computer    28
                   7214:     5.34        IDENT * -- Test for Identical                       28
                   7215:     5.35        INPUT * -- Set Input Association                    29
                   7216:     5.36        INSERT * -- Insert string in buffer                 30
                   7217:     5.37        INTEGER * -- Test for Integer                       31
                   7218:     5.38        ITEM -- Select Array or Table Element               31
                   7219:     5.39        LE -- Test for Less or Equal                        31
                   7220:     5.40        LEN -- Generate Specified Length Pattern            32
                   7221:     5.41        LEQ * -- Test for Lexically Equal                   32
                   7222:     5.42        LGE * -- Test for Lexically Greater or Equal        32
                   7223:     5.43        LGT * -- Test for Lexically Greater                 32
                   7224:     5.44        LLE * -- Test for Lexically Less or Equal           32
                   7225:     5.45        LLT * -- Test for Lexically Less                    33
                   7226:     5.46        LNE * -- Test for Lexically Not Equal               33
                   7227:     5.47        LOAD -- Load External Function                      33
                   7228:     5.48        LOCAL * -- Get Name of Local                        33
                   7229:     5.49        LPAD * -- Left Pad                                  34
                   7230:     5.50        LT -- Test for Less                                 34
                   7231:     5.51        NE -- Test for Not Equal                            34
                   7232:     5.52        NOTANY -- Build Character Select Pattern            34
                   7233:     5.53        OPSYN * -- Equate Functions and Operators           35
                   7234:     5.54        OUTPUT * -- Set Output Association                  35
                   7235:     5.55        POS -- Define Positioning Pattern                   35
                   7236:     5.56        PROTOTYPE -- Retrieve Prototype                     36
                   7237:     5.57        REMDR -- Remainder                                  36
                   7238:     5.58        REPLACE -- Translate Characters                     36
                   7239:     5.59        REVERSE * -- Reverse String                         36
                   7240:     5.60        REWIND -- Reposition File                           36
                   7241:     5.61        RPAD * -- Right Pad                                 37
                   7242:     5.62        RPOS -- Define Positioning Pattern                  37
                   7243:     5.63        RSORT -- Reverse Sort                               37
                   7244:     5.64        RTAB -- Create Tabbing Pattern                      37
                   7245:     5.65        SETEXIT * -- Set Error Exit                         38
                   7246:     5.66        SIZE -- Get String or Buffer Size                   39
                   7247:     5.67        SORT * -- Sort                                      39
                   7248:     5.68        SPAN -- Create Spanning Pattern                     40
                   7249:     5.69        STOPTR * -- Stop Trace                              40
                   7250:     5.70        SUBSTR * -- Extract Substring                       41
                   7251:     5.71        TAB -- Create Tabbing Pattern                       41
                   7252:     5.72        TABLE * -- Create Table                             41
                   7253:     5.73        TIME -- Get Timer Value                             42
                   7254:     5.74        TRACE * -- Initiate Trace                           42
                   7255:     5.75        TRIM -- Trim Trailing Blanks                        42
                   7256:     5.76        UNLOAD * -- Unload Function                         42
                   7257: 
                   7258:               Keywords
                   7259:     6         Keywords                                              43
                   7260: 
                   7261: 
                   7262:                                          ii
                   7263: 
                   7264: 
                   7265:                              TABLE OF CONTENTS (CON'T)
                   7266:                              _____ __ ________ _______
                   7267: 
                   7268: 
                   7269:          Section                        Title
                   7270:          Page
                   7271: 
                   7272: 
                   7273:               Program Listing and Control Cards
                   7274:     7         Program Listing and Control Cards                     46
                   7275:     7.1         Listing Control Cards                               46
                   7276:     7.1.1         -EJECT                                            46
                   7277:     7.1.2         -SPACE                                            46
                   7278:     7.1.3         -TITLE                                            47
                   7279:     7.1.4         -STITL                                            47
                   7280:     7.2         Option Control Cards                                48
                   7281:     7.2.1         -LIST -NOLIST                                     48
                   7282:     7.2.2         -NOPRINT -PRINT                                   48
                   7283:     7.2.3         -SINGLE -DOUBLE                                   48
                   7284:     7.2.4         -INXXX                                            49
                   7285:     7.2.5         -ERRORS -NOERRORS                                 49
                   7286:     7.2.6         -FAIL -NOFAIL                                     49
                   7287:     7.2.7         -EXECUTE -NOEXECUTE                               49
                   7288: 
                   7289:               Errors
                   7290:     8         Errors                                                50
                   7291:     8.1         Compilation Error Messages                          50
                   7292:     8.2         Execution Error Messages                            50
                   7293:     8.3         Error Codes and Messages                            50
                   7294: 
                   7295:               Programming Notes
                   7296:     9         Programming Notes                                     56
                   7297:     9.1         Space Considerations                                56
                   7298:     9.2         Speed Considerations                                57
                   7299:     9.3         Other Notes                                         58
                   7300: 
                   7301:               Specimen Programs
                   7302:     10        Specimen Programs                                     59
                   7303:     10.1        Program 1                                           59
                   7304:     10.2        Program 2                                           61
                   7305:     10.3        Program 3                                           65
                   7306:     10.4        Program 4                                           68
                   7307: 
                   7308:               Implementation Information
                   7309:     11        Implementation Information                            71
                   7310:     11.1        &CODE                                               71
                   7311:     11.2        &ERRTEXT                                            71
                   7312:     11.3        &STLIMIT                                            71
                   7313:     11.4        &TRIM                                               72
                   7314:     11.5        Buffers                                             72
                   7315:     11.6        Character Set for VAX/VMS SPITBOL                   73
                   7316:     11.7        Form of DATE String                                 75
                   7317:     11.8        Errors                                              75
                   7318:     11.9        EXIT Function Usage                                 77
                   7319:     11.9.1        EXIT(0) Usage                                     77
                   7320:     11.9.2        EXIT(String) Usage                                77
                   7321:     11.9.3        EXIT(-n) Usage                                    77
                   7322:     11.10       FENCE(PATTERN)                                      78
                   7323:     11.11       HOST                                                78
                   7324:     11.12       Range of Integers                                   78
                   7325:     11.13       INPUT/OUTPUT                                        79
                   7326: 
                   7327: 
                   7328:                                         iii
                   7329: 
                   7330: 
                   7331:                              TABLE OF CONTENTS (CON'T)
                   7332:                              _____ __ ________ _______
                   7333: 
                   7334: 
                   7335:          Section                        Title
                   7336:          Page
                   7337: 
                   7338:     11.13.1       FILEARG2 SWITCHES                                 80
                   7339:     11.13.2       I/O EXAMPLES                                      81
                   7340:     11.14       Linking SPITBOL                                     82
                   7341:     11.15       Terminal Listing Options                            82
                   7342:     11.16       LOAD Function Usage                                 83
                   7343:     11.16.1       High-Level Languages and LOAD                     84
                   7344:     11.16.2       Calling Conventions for LOAD                      84
                   7345:     11.16.3       Return Conventions for LOAD                       84
                   7346:     11.16.4       Linking External Functions                        85
                   7347:     11.16.5       Unconverted Values and Results for LOAD           86
                   7348:     11.17       MXLEN                                               87
                   7349:     11.18       Real Arithmetic                                     87
                   7350:     11.19       Extended Character Set                              87
                   7351:     11.20       REWIND                                              87
                   7352:     11.21       Running SPITBOL                                     87
                   7353:     11.21.1       Startup Switches                                  89
                   7354:     11.22       Stack Overflow                                      93
                   7355:     11.23       TERMINAL                                            93
                   7356:     11.24       Time                                                93
                   7357: 
                   7358:               Installation and Delivery
                   7359:     12        Installation and Delivery                             94
                   7360:     12.1        Transferring Delivery Files                         95
                   7361:     12.2        Installing MACRO SPITBOL                            96
                   7362:     12.3        Interpreter Checkout and Documentation Generation   96
                   7363:     12.4        Delivery File Cleanup                               97
                   7364: 
                   7365: 
                   7366: 
                   7367: 
                   7368: 
                   7369: 
                   7370: 
                   7371: 
                   7372: 
                   7373: 
                   7374: 
                   7375: 
                   7376: 
                   7377: 
                   7378: 
                   7379: 
                   7380: 
                   7381: 
                   7382: 
                   7383: 
                   7384: 
                   7385: 
                   7386: 
                   7387: 
                   7388: 
                   7389: 
                   7390:                                          iv
                   7391: 
                   7392: 
                   7393: 
                   7394: 
                   7395: 
                   7396: 
                   7397: 
                   7398: 
                   7399: 
                   7400: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.