SPITBOL Compiler

 

This version of SPITBOL was prepared specifically for Hercules/MVS by Bob Goldberg with the assistance of Jay Jaeger and Jay Maynard (from the ReadMe file in the archive).  Installation is extremely easy under Hercules/MVS following the instructions on Page 7.  The archive containing an AWS tape image, jobstreams, and background/installation instructions is spitbol_360_aws.zip [MD5: D7877E9B494FC09679357DC8574759A1].  

The README text file from the archive:

SPITBOL 360 README FILE
-----------------------

11/08/2001  Updated for Hercules AWS installation (Bob Goldberg)
 8/20/2001  Initial Version (Bob Goldberg)

Readme Contents
---------------

What is SPITBOL 360?
Installation Overview
General Installation
Hercules AWS Intallation
Reassembling the Compiler
Acknowledgments

What is SPITBOL 360? [*]
------------------------

SPITBOL 360 is an implementation of the SNOBOL4 programming language 
for use on IBM 360 compatible computers. SPITBOL is considerably 
smaller than the original implementation of SNOBOL4 and has 
execution speeds up to ten times faster. For certain programs, 
notably those with in-line patterns, the gain in speed may be even 
greater.

Unlike SIL SNOBOL4[**], which is an interpreter, SPITBOL is a true 
compiler which generates executable machine code. Of course, the 
complexity of the SNOBOL4 language dictates that system subroutines
be used for many common functions.

SPITBOL can be run as an 'in-core' 'load-and-go' system like 
WATFIV, where programs are executed as soon as they are compiled. 
Alternately, the compiler can generate object modules that can be 
linked with a run-time library to create load modules for later 
execution.

SPITBOL 360 was originally distributed under license, for a fee.[***] 
Effective November, 2001, SPITBOL 360 will be distributed under the 
General Public License (GPL), for no fee.

To obtain current information and distribution files for SPITBOL 360, 
visit:

    http://www.snobol4.com

----

[*] SPITBOL = SPeedy ImplemenTation of SNOBOL4
              --     -       -            ---

[**] The original SNOBOL4 implementation from Bell Telephone 
Laboratories was developed by R. E. Griswold and I. Polonsky, the 
designers of the SNOBOL4 programming language. Thus, this reference
implementation is often referred to as BTL SNOBOL4. In the early 
1970s, after Griswold left BTL for The University of Arizona and 
continued SNOBOL4 distribution from there, this implementation 
gained another name: SIL SNOBOL4. (SIL = SNOBOL4 Implementation 
Language)

[***] SPITBOL 360 was distributed from 1971 until 1984 when it was
superseded by SPITBOL 370.


Installation Overview
---------------------

The next two sections describe the installation procedures for 
SPITBOL 360. The first section, "General Installation," describes 
an installation procedure that can be used on both "real" mainframes 
as well as Hercules emulated mainframes. A simplified Hercules 
installation, based on an AWS tape file, is described in the 
"Hercules AWS Installation" section. Users following the Hercules 
AWS installation procedure should still read the "General 
Installation" section for perspective.


General Installation
--------------------

Take care when using a file transfer programs to transfer these 
distribution files between machines! You MUST use a binary transfer 
mode to move each of the EBCDIC files. For example, if using FTP, 
set mode to Binary.

Below is a list of the files contained in the distribution ZIP/TAR
file. All files are EBCDIC except for the first two files which are
provided in ASCII as a convenience to users.

  File Name        Contents
  ---- ----------  -------------------------------------------------
    1  README.TXT  (ASCII) Readme file (translation of README)
    2  GPL.TXT     (ASCII) General Public License text (translation
                   of GPL)
    3  README      Readme file
    4  GPL         General Public License
    5  SBOLOBJ     Object files to create SPITBOL compiler
    6  LINKSBOL    Sample JCL to link SPITBOL compiler
    7  TESTPGMS    Compiler test programs
    8  TESTSBOL    Sample JCL to run compiler test programs 
    9  SLIBOBJ     Object files to create SPITPROG runtime
   10  LINKSPRG    Sample JCL to link SPITPROG runtime
   11  OSINT       OSINT assembler source
   12  SPITBOL     SPITBOL assembler source
   13  TFSV23      TFs for SPITBOL and SPITPROG

ALL EBDCIC distribution files are sequential card image files, with 
DCB attributes RECBM=FB and LRECL=80.

Installation is quite simple: only four files need be loaded onto 
your system, followed by a link edit and test run.

  Step 1: Create datasets

  Create two datasets:

  (1) a SPITBOL.SRC PDS (SOURCE LIB) to receive object files, sample 
      JCL, and test programs

  (2) a SPITBOL.LOAD PDS (LOAD LIB) to receive the output of the 
      linkage editor

  Step 2: Populate the SPITBOL PDS

  Load the following files into your SPITBOL PDS:

    5  SBOLOBJ    Object files to create SPITBOL compiler
    6  LINKSBOL   Sample JCL to link SPITBOL compiler
    7  TESTPGMS   Compiler test programs
    8  TESTSBOL   Sample JCL to run compiler test programs 

  Step 3: Link SPITBOL Compiler

  Member LINKSBOL contains sample JCL to link the SPITBOL compiler.
  Examine, modify, and run.

    //.. JOB ....
    // EXEC LKED
    //SYSLMOD   DD  DSN=SPITBOL.LOAD,DISP=SHR
    //OBJS      DD  DSN=SPITBOL.SRC,DISP=SHR
    //SYSIN     DD  *
     INCLUDE OBJS(SBOLOBJ)
     ENTRY OSINT
     NAME SPITBOL(R)
    /*

  Step 4: Test compiler

  Run the test programs provided with the distribution. Note that you 
  only have to run the compiler once; SPITBOL 360 supports its own 
  batching of jobs. Member TESTSBOL contains sample JCL to run the 
  test programs. Examine, modify and run.

    //.. JOB ....
    // EXEC PGM=SPITBOL,REGION=512K
    //STEPLIB   DD  DSN=SPITBOL.LOAD,DISP=SHR
    //SYSPRINT  DD  SYSOUT=A
    //SYSPUNCH  DD  DUMMY
    //SYSIN     DD  DSN=SPITBOL.SRC(TESTPGMS),DISP=SHR

  SPITBOL 360 is happiest in regions of 192K or more.

  You're done! ENJOY!

  Optional Step 5: Link SPITPROG Runtime Library

  This step is optional.

  SPITPROG is needed only if you plan to create load modules from your
  SPITBOL programs. Since SPITBOL 360 is a load-and-go compiler, 
  linking of compiled programs is not required for them to be run.

  Load the following files into your SPITBOL PDS:

    9  SLIBOBJ    Object files to create SPITPROG runtime
   10  LINKSPRG   Sample JCL to link SPITPROG runtime

  Member LINKSLIB contains sample JCL to link the SPITBOL runtime 
  library. Examine, modify, and run.

    //.. JOB ....
    // EXEC LKED
    //SYSLMOD   DD  DSN=SPITBOL.LOAD,DISP=SHR
    //OBJS      DD  DSN=SPITBOL.SRC,DISP=SHR
    //SYSIN     DD  *
     INCLUDE OBJS(SLIBOBJ)
     ENTRY OSINT
     NAME SPITPROG(R)
    /*

  To compile and link a SPITBOL program:

    //.. JOB ....
    // EXEC PGM=SPITBOL
    //STEPLIB   DD  DSN=SPITBOL.LOAD,DISP=SHR
    //SYSPRINT  DD  SYSOUT=A
    //SYSPUNCH  DD  DUMMY
    //SYSOBJ    DD  DSN=&OBJ,UNIT=...,SPACE=(...),
    //              DCB=(RECFM=FB,LRECL=80,BLKSIZE=1600),DISP=(NEW,PASS)
    //SYSIN     DD  *
    -NOEXECUTE
    <program goes here>
    /*
    // EXEC LKED
    //SYSLMOD   DD  DSN=<your load lib>,DISP=SHR
    //LIB       DD  DSN=SPITBOL.LOAD,DISP=SHR
    //OBJ       DD  DSN=&OBJ,DISP=(OLD,DELETE)
    //SYSIN     DD  *
     INCLUDE LIB(SPITPROG)
     INCLUDE OBJ
     ENTRY OSINT
     NAME FOO
    /*

  See SPITBOL Newsletter #1, which is contained in the SPITBOL 360 
  Manual PDF file, for the original instructions circa 1971.


Hercules AWS Installation
-------------------------

IMPORTANT! You MUST have Hercules 2.14a or later in order to run 
SPITBOL 360. Hercules 2.14a includes a fix to its floating point 
instruction emulation that is required for SPITBOL to execute 
properly.


Below is a list of the files contained in the distribution ZIP/TAR
file.

  File Name          Contents
  ---- ------------  ----------------------------------------------
    1  README.TXT    (ASCII) Readme file
    2  GPL.TXT       (ASCII) General Public License text
    3  SPT-LOAD.JCL  (ASCII) JCL to load files from AWS tape file
    4  SPT-LINK.JCL  (ASCII) JCL to link SPITBOL load module
    5  SPT-TEST.JCL  (ASCII) JCL to test SPITBOL
    6  SPITBOL.AWS   AWS file representing unlabelled tape (NL)
                     that contains files 3 to 13, in order, from
                     the standard distribution (see list above)

  Step 1: Load files from AWS tape onto disk

  Inspect SPT-LOAD.JCL and modify the JCL statements (dataset names, 
  etc.) as necessary. Mount the AWS tape file and submit SPT-LOAD.JCL
  to a job reader.

  Step 2: Link SPITBOL compiler

  Inspect SPT-LINK.JCL and modify the JCL statements (dataset names,
  etc.) as necessary. Mount the AWS tape file and submit SPT-LINK.JCL
  to a job reader.

  Step 3: Test compiler

  Inspect SPT-TEST.JCL and modify the JCL statements (dataset names,
  etc.) as necessary. Mount the AWS tape file and submit SPT-TEST.JCL 
  to a job reader.

  You're done. Enjoy!

Note about floating point exceptions: When running SPITBOL 360 on
Hercules, Hercules may log a number of floating point exceptions. 
Don't be alarmed! SPITBOL 360 uses these exceptions to control
execution; they are to be expected.


Reassembling the Compiler
-------------------------

Although complete source for the SPITBOL 360 compiler is provided
as part of this distribution, DON'T reassemble it unless you're 
comfortable handling these issues:

ASCII Conversions. For those who are planning to convert the EBCDIC 
source to ASCII and then back to EBCDIC for reassembly, be advised 
that many EBCDIC to ASCII conversions fail to translate all 
characters properly. For example, the not and vertical bar characters 
are often improperly translated.

Binary Characters. There are instances of binary, non-printing, 
EBCDIC characters in the assembly source.

Compiler/Library Assembly. Be sure to set up the DEFLMOD source 
library member accordingly.

Temporary Fixes (TFs). Modifying instructions or data in the assembly 
source may affect CSECT offsets. If so, you will need to adjust the 
offsets in V23TFS. If you're intent on modifying the compiler's
source, consider obtaining the SPITBOL 370 distribution which does 
not require any patches.

If you do reassemble the compiler or library, you must reapply the 
TFs contained in file V23TFS. These TFs have already been applied 
to the object files provided with the distribution, so this step is
not part of the installation procedure described above.


Acknowledgments
---------------

Thanks to Robert Dewar and Ken Belcher for allowing me to re-release 
SPITBOL 360 under the GPL for all to use and study.

Thanks to Bob Lerche for helping me validate this release on a real
IBM mainframe system.

Thanks to Jay Jaeger and Jay Maynard, both of whom validated this
release on Hercules. Jay Jaeger also created the AWS tape file to
make life simpler for Hercules users.

  Bob Goldberg
  8 Nov 2001


A document containing the scanned pages of the original SPITBOL 360 Manual and original SPITBOL 360 Newsletters is spitbol_360_manual.pdf.  

Update 01/21/2014 - Revisiting these instructions I discovered that the directory given above for the distribution tape does not in fact match the tape as distributed, in that the files documented as containing EBCDIC versions of the documentation and GPL license text (#3 and #4 respectively) do not actually appear on the tape image.  All subsequently documented files occur in the order indicated, but are shifted up in the order by the two files which are not included on the tape image.  As a convenience to anyone wishing to restore these files to their MVS system, I created three libraries (source, object, and JCL) and restored the nine files from the tape that are required to implement SPITBOL/360.  Prior to any modifications, I then used IEBCOPY to create a tape containing the three libraries.  The tape image is available at A14021.het (723,692 bytes;  MD5: f00b3c564eccf6d23b5601ee182579e0) and the following jobstream may be used to restore the libraries:

//IEBCOPY JOB (001),IEBCOPY,CLASS=A,MSGCLASS=X 
//COPY EXEC PGM=IEBCOPY,REGION=1024K 
//SYSPRINT DD SYSOUT=* 
//LIBIN1 DD DISP=(OLD,PASS),DSN=EXP.SPITBOL.SOURCE, 
// UNIT=TAPE,VOL=(,RETAIN,SER=A14021),LABEL=(1,SL) 
//LIBIN2 DD DISP=(OLD,PASS),DSN=EXP.SPITBOL.OBJECT, 
// UNIT=TAPE,VOL=(,RETAIN,SER=A14021),LABEL=(2,SL) 
//LIBIN3 DD DISP=(OLD,PASS),DSN=EXP.SPITBOL.JCL, 
// UNIT=TAPE,VOL=(,RETAIN,SER=A14021),LABEL=(3,SL) 
//LIBOUT1 DD DSN=SYSO.SPITBOL.SOURCE, <---- target source library name
// UNIT=3350,VOL=SER=MVTSRS,DISP=(NEW,CATLG,DELETE), <---- target source library unit/volume serial
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120), 
// SPACE=(TRK,(150,,5)) 
//LIBOUT2 DD DSN=SYSO.SPITBOL.OBJECT, <---- target object library name
// UNIT=3350,VOL=SER=MVTSRS,DISP=(NEW,CATLG,DELETE), <---- target object library unit/volume serial
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120), 
// SPACE=(TRK,(15,,5)) 
//LIBOUT3 DD DSN=SYSO.SPITBOL.JCL, <---- target JCL library name
// UNIT=3350,VOL=SER=MVTSRS,DISP=(NEW,CATLG,DELETE), <---- target JCL library unit/volume serial
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120), 
// SPACE=(TRK,(15,,5)) 
//SYSUT3 DD UNIT=SYSDA,SPACE=(80,(60,45)),DISP=(NEW,DELETE) 
//SYSIN DD * 
COPY INDD=LIBIN1,OUTDD=LIBOUT1 
COPY INDD=LIBIN2,OUTDD=LIBOUT2 
COPY INDD=LIBIN3,OUTDD=LIBOUT3 
// 

I hope that you have found my instructions useful.  If you have questions that I can answer to help expand upon the information I have included here, please don't hesitate to send them to me:


Return to Site Home Page 


This page was last updated on January 17, 2015.