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

unix.superglobalmegacorp.com

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