V10/cmd/spitbol/b
TTL S P I T B O L - REVISION HISTORY
EJC
* R E V I S I O N H I S T O R Y
* -------------------------------
*
*
* VERSION 3.5B (FEB 81... - SGD PATCHES)
* -----------------------------------
*
* SGD03 - ADDITION OF .CNCI AND SYSCI (INT->STRING
* SYSTEM ROUTINE OPTION)
* SGD04 - (06-MAY-1981) MODIFIED INILN TO 132
* SGD05 - (13-MAY-1981) INSERTED MISSING WTB AFTER SYSMM
* CALLS
* SGD06 - (25-MAY-1981) MERGED IN PROFILER PATCHES
* (NOT MARKED)
* SGD07 - (25-MAY-1981) MUCHO PATCHES TO PROFILER (MARKED,
* BUT BEST JUST TO EXTRACT ENMASSE)
* SGD08 - (25-MAY-1981) USE STRING LENGTH IN HASHS
* SGD09 - (25-MAY-1981) FIXED SERIOUS PARSER PROBLEM
* RELATING TO (X Y) ON LINE BEING VIEWED AS PATTERN
* MATCH. FIXED BY ADDITION OF NEW CMTYP VALUE
* C$CNP (CONCATENATION - NOT PATTERN MATCH)
* SGD10 - (01-AUG-1981) FIXED EXIT(N) RESPECIFICATION CODE
* TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN.
* SGD11 - (07-AUG-1981) BYPASS PRTPG CALL AT INITIALIZATION
* FOLLOWING COMPILATION IF NO OUTPUT GENERATED.
* THIS PREVENTS OUTPUT FILES CONSISTING OF THE
* HEADERS AND A FEW BLANK LINES WHEN THERE IS NO
* SOURCE LISTING AND NO COMPILATION STATS.
* ALSO FIX TIMSX INITIALIZATION IN SAME CODE.
* SGD12 - (17-AUG-1981) B$EFC CODE DID NOT CHECK FOR
* UNCONVERTED RESULT RETURNING NULL STRING. FIXED.
* SGDBF - ( NOV-1981) ADDED BUFFER TYPE AND SYMBOL CNBF
* SGD13 - (03-MAR-1982) LOAD PFVBL FIELD IN RETRN FOR
* RETURN TRACING. THIS WAS CAUSING BUG ON RETURN
* TRACES THAT TRIED TO ACCESS THE VARIABLE NAME
* SGD14 - ADDED CHAR FUNCTION. CHAR(N) RETURNS NTH
* CHARACTER OF HOST MACHINE CHARACTER SET.
* NOT CONDITIONALIZED OR MARKED.
* SGD15 - FIXED PROBLEM RELATING TO COMPILATION OF GOTO
* FIELDS CONTAINING SMALL INTEGERS (IN CONST SEC).
*
* REG01 - (XX-AUG-82)
* ADDED CFP$U TO EASE TRANSLATION ON SMALLER
* SYSTEMS - CONDITIONAL .CUCF
* ADDED LOWER CASE SUPPORT - CONDITIONAL .CULC
* ADDED SET I/O FUNCTION - CONDITIONAL .CUST
*
* REG02 - (XX-SEP-82)
* CHANGED INILN AND AND INILS TO 258
*
* REG03 - (XX-OCT-82)
* CONDITIONALIZED THE PAGE EJECT AFTER CALL TO SYSBX
* AND ADDED ANOTHER BEFORE CALL TO SYSBX, SO THAT,
* IF DESIRED BY THE IMPLEMENTOR, STANDARD OUTPUT
* WILL REFLECT ASSIGNMENTS MADE BY EXECUTING PROGRAM
* ONLY. CONDITIONAL .CUEJ CONTROLS - IF DEFINED
* EJECT IS BEFORE CALL TO SYSBX.
*
* REG04 - (XX-NOV-82)
* FIXED DIFFICULTIES WITH LISTINGS DURING EXECUTION
* WHEN NO LISTING GENERATED DURING COMPILATION.
*
* -LIST TO CODE() CAUSED BOMB. FIX IS TO RESET
* R$TTL AND R$STL TO NULLS NOT 0 AFTER COMPILATION.
* (LISTR AND LISTT EXPECT NULLS)
*
* WHEN LISTING AND STATISTICS ROUTED TO DIFFERENT
* FILE THAN EXECUTION OUTPUT, ERROR MESSAGE IS SENT
* TO EXECUTION OUTPUT (AND GETS SEPARATED FROM
* ... IN STATEMENT ... MSG). LABO1 CALLS SYSAX AND
* STOPR DOES NOT CALL SYSAX IF ENTERED FROM LABO1.
*
* REG05 - (XX-NOV-82)
* PREVENT CLEAR() FROM CLOBBERING PROTECTED VARIABLES
* AT LABEL SCLR5.
*
* REG06 - (XX-NOV-82)
* FIXED GTEXP FROM ACCEPTING TRAILING SEMICOLON OR
* COLON. NOT LEGAL WAY TO END AN EXPRESSION.
*
* VERSION 3.5A (OCT 79 - SGD PATCHES)
* -----------------------------------
*
* SGD01 - PATCH IN ASIGN TO FIX MULTIPLE TRAP BLOCK PROBLEM
* (ASG10+2)
* SGD02 - PATCH IN GTARR TO FIX NULL CONVERT (GTAR9+0)
*
TTL S P I T B O L -- BASIC INFORMATION
EJC
*
* GENERAL STRUCTURE
* -----------------
*
* THIS PROGRAM IS A TRANSLATOR FOR A VERSION OF THE SNOBOL4
* PROGRAMMING LANGUAGE. LANGUAGE DETAILS ARE CONTAINED IN
* THE MANUAL MACRO SPITBOL BY DEWAR AND MCCANN, TECHNICAL
* REPORT 90, UNIVERSITY OF LEEDS 1976. THE LANGUAGE
* IS IDENTICAL TO THAT IMPLEMENTED BY THE BTL TRANSLATOR
* (R. E. GRISWOLD ET AL.) WITH THE FOLLOWING EXCEPTIONS.
*
* 1) REDEFINITION OF STANDARD SYSTEM FUNCTIONS AND
* OPERATORS IS NOT PERMITTED.
*
* 2) THE VALUE FUNCTION IS NOT PROVIDED.
*
* 3) ACCESS TRACING IS PROVIDED IN ADDITION TO THE
* OTHER STANDARD TRACE MODES.
*
* 4) THE KEYWORD STFCOUNT IS NOT PROVIDED.
*
* 5) THE KEYWORD FULLSCAN IS NOT PROVIDED AND ALL PATTERN
* MATCHING TAKES PLACE IN FULLSCAN MODE (I.E. WITH NO
* HEURISTICS APPLIED).
*
* 6) A SERIES OF EXPRESSIONS SEPARATED BY COMMAS MAY
* BE GROUPED WITHIN PARENTHESES TO PROVIDE A SELECTION
* CAPABILITY. THE SEMANTICS ARE THAT THE SELECTION
* ASSUMES THE VALUE OF THE FIRST EXPRESSION WITHIN IT
* WHICH SUCCEEDS AS THEY ARE EVALUATED FROM THE LEFT.
* IF NO EXPRESSION SUCCEEDS THE ENTIRE STATEMENT FAILS
*
* 7) AN EXPLICIT PATTERN MATCHING OPERATOR IS PROVIDED.
* THIS IS THE BINARY QUERY (SEE GIMPEL SIGPLAN OCT 74)
*
* 8) THE ASSIGNMENT OPERATOR IS INTRODUCED AS IN THE
* GIMPEL REFERENCE.
*
* 9) THE EXIT FUNCTION IS PROVIDED FOR GENERATING LOAD
* MODULES - CF. GIMPELS SITBOL.
*
*
* THE METHOD USED IN THIS PROGRAM IS TO TRANSLATE THE
* SOURCE CODE INTO AN INTERNAL PSEUDO-CODE (SEE FOLLOWING
* SECTION). AN INTERPRETOR IS THEN USED TO EXECUTE THIS
* GENERATED PSEUDO-CODE. THE NATURE OF THE SNOBOL4 LANGUAGE
* IS SUCH THAT THE LATTER TASK IS MUCH MORE COMPLEX THAN
* THE ACTUAL TRANSLATION PHASE. ACCORDINGLY, NEARLY ALL THE
* CODE IN THE PROGRAM SECTION IS CONCERNED WITH THE ACTUAL
* EXECUTION OF THE SNOBOL4 PROGRAM.
EJC
*
* INTERPRETIVE CODE FORMAT
* ------------------------
*
* THE INTERPRETIVE PSEUDO-CODE CONSISTS OF A SERIES OF
* ADDRESS POINTERS. THE EXACT FORMAT OF THE CODE IS
* DESCRIBED IN CONNECTION WITH THE CDBLK FORMAT. THE
* PURPOSE OF THIS SECTION IS TO GIVE GENERAL INSIGHT INTO
* THE INTERPRETIVE APPROACH INVOLVED.
*
* THE BASIC FORM OF THE CODE IS RELATED TO REVERSE POLISH.
* IN OTHER WORDS, THE OPERANDS PRECEDE THE OPERATORS WHICH
* ARE ZERO ADDRESS OPERATORS. THERE ARE SOME EXCEPTIONS TO
* THESE RULES, NOTABLY THE UNARY NOT OPERATOR AND THE
* SELECTION CONSTRUCTION WHICH CLEARLY REQUIRE ADVANCE
* KNOWLEDGE OF THE OPERATOR INVOLVED.
*
* THE OPERANDS ARE MOVED TO THE TOP OF THE MAIN STACK AND
* THE OPERATORS ARE APPLIED TO THE TOP STACK ENTRIES. LIKE
* OTHER VERSIONS OF SPITBOL, THIS PROCESSOR DEPENDS ON
* KNOWING WHETHER OPERANDS ARE REQUIRED BY NAME OR BY VALUE
* AND MOVES THE APPROPRIATE OBJECT TO THE STACK. THUS NO
* NAME/VALUE CHECKS ARE INCLUDED IN THE OPERATOR CIRCUITS.
*
* THE ACTUAL POINTERS IN THE CODE POINT TO A BLOCK WHOSE
* FIRST WORD IS THE ADDRESS OF THE INTERPRETOR ROUTINE
* TO BE EXECUTED FOR THE CODE WORD.
*
* IN THE CASE OF OPERATORS, THE POINTER IS TO A WORD WHICH
* CONTAINS THE ADDRESS OF THE OPERATOR TO BE EXECUTED. IN
* THE CASE OF OPERANDS SUCH AS CONSTANTS, THE POINTER IS TO
* THE OPERAND ITSELF. ACCORDINGLY, ALL OPERANDS CONTAIN
* A FIELD WHICH POINTS TO THE ROUTINE TO LOAD THE VALUE OF
* THE OPERAND ONTO THE STACK. IN THE CASE OF A VARIABLE,
* THERE ARE THREE SUCH POINTERS. ONE TO LOAD THE VALUE,
* ONE TO STORE THE VALUE AND A THIRD TO JUMP TO THE LABEL.
*
* THE HANDLING OF FAILURE RETURNS DESERVES SPECIAL COMMENT.
* THE LOCATION FLPTR CONTAINS THE POINTER TO THE LOCATION
* ON THE MAIN STACK WHICH CONTAINS THE FAILURE RETURN
* WHICH IS IN THE FORM OF A BYTE OFFSET IN THE CURRENT
* CODE BLOCK (CDBLK OR EXBLK). WHEN A FAILURE OCCURS, THE
* STACK IS POPPED AS INDICATED BY THE SETTING OF FLPTR AND
* CONTROL IS PASSED TO THE APPROPRIATE LOCATION IN THE
* CURRENT CODE BLOCK WITH THE STACK POINTER POINTING TO THE
* FAILURE OFFSET ON THE STACK AND FLPTR UNCHANGED.
EJC
*
* INTERNAL DATA REPRESENTATIONS
* -----------------------------
*
* REPRESENTATION OF VALUES
*
* A VALUE IS REPRESENTED BY A POINTER TO A BLOCK WHICH
* DESCRIBES THE TYPE AND PARTICULARS OF THE DATA VALUE.
* IN GENERAL, A VARIABLE IS A LOCATION CONTAINING SUCH A
* POINTER (ALTHOUGH IN THE CASE OF TRACE ASSOCIATIONS THIS
* IS MODIFIED, SEE DESCRIPTION OF TRBLK).
*
* THE FOLLOWING IS A LIST OF POSSIBLE DATATYPES SHOWING THE
* TYPE OF BLOCK USED TO HOLD THE VALUE. THE DETAILS OF
* EACH BLOCK FORMAT ARE GIVEN LATER.
*
* DATATYPE BLOCK TYPE
* -------- ----------
*
*
* ARRAY ARBLK OR VCBLK
*
* CODE CDBLK
*
* EXPRESSION EXBLK OR SEBLK
*
* INTEGER ICBLK
*
* NAME NMBLK
*
* PATTERN P0BLK OR P1BLK OR P2BLK
*
* REAL RCBLK
*
* STRING SCBLK
*
* TABLE TBBLK
*
* PROGRAM DATATYPE PDBLK
EJC
*
* REPRESENTATION OF VARIABLES
* ---------------------------
*
* DURING THE COURSE OF EVALUATING EXPRESSIONS, IT IS
* NECESSARY TO GENERATE NAMES OF VARIABLES (FOR EXAMPLE
* ON THE LEFT SIDE OF A BINARY EQUALS OPERATOR). THESE ARE
* NOT TO BE CONFUSED WITH OBJECTS OF DATATYPE NAME WHICH
* ARE IN FACT VALUES.
*
* FROM A LOGICAL POINT OF VIEW, SUCH NAMES COULD BE SIMPLY
* REPRESENTED BY A POINTER TO THE APPROPRIATE VALUE CELL.
* HOWEVER IN THE CASE OF ARRAYS AND PROGRAM DEFINED
* DATATYPES, THIS WOULD VIOLATE THE RULE THAT THERE MUST BE
* NO POINTERS INTO THE MIDDLE OF A BLOCK IN DYNAMIC STORE.
* ACCORDINGLY, A NAME IS ALWAYS REPRESENTED BY A BASE AND
* OFFSET. THE BASE POINTS TO THE START OF THE BLOCK
* CONTAINING THE VARIABLE VALUE AND THE OFFSET IS THE
* OFFSET WITHIN THIS BLOCK IN BYTES. THUS THE ADDRESS
* OF THE ACTUAL VARIABLE IS DETERMINED BY ADDING THE BASE
* AND OFFSET VALUES.
*
* THE FOLLOWING ARE THE INSTANCES OF VARIABLES REPRESENTED
* IN THIS MANNER.
*
* 1) NATURAL VARIABLE BASE IS PTR TO VRBLK
* OFFSET IS *VRVAL
*
* 2) TABLE ELEMENT BASE IS PTR TO TEBLK
* OFFSET IS *TEVAL
*
* 3) ARRAY ELEMENT BASE IS PTR TO ARBLK
* OFFSET IS OFFSET TO ELEMENT
*
* 4) VECTOR ELEMENT BASE IS PTR TO VCBLK
* OFFSET IS OFFSET TO ELEMENT
*
* 5) PROG DEF DTP BASE IS PTR TO PDBLK
* OFFSET IS OFFSET TO FIELD VALUE
*
* IN ADDITION THERE ARE TWO CASES OF OBJECTS WHICH ARE
* LIKE VARIABLES BUT CANNOT BE HANDLED IN THIS MANNER.
* THESE ARE CALLED PSEUDO-VARIABLES AND ARE REPRESENTED
* WITH A SPECIAL BASE POINTER AS FOLLOWS=
*
* EXPRESSION VARIABLE PTR TO EVBLK (SEE EVBLK)
*
* KEYWORD VARIABLE PTR TO KVBLK (SEE KVBLK)
*
* PSEUDO-VARIABLES ARE HANDLED AS SPECIAL CASES BY THE
* ACCESS PROCEDURE (ACESS) AND THE ASSIGNMENT PROCEDURE
* (ASIGN). SEE THESE TWO PROCEDURES FOR DETAILS.
EJC
*
* ORGANIZATION OF DATA AREA
* -------------------------
*
*
* THE DATA AREA IS DIVIDED INTO TWO REGIONS.
*
* STATIC AREA
*
* THE STATIC AREA BUILDS UP FROM THE BOTTOM AND CONTAINS
* DATA AREAS WHICH ARE ALLOCATED DYNAMICALLY BUT ARE NEVER
* DELETED OR MOVED AROUND. THE MACRO-PROGRAM ITSELF
* USES THE STATIC AREA FOR THE FOLLOWING.
*
* 1) ALL VARIABLE BLOCKS (VRBLK).
*
* 2) THE HASH TABLE FOR VARIABLE BLOCKS.
*
* 3) MISCELLANEOUS BUFFERS AND WORK AREAS (SEE PROGRAM
* INITIALIZATION SECTION).
*
* IN ADDITION, THE SYSTEM PROCEDURES MAY USE THIS AREA FOR
* INPUT/OUTPUT BUFFERS, EXTERNAL FUNCTIONS ETC. SPACE IN
* THE STATIC REGION IS ALLOCATED BY CALLING PROCEDURE ALOST
*
* THE FOLLOWING GLOBAL VARIABLES DEFINE THE CURRENT
* LOCATION AND SIZE OF THE STATIC AREA.
*
* STATB ADDRESS OF START OF STATIC AREA
* STATE ADDRESS+1 OF LAST WORD IN AREA.
*
* THE MINIMUM SIZE OF STATIC IS GIVEN APPROXIMATELY BY
* 12 + *E$HNB + *E$STS + SPACE FOR ALPHABET STRING
* AND STANDARD PRINT BUFFER.
EJC
*
* DYNAMIC AREA
*
* THE DYNAMIC AREA IS BUILT UPWARDS IN MEMORY AFTER THE
* STATIC REGION. DATA IN THIS AREA MUST ALL BE IN STANDARD
* BLOCK FORMATS SO THAT IT CAN BE PROCESSED BY THE GARBAGE
* COLLECTOR (PROCEDURE GBCOL). GBCOL COMPACTS BLOCKS DOWN
* IN THIS REGION AS REQUIRED BY SPACE EXHAUSTION AND CAN
* ALSO MOVE ALL BLOCKS UP TO ALLOW FOR EXPANSION OF THE
* STATIC REGION.
* WITH THE EXCEPTION OF TABLES AND ARRAYS, NO SPITBOL
* OBJECT ONCE BUILT IN DYNAMIC MEMORY IS EVER SUBSEQUENTLY
* MODIFIED. OBSERVING THIS RULE NECESSITATES A COPYING
* ACTION DURING STRING AND PATTERN CONCATENATION.
*
* GARBAGE COLLECTION IS FUNDAMENTAL TO THE ALLOCATION OF
* SPACE FOR VALUES. SPITBOL USES A VERY EFFICIENT GARBAGE
* COLLECTOR WHICH INSISTS THAT POINTERS INTO DYNAMIC STORE
* SHOULD BE IDENTIFIABLE WITHOUT USE OF BIT TABLES,
* MARKER BITS ETC. TO SATISFY THIS REQUIREMENT, DYNAMIC
* MEMORY MUST NOT START AT TOO LOW AN ADDRESS AND LENGTHS
* OF ARRAYS, TABLES, STRINGS, CODE AND EXPRESSION BLOCKS
* MAY NOT EXCEED THE NUMERICAL VALUE OF THE LOWEST DYNAMIC
* ADDRESS. TO AVOID EITHER PENALIZING USERS WITH MODEST
* REQUIREMENTS OR RESTRICTING THOSE WITH GREATER NEEDS ON
* HOST SYSTEMS WHERE DYNAMIC MEMORY IS ALLOCATED IN LOW
* ADDRESSES, THE MINIMUM DYNAMIC ADDRESS MAY BE SPECIFIED
* SUFFICIENTLY HIGH TO PERMIT ARBITRARILY LARGE SPITBOL
* OBJECTS TO BE CREATED ( WITH THE POSSIBILITY IN EXTREME
* CASES OF WASTING LARGE AMOUNTS OF MEMORY BELOW THE
* START ADDRESS). THIS MINIMUM VALUE IS MADE AVAILABLE
* IN VARIABLE MXLEN BY A SYSTEM ROUTINE, SYSMX.
* ALTERNATIVELY SYSMX MAY INDICATE THAT A
* DEFAULT MAY BE USED IN WHICH DYNAMIC IS PLACED
* AT THE LOWEST POSSIBLE ADDRESS FOLLOWING STATIC.
*
* THE FOLLOWING GLOBAL WORK CELLS DEFINE THE LOCATION AND
* LENGTH OF THE DYNAMIC AREA.
*
* DNAMB START OF DYNAMIC AREA
* DNAMP NEXT AVAILABLE LOCATION
* DNAME LAST AVAILABLE LOCATION + 1
*
* DNAMB IS ALWAYS HIGHER THAN STATE SINCE THE ALOST
* PROCEDURE MAINTAINS SOME EXPANSION SPACE ABOVE STATE.
* *** DNAMB MUST NEVER BE PERMITTED TO HAVE A VALUE LESS
* THAN THAT IN MXLEN ***
*
* SPACE IN THE DYNAMIC REGION IS ALLOCATED BY THE ALLOC
* PROCEDURE. THE DYNAMIC REGION MAY BE USED BY SYSTEM
* PROCEDURES PROVIDED THAT ALL THE RULES ARE OBEYED.
EJC
*
* REGISTER USAGE
* --------------
*
* (CP) CODE POINTER REGISTER. USED TO
* HOLD A POINTER TO THE CURRENT
* LOCATION IN THE INTERPRETIVE PSEUDO
* CODE (I.E. PTR INTO A CDBLK).
*
* (XL,XR) GENERAL INDEX REGISTERS. USUALLY
* USED TO HOLD POINTERS TO BLOCKS IN
* DYNAMIC STORAGE. AN IMPORTANT
* RESTRICTION IS THAT THE VALUE IN
* XL MUST BE COLLECTABLE FOR
* A GARBAGE COLLECT CALL. A VALUE
* IS COLLECTABLE IF IT EITHER POINTS
* OUTSIDE THE DYNAMIC AREA, OR IF IT
* POINTS TO THE START OF A BLOCK IN
* THE DYNAMIC AREA.
*
* (XS) STACK POINTER. USED TO POINT TO
* THE STACK FRONT. THE STACK MAY
* BUILD UP OR DOWN AND IS USED
* TO STACK SUBROUTINE RETURN POINTS
* AND OTHER RECURSIVELY SAVED DATA.
*
* (XT) AN ALTERNATIVE NAME FOR XL DURING
* ITS USE IN ACCESSING STACKED ITEMS.
*
* (WA,WB,WC) GENERAL WORK REGISTERS. CANNOT BE
* USED FOR INDEXING, BUT MAY HOLD
* VARIOUS TYPES OF DATA.
*
* (IA) USED FOR ALL SIGNED INTEGER
* ARITHMETIC, BOTH THAT USED BY THE
* TRANSLATOR AND THAT ARISING FROM
* USE OF SNOBOL4 ARITHMETIC OPERATORS
*
* (RA) REAL ACCUMULATOR. USED FOR ALL
* FLOATING POINT ARITHMETIC.
EJC
*
* SPITBOL CONDITIONAL ASSEMBLY SYMBOLS
* ------------------------------------
*
* IN THE SPITBOL TRANSLATOR, THE FOLLOWING CONDITIONAL
* ASSEMBLY SYMBOLS ARE REFERRED TO. TO INCORPORATE THE
* FEATURES REFERRED TO, THE MINIMAL SOURCE SHOULD BE
* PREFACED BY SUITABLE CONDITIONAL ASSEMBLY SYMBOL
* DEFINITIONS.
* IN ALL CASES IT IS PERMISSIBLE TO DEFAULT THE DEFINITIONS
* IN WHICH CASE THE ADDITIONAL FEATURES WILL BE OMITTED
* FROM THE TARGET CODE.
*
* .CASL DEFINE TO INCLUDE 26 SHIFTED LETTRS
* .CAHT DEFINE TO INCLUDE HORIZONTAL TAB
* .CAVT DEFINE TO INCLUDE VERTICAL TAB
* .CIOD IF DEFINED, DEFAULT DELIMITER IS
* NOT USED IN PROCESSING 3RD ARG OF
* INPUT() AND OUTPUT()
* .CNBT DEFINE TO OMIT BATCH INITIALISATION
* .CNCI DEFINE TO ENABLE SYSCI ROUTINE
* .CNEX DEFINE TO OMIT EXIT() CODE.
* .CNLD DEFINE TO OMIT LOAD() CODE.
* .CNPF DEFINE TO OMIT PROFILE STUFF
* .CNRA DEFINE TO OMIT ALL REAL ARITHMETIC
* .CNSR DEFINE TO OMIT SORT, RSORT
* .CSAX DEFINE IF SYSAX IS TO BE CALLED
* .CSN6 DEFINE TO PAD STMT NOS TO 6 CHARS
* .CSN8 DEFINE TO PAD STMT NOS TO 8 CHARS
* .CUCF DEFINE TO INCLUDE CFP$U
* .CULC DEFINE TO INCLUDE &CASE (LC NAMES)
* .CUST DEFINE TO INCLUDE SET() CODE
.DEF .CASL
.DEF .CAHT
.DEF .CIOD
.DEF .CSAX
.DEF .CSN8
.DEF .CUCF
.DEF .CUEJ
.DEF .CULC
.DEF .CUST
TTL S P I T B O L -- PROCEDURES SECTION
*
* THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING
* SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL
* TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES
* BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL
* ORDER.
* ALL PROCEDURES HAVE A SPECIFICATION CONSISTING OF A
* MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER
* CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND
* FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS
* REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD
* THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY
* MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR
* VALUES CHANGED.
* THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS
* CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM
* INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE
* FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN
* ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES,
* IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH
* DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS
* OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT.
* E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB,
* JSR SYSTC IN SOME IMPLEMENTATIONS.
*
* IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK
* FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL
* DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF ALL
* SUCH BLOCK FORMATS EXCEPT FCBLK FOR WHICH SYSFC SHOULD
* BE CONSULTED.
*
* SECTION 0 CONTAINS INP,INR SPECIFICATIONS OF INTERNAL
* PROCEDURES,ROUTINES. THIS GIVES A SINGLE PASS TRANSLATOR
* INFORMATION MAKING IT EASY TO GENERATE ALTERNATIVE CALLS
* IN THE TRANSLATION OF JSR-S FOR PROCEDURES OF DIFFERENT
* TYPES IF THIS PROVES NECESSARY.
*
SEC START OF PROCEDURES SECTION
.IF .CSAX
EJC
*
* SYSAX -- AFTER EXECUTION
*
SYSAX EXP DEFINE EXTERNAL ENTRY POINT
*
* IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED,
* THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND
* BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT.
* PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND
* IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX
* IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED.
*
* JSR SYSAX CALL AFTER EXECUTION
.ELSE
.FI
EJC
*
* SYSBX -- BEFORE EXECUTION
*
SYSBX EXP DEFINE EXTERNAL ENTRY POINT
*
* CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE
* COMMENCING EXECUTION IN CASE OSINT NEEDS
* TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES.
* OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE
* TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING.
*
* JSR SYSBX CALL BEFORE EXECUTION STARTS
EJC
.IF .CNCI
*
* SYSCI -- CONVERT INTEGER
*
SYSCI EXP
*
* SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO
* CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER
* THAN USING SPITBOL'S OWN INTERNAL CONVERSION CODE. THIS
* CODE MAY BE LESS EFFICIENT ON MACHINES WITH HARDWARE
* CONVERSION INSTRUCTIONS AND IN SUCH CASES, IT MAY BE AN
* ADVANTAGE TO INCLUDE SYSCI. THE SYMBOL .CNCI MUST BE
* DEFINED IF THIS ROUTINE IS TO BE USED.
*
* THE RULES FOR CONVERTING INTEGERS TO STRINGS ARE THAT
* POSITIVE VALUES ARE REPRESENTED WITHOUT ANY SIGN, AND
* THERE ARE NEVER ANY LEADING BLANKS OR ZEROS, EXCEPT IN
* THE CASE OF ZERO ITSELF WHICH IS REPRESENTED AS A SINGLE
* ZERO DIGIT. NEGATIVE NUMBERS ARE REPRESENTED WITH A
* PRECEEDING MINUS SIGN. THERE ARE NEVER ANY TRAILING
* BLANKS, AND CONVERSION CANNOT FAIL.
*
* (IA) VALUE TO BE CONVERTED
* JSR SYSCI CALL TO CONVERT INTEGER VALUE
* (XL) POINTER TO PSEUDO-SCBLK WITH STRING
EJC
.FI
*
* SYSDC -- DATE CHECK
*
SYSDC EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSDC IS CALLED TO CHECK THAT THE EXPIRY DATE FOR A TRIAL
* VERSION OF SPITBOL IS UNEXPIRED.
*
* JSR SYSDC CALL TO CHECK DATE
* RETURN ONLY IF DATE IS OK
EJC
*
* SYSDM -- DUMP CORE
*
SYSDM EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSDM IS CALLED BY A SPITBOL PROGRAM CALL OF DUMP(N) WITH
* N GE 3. ITS PURPOSE IS TO PROVIDE A CORE DUMP.
* N COULD HOLD AN ENCODING OF THE START ADRS FOR DUMP AND
* AMOUNT TO BE DUMPED E.G. N = 256*A + S , S = START ADRS
* IN KILOWORDS, A = KILOWORDS TO DUMP
*
* (XR) PARAMETER N OF CALL DUMP(N)
* JSR SYSDM CALL TO ENTER ROUTINE
EJC
*
* SYSDT -- GET CURRENT DATE
*
SYSDT EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS
* RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE
* TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE
* CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE
* SNOBOL4 FUNCTION DATE.
*
* JSR SYSDT CALL TO GET DATE
* (XL) POINTER TO BLOCK CONTAINING DATE
*
* THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT
* THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED
* INTO SPITBOL DYNAMIC MEMORY ON RETURN.
EJC
*
* SYSEF -- EJECT FILE
*
SYSEF EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT
* MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES
* SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE
* STANDARD OUTPUT FILE (SEE SYSEP).
*
* (WA) PTR TO FCBLK OR ZERO
* (XR) EJECT ARGUMENT (SCBLK PTR)
* JSR SYSEF CALL TO EJECT FILE
* PPM LOC RETURN HERE IF FILE DOES NOT EXIST
* PPM LOC RETURN HERE IF INAPPROPRIATE FILE
* PPM LOC RETURN HERE IF I/O ERROR
EJC
*
* SYSEJ -- END OF JOB
*
SYSEJ EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO
* TERMINATE THE RUN. THE SIGNIFICANCE OF THE ABEND AND
* CODE VALUES IS SYSTEM DEPENDENT. IN GENERAL, THE CODE
* VALUE SHOULD BE MADE AVAILABLE FOR TESTING, AND THE
* ABEND VALUE SHOULD CAUSE SOME POST-MORTEM ACTION SUCH AS
* A DUMP. NOTE THAT SYSEJ DOES NOT RETURN TO ITS CALLER.
* SEE SYSXI FOR DETAILS OF FCBLK CHAIN
*
* (WA) VALUE OF ABEND KEYWORD
* (WB) VALUE OF CODE KEYWORD
* (XL) O OR PTR TO HEAD OF FCBLK CHAIN
* JSR SYSEJ CALL TO END JOB
*
* THE FOLLOWING SPECIAL VALUES ARE USED AS CODES IN (WB)
* 999 EXECUTION SUPPRESSED
* 998 STANDARD OUTPUT FILE FULL OR UNAVAILABLE IN A SYSXI
* LOAD MODULE. IN THESE CASES (WA) CONTAINS THE NUMBER
* OF THE STATEMENT CAUSING PREMATURE TERMINATION.
EJC
*
* SYSEM -- GET ERROR MESSAGE TEXT
*
SYSEM EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE
* SOURCE PROGRAM GIVEN THE ERROR CODE NUMBER. IT IS ALLOWED
* TO RETURN A NULL STRING IF THIS FACILITY IS UNAVAILABLE.
*
* (WA) ERROR CODE NUMBER
* JSR SYSEM CALL TO GET TEXT
* (XR) TEXT OF MESSAGE
*
* THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK
* FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE
* STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN.
* IF THE NULL STRING IS RETURNED EITHER BECAUSE SYSEM DOES
* NOT PROVIDE ERROR MESSAGE TEXTS OR BECAUSE WA IS OUT OF
* RANGE, SPITBOL WILL PRINT THE STRING STORED IN ERRTEXT
* KEYWORD.
EJC
*
* SYSEN -- ENDFILE
*
SYSEN EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE.
* THE MEANING IS SYSTEM DEPENDENT. IN GENERAL, ENDFILE
* IMPLIES THAT NO FURTHER I/O OPERATIONS WILL BE PERFORMED,
* BUT DOES NOT GUARANTEE THIS TO BE THE CASE. THE FILE
* SHOULD BE CLOSED AFTER THE CALL, A SUBSEQUENT READ
* OR WRITE MAY REOPEN THE FILE AT THE START OR IT MAY BE
* NECESSARY TO REOPEN THE FILE VIA SYSIO.
*
* (WA) PTR TO FCBLK OR ZERO
* (XR) ENDFILE ARGUMENT (SCBLK PTR)
* JSR SYSEN CALL TO ENDFILE
* PPM LOC RETURN HERE IF FILE DOES NOT EXIST
* PPM LOC RETURN HERE IF ENDFILE NOT ALLOWED
* PPM LOC RETURN HERE IF I/O ERROR
* (WA,WB) DESTROYED
*
* THE SECOND ERROR RETURN IS USED FOR FILES FOR WHICH
* ENDFILE IS NOT PERMITTED. FOR EXAMPLE, IT MAY BE EXPECTED
* THAT THE STANDARD INPUT AND OUTPUT FILES ARE IN THIS
* CATEGORY.
EJC
*
* SYSEP -- EJECT PRINTER PAGE
*
SYSEP EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD
* PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT).
*
* JSR SYSEP CALL TO EJECT PRINTER OUTPUT
EJC
*
* SYSEX -- CALL EXTERNAL FUNCTION
*
SYSEX EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION
* PREVIOUSLY LOADED WITH A CALL TO SYSLD.
*
* (XS) POINTER TO ARGUMENTS ON STACK
* (XL) POINTER TO CONTROL BLOCK (EFBLK)
* (WA) NUMBER OF ARGUMENTS ON STACK
* JSR SYSEX CALL TO PASS CONTROL TO FUNCTION
* PPM LOC RETURN HERE IF FUNCTION CALL FAILS
* (XS) POPPED PAST ARGUMENTS
* (XR) RESULT RETURNED
*
* THE ARGUMENTS ARE STORED ON THE STACK WITH
* THE LAST ARGUMENT AT 0(XS). ON RETURN, XS
* IS POPPED PAST THE ARGUMENTS.
*
* THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE
* SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES
* SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED
* (UNDER EFBLK) IN THIS SECTION.
*
* THERE ARE TWO WAYS OF RETURNING A RESULT.
*
* 1) RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS
* BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING
* THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE
* KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY.
*
* 2) STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY
* POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY.
* THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT
* THAT THE FIRST WORD WILL BE OVERWRITTEN
* BY A TYPE WORD ON RETURN AND SO NEED NOT
* BE CORRECTLY SET. SUCH A RESULT IS
* COPIED INTO MAIN STORAGE BEFORE PROCEEDING.
* UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A
* PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING
* TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE
* BLOCK IS COPIED INTO DYNAMIC MEMORY.
EJC
*
* SYSFC -- FILE CONTROL BLOCK ROUTINE
*
SYSFC EXP DEFINE EXTERNAL ENTRY POINT
*
* SEE ALSO SYSIO
* INPUT AND OUTPUT HAVE 3 ARGUMENTS REFERRED TO AS SHOWN
* INPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
* OUTPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
* FILE ARG1 MAY BE AN INTEGER OR STRING USED TO IDENTIFY
* AN I/O CHANNEL. IT IS CONVERTED TO A STRING FOR CHECKING.
* THE EXACT SIGNIFICANCE OF FILE ARG2
* IS NOT RIGOROUSLY PRESCRIBED BUT TO IMPROVE PORTABILITY,
* THE SCHEME DESCRIBED IN THE SPITBOL USER MANUAL
* SHOULD BE ADOPTED WHEN POSSIBLE. THE PREFERRED FORM IS
* A STRING $F$,R$R$,C$C$,I$I$,...,Z$Z$ WHERE
* $F$ IS AN OPTIONAL FILE NAME WHICH IS PLACED FIRST.
* REMAINING ITEMS MAY BE OMITTED OR INCLUDED IN ANY ORDER.
* $R$ IS MAXIMUM RECORD LENGTH
* $C$ IS A CARRIAGE CONTROL CHARACTER OR CHARACTER STRING
* $I$ IS SOME FORM OF CHANNEL IDENTIFICATION USED IN THE
* ABSENCE OF $F$ TO ASSOCIATE THE VARIABLE
* WITH A FILE ALLOCATED DYNAMICALLY BY JCL COMMANDS AT
* SPITBOL LOAD TIME.
* ,...,Z$Z$ ARE ADDITIONAL FIELDS.
* IF , (COMMA) CANNOT BE USED AS A DELIMITER, .CIOD
* SHOULD BE DEFINED TO INTRODUCE BY CONDITIONAL ASSEMBLY
* ANOTHER DELIMITER (SEE
* IODEL EQU *
* EARLY IN DEFINITIONS SECTION).
* SYSFC IS CALLED WHEN A VARIABLE IS INPUT OR OUTPUT
* ASSOCIATED TO CHECK FILE ARG1 AND FILE ARG2 AND
* TO REPORT WHETHER AN FCBLK (FILE CONTROL
* BLOCK) IS NECESSARY AND IF SO WHAT SIZE IT SHOULD BE.
* THIS MAKES IT POSSIBLE FOR SPITBOL RATHER THAN OSINT TO
* ALLOCATE SUCH A BLOCK IN DYNAMIC MEMORY IF REQUIRED
* OR ALTERNATIVELY IN STATIC MEMORY.
* THE SIGNIFICANCE OF AN FCBLK , IF ONE IS REQUESTED, IS
* ENTIRELY UP TO THE SYSTEM INTERFACE. THE ONLY RESTRICTION
* IS THAT IF THE FCBLK SHOULD APPEAR TO LIE IN DYNAMIC
* MEMORY , POINTERS TO IT SHOULD BE PROPER POINTERS TO
* THE START OF A RECOGNISABLE AND GARBAGE COLLECTABLE
* BLOCK (THIS CONDITION WILL BE MET IF SYSFC REQUESTS
* SPITBOL TO PROVIDE AN FCBLK).
* AN OPTION IS PROVIDED FOR OSINT TO RETURN A POINTER IN
* XL TO AN FCBLK WHICH IT PRIVATELY ALLOCATED. THIS PTR
* WILL BE MADE AVAILABLE WHEN I/O OCCURS LATER.
* PRIVATE FCBLKS MAY HAVE ARBITRARY CONTENTS AND SPITBOL
* STORES NOTHING IN THEM.
EJC
* THE REQUESTED SIZE FOR AN FCBLK IN DYNAMIC MEMORY
* SHOULD ALLOW A 2 WORD OVERHEAD FOR BLOCK TYPE AND
* LENGTH FIELDS. INFORMATION SUBSEQUENTLY STORED IN THE
* REMAINING WORDS MAY BE ARBITRARY IF AN XNBLK (EXTERNAL
* NON-RELOCATABLE BLOCK) IS REQUESTED. IF THE REQUEST IS
* FOR AN XRBLK (EXTERNAL RELOCATABLE BLOCK) THE
* CONTENTS OF WORDS SHOULD BE COLLECTABLE (I.E. ANY
* APPARENT POINTERS INTO DYNAMIC SHOULD BE GENUINE BLOCK
* POINTERS). THESE RESTRICTIONS DO NOT APPLY IF AN FCBLK
* IS ALLOCATED OUTSIDE DYNAMIC OR IS NOT ALLOCATED AT ALL.
* IF AN FCBLK IS REQUESTED, ITS FIELDS WILL BE INITIALISED
* TO ZERO BEFORE ENTRY TO SYSIO WITH THE EXCEPTION OF
* WORDS 0 AND 1 IN WHICH THE BLOCK TYPE AND LENGTH
* FIELDS ARE PLACED FOR FCBLKS IN DYNAMIC MEMORY ONLY.
* FOR THE POSSIBLE USE OF SYSEJ AND SYSXI, IF FCBLKS
* ARE USED, A CHAIN IS BUILT SO THAT THEY MAY ALL BE
* FOUND - SEE SYSXI FOR DETAILS.
* IF BOTH FILE ARG1 AND FILE ARG2 ARE NULL, CALLS OF SYSFC
* AND SYSIO ARE OMITTED.
* IF FILE ARG1 IS NULL (STANDARD INPUT/OUTPUT FILE), SYSFC
* IS CALLED TO CHECK NON-NULL FILE ARG2 BUT ANY REQUEST
* FOR AN FCBLK WILL BE IGNORED, SINCE SPITBOL HANDLES THE
* STANDARD FILES SPECIALLY AND CANNOT READILY KEEP FCBLK
* POINTERS FOR THEM.
* FILEARG1 IS TYPE CHECKED BY SPITBOL SO FURTHER CHECKING
* MAY BE UNNECCESSARY IN MANY IMPLEMENTATIONS.
* FILE ARG2 IS PASSED SO THAT SYSFC MAY ANALYSE AND
* CHECK IT. HOWEVER TO ASSIST IN THIS, SPITBOL ALSO PASSES
* ON THE STACK THE COMPONENTS OF THIS ARGUMENT WITH
* FILE NAME, $F$ (OTHERWISE NULL) EXTRACTED AND STACKED
* FIRST.
* THE OTHER FIELDS, IF ANY, ARE EXTRACTED AS SUBSTRINGS,
* POINTERS TO THEM ARE STACKED AND A COUNT OF ALL ITEMS
* STACKED IS PLACED IN WC. IF AN FCBLK WAS EARLIER
* ALLOCATED AND POINTED TO VIA FILE ARG1, SYSFC IS ALSO
* PASSED A POINTER TO THIS FCBLK.
*
* (XL) FILE ARG1 SCBLK PTR (2ND ARG)
* (XR) FILEARG2 (3RD ARG) OR NULL
* -(XS)...-(XS) SCBLKS FOR $F$,$R$,$C$,...
* (WC) NO. OF STACKED SCBLKS ABOVE
* (WA) EXISTING FILE ARG1 FCBLK PTR OR 0
* (WB) 0/3 FOR INPUT/OUTPUT ASSOCN
* JSR SYSFC CALL TO CHECK NEED FOR FCBLK
* PPM LOC INVALID FILE ARGUMENT
* (XS) POPPED (WC) TIMES
* (WA NON ZERO) BYTE SIZE OF REQUESTED FCBLK
* (WA=0,XL NON ZERO) PRIVATE FCBLK PTR IN XL
* (WA=XL=0) NO FCBLK WANTED, NO PRIVATE FCBLK
* (WC) 0/1/2 REQUEST ALLOC OF XRBLK/XNBLK
* /STATIC BLOCK FOR USE AS FCBLK
* (WB) DESTROYED
EJC
*
* SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES
*
SYSHS EXP DEFINE EXTERNAL ENTRY POINT
*
* PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES
* ON DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRY IS
* THAT WHERE ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS
* RETURNS AN SCBLK CONTAINING NAME OF COMPUTER,
* NAME OF OPERATING SYSTEM AND NAME OF SITE SEPARATED BY
* COLONS. THE SCBLK NEED NOT HAVE A CORRECT FIRST FIELD
* AS THIS IS SUPPLIED ON COPYING STRING TO DYNAMIC MEMORY.
* SPITBOL DOES NO ARGUMENT CHECKING BUT DOES PROVIDE A
* SINGLE ERROR RETURN FOR ARGUMENTS CHECKED AS ERRONEOUS
* BY OSINT. IT ALSO PROVIDES A SINGLE EXECUTION ERROR
* RETURN. IF THESE ARE INADEQUATE, USE MAY BE MADE OF THE
* MINIMAL ERROR SECTION DIRECT AS DESCRIBED IN MINIMAL
* DOCUMENTATION, SECTION 10.
* SEVERAL NON-ERROR RETURNS ARE PROVIDED. THE FIRST
* CORRESPONDS TO THE DEFINED ENTRY OR, FOR IMPLEMENTATION
* DEFINED ENTRIES, ANY STRING MAY BE RETURNED. THE OTHERS
* PERMIT RESPECTIVELY, RETURN A NULL RESULT, RETURN WITH A
* RESULT TO BE STACKED WHICH IS POINTED AT BY XR, AND A
* RETURN CAUSING SPITBOL STATEMENT FAILURE. IF A RETURNED
* RESULT IS IN DYNAMIC MEMORY IT MUST OBEY GARBAGE
* COLLECTOR RULES. THE ONLY RESULTS COPIED ON RETURN
* ARE STRINGS RETURNED VIA PPM LOC3 RETURN.
*
* (WA) ARGUMENT 1
* (XL) ARGUMENT 2
* (XR) ARGUMENT 3
* JSR SYSHS CALL TO GET HOST INFORMATION
* PPM LOC1 ERRONEOUS ARG
* PPM LOC2 EXECUTION ERROR
* PPM LOC3 SCBLK PTR IN XL OR 0 IF UNAVAILABLE
* PPM LOC4 RETURN A NULL RESULT
* PPM LOC5 RETURN RESULT IN XR
* PPM LOC6 CAUSE STATEMENT FAILURE
EJC
*
* SYSID -- RETURN SYSTEM IDENTIFICATION
*
SYSID EXP DEFINE EXTERNAL ENTRY POINT
*
* THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD
* PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO
* A HEADING LINE OF THE FORM
* MACRO SPITBOL VERSION V.V
* SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE
* MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR
* VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO
* GIVE SAY
* MACRO SPITBOL VERSION V.V(M.M)
* THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE
* AND OPERATING SYSTEM. PREFERABLY IT SHOULD INCLUDE
* THE DATE AND TIME OF THE RUN.
* OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE
* THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE,
* UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS
* APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A
* NUISANCE TO USERS.
* THE FIRST WORDS OF THE SCBLKS POINTED AT NEED NOT BE
* CORRECTLY SET.
*
* JSR SYSID CALL FOR SYSTEM IDENTIFICATION
* (XR) SCBLK PTR FOR ADDITION TO HEADER
* (XL) PTR TO SECOND HEADER SCBLK
EJC
*
* SYSIL -- GET INPUT RECORD LENGTH
*
SYSIL EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD
* FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO
* CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER
* FOR A SUBSEQUENT SYSIN CALL.
*
* (WA) PTR TO FCBLK OR ZERO
* JSR SYSIL CALL TO GET RECORD LENGTH
* (WA) LENGTH OR ZERO IF FILE CLOSED
*
* NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE
* UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL.
*
* NOTE THAT IT IS THE SYSIL CALL (NOT THE SYSIO CALL) WHICH
* CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
* RECORD INPUT FROM THE FILE.
EJC
*
* SYSIN -- READ INPUT RECORD
*
SYSIN EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS
* REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS
* ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN
* SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL.
* IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH
* FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING
* UNLESS BUFFER IS RIGHT PADDED WITH ZEROES.
* IT IS ALSO PERMISSIBLE TO TAKE ANY OF THE ALTERNATIVE
* RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED.
*
* (WA) PTR TO FCBLK OR ZERO
* (XR) POINTER TO BUFFER (SCBLK PTR)
* JSR SYSIN CALL TO READ RECORD
* PPM LOC ENDFILE OR NO I/P FILE AFTER SYSXI
* PPM LOC RETURN HERE IF I/O ERROR
* PPM LOC RETURN HERE IF RECORD FORMAT ERROR
* (WA,WB,WC) DESTROYED
EJC
*
* SYSIO -- INPUT/OUTPUT FILE ASSOCIATION
*
SYSIO EXP DEFINE EXTERNAL ENTRY POINT
*
* SEE ALSO SYSFC.
* SYSIO IS CALLED IN RESPONSE TO A SNOBOL4 INPUT OR OUTPUT
* FUNCTION CALL EXCEPT WHEN FILE ARG1 AND FILE ARG2
* ARE BOTH NULL.
* ITS CALL ALWAYS FOLLOWS IMMEDIATELY AFTER A CALL
* OF SYSFC. IF SYSFC REQUESTED ALLOCATION
* OF AN FCBLK, ITS ADDRESS WILL BE IN WA.
* FOR INPUT FILES, NON-ZERO VALUES OF $R$ SHOULD BE
* COPIED TO WC FOR USE IN ALLOCATING INPUT BUFFERS. IF $R$
* IS DEFAULTED OR NOT IMPLEMENTED, WC SHOULD BE ZEROISED.
* ONCE A FILE HAS BEEN OPENED, SUBSEQUENT INPUT(),OUTPUT()
* CALLS IN WHICH THE SECOND ARGUMENT IS IDENTICAL WITH THAT
* IN A PREVIOUS CALL, MERELY ASSOCIATE THE ADDITIONAL
* VARIABLE NAME (FIRST ARGUMENT) TO THE FILE AND DO NOT
* RESULT IN RE-OPENING THE FILE.
* IN SUBSEQUENT ASSOCIATED ACCESSES TO THE FILE A POINTER
* TO ANY FCBLK ALLOCATED WILL BE MADE AVAILABLE.
*
* (XL) FILE ARG1 SCBLK PTR (2ND ARG)
* (XR) FILE ARG2 SCBLK PTR (3RD ARG)
* (WA) FCBLK PTR (0 IF NONE)
* (WB) 0 FOR INPUT, 3 FOR OUTPUT
* JSR SYSIO CALL TO ASSOCIATE FILE
* PPM LOC RETURN HERE IF FILE DOES NOT EXIST
* PPM LOC RETURN IF INPUT/OUTPUT NOT ALLOWED
* (XL) FCBLK POINTER (0 IF NONE)
* (WC) 0 (FOR DEFAULT) OR MAX RECORD LNGTH
* (WA,WB) DESTROYED
*
* THE SECOND ERROR RETURN IS USED IF THE FILE NAMED EXISTS
* BUT INPUT/OUTPUT FROM THE FILE IS NOT ALLOWED. FOR
* EXAMPLE, THE STANDARD OUTPUT FILE MAY BE IN THIS CATEGORY
* AS REGARDS INPUT ASSOCIATION.
EJC
*
* SYSLD -- LOAD EXTERNAL FUNCTION
*
SYSLD EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4
* LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER
* THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL
* BE USED ON SUBSEQUENT CALLS TO THE FUNCTION (SEE SYSEX).
*
* (XR) POINTER TO FUNCTION NAME (SCBLK)
* (XL) POINTER TO LIBRARY NAME (SCBLK)
* JSR SYSLD CALL TO LOAD FUNCTION
* PPM LOC RETURN HERE IF FUNC DOES NOT EXIST
* PPM LOC RETURN HERE IF I/O ERROR
* (XR) POINTER TO LOADED CODE
*
* THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE
* SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT
* IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE
* A PROPER BLOCK POINTER.
EJC
*
* SYSMM -- GET MORE MEMORY
*
SYSMM EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC
* MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH
* THE CURRENT DYNAMIC DATA AREA.
*
* THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY
* VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS
* IMPOSSIBLE.
*
* JSR SYSMM CALL TO GET MORE MEMORY
* (XR) NUMBER OF ADDITIONAL WORDS OBTAINED
EJC
*
* SYSMX -- SUPPLY MXLEN
*
SYSMX EXP DEFINE EXTERNAL ENTRY POINT
*
* BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL
* OBJECT IS ALLOWED TO OCCUPY MORE BYTES OF MEMORY THAN
* THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC
* (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO
* REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST
* USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY
* STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS,
* THERE IS NO PROBLEM.
* IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR
* 20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A
* USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER
* OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF
* ANY. THE VALUE RETURNED IS EITHER AN INTEGER
* REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE
* MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN
* NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE
* IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED
* TO DYNAMIC STORE BEFORE COMPILATION STARTS.
* IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD
* MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC
* MEMORY IS USED FOR THIS KEYWORD.
*
* JSR SYSMX CALL TO GET MXLEN
* (WA) EITHER MXLEN OR 0 FOR DEFAULT
EJC
*
* SYSOU -- OUTPUT RECORD
*
SYSOU EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY
* ASSOCIATED WITH A SYSIO CALL.
*
* (WA) PTR TO FCBLK OR ZERO
* (XR) RECORD TO BE WRITTEN (SCBLK)
* JSR SYSOU CALL TO OUTPUT RECORD
* PPM LOC FILE FULL OR NO FILE AFTER SYSXI
* PPM LOC RETURN HERE IF I/O ERROR
* (WA,WB,WC) DESTROYED
*
* NOTE THAT IT IS THE SYSOU CALL (NOT THE SYSIO CALL) WHICH
* CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
* RECORD OUTPUT TO THE FILE.
EJC
*
* SYSPI -- PRINT ON INTERACTIVE CHANNEL
*
SYSPI EXP DEFINE EXTERNAL ENTRY POINT
*
* IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN
* REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION
* ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT
* REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH
* MESSAGES TO THE INTERACTIVE CHANNEL.
* SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL
* THROUGH THE SPECIAL VARIABLE NAME, TERMINAL.
*
* (XR) PTR TO LINE BUFFER (SCBLK)
* (WA) LINE LENGTH
* JSR SYSPI CALL TO PRINT LINE
* PPM LOC FAILURE RETURN
* (WA,WB) DESTROYED
EJC
*
* SYSPP -- OBTAIN PRINT PARAMETERS
*
SYSPP EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN
* PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT
* AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN
* AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS
* CASE THE VALUE RETURNED IN WA MAY BE LESS THAN OR EQUAL
* TO THAT RETURNED IN INITIAL CALL BUT MAY NOT BE
* GREATER.
* THE INFORMATION RETURNED IS -
* 1. LINE LENGTH IN CHARS FOR STANDARD PRINT FILE
* 2. NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED
* DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING
* PAGE THROWS ARE SUPPRESSED AND PAGE HEADERS
* RESULTING FROM -TITLE,-STITL LINES ARE KEPT SHORT.
* 3. AN INITIAL -NOLIST OPTION TO SUPPRESS LISTING UNLESS
* THE PROGRAM CONTAINS AN EXPLICIT -LIST.
* 4. OPTIONS TO SUPPRESS LISTING OF COMPILATION AND/OR
* EXECUTION STATS (USEFUL FOR ESTABLISHED PROGRAMS) -
* COMBINED WITH 3. GIVES POSSIBILITY OF LISTING
* FILE NEVER BEING OPENED.
* 5. OPTION TO HAVE COPIES OF ERRORS SENT TO AN
* INTERACTIVE CHANNEL IN ADDITION TO STANDARD PRINTER.
* 6. OPTION TO KEEP PAGE HEADERS SHORT (E.G. IF LISTING
* TO AN ONLINE TERMINAL).
* 7. AN OPTION TO CHOOSE EXTENDED OR COMPACT LISTING
* FORMAT. IN THE FORMER A PAGE EJECT AND IN THE LATTER
* A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH
* OF-- LISTING, COMPILATION STATISTICS, EXECUTION
* OUTPUT AND EXECUTION STATISTICS.
* 8. AN OPTION TO SUPPRESS EXECUTION AS THOUGH A
* -NOEXECUTE CARD WERE SUPPLIED.
* 9. AN OPTION TO REQUEST THAT NAME /TERMINAL/ BE PRE-
* ASSOCIATED TO AN ONLINE TERMINAL VIA SYSPI AND SYSRI
* 10. AN INTERMEDIATE (STANDARD) LISTING OPTION REQUIRING
* THAT PAGE EJECTS OCCUR IN SOURCE LISTINGS. REDUNDANT
* IF EXTENDED OPTION CHOSEN BUT PARTIALLY EXTENDS
* COMPACT OPTION.
* 11. OPTION TO SUPPRESS SYSID IDENTIFICATION.
*
* JSR SYSPP CALL TO GET PRINT PARAMETERS
* (WA) PRINT LINE LENGTH IN CHARS
* (WB) NUMBER OF LINES/PAGE
* (WC) BITS VALUE ...JIHGFEDCBA WHERE
* A = 1 TO SEND ERROR COPY TO INT.CH.
* B = 1 MEANS STD PRINTER IS INT. CH.
* C = 1 FOR -NOLIST OPTION
* D = 1 TO SUPPRESS COMPILN. STATS
* E = 1 TO SUPPRESS EXECN. STATS
* F = 1/0 FOR EXTNDED/COMPACT LISTING
* G = 1 FOR -NOEXECUTE
* H = 1 PRE-ASSOCIATE /TERMINAL/
* I = 1 FOR STANDARD LISTING OPTION.
* J = 1 SUPPRESSES LISTING HEADER
EJC
*
* SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE
*
SYSPR EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD
* OUTPUT FILE.
*
* (XR) POINTER TO LINE BUFFER (SCBLK)
* (WA) LINE LENGTH
* JSR SYSPR CALL TO PRINT LINE
* PPM LOC TOO MUCH O/P OR NO FILE AFTER SYSXI
* (WA,WB) DESTROYED
*
* THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE
* SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE
* VALUE IN WA IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS
* THAN THE MAXIMUM LINE LENGTH POSSIBLE. THERE IS NO SPACE
* CONTROL ASSOCIATED WITH THE LINE, ALL LINES ARE PRINTED
* SINGLE SPACED. NOTE THAT NULL LINES (WA=0) ARE POSSIBLE
* IN WHICH CASE A BLANK LINE IS TO BE PRINTED.
*
* THE ERROR EXIT IS USED FOR SYSTEMS WHICH LIMIT THE AMOUNT
* OF PRINTED OUTPUT. IF POSSIBLE, PRINTING SHOULD BE
* PERMITTED AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO
* ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION.
* ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR
* CALLS. IF THE ERROR RETURN OCCURS ANOTHER TIME, EXECUTION
* IS TERMINATED BY A CALL OF SYSEJ WITH ENDING CODE 998.
EJC
*
* SYSRD -- READ RECORD FROM STANDARD INPUT FILE
*
SYSRD EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT
* FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE
* LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS
* CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH
* SPITBOL IS PREPARED TO RECEIVE. AT COMPILE TIME IT
* CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD
* (DEFAULT 72) AND AT EXECUTION TIME TO THE MOST RECENT
* ,R$R$ (RECORD LENGTH) IN THE THIRD ARG OF AN INPUT()
* STATEMENT FOR THE STANDARD INPUT FILE (DEFAULT 80).
* IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH
* FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING
* UNLESS THE BUFFER IS RIGHT PADDED WITH ZEROES.
* IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURN
* AFTER SUCH AN ADJUSTMENT HAS BEEN MADE.
* SPITBOL MAY CONTINUE TO MAKE CALLS AFTER AN ENDFILE
* RETURN SO THIS ROUTINE SHOULD BE PREPARED TO MAKE
* REPEATED ENDFILE RETURNS.
*
* (XR) POINTER TO BUFFER (SCBLK PTR)
* (WC) LENGTH OF BUFFER IN CHARACTERS
* JSR SYSRD CALL TO READ LINE
* PPM LOC ENDFILE OR NO I/P FILE AFTER SYSXI
* (WA,WB,WC) DESTROYED
EJC
*
* SYSRI -- READ RECORD FROM INTERACTIVE CHANNEL
*
SYSRI EXP DEFINE EXTERNAL ENTRY POINT
*
* READS A RECORD FROM ONLINE TERMINAL FOR SPITBOL VARIABLE,
* TERMINAL. IF ONLINE TERMINAL IS UNAVAILABLE THEN CODE THE
* ENDFILE RETURN ONLY.
* THE BUFFER PROVIDED IS OF LENGTH 120 CHARACTERS. SYSRI
* SHOULD REPLACE THE COUNT IN THE SECOND WORD OF THE SCBLK
* BY THE ACTUAL CHARACTER COUNT UNLESS BUFFER IS RIGHT
* PADDED WITH ZEROES.
* IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE
* RETURN AFTER ADJUSTING THE COUNT.
* THE END OF FILE RETURN MAY BE USED IF THIS MAKES
* SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN
* EOF CHARACTER.)
*
* (XR) PTR TO 120 CHAR BUFFER (SCBLK PTR)
* JSR SYSRI CALL TO READ LINE FROM TERMINAL
* PPM LOC END OF FILE RETURN
* (WA,WB,WC) MAY BE DESTROYED
EJC
*
* SYSRW -- REWIND FILE
*
SYSRW EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSRW IS USED TO REWIND A FILE I.E. REPOSITION THE FILE
* AT THE START BEFORE THE FIRST RECORD. THE FILE SHOULD BE
* CLOSED AND THE NEXT READ OR WRITE CALL WILL OPEN THE
* FILE AT THE START.
*
* (WA) PTR TO FCBLK OR ZERO
* (XR) REWIND ARG (SCBLK PTR)
* JSR SYSRW CALL TO REWIND FILE
* PPM LOC RETURN HERE IF FILE DOES NOT EXIST
* PPM LOC RETURN HERE IF REWIND NOT ALLOWED
* PPM LOC RETURN HERE IF I/O ERROR
EJC
.IF .CUST
*
* SYSST -- SET FILE POINTER
*
SYSST EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSST IS CALLED TO CHANGE THE POSITION OF A FILE
* POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT
* MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED
* UNCONVERTED.
*
* (WA) FCBLK POINTER
* (WB) 2ND ARGUMENT
* (WC) 3RD ARGUMENT
* JSR SYSST CALL TO SET FILE POINTER
* PPM LOC RETURN HERE IF INVALID 2ND ARG
* PPM LOC RETURN HERE IF INVALID 3RD ARG
* PPM LOC RETURN HERE IF FILE DOES NOT EXIST
* PPM LOC RETURN HERE IF SET NOT ALLOWED
* PPM LOC RETURN HERE IF I/O ERROR
*
EJC
.FI
*
* SYSTM -- GET EXECUTION TIME SO FAR
*
SYSTM EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME
* USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS
* ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT
* THE EXACT MEANING IS SYSTEM DEPENDENT. WHERE APPROPRIATE,
* THIS VALUE SHOULD RELATE TO PROCESSOR RATHER THAN CLOCK
* TIMING VALUES.
*
* JSR SYSTM CALL TO GET TIMER VALUE
* (IA) TIME SO FAR IN MILLISECONDS
EJC
*
* SYSTT -- TRACE TOGGLE
*
SYSTT EXP DEFINE EXTERNAL ENTRY POINT
*
* CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO
* TOGGLE THE SYSTEM TRACE SWITCH. THIS PERMITS TRACING OF
* LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF.
*
* JSR SYSTT CALL TO TOGGLE TRACE SWITCH
EJC
*
* SYSUL -- UNLOAD EXTERNAL FUNCTION
*
SYSUL EXP DEFINE EXTERNAL ENTRY POINT
*
* SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY
* LOADED WITH A CALL TO SYSLD.
*
* (XR) PTR TO CONTROL BLOCK (EFBLK)
* JSR SYSUL CALL TO UNLOAD FUNCTION
*
* THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL
* UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION.
*
* THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A
* POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE
* DEFINITIONS AND DATA STRUCTURES SECTION).
.IF .CNEX
.ELSE
EJC
*
* SYSXI -- EXIT TO PRODUCE LOAD MODULE
*
SYSXI EXP DEFINE EXTERNAL ENTRY POINT
*
* WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER
* OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE
* CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT
* SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND
* THE NAMED PROGRAM LOADED AND EXECUTED. THIS TYPE OF CHAIN
* EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY
* CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE.
* IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS
*
* -1, -2, -3
* CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE
* IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH
* A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS.
* VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE
* KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING.
* TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A
* POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR
* VERSION NUMBER V.V (SEE SYSID).
*
* 0 IF POSSIBLE, RETURN CONTROL TO JOB CONTROL
* COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE
* SYSTEM DEPENDENT.
*
* +1, +2, +3
* CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF
* MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE
* THIS MODULE DIRECTLY.
*
* IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN
* FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO
* OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD
* MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE
* SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM.
* SYSXI SHOULD MAKE A NOTE THAT NO I/O CHANNELS,
* INCLUDING STANDARD FILES, HAVE FILES ATTACHED SO THAT
* CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS
* NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE.
* AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS
* RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH
* A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE
* PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE
* IS OTHERWISE SEVERE. AS A LAST RESORT, IF SPITBOL
* ATTEMPTS TO WRITE TO THE STANDARD OUTPUT FILE AND GETS A
* REPLY INDICATING THAT SUCH OUPUT IS UNACCEPTABLE IT STOPS
* BY USING AN ENTRY TO SYSEJ WITH ENDING CODE 998.
* AS DESCRIBED BELOW, PASSING OF SOME ARGUMENTS MAKES IT
* CLEAR THAT LOAD MODULE WILL USE A STANDARD OUTPUT FILE.
*
* IF USE IS MADE OF FCBLKS FOR I/O ASSOCIATION, SPITBOL
* BUILDS A CHAIN SO THAT THOSE IN USE MAY BE FOUND IN SYSXI
* AND SYSEJ. THE NODES ARE 4 WORDS LONG. THIRD WORD
* CONTAINS LINK TO NEXT NODE OR 0, FOURTH WORD CONTAINS
* FCBLK POINTER.
EJC
*
* SYSXI (CONTINUED)
*
* (XL) ZERO OR SCBLK PTR
* (XR) PTR TO V.V SCBLK
* (IA) SIGNED INTEGER ARGUMENT
* (WB) 0 OR PTR TO HEAD OF FCBLK CHAIN
* JSR SYSXI CALL TO EXIT
* PPM LOC REQUESTED ACTION NOT POSSIBLE
* PPM LOC ACTION CAUSED IRRECOVERABLE ERROR
* (REGISTERS) SHOULD BE PRESERVED OVER CALL
*
* LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM
* JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AT THE POINT
* AFTER THE ERROR RETURNS WHICH FOLLOW THE CALL OF SYSXI.
* THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE
* OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE.
* +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE
* CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE.
* +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID
* AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE.
* ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A
* STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE.
* +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP
* AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE.
* NO RETURN FROM SYSXI IS POSSIBLE IF ANOTHER PROGRAM
* IS LOADED AND ENTERED.
.FI