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 //
Update 06/10/2021 - Jay Jaeger has pointed out to me that the only real problem in the original archive was that the numbering in the email describing the archive was arbitrary. The correct ordering may be determined by examining SPT-LOAD.JCL. However, I will also add that this SPITBOL implementation is now included on SYSCPK, so if you have installed SYSCPK on your system, you already have this version ready for use.
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: