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