V10/cmd/spitbol/4.3/comment.out
Page 1 S P I T B O L -- COPYRIGHT NOTICE
*
* COPYRIGHT (C) BY ROBERT B. K. DEWAR, 1983
*
* THIS SOFTWARE IS THE PROPERTY OF
* PROFESSOR ROBERT B. K. DEWAR
* COURANT INSTITUTE OF MATHEMATICAL SCIENCES
* 251 MERCER STREET
* NEW YORK, NY 10012
* U.S.A
* TEL NO - (212) 460 7497
*
Page 2 S P I T B O L -- NOTES TO IMPLEMENTORS
*
* M A C R O S P I T B O L V E R S I O N 4 . 2
* ---------------------------------------------------
*
* DATE OF RELEASE - 01 NOV 1983
*
* THIS PROGRAM IS MAINTAINED BY BOTH
* DR. A. P. MCCANN
* DEPARTMENT OF COMPUTER STUDIES
* UNIVERSITY OF LEEDS
* LEEDS LS2 9JT
* ENGLAND.
* TEL NO - (0532) 431751
*
* AND
*
* DAVID SHIELDS
* COURANT INSTITUTE OF MATHEMATICAL SCIENCES
* 251 MERCER STREET
* NEW YORK, NY 10012
* U.S.A.
* TEL NO - (212) 460 7168
*
* WHO WILL BE GLAD TO RECEIVE REPORTS OF FAULTS FOUND
* BY USERS OR IMPLEMENTORS.
*
* PERMISSION TO USE SPITBOL MAY BE NEGOTIATED WITH
* ANY OF THE ABOVE NAMED.
* SITES WHICH HAVE OBTAINED SUCH PERMISSION MAY NOT PASS ON
* COPIES OF THE SPITBOL SYSTEM OR PARTS OF IT EXCEPT
* BY AGREEMENT WITH DEWAR.
*
*
* TO ASSIST IMPLEMENTORS A REVISION HISTORY BASED ON
* VERSION 2.7 IS BEING MAINTAINED. IN ADDITION FILE
* SBL.CHG (AVAILABLE WITH THE SOURCE FILE) INDICATES
* DETAILED CHANGES MADE FROM ONE RELEASED VERSION TO
* ANOTHER BY LISTING NEW AND CHANGED LINES IN THE CONTEXT
* OF THE TEN SURROUNDING LINES.
Page 3 S P I T B O L - REVISION HISTORY
* R E V I S I O N H I S T O R Y
* -------------------------------
*
*
* VERSION 4.1 TO 4.2 (NOV 83)
* ---------------------------
*
* BUGS FIXED
* ----------
*
* B4.101 ERROR IN HANDLING OF STACK WHEN GTARR
* GIVEN AN EMPTY TABLE ARG.
* B4.102 OMITTED WTB IN ACESS. CAUSES ILLEGAL ON
* ACCESSING PATTERN VALUED KEYWORDS.
* B4.103 DID NOT REPORT ERROR FOR BLANKS IN
* DEFINE PROTOTYPE. FIXED BY IGNORING LEADING
* AND TRAILING BLANKS.
* B4.104 FAILURE TO IGNORE SUPERFLUOUS COMMAS IN
* ARGS, LOCALS OF DEFINE FUNCTION PROTOTYPE.
* B4.105 CORRUPTION OF PROGRAM TIMER IF IA, WC OVERLAP
* B4.106 REGISTERS NOT SET UP FOR SYSEJ CALLS.
* B4.107 MISUSE OF MFI AT ERR02+8.
* B4.108 MISUSE OF EXNUL IN TRACE PROCEDURE.
* B4.109 NO STATEMENT FAILURE IF STOPTR APPLIED TO NON-
* EXISTENT TRACE.
* B4.110 LISTING FILE PAGE OVERFLOW FOR SOME ERRORS.
* B4.111 INCORRECT TRAILING BLANK PADDING IN INSBF.
* B4.112 ERROR ON INSERTING NULL INTO A BUFFER.
* B4.113 GTNUM FAILED TO PRESERVE IA.
*
* CHANGES
* -------
*
* C4.101 CONDITIONAL ASSEMBLY SYMBOLS IN THE /EQU */
* SECTION ARE REMOVED. USE DUMMIES IF NECESSARY.
* VARIABLITY OF NUMBER OF EQUATES CAUSED TRANSLATOR
* PROBLEMS FOR DIFFERENT VERSIONS FOR SIMILAR C/RS.
* C4.102 POSSIBILITY OF IGNORING CASE OF IDENTIFIERS BY
* USE OF -CASEIG, -NOCASEIG CTRL CARDS INTRODUCED.
* CONDITIONAL ASSEMBLY SYMBOL .CSIG, SETS DEFAULT
* FOR IGNORING CASE IF SET.
* C4.103 DEFINITION OF .CPLC INDICATES SYSTEM PREFERENCE
* FOR LOWER CASE SO THAT SYSTEM MESSAGES, DUMPS
* ETC APPEAR IN LOWER CASE. IMPLEMENTORS DEFINING
* THIS SYMBOL MUST TRANSLATE ARGS OF ERB, ERR, DTC,
* WHICH ARE IN UPPER CASE, AS IF THEY WERE IN
* LOWER CASE. ESSENTIAL THAT .CASL BE ALSO DEFINED.
* C4.104 EJECT AT END OF COMPILATION DONE BEFORE CALL OF
* SYSBX INSTEAD OF AFTER IT.
* C4.105 BUFFER BLANKING FOR STANDARD PRINTER BUFFER NOW
* USES MVW. DONE PARTLY TO ACCOMMODATE HONEYWELL
* H66 AND PARTLY FOR EFFICIENCY.
* C4.106 IF SORT, RSORT ARGUMENTS ARE EMPTY TABLES,
* STATEMENT FAILURE OCCURS INSTEAD OF AN ERROR.
Page 4 S P I T B O L - REVISION HISTORY
* C4.107 THE THREE SECTIONS OF EXECUTABLE CODE FOLLOWING
* SEC OPCODES HAVE BEEN LABELLED AS RTN-S.
* THE FEW WILD BRANCHES TO PLBLS (MAINLY FOR
* RESUMPTION AFTER ERRORS) HAVE BEEN REPLACED BY A
* NEW OPCODE
* JMG GLABL
* WHICH CAUSES A JUMP TO A GLOBAL LABEL (GLBL)
* DECLARED AS SUCH BY APPEARING IN THE PROCEDURES
* SECTION WITH THE OPCODE, GLB, AS IN
* GLABL GLB
* IMPLEMENTORS WITH ADDRESSABILITY PROBLEMS WILL
* FIND THIS ADVANTAGEOUS. OTHERS CAN IGNORE GLB AND
* TRANSLATE JMG IDENTICALLY WITH BRN.
* C4.108 ROUTINES SYSAB, SYSTU, FOR USE BY OSINT TO
* CLOSE DOWNS SPITBOL CLEANLY IN EMERGENCY ARE
* REMOVED AS BEING INSUFFICIENTLY GENERAL.
* C4.109 SPITBOL PERFORMED AN EJECT EVEN WITH OPTIONS
* SELECTED TO SUPPRESS OUTPUT TO STANDARD OUTPUT
* FILE. THIS HAS BEEN RECTIFIED.
* C4.110 SECOND OPERAND OF MINIMAL OPCODES LSX, RSX
* REDEFINED TO BE X NOT (X) FOR CONSISTENCY.
* C4.111 THE FOLLOWING FEATURES ARE REMOVED -
* CTRL CARDS - DOUBLE DUMP ERRORS EXECUTE NOERRORS
* NOEXECUTE NOOPT NOPRINT OPTIMISE PRINT SINGLE.
* FUNCTIONS - ARG FIELD ITEM LOCAL REWIND.
* KEYWORD - ABEND.
Page 5 S P I T B O L - REVISION HISTORY
* C4.112 ADDED FUNCTIONS ITC(N), CTI(S) WHICH CONVERT
* INTEGER N TO NTH CHAR OF ALPHABET AND
* CHARACTER S TO CORRESPONDING INTEGER.
* C4.113 ADDED FUNCTION SET(FILETAG,RECNO,PAR3)
* WHICH MAY BE USED TO EFFECT FILE RANDOM ACCESS.
* C4.114 OPTIONAL MINIMAL OPCODES CLU, CUL TO CONVERT
* FROM LOWER TO UPPER CASE OR VICE VERSA DESCRIBED.
* MOST IMPLEMENTORS NEED NOT USE THEM.
* C4.115 ALL ERROR CODES HAVE BEEN REASSIGNED TO BRING
* THEM BELOW 256 AND TO SORT THEM IN THE SOURCE.
* THIS REPRESENTS A DISCONTINUITY WHICH IT IS
* HOPED WILL NOT BE REPEATED.
* C4.116 DEFAULT INPUT RECORD LENGTH SET TO 160 INSTEAD
* OF 72 CHARACTERS.
* C4.117 OSINT INTERFACE MASSIVELY REDEFINED. SOME
* SYS-- ROUTINES ARE REMOVED. THIS REPRESENTS AN
* ISOLATED UPHEAVAL TO REALLY ADDRESS COMPLAINTS
* FROM IMPLEMENTORS ON FILE HANDLING AND ERROR
* REPORTING. NOTE THE DISAPPEARANCE OF THE FCBLK.
Page 6 S P I T B O L - REVISION HISTORY
* C4.118 SECOND ARG OF INPUT(), OUTPUT() BECOMES A
* FILETAG WHICH TYPICALLY IS A FILE NAME.
* C4.119 FUNCTIONALITY OF ENDFILE() EXTENDED.
* WHEN USED TO CLOSE A FILE, IT DOES NOT CAUSE
* DETACHING OF ASSOCIATED VARIABLES.
* C4.120 TERMINAL I/O IS PUT ON THE SAME FOOTING AS FILE
* I/O. STANDARD INPUT AND OUTPUT CAN BE OBTAINED
* FROM OR DIRECTED TO A TERMINAL.
* C4.121 THE /COMMAND LINE/ USED TO EFFECT A SPITBOL RUN
* IS MADE AVAILABLE TO THE PROGRAM VIA HOST(1).
* THIS PERMITS USER TO CHECK AND TAKE ACTION ON
* RUN OPTIONS.
* C4.122 MINIMAL OPCODES BTC AND WTC TO CONVERT FROM BAUS
* AND WORDS TO CHARACTERS INTRODUCED.
*
* DOCUMENTATION REVISIONS
* -----------------------
*
* D4.101 RULES ABOUT NOT UPSETTING GARBAGE COLLECTOR IN
* OSINT IMPLEMENTATION MADE CLEARER.
* D4.102 MORE DETAIL ON CONDITIONAL ASSEMBLY GIVEN.
* D4.103 SYSRD AND SYSRI DESCRIPTIONS MODIFIED. ANY
* PADDING CHARS USED SHOULD BE BLANKS NOT ZEROES.
* D4.104 MOTIVATION FOR CSC CLARIFIED.
* D4.105 DESCRIPTION OF EXP CORRECTED.
*
*
*
* VERSION 4.0 TO 4.1 (JUL 80)
* ---------------------------
*
* BUGS FIXED
* ----------
*
* B4.001 ERROR IN CONVERT(ARRAY,/TABLE/) - TFIND MESSED WB
* B4.002 SORTH IS N-TYPE PROCEDURE.
* B4.003 ERROR PROC COULD TRY LISTING ABSENT SOURCE LINE.
* B4.004 REF TO UNDEFINED B$RCL IF .CNRA DEFINED.
* B4.005 LEX COMPARISONS ON NULL STRINGS FIXED.
*
* CHANGES
* -------
*
* C4.001 DEFINITION OF .CNLD OMITS MORE EXTERNAL FN CODE.
Page 7 S P I T B O L - REVISION HISTORY
*
* VERSION 3.5 TO 3.6 (JUN 83)
* ---------------------------
*
* OVER THE PERIOD 1979 TO 1983 TWO SEPARATE MAINTENANCE
* AND ENHANCEMENT ROUTES COEXISTED. WHAT IS RECORDED HERE
* RELATING TO VERSION 3.6 RESULTS PRINCIPALLY FROM THE
* EFFORTS OF DAVE SHIELDS, STEVE DUFF AND ROBERT
* GOLDBERG, COORDINATED AT NYU.
* THE OTHER EFFORT BY TONY MCCANN AT LEEDS TOOK PLACE AT
* TWO DISCRETE TIMES DURING THE PERIOD, ULTIMATELY GIVING
* THE CONSOLIDATED VERSION 4.2 WHICH INCORPORATES V3.6
* CHANGES. NOTATION (C4.XXX) MEANS THAT C4.XXX ALSO
* EFFECTED THIS CHANGE OR PROVIDES A SIMILAR FEATURE.
* CODES USED TO IDENTIFY AUTHORS ARE (SGD) FOR DUFF,
* (REG) FOR GOLDBERG, AND (LDS) FOR SHIELDS.
*
* BUGS FIXED
* ----------
*
* B3.601 (SGD) TO FIX MULTIPLE TRAP BLOCK ERROR IN ASIGN.
* B3.602 (SGD) PATCH GTARR TO FIX NULL CONVERT (B4.101).
* B3.603 (SGD) INSERTED MISSING WTB AFTER SYSMM CALLS.
* B3.604 (SGD) USE STRING LENGTH IN HASHS.
* B3.605 (SGD) 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).
* B3.606 (SGD) FIXED EXIT(N) RESPECIFICATION CODE
* TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN.
* B3.607 (SGD) 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 (C4.109).
* ALSO FIX TIMSX INITIALIZATION IN SAME CODE.
* B3.608 (SGD) B$EFC CODE DID NOT CHECK FOR
* UNCONVERTED RESULT RETURNING NULL STRING.
* B3.609 (SGD) LOAD PFVBL FIELD IN RETRN FOR
* RETURN TRACING. THIS WAS CAUSING BUG ON RETURN
* TRACES THAT TRIED TO ACCESS THE VARIABLE NAME.
* B3.610 (SGD) FIXED PROBLEM RELATING TO COMPILATION OF
* GOTO FIELDS CONTAINING SMALL INTEGERS.
* B3.611 (REG) PREVENT CLEAR() FROM CLOBBERING PROTECTED
* VARIABLES AT LABEL SCLR5.
* B3.612 (REG) FIXED GTEXP FROM ACCEPTING TRAILING
* SEMICOLON OR COLON. THIS IS NOT A LEGAL WAY
* TO END AN EXPRESSION.
Page 8 S P I T B O L - REVISION HISTORY
* B3.613 (REG) 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, 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.
* B3.614 (LDS) FIX MISUSE OF WC JUST AFTER ASG10.
* B3.615 (LDS) ADD COMMENT POINTING OUT SUSPICIOUS CODE
* AFTER TFN02. EXPLANATION NOW ADDED (APM).
* B3.616 (LDS) FIX INCONSISTENT TYPE OF SORTH (B4.002).
* B3.617 (LDS) INSERT MISSING CONDITIONAL TESTS ON CNBF.
* B3.618 (LDS) FIX VIOLATIONS OF MINIMAL LANGUAGE WHICH
* HAD SLIPPED PAST SOME TRANSLATORS.
Page 9 S P I T B O L - REVISION HISTORY
* CHANGES
* -------
*
* C3.601 (SGD) ADDITION OF .CSCI AND SYSCI (INT TO STRING
* SYSTEM ROUTINE OPTION)
* C3.602 (REG) CHANGED INILN AND INILS TO 258 (C4.116).
* C3.603 (SGD) MERGED IN PROFILER PATCHES AND FIXED CODE
* C3.604 (SGD) ADDED BUFFER TYPE AND SYMBOL .CNBF
* C3.605 (SGD) ADDED CHAR FUNCTION. CHAR(N) RETURNS NTH
* CHAR OF HOST MACHINE CHAR SET (C4.112).
* C3.606 (REG) ADDED CFP$U TO EASE TRANSLATION ON SMALLER
* SYSTEMS
* C3.607 (REG) ADDED LOWER CASE SUPPORT (C4.102/3).
* C3.608 (REG) ADDED SET I/O FUNCTION - UNDER .CUST
* C3.609 (REG) CONDITIONALIZED 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 (C4.104).
* C3.610 (LDS) INTRODUCE .CTMD TO SUPPORT SYSTM THAT
* REPORTS ELAPSED TIME IN DECISECONDS INSTEAD OF
* MILLISECONDS.
* C3.611 (LDS) PROVIDE PLACE FOR .DEF OR .UND FOR EACH
* CONDITIONAL OPTION, SO THAT SETTINGS CAN BE
* CHANGED WITHOUT CHANGING LINE NUMBERS.
* C3.612 (LDS) OBEY (NEW) RESTRICTION THAT OPERAND IN
* CONDITIONAL BRANCH INSTRUCTION CANNOT HAVE FORM
* (X)+ IN ORDER TO SIMPLIFY TRANSLATIONS FOR WHICH
* POSTINCREMENT NOT READILY AVAILABLE.
* C3.613 (REG,LDS) ADD OP
* FLC WREG
* THAT FOLDS CHAR IN WREG TO UPPER CASE (C4.114).
* C3.614 (LDS) ADD OPTION .CS16 TO ALLOW INITIALIZATION OF
* STATEMENT LIMIT VALUES TO 32767 FOR 16 BIT
* MACHINES.
* C3.615 (LDS) PERMIT RETURN POINT AND ENTRY POINT
* ADDRESSES TO BE DISTINGUISHED BY THEIR PARITY
* INSTEAD OF BY LYING WITHIN A CERTAIN RANGE
* OF VALUES. INTRODUCE CONDITIONAL SYMBOLS
* .CRPP RETURN POINTS HAVE ODD PARITY
* .CEPP ENTRY POINTS HAVE ODD PARITY
* C3.616 (LDS) INTRODUCE NEW MINIMAL OPCODES TO BRANCH
* ACCORDING TO PARITY,
* BEV OPN,PLBL BRANCH IF ADDRESS EVEN
* BOD OPN,PLBL BRANCH IF ADDRESS ODD
* AN ADDRESS IS EVEN IF IT IS A MULTIPLE OF CFP$B.
* C3.617 (SGD) OPCODE MCB (MOVE CHARS BACKWARDS) DEFINED.
* C3.618 (SGD) FUNCTION FENCE DEFINED.
Page 10 S P I T B O L - REVISION HISTORY
* VERSION 3.5 TO 4.0 (JUL 79)
* ---------------------------
*
* BUGS FIXED
* ----------
*
* B3.501 OMITTED BTW OPCODE IN IOPUT.
* B3.502 ILLEGAL ON SORTING A = ARRAY(1).
* B3.503 FAILURE TO SORT VECTOR WITH ORIGIN OTHER THAN 1.
* B3.504 INCORRECT HANDLING OF VARIABLE ALPHABET.
* B3.505 EVAL MISHANDLES DEFAULT VALUE OF TABLE ELEMENT.
*
* CHANGES
* -------
*
* C3.501 PROFILE KEYWORD GIVES EXECUTION PROFILE.
* C3.502 NUMERIC CONSTANTS STARTING WITH . + OR -
* ARE FOLDED ON LEXICAL SCANNING.
*
* DOCUMENTATION REVISIONS
* -----------------------
*
* D3.501 TERM BAU (BASIC ADDRESSING UNIT) INTRODUCED.
* D3.502 ERROR IN REFERENCE TO IA,WC OVERLAP IN SEC 3.
Page 11 S P I T B O L - REVISION HISTORY
* VERSION 3.4 TO 3.5 (FEB 79)
* ---------------------------
*
* BUGS FIXED
* ----------
*
* B3.401 PRTST SHOULD BE DECLARED AS AN R TYPE PROCEDURE.
* B3.402 TIMING ERROR IF SPITBOL FAILS IN DUMP.
* B3.403 ERROR IN HANDLING OMITTED ARGS OF OPERATORS.
* B3.404 TOO MANY LINES PUT ON FIRST PAGE OF LISTING.
* B3.405 LEADING UNARY OPERATOR IN EVAL ERRONEOUSLY NEEDED
* PRECEDING BLANK.
* B3.406 TAG IN DUMP OF ARRAY OR TABLE VALUES WAS OMITTED.
* B3.407 EVAL UNABLE TO RETURN A DEFERRED EXPRESSION.
* B3.408 ILLEGAL IF SETEXIT CODE BRANCHES TO RETURN, WITH
* FURTHER COMPLICATIONS IF WITHIN CALL OF EVAL.
* B3.409 ILLEGAL ON DETACHING INPUT, OUTPUT, TERMINAL.
* B3.410 PRTNL SHOULD BE DECLARED AS AN R TYPE PROCEDURE.
* B3.411 MISPLACED LCT AFTER SDF09.
*
* CHANGES
* -------
*
* C3.401 -SEQU AND -NOSE CONTROL CARDS REMOVED.
* C3.402 OPTION PROVIDED TO SUPPRESS SYSTEM IDENTIFICATION
* ON LISTING.
* C3.403 DESCRIPTION OF SYSBX SLIGHTLY REVISED.
* C3.404 PERMISSIBLE TO MODIFY SCBLK LENGTH BEFORE TAKING
* ERROR RETURNS FROM SYSIN, SYSRD, SYSRI.
* C3.405 CONDITIONAL .CNLD MAY BE DEFINED TO OMIT LOAD().
* C3.406 CONDITIONAL .CNEX MAY BE DEFINED TO OMIT EXIT().
* C3.407 TABLE NOW ACCEPTS A THIRD ARGUMENT SPECIFYING
* DEFAULT INITIAL LOOKUP VALUE.
* C3.408 ROUTINES SORT, RSORT FOR SORTING ARRAYS, TABLES
* INTRODUCED. SPECIFICATION IS AS IN SITBOL.
* ROUTINES MAY BE OMITTED BY DEFINING .CNSR .
* C3.409 ERROR IN CODE(), EVAL() CALL NOW CAUSES STATEMENT
* FAILURE BUT ERRTEXT KEYWORD IS STILL SET.
* C3.410 ARG TO CODE() MAY CONTAIN EMBEDDED CONTROL CARDS
* AND COMMENT DELIMITED BY A SEMICOLON.
*
* DOCUMENTATION REVISIONS
* -----------------------
*
* D3.401 PURPOSE OF RESTRICTION 2 IN MINIMAL SECTION -6-
* (OPERATIONS ON CHAR VALUES), ERRONEOUSLY STATED
* TO BE FOR CMC, RATHER THAN FOR CEQ, CNE.
* DESCRIPTIONS OF ABOVE OPCODES REVISED.
* D3.402 DESCRIPTION OF ENT CLARIFIED.
* D3.403 DESCRIPTIONS OF SEVERAL OPCODES REVISED TO REMOVE
* TECHNICALLY INVALID LITERALS E.G. =0 , *1.
* D3.405 RESTRICTED USE OF LETTER Z IN MINIMAL CLARIFIED.
* D3.406 DIVIDE BY ZERO EXPLICITLY MENTIONED IN RELATION
* TO OVERFLOW SETTING.
Page 12 S P I T B O L - REVISION HISTORY
* VERSION 3.3 TO 3.4 (OCT 78)
* ---------------------------
*
*
* BUGS FIXED
* ----------
*
* B3.301 ILLEGAL FOR ERRONEOUS EVAL() ARG.
* B3.302 ADDRESS ARITHMETIC OVERFLOW IN ALLOC AND ALOCS.
* B3.303 -EJECT AND -SPACE IGNORED -NOLIST OPTION.
* B3.304 ERRONEOUS ARGUMENT SCAN IN LOAD().
* B3.305 ERRONEOUS PLC ON UNINITIALISED R$CIM IN NEXTS.
* B3.306 LDI USED INSTEAD OF MTI AFTER PRV07.
* B3.307 MISUSE OF RMI AT ERRA2.
* B3.308 MISUSE OF MTI IN HASHS.
* B3.309 BUG IN -SEQU CARD SEQUENCE NUMBER CHECKING.
* B3.310 STACK OVERFLOW ERROR MESSAGE NOT ALWAYS PRINTED.
* B3.311 CORRUPT PROTOTYPE PRINT FOR TRACED ARRAYS.
* B3.312 PATTERN FIRST ARG IN DUPL CAUSED ERROR.
* B3.313 OMITTED CSC IN S$RPD, ERRONEOUS CSC IN CONVERT.
* B3.314 MISPLACED BTW IN EXBLD.
* B3.315 INCORRECT CODE IN HASHS.
* B3.316 FAILURE OF LOAD TO SCAN INTEGER ARG.
* B3.317 TABLE ACCESS WITH NEGATIVE INTEGER ARG. FAILED.
* B3.318 ERROR IN RETURNING RESULT OF LOADED FUNCTION.
* B3.319 =E$SRS USED AFTER INI01 INSTEAD OF *E$SRS.
* B3.320 ERR USED INSTEAD OF ERB AFTER SYSTU
* B3.321 LABEL COULD START WITH DISALLOWED CHARACTER.
* B3.322 CONTINUE AFTER SETEXIT HAD BAD HEURISTIC.
Page 13 S P I T B O L - REVISION HISTORY
*
*
* CHANGES
* -------
*
* C3.301 SYSAX AND .CSAX INTRODUCED - SEE SYSAX
* IN PROCEDURES SECTION.
* C3.302 VARIABLE MXLEN INTRODUCED. CONTAINS THE MAXIMUM
* SIZE OF A SPITBOL OBJECT AND IS NOT CHANGEABLE
* AFTER INITIALISATION. MAY BE DEFAULTED OR SET
* EXPLICITLY BY SYSMX.
* C3.303 SYSHS RETURNS REVISED - SEE SYSHS.
* C3.304 NEW MINIMAL OPCODE AOV TO FIX B3.302.
* C3.305 INHIBIT STLIMIT CHECK IF STLIMIT MADE NEGATIVE.
* C3.306 CFP$M IS REQUIRED TO BE OF FORM 2**N - 1.
* C3.307 DUPL MADE TO CONFORM TO SIL SNOBOL4 STANDARD.
* C3.308 LCH AND SCH ACTIONS MORE CLOSELY DEFINED.
* C3.309 BATCH INITIALISATION CODE OMITTED IF CONDITIONAL
* ASSEMBLY SYMBOL .CNBT (NO BATCH) DEFINED.
* C3.310 (WA) CONTAINS ARGUMENT COUNT IN SYSEX CALL.
* C3.311 SYSFC MAY REQUEST ALLOCATION OF STATIC FCBLK.
* C3.312 IF IA,WC OVERLAP, RESTRICTION PUT ON DUMPING/
* RESTORING THESE REGISTERS.
* C3.313 NEW LISTING OPTION INTERMEDIATE BETWEEN COMPACT
* AND EXTENDED PROVIDED (SEE SYSPP).
* C3.314 REVISION OF SYSXI INTERFACE TO PERMIT OPTIONS FOR
* LOAD MODULE STANDARD O/P FILE (SEE SYSXI,SYSPP).
* C3.315 LAST ARG OF SUBSTR MAY BE OMITTED - TREATED
* AS REMAINDER OF STRING.
Page 14 S P I T B O L - REVISION HISTORY
* VERSION 3.2 TO 3.3 (JAN 78)
* ---------------------------
*
* BUGS FIXED
* ----------
*
* B3.201 ARRAY REFERENCE AND EXTERNAL FUNCTION LOAD
* ROUTINES ILLEGALLY ACCESSED INFORMATION
* BEYOND THE STACK FRONT.
* SIMILAR FAULT IN UNANCHORED PATTERN MATCHING.
* B3.202 DUMP(1) PRODUCED DUMP(2) TYPE OUTPUT.
* B3.203 WTB CONVERSION OMITTED IN CODE FOLLOWING
* INI01, INI02, EXBLD.
* B3.204 INCORRECT FAIL RETURN FROM TFIND IN ARREF.
* B3.205 ENDFILE DID NOT DETACH I/O ASSOCIATED VARIABLES.
* B3.206 -SPACE WITH OMITTED ARG. FAILED
* B3.207 LOOPED IF DUMP KEYWORD NON-ZERO AFTER STACK
* OVERFLOW IN GARBAGE COLLECT FAILURE.
* B3.208 FAILURE IN READING NUMBERS WITH TRAILING BLANKS.
*
* CHANGES
* -------
*
* THE EXTENSIVE CHANGES MADE HERE MOSTLY RESULT FROM A
* SNOBOL4 IMPLEMENTORS MEETING HELD AT NEW YORK UNIVERSITY
* IN AUGUST 1977. THEY ARE AIMED AT
* (1) HAVING SPITBOL CONFORM TO CERTAIN SNOBOL4
* LANGUAGE STANDARDS AND
* (2) PRODUCING A STABLE DEFINITION OF MINIMAL BY
* CARRYING OUT A FEW ESSENTIAL REVISIONS IN THE LIGHT
* OF EXPERIENCE IN ITS USE.
*
* CHANGES TO SPITBOL
* ------------------
*
* C3.201 DEFAULT VALUES FOR KEYWORDS TRIM AND ANCHOR ARE
* ZERO. ON SYSTEMS WHERE RECORDS ARE CUSTOMARILY
* HANDLED WITHOUT TRALING BLANKS, THERE IS NO
* OBLIGATION TO SUPPLY SUCH BLANKS.
* C3.202 DEFAULT VALUE OF -INXX CONTROL CARD IS -IN72.
Page 15 S P I T B O L - REVISION HISTORY
* C3.203 THE SECOND ARGUMENT OF INPUT AND OUTPUT IS
* PERMITTED TO BE AN INTEGER AS IN SNOBOL4.
* IN ADDITION INPUT(), OUTPUT() NOW GIVE A SNOBOL4
* STATEMENT FAILURE IF SYSIO USES THE FILE NOT
* FOUND RETURN.
* THE THIRD ARGUMENT HAS A RECOMMENDED FORMAT AND
* TO OVERRIDE ITS DEFAULT DELIMITER (,) A
* CONDITIONAL ASSEMBLY SYMBOL, .CIOD, IS USED.
* INTERFACES TO SYSEF,SYSEJ,SYFC,SYSIO,SYSRW
* ARE REVISED.
* WC MAY NOW BE USED TO RETURN FROM SYSIO, A MAX
* RECORD LENGTH.
* C3.204 NEW CONFIGURATION PARAMETER CFP$F (SCBLK OFFSET)
* IS INTRODUCED. CFP$U IS REMOVED.
* C3.205 IMPLEMENTATION AND VERSION IDENTIFICATION IS
* REQUIRED - SEE SYSID.
* C3.206 ROUTINE SYSMX RETURNS THE MAXIMUM LENGTH OF
* SPITBOL OBJECTS (STRINGS ARRAYS ETC). THIS
* INFORMATION IS NOT NOW NEEDED AT TIME OF ENTRY TO
* SPITBOL AND HENCE WC SHOULD BE ZERO ON ENTRY.
* C3.207 A CONDITIONAL PARAMETER .CNRA PERMITS ASSEMBLY
* OF A MORE COMPACT VERSION WITH NO REAL
* ARITHMETIC CODE.
* C3.208 TERMINAL IS A NEW PRE-ASSOCIATED VARIABLE
* CAPABLE OF PERFORMING INPUT AND OUTPUT TO AN
* ONLINE TERMINAL.
* SYSRI IS A NEW ROUTINE USED IN THE IMPLEMENTATION
* OF THIS. SEE ALSO SYSPP.
* C3.209 THE ENVIRONMENT PARAMETERS E$--- ARE NOW
* PROVIDED BY THE MINIMAL TRANSLATOR USING THE
* REVISED EQU * FORMAT (SEE C3.229 AND START
* OF SPITBOL DEFINITIONS SECTION - SOME REORDERING
* OF SYMBOLS HAS OCCURRED).
* C3.210 THE INTERFACE OF SYSXI HAS BEEN SLIGHTLY REVISED.
* UNAVAILABILITY OF I/O CHANNELS AFTER EXIT(1),
* EXIT(-1) IS DOCUMENTED TOGETHER WITH ADDITIONAL
* ERROR RETURN USAGE FOR SYSIN,SYSOU,SYSPR,SYSRD.
* C3.211 SPITBOL ERROR CODES HAVE BEEN FROZEN - SEE C3.230
* C3.212 THE UTILITY ROUTINES ARREF ETC. ARE NOW
* INTRODUCED BY RTN STATEMENTS.
* C3.213 SYSRL (RECORD LENGTH FOR STD INPUT FILE) IS
* REMOVED. SINCE IMPLEMENTATION OF A GENERAL -INXXX
* CONTROL CARD AND AN ABILITY TO SPECIFY MAX RECORD
* LENGTH USING THE THIRD ARGUMENT OF INPUT, SYSRL
* HAS BECOME REDUNDANT.
* C3.214 SYSEJ AND SYSXI ARE NOW PASSED A CHAIN LINKING
* ALL FCBLKS IN USE.
* C3.215 A SPECIAL ENDING CODE IN SYSEJ IS USED WHEN
* ATTEMPTS TO USE STANDARD OUTPUT CHANNEL FAIL.
* C3.216 RESTRICTION C3.233 OBSERVED SO SIMPLIFYING
* OPTIMISED TRANSLATION OF ENT WITH OMITTED VAL.
Page 16 S P I T B O L - REVISION HISTORY
*
* CHANGES TO MINIMAL
* ------------------
*
* C3.220 MINIMAL OPCODES DEC, DIM, INC, AND BMP
* ARE WITHDRAWN AND REPLACED BY THE MORE CONSISTENT
* SET DCA, DCV, ICA, ICV.
* C3.221 CHS HAS BEEN REPLACED BY THE MORE GENERALLY
* USEFUL ZGB (STILL LIKELY TO BE A NO-OP FOR MOST
* IMPLEMENTATIONS HOWEVER).
* C3.222 THE SET OF CHARACTER COMPARISONS HAS BEEN
* REDUCED TO CEQ AND CNE TO EASE IMPLEMENTATION
* PROBLEMS.
* C3.223 OPCODE IRZ IS REMOVED AND DVI, RMI ORDERS ARE
* REDEFINED TO CONFORM TO MORE COMMON USAGE.
* C3.224 NEW OPCODES SSL AND SSS ARE DEFINED. THEIR USE
* PERMITS RETURN LINKS FOR N TYPE PROCEDURES TO BE
* PLACED ON A LOCAL STACK IF DESIRED.
* C3.225 OPCODE MNZ COMPLEMENTS ZER. IT MOVES A NON-ZERO
* FLAG TO ITS DESTINATION.
* C3.226 FOR SOME MACHINES IT IS PREFERABLE FOR THE STACK
* TO BUILD UP RATHER THAN DOWN. TO PERMIT THIS
* WITHOUT NEED FOR MASSIVE CHANGES IN MINIMAL AND
* RECODING OF EXISTING PROGRAMS, A SCHEME HAS BEEN
* DEVISED IN WHICH AN ADDITIONAL REGISTER NAME, XT,
* IS USED AS A SYNONYM FOR XL WHEN THIS REGISTER
* IS INVOLVED IN STACK MANIPULATION- SEE SECTION 4.
* C3.227 SECTION 0 OF A MINIMAL PROGRAM IS RENAMED THE
* PROCEDURE SECTION. IT NOW CONTAINS, IN ADDITION
* TO EXP, SPECIFICATIONS OF INTERNAL PROCEDURES
* AND ROUTINES BY MEANS OF THE INP AND INR OPCODES.
* C3.228 THE LITERAL OPERAND FORMATS =INT AND *INT HAVE
* BEEN WITHDRAWN. =DLBL AND *DLBL MUST BE USED IN
* THEIR STEAD.
* C3.229 THE FORMAT
* LABEL EQU *NN
* USED TO SPECIFY VALUES SUPPLIED BY THE MINIMAL
* TRANSLATOR FOR CHAR. CODES ETC. IS REPLACED BY
* LABEL EQU *
* WHERE THE ORDER IN WHICH THE DEFINITIONS ARE
* SUPPLIED BY THE TRANSLATOR SHOULD MATCH THE
* ORDER OF OCCURRENCE IN THE DEFINITIONS SECTION.
* C3.230 THE FORMAT OF ERR,ERB OPCODES IS CHANGED TO
* REQUIRE A NUMERIC OPERAND.
* C3.231 THE RTN OPCODE IS USED TO INTRODUCE ROUTINES
* (WHICH ARE QUITE DISTINCT FROM PROCEDURES).
* C3.232 CONDITIONAL ASSEMBLY DIRECTIVES MAY BE NESTED.
* C3.233 MINOR RESTRICTION PLACED ON THE OMISSION OF
* VAL WITH THE ENT OPCODE.
Page 17 S P I T B O L - REVISION HISTORY
* VERSION 3.1 TO 3.2 (AUG 77)
* ---------------------------
*
* BUGS FIXED
* ----------
*
* B3.101 ASTONISHING THIS WAS UNNOTICED FOR THREE YEARS.
* BAD CODE FOR SNOBOL4 INTEGER DIVIDE, /, GAVE
* WRONG RESULT FOR OPERANDS OF OPPOSITE SIGNS.
* IMPLEMENTATIONS HAVE EITHER WRONGLY TRANSLATED
* DVI AND GOT CORRECT RESULT OR CORRECTLY
* TRANSLATED DVI AND GOT WRONG RESULT - LEEDS HAD
* ONE OF EACH. SEE ALSO C3.106.
* TEST PROGRAM NO. 1 NOW EXTENDED TO CHECK /
* MORE THOROUGHLY.
* B3.102 GARBAGE COLLECTION BUG IN SCANE
*
* CHANGES
* -------
*
* C3.101 OPTION TO USE ADDITIONAL CHARACTERS CH$HT,CH$VT
* (HORIZONTAL AND VERTICAL TAB) WITH SAME SYNTACTIC
* SIGNIFICANCE AS CH$BL (BLANK).
* C3.102 OPTION TO USE A SET OF SHIFTED CASE ALPHABETIC
* CHARACTERS CH$$A ... CH$$$.
* C3.103 CONDITIONAL ASSEMBLY FEATURES ARE INTRODUCED INTO
* MINIMAL ON ACCOUNT OF THE ABOVE.
* SEE MINIMAL DOCUMENTATION SECTION FOR DETAILS
* OF ABOVE CHANGES.
* C3.104 LCH AND SCH MAY USE AN X REGISTER FIRST
* OPERAND AS ALTERNATIVE TO A W REGISTER.
* C3.105 SPITBOL STATEMENT NUMBERS IN THE LISTING MAY
* OPTIONALLY BE PADDED TO 6 OR 8 CHARS INSTEAD OF 5
* BY DEFINING CONDITIONAL ASSEMBLY SYMBOLS
* .CSN6 OR .CSN8 .
* C3.106 TO FIX BUG 3.101. AT MODERATE COST,
* OPCODE IRZ (BRANCH IF INTEGER DIVIDE REMAINDER
* ZERO) INTRODUCED.
* C3.107 TO HANDLE POSSIBLE MACHINE DEPENDENCY IN STRING
* HASHING, CHS (COMPLETE HASHING OF STRING) OPCODE
* IS INTRODUCED. PROBABLY A NO-OP ON MOST MACHINES
* - NOT ON THE DEC10.
* C3.108 PROCEDURES PATIN,TFIND,TRACE HAVE BEEN
* MODIFIED TO CONFORM TO THE MINIMAL STANDARD
* CALL AND RETURN REGIME.
* C3.109 SYSFC INTERFACE REVISED SLIGHTLY TO PERMIT
* OSINT TO RETURN A POINTER TO A PRIVATELY
* ALLOCATED FCBLK WHICH SPITBOL WILL RETURN ON
* SUBSEQUENT I/O - SEE SYSFC DOC.
* C3.110 TO REMOVE INCONSISTENCIES IN CALLING SEQUENCES,
* ALL SYS ROUTINES HAVING ACCESS TO A POSSIBLE
* FCBLK HAVE FCBLK PTR OR ZERO IN REG. WA ON ENTRY.
* CHANGE AFFECTS SYSEF, SYSEN, SYSIL, SYSIN,
* SYSOU, SYSRW.
* C3.111 SYSPP BIT ALLOCATED TO PROVIDE
* -NOEXEC OPTION ON ENTRY TO SPITBOL.
Page 18 S P I T B O L - REVISION HISTORY
*
* DOCUMENTATION REVISIONS
* -----------------------
*
* D3.101 NEED TO PRESERVE REGISTERS IN SYSPI, SYSPR,
* SYSRD CALLS WAS OVERSTATED.
Page 19 S P I T B O L - REVISION HISTORY
* VERSION 3.0 TO 3.1 (MAR 77)
* ---------------------------
*
* BUGS FIXED
* ----------
*
* B3.001 REPLACE() COULD FAIL DURING PRE-EVALUATION.
* SPITBOL NOW SIGNALS AN ERROR FOR NULL OR
* UNEQUALLY LONG 2ND AND 3RD ARGUMENTS.
* B3.002 NEGATIVE SECOND ARGUMENTS TO DUPL, LPAD, RPAD
* CAUSED SPITBOL TO SIGNAL AN ERROR. NOW CAUSES
* RETURN OF NULL STRING OR FIRST ARG RESPECTIVELY.
* B3.003 BRN-S USED INSTEAD OF PPM-S IN S$SUB.
* B3.004 ERR USED INSTEAD OF ERB AFTER CMP30.
* B3.005 B$PFC, S$CNV, S$DEF, ARITH AND ARREF KEPT
* INFORMATION ILLEGALLY ABOVE THE STACK TOP.
* B3.006 PRE-EVALUATION OF CONSTANT PARTS OF
* COMPLEX GOTOS WAS ERRONEOUS.
* B3.007 INCORRECT HANDLING OF LABELS COMPILED BY CODE().
* B3.008 THE SINGLE USE OF TRC (IN S$RPL) WAS NOT IN
* ACCORD WITH ITS DEFINITION. SOME TRANSLATIONS OF
* TRC MAY NEED REVISION NOW THAT THE USE
* HAS BEEN BROUGHT INTO LINE WITH DEFINITION.
*
* CHANGES
* -------
*
* A DEBATE ON A FEW WEAKNESSES IN MINIMAL DESIGN HAS
* BEEN RESOLVED BY INTRODUCING 4 NEW OPCODES.
*
* C3.001 NEW MINIMAL OPCODES BMP AND DIM INTRODUCED
* TO AUGMENT INC AND DEC WHICH ARE APPLICABLE
* ONLY TO ADDRESSES.
* C3.002 THE OPCODE SZC (STORE ZERO CHARACTERS) HAD
* A RESTRICTED APPLICABILITY. IT HAS BEEN
* REPLACED BY THE MORE GENERAL ZER (ZEROISE).
* C3.003 FCBLKS MAY BE OPTIONALLY ALLOCATED AS XRBLK-S OR
* XNBLK-S - SEE SYSFC FOR VITAL INFORMATION.
* C3.004 CONTROL CARD PROCESSING HAS BEEN RECODED.
* -INXXX ALLOWS SPECIFICATION OF STANDARD INPUT
* FILE RECORD LENGTHS OTHER THAN 72 OR 80, SEE ALSO
* SYSRL. -SEQU IS IGNORED UNLESS -IN80 IS IN EFFECT
* C3.005 TO ENABLE EFFICIENT BUFFERING OF CHARS ON
* MACHINES WITHOUT CHAR. HANDLING ORDERS, THE
* CSC (COMPLETE STORE CHARACTERS) INSTRUCTION
* IS INTRODUCED. CURRENT IMPLEMENTATIONS CAN
* TRANSLATE IT AS A NO-OP IF IT IS OF NO BENEFIT.
* C3.006 INTEGERS 0,1,2 ARE TREATED SPECIALLY.
* ICBLKS IN STATIC ARE USED INSTEAD OF
* ALLOCATING SPACE IN DYNAMIC.
Page 20 S P I T B O L - REVISION HISTORY
*
* VERSION 2.7 (JUNE 76) TO 3.0 (JAN 77)
* -------------------------------------
*
* BUGS FIXED
* ----------
*
* B2.701 GOES ILLEGAL IF TIMED OUT DURING PROCESSING OF
* DUMP() CALL.
* B2.702 GOES ILLEGAL IF SPITBOL ERROR DETECTED IN ARGS OF
* CODE() OR EVAL(). BUG FIXED SO THAT USER NOW GETS
* A SPITBOL ERROR REPORT (TRAPPABLE BY SETEXIT)
* BEFORE STATEMENT FAILURE.
* B2.703 GOES ILLEGAL IN SOME CIRCUMSTANCES WHEN
* MULTIPLE COMPILATION ERRORS OCCUR IN A STATEMENT
* B2.704 GOES ILLEGAL IF GARBAGE COLLECTOR RUNS OUT OF
* STACK SPACE.
* B2.705 CONTROL CARD PROCESSING INCORRECT FOR CDC 6400.
* B2.706 INCORRECT HANDLING OF MULTIPLE OCCURRENCES OF
* CHARS IN REPLACE 2ND AND 3RD ARGS.
* B2.707 STACK OVERFLOW IN PRE-EVALUATION OF REPLACE IN
* CDC 6400 VERSION.
* B2.708 AN EXPLICIT CALL OF SYSMW WAS CODED IN S$DAT
* INSTEAD OF THE MVW OPCODE.
* B2.709 CALL OF GARBAGE COLLECTOR WHILST DUMPING
* CAUSED HAVOC.
* B2.710 SIZE RESTRICTION ON SPITBOL OBJECTS (SIZE MUST BE
* NUMERICALLY LESS THAN LOWEST DYNAMIC ADDRESS)
* WAS NOT ENFORCED, WITH POTENTIAL FOR CATASTROPHE.
* B2.711 DEFERRED EXPRESSIONS INVOLVING ALTERNATION OR
* NEGATION WERE INCORRECTLY TRANSLATED.
* B2.712 LISTING OF A COMPILATION ERROR AT THE END OF A
* LONG LINE COULD CAUSE COMPILER TO GO ILLEGAL.
* B2.713 INCORRECT -NOFAIL CODE WITH SUCCESS GOTO.
Page 21 S P I T B O L - REVISION HISTORY
*
*
* CHANGES
* -------
*
* (IT IS NOT ANTICIPATED THAT MAJOR REVISIONS ON THIS
* SCALE WILL BE FREQUENT).
*
* C2.701 DEFAULT VALUE OF ANCHOR KEYWORD IS SET TO 1. THIS
* CONFLICTS WITH SNOBOL4 PRACTICE BUT IS A
* PREFERABLE DEFAULT FOR MOST APPLICATIONS.
* C2.702 IF ERRTYPE IS OUT OF RANGE THE STRING IN KEYWORD
* ERRTEXT IS PRINTED AS THE ERROR MESSAGE.
* C2.703 IF STLIMIT IS EXCEEDED, UP TO 10 MORE STATEMENTS
* MAY BE OBEYED TO PERMIT SETEXIT TRAP TO GAIN
* CONTROL.
* C2.704 THE CONCEPT OF AN INTERACTIVE CHANNEL IS
* INTRODUCED FOR IMPLEMENTATIONS WHERE AN ONLINE
* TERMINAL MAY BE USED FOR SPITBOL. THE STANDARD
* PRINT FILE MAY BE SPECIFIED AS INTERACTIVE IN
* WHICH CASE SHORTER TITLE LINES ARE OUTPUT.
* ALTERNATIVELY COPIES OF COMPILATION AND
* EXECUTION ERRORS ONLY MAY BE SENT TO THIS CHANNEL
* C2.705 PRINTING OF COMPILATION STATISTICS MAY BE
* SUPPRESSED.
* C2.706 PRINTING OF EXECUTION STATISTICS MAY BE
* SUPPRESSED.
* C2.707 EXTENDED OR COMPACT LISTING FORMAT MAY BE
* SELECTED.
* C2.708 AN INITIAL -NOLIST OPTION MAY BE SPECIFIED
* BEFORE COMPILATION STARTS.
* C2.709 TO SPECIFY CHOICES IMPLIED BY C2.704 TO C2.708
* SYSPP INTERFACE IS REVISED AND SYSPI IS DEFINED.
* C2.710 COMPILATION AND EXECUTION TIME STATISTICS
* MESSAGES HAVE BEEN SHORTENED.
* C2.711 THE EXIT FUNCTION AS IN SITBOL IS INTRODUCED
* TO PERMIT SAVING LOAD MODULES - SEE SYSXI, S$EXT.
* C2.712 DIAGNOSTIC ROUTINES SYSGB AND SYSGD HAVE BEEN
* REMOVED. THEY WERE USEFUL IN THE EARLY DEBUGGING
* DAYS BUT HAVE FALLEN INTO DISUSE NOW.
* C2.713 SZC MAY HAVE AN OPERAND OF TYPE OPN INSTEAD OF
* TYPE OPW
* C2.714 INPUT/OUTPUT ASSOCIATION INTERFACE HAS BEEN
* REVISED. SYSIF,SYSOF HAVE BEEN CONSOLIDATED INTO
* THE NEW SYSTEM ROUTINE , SYSIO , AND THE
* SPECIFICATION OF SYSFC HAS BEEN SLIGHTLY CHANGED.
* C2.715 CONFIGURATION PARAMETER MXLEN HAS BEEN WITHDRAWN
* AND THE MAXIMUM SIZE OF A SPITBOL OBJECT WHICH
* WAS FORMERLY FIXED AT SPITBOL COMPILE TIME BY
* REFERENCE TO IT MAY NOW BE SPECIFIED AS A RUN
* TIME OPTION BY PLACING A VALUE IN WC BEFORE ENTRY
* TO SPITBOL. (SEE COMMENT ON DYNAMIC AREA IN
* BASIC INFORMATION SECTION).
* C2.716 A FUNCTION, HOST, IS INTRODUCED WHICH YIELDS
* INFORMATION ABOUT THE HOST MACHINE - SEE SYSHS
* AND S$HST.
Page 22 S P I T B O L - REVISION HISTORY
*
* DOCUMENTATION REVISIONS
* -----------------------
*
* D2.701 THE DESCRIPTION OF MVC HAS BEEN REVISED TO
* REFLECT THE FACT THAT SOME SPITBOL CODE SEQUENCES
* RELY ON ON MVC NOT DESTROYING WB. MINOR CHANGES
* HAVE BEEN MADE TO MWB AND MVW DESCRIPTIONS TO
* EMPHASISE SIMILARITIES IN THE IMPLICIT LOOPS OF
* THESE ORDERS.
* D2.702 DESCRIPTIONS OF DVI AND RMI HAVE BEEN CLARIFIED.
* D2.703 IMPLEMENTATION OF RSX,LSX,CEQ,CGE,CGT,CHI,CLO,CLT
* IS OPTIONAL AT PRESENT SINCE THEY ARE CURRENTLY
* UNUSED. THEIR USE IN LATER VERSIONS IS NOT
* EXCLUDED.
* D2.704 IMPOSSIBILITY OF USING STACK FOR RETURN LINKS OF
* N TYPE PROCEDURES IS EMPHASISED.
* D2.705 NOTATION (XL),(WC) ETC IN LANGUAGE DESCRIPTION IS
* CLARIFIED.
* D2.706 DOCUMENTATION OF SYSFC, SYSIO HAS BEEN IMPROVED.
* D2.707 OPCODE DESCRIPTIONS ARE CROSS REFERENCED FROM
* THE ALPHABETICAL OPCODE LIST.
* D2.708 GENERAL DESCRIPTION OF COMPILER HAS BEEN MOVED TO
* THE START OF THE COMPILER PROPER.
* D2.709 DEFINITIONS OF ENVIRONMENT PARAMETERS HAVE BEEN
* PUT NEAR THE FRONT OF THE DEFINITIONS SECTION.
Page 23 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
* THE FOLLOWING SECTIONS DESCRIBE THE IMPLEMENTATION
* LANGUAGE ORIGINALLY DEVELOPED FOR SPITBOL BUT NOW MORE
* WIDELY USED. MINIMAL IS AN ASSEMBLY LANGUAGE FOR AN
* IDEALISED MACHINE WHICH IS NOW DESCRIBED.
*
* SECTION 1 - CONFIGURATION PARAMETERS
*
* THERE ARE SEVERAL PARAMETERS WHICH MAY VARY WITH THE
* TARGET MACHINE. THE MACRO-PROGRAM IS INDEPENDENT OF THE
* ACTUAL DEFINITIONS OF THESE PARAMETERS.
* THE DEFINITIONS OF THESE PARAMETERS ARE SUPPLIED BY
* THE TRANSLATION PROGRAM TO MATCH THE TARGET MACHINE.
*
* CFP$A NUMBER OF DISTINCT CHARACTERS IN
* INTERNAL ALPHABET IN THE RANGE
* 64 LE CFP$A LE MXLEN.
*
* CFP$B NUMBER OF BAUS IN A WORD WHERE A
* BAU IS THE AMOUNT OF STORAGE
* ADDRESSED BY THE LEAST SIGNIFICANT
* ADDRESS BIT (SEE NEXT SECTION).
*
* CFP$C NUMBER OF CHARACTERS WHICH CAN
* BE STORED IN A SINGLE WORD.
*
* CFP$F BAU OFFSET FROM START OF A STRING
* BLOCK TO THE FIRST CHARACTER.
* DEPENDS BOTH ON TARGET MACHINE AND
* STRING DATA STRUCTURE. SEE PLC,PSC.
*
* CFP$I NUMBER OF WORDS IN A SIGNED
* INTEGER CONSTANT
*
* CFP$M THE LARGEST POSITIVE INTEGER
* OF FORM 2**N - 1 WHICH CAN BE
* STORED IN A SINGLE WORD. N WILL
* OFTEN BE CFP$N BUT NEED NOT BE.
*
*
* CFP$N NUMBER OF BITS WHICH CAN BE STORED
* IN A ONE WORD BIT STRING.
*
* CFP$R NUMBER OF WORDS IN A REAL CONSTANT
*
* CFP$S NUMBER OF SIGNIFICANT DIGITS TO
* BE OUTPUT IN CONVERSION OF A REAL
* QUANTITY. THE INTEGER CONSISTING OF
* THIS NUMBER OF 9S MUST NOT BE TOO
* LARGE TO FIT IN THE INTEGER ACCUM.
*
* CFP$U UPPER BOUND ON NUMBER OF CHARS IN
* THE SUBSET USED IN BSW SWITCHES IN
* RANGE 64 LE CFP$U LE CFP$A. TYPICAL
* FOR ASCII IS CFP$U, 128 CFP$A, 256
*
* CFP$X NUMBER OF DIGITS IN REAL EXPONENT
Page 24 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 2 - MEMORY
*
* MEMORY IS ORGANIZED INTO WORDS WHICH EACH CONTAIN CFP$B
* BAUS. THE REASONING BEHIND THIS IS THAT MINIMAL PROGRAMS
* SHOULD RUN EITHER ON MACHINES HAVING BYTE ADDRESSING
* OR THOSE HAVING WORD ADDRESSING SCHEMES. MINIMAL MOV
* INSTRUCTIONS ALWAYS OPERATE ON WORD SIZED OPERANDS OR,
* IN THE CASE OF THE CHARACTER OPCODES, ON CHARACTER
* SIZED OPERANDS. NOWHERE IN MINIMAL ARE BYTE SIZED
* OPERANDS PERMITTED. HOWEVER SINCE ADDRESSING ON BYTE
* MACHINES MUST BE CATERED FOR, THE CONCEPT OF BASIC
* ADDRESSABLE UNIT, HENCEFORTH REFERRED TO AS BAU, IS USED
* A BAU IS THAT COLLECTION OF MEMORY BITS WHICH
* CORRESPONDS TO A CHANGE OF UNITY IN THE LEAST SIGNIFICANT
* BIT OF AN ADDRESS. ON A BYTE MACHINE, A BAU WILL
* CORRESPOND TO A BYTE AND ON A WORD MACHINE TO A WORD.
* BY CONVENTION ADDRESSES ARE HELD IN BAU FORM (SINCE A
* BAU IS A BASIC ADDRESSING UNIT). HOWEVER SOME OF THE
* OPERAND FORMATS PERMIT ADDRESSING WITH WORD
* OFFSETS PAST A BAU ADDRESS IN A REGISTER. SINCE
* MEMORY ACCESSING IS IN TERMS OF WORDS, CARE IS NEEDED
* FOR EXAMPLE WHEN WORD COUNTS ARE COMPUTED FROM ADDRESSES
* AS A BAU DOES NOT NECESSARILY COINCIDE WITH A WORD. ON
* THE OTHER HAND, THE BLOCK MOVE ORDER, MVW, REQUIRES A
* COUNT IN BAUS. THE DEFINITIONS OF THE MINIMAL OPCODES
* SHOULD BE READ WITH CAREFUL ATTENTION TO THEIR ADDRESSING
* IMPLICATIONS.
* FOR WORD MACHINES CFP$B, WHICH IS A CONFIGURATION
* PARAMETER, WILL BE ONE IN WHICH CASE WORDS AND BAUS ARE
* IDENTICAL. TO EACH WORD CORRESPONDS AN ADDRESS IN BAUS,
* A NON-NEGATIVE QUANTITY WHICH IS A MULTIPLE OF CFP$B.
* DATA IS ORGANIZED INTO WORDS AS FOLLOWS.
*
* 1) A SIGNED INTEGER VALUE OCCUPIES CFP$I CONSECUTIVE
* WORDS (CFP$I IS A CONFIGURATION PARAMETER).
* THE RANGE MAY INCLUDE MORE NEGATIVE NUMBERS THAN
* POSITIVE (E.G. THE TWOS COMPLEMENT REPRESENTATION).
*
* 2) A SIGNED REAL VALUE OCCUPIES CFP$R CONSECUTIVE
* WORDS. (CFP$R IS A CONFIGURATION PARAMETER).
*
* 3) CFP$C CHARACTERS MAY BE STORED IN A SINGLE WORD
* (CFP$C IS A CONFIGURATION PARAMETER).
*
* 4) A BIT STRING CONTAINING CFP$N BITS CAN BE STORED IN
* A SINGLE WORD (CFP$N IS A CONFIGURATION PARAMETER).
Page 25 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* 5) A WORD CAN CONTAIN A NON-NEGATIVE INTEGER VALUE IN
* THE RANGE (0 LE N LE CFP$M). THESE INTEGER VALUES
* MAY REPRESENT ADDRESSES OF OTHER WORDS AND SOME OF
* THE INSTRUCTIONS USE THIS FACT TO PROVIDE INDEXING
* AND INDIRECTION FACILITIES.
*
* 6) PROGRAM INSTRUCTIONS OCCUPY WORDS IN AN UNDEFINED
* MANNER. DEPENDING ON THE ACTUAL IMPLEMENTATION,
* INSTRUCTIONS MAY OCCUPY SEVERAL WORDS, OR PART OF
* A WORD, OR EVEN BE SPLIT OVER WORD BOUNDARIES.
*
* THE FOLLOWING REGIONS OF MEMORY ARE AVAILABLE TO THE
* PROGRAM. EACH REGION CONSISTS OF A SERIES OF WORDS WITH
* CONSECUTIVE ADDRESSES.
*
* 1) CONSTANT SECTION ASSEMBLED CONSTANTS
* 2) WORKING STORAGE SECTION ASSEMBLED WORK AREAS
* 3) PROGRAM SECTION ASSEMBLED INSTRUCTIONS
* 4) STACK AREA ALLOCATED STACK AREA
* 5) DATA AREA ALLOCATED DATA AREA
*
* SECTION 3 - REGISTERS
*
* THERE ARE THREE INDEX REGISTERS CALLED XR,XL,XS. IN
* ADDITION XL MAY SOMETIMES BE REFERRED TO BY THE ALIAS
* OF XT - SEE SECTION 4. ANY OF THE ABOVE
* REGISTERS MAY HOLD A POSITIVE INTEGER IN THE RANGE
* (0 LE N LE CFP$M). WHEN THE INDEX REGISTER IS USED FOR
* INDEXING PURPOSES, THIS MUST BE AN APPROPRIATE ADDRESS
* IN BAUS.
* XS IS SPECIAL IN THAT IT IS USED TO POINT TO THE TOP
* ITEM OF A STACK IN MEMORY. THE STACK MAY BUILD UP OR
* DOWN IN MEMORY.SINCE IT IS REQUIRED THAT XS POINTS TO THE
* STACK TOP BUT ACCESS TO ITEMS BELOW THE TOP IS PERMITTED,
* REGISTERS XS AND XT MAY BE USED WITH SUITABLE OFFSETS
* TO INDEX STACKED ITEMS. ONLY XS AND XT MAY BE USED FOR
* THIS PURPOSE SINCE THE DIRECTION OF THE OFFSET IS
* TARGET MACHINE DEPENDENT. XT IS A SYNONYM FOR XL
* WHICH THEREFORE CANNOT BE USED IN CODE SEQUENCES
* REFERENCING XT.
* THE STACK IS USED FOR S-R LINKAGE AND TEMPORARY
* DATA STORAGE FOR WHICH THE STACK ARRANGEMENT IS SUITABLE.
* XR,XL CAN ALSO CONTAIN A CHARACTER POINTER IN CONJUNCTION
* WITH THE CHARACTER INSTRUCTIONS (SEE DESCRIPTION OF PLC).
Page 26 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* THERE ARE THREE WORK REGISTERS CALLED WA,WB,WC WHICH
* CAN CONTAIN ANY DATA ITEM WHICH CAN BE STORED IN A
* SINGLE MEMORY WORD. IN FACT, THE WORK REGISTERS ARE JUST
* LIKE MEMORY LOCATIONS EXCEPT THAT THEY HAVE NO ADDRESSES
* AND ARE REFERENCED IN A SPECIAL WAY BY THE INSTRUCTIONS.
* NOTE THAT REGISTERS WA,WB HAVE SPECIAL USES IN CONNECTION
* WITH THE CVD, CVM, MVC, MVW, MWB, CMC, TRC INSTRUCTIONS.
* REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
* SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
* VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
* EXCEPT AS NOTED IN THE FOLLOWING RESTRICTION ON SIMPLE
* DUMP/RESTORE OPERATIONS.
*
* RESTRICTION
* -----------
*
* IF IA AND WC OVERLAP THEN
* STI IASAV
* LDI IASAV
* DOES NOT CHANGE WC, AND
* MOV WC,WCSAV
* MOV WCSAV,WC
* DOES NOT CHANGE IA.
*
*
*
* THERE IS AN INTEGER ACCUMULATOR (IA) WHICH IS CAPABLE OF
* HOLDING A SIGNED INTEGER VALUE (CFP$I WORDS LONG).
* REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
* SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
* VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
* EXCEPT AS NOTED IN THE ABOVE RESTRICTION ON SIMPLE
* DUMP/RESTORE OPERATIONS.
*
*
*
* THERE IS A SINGLE REAL ACCUMULATOR (RA) WHICH CAN HOLD
* ANY REAL VALUE AND IS COMPLETELY SEPARATE FROM ANY OF
* THE OTHER REGISTERS OR PROGRAM ACCESSIBLE LOCATIONS.
*
*
*
* THE CODE POINTER REGISTER (CP) IS A SPECIAL INDEX
* REGISTER FOR USE IN IMPLEMENTATIONS OF INTERPRETORS.
* IT IS USED TO CONTAIN A PSEUDO-CODE POINTER AND CAN
* ONLY BE AFFECTED BY ICP, LCP, SCP AND LCW INSTRUCTIONS.
Page 27 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
* SECTION 4 - THE STACK
*
* THE FOLLOWING NOTES ARE TO GUIDE BOTH IMPLEMENTORS OF
* SYSTEMS WRITTEN IN MINIMAL AND MINIMAL PROGRAMMERS IN
* DEALING WITH STACK MANIPULATION. IMPLEMENTATION OF A
* DOWNWARDS BUILDING STACK IS EASIEST AND IN GENERAL IS
* TO BE PREFERRED, IN WHICH CASE IT IS MERELY NECESSARY TO
* CONSIDER XT AS AN ALTERNATIVE NAME FOR XL.
*
* THE MINIMAL VIRTUAL MACHINE INCLUDES A STACK AND HAS
* OPERAND FORMATS -(XS) AND (XS)+ FOR PUSHING AND POPPING
* ITEMS WITH AN IMPLICATION THAT THE STACK BUILDS DOWN IN
* MEMORY (A D-STACK). HOWEVER ON SOME TARGET MACHINES IT IS
* BETTER FOR THE STACK TO BUILD UP (A U-STACK).
* A STACK ADDRESSED ONLY BY PUSH AND POP OPERATIONS CAN
* BUILD IN EITHER DIRECTION WITH NO COMPLICATION BUT
* SUCH A PURE SCHEME OF STACK ACCESS PROVES RESTRICTIVE.
* HENCE IT IS PERMITTED TO ACCESS BURIED ITEMS USING AN
* INTEGER OFFSET PAST THE INDEX REGISTER POINTING TO THE
* STACK TOP. ON TARGET MACHINES THIS OFFSET WILL BE
* POSITIVE/NEGATIVE FOR D-STACKS/U-STACKS AND THIS MUST
* BE ALLOWED FOR IN THE TRANSLATION.
* A FURTHER RESTRICTION IS THAT AT NO TIME MAY AN ITEM BE
* PLACED ABOVE THE STACK TOP. FOR SOME OPERATIONS THIS
* MAKES IT CONVENIENT TO ADVANCE THE STACK POINTER AND THEN
* ADDRESS ITEMS BELOW IT USING A SECOND INDEX REGISTER.
* THE PROBLEM OF SIGNED OFFSETS PAST SUCH A REGISTER THEN
* ARISES. TO DISTINGUISH STACK OFFSETS, WHICH IN SOME
* IMPLEMENTATIONS MAY BE NEGATIVE, FROM NON-STACK OFFSETS
* WHICH ARE INVARIABLY POSITIVE, XT, AN ALIAS OR
* SYNONYM FOR XL IS USED. FOR A U-STACK IMPLEMENTATION, THE
* MINIMAL TRANSLATOR SHOULD NEGATE THE SIGN OF OFFSETS
* APPLIED TO BOTH (XS) AND (XT).
* PROGRAMMERS SHOULD NOTE THAT SINCE XT IS NOT A
* SEPARATE REGISTER, XL SHOULD NOT BE USED IN CODE WHERE
* XT IS REFERENCED. OTHER MODIFICATIONS NEEDED IN U-STACK
* TRANSLATIONS ARE IN THE ADD, SUB, ICA, DCA OPCODES
* APPLIED TO XS, XT. FOR EXAMPLE
*
* MINIMAL D-STACK TRANS. U-STACK TRANS.
*
* MOV WA,-(XS) SBI XS,1 ADI XS,1
* STO WA,(XS) STO WA,(XS)
* MOV (XT)+,WC LOD WC,(XL) LOD WC,(XL)
* ADI XL,1 SBI XL,1
* ADD =SEVEN,XS ADI XS,7 SBI XS,7
* MOV 2(XT),WA LOD WA,2(XL) LOD WA,-2(XL)
* ICA XS ADI XS,1 SBI XS,1
*
* NOTE THAT FORMS SUCH AS
* MOV -(XS),WA
* ADD WA,(XS)+
* ARE ILLEGAL, SINCE THEY ASSUME INFORMATION STORAGE
* ABOVE THE STACK TOP.
Page 28 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
* SECTION 5 - INTERNAL CHARACTER SET
*
* THE INTERNAL CHARACTER SET IS REPRESENTED BY A SET OF
* CONTIGUOUS CODES FROM 0 TO CFP$A-1. THE CODES FOR THE
* DIGITS 0-9 MUST BE CONTIGUOUS AND IN SEQUENCE. OTHER
* THAN THIS, THERE ARE NO RESTRAINTS.
*
* THE FOLLOWING SYMBOLS ARE AUTOMATICALLY DEFINED TO HAVE
* THE VALUE OF THE CORRESPONDING INTERNAL CHARACTER CODE.
*
* CH$LA LETTER A
* CH$LB LETTER B
* . .
* CH$L$ LETTER Z
*
* CH$D0 DIGIT 0
* . .
* CH$D9 DIGIT 9
*
* CH$AM AMPERSAND
* CH$AS ASTERISK
* CH$AT AT
* CH$BB LEFT BRACKET
* CH$BL BLANK
* CH$BR VERTICAL BAR
* CH$CL COLON
* CH$CM COMMA
* CH$DL DOLLAR SIGN
* CH$DT DOT (PERIOD)
* CH$DQ DOUBLE QUOTE
* CH$EQ EQUAL SIGN
* CH$EX EXCLAMATION MARK
* CH$MN MINUS
* CH$NM NUMBER SIGN
* CH$NT NOT
* CH$PC PERCENT
* CH$PL PLUS
* CH$PP LEFT PAREN
* CH$RB RIGHT BRACKET
* CH$RP RIGHT PAREN
* CH$QU QUESTION MARK
* CH$SL SLASH
* CH$SM SEMI-COLON
* CH$SQ SINGLE QUOTE
* CH$UN UNDERLINE
Page 29 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* THE FOLLOWING OPTIONAL SYMBOLS ARE INCORPORATED
* BY DEFINING THE CONDITIONAL ASSEMBLY SYMBOL NAMED.
*
* 26 SHIFTED LETTERS INCORPORATED BY DEFINING .CASL
*
* CH$$A SHIFTED A
* CH$$B SHIFTED B
* . .
* CH$$$ SHIFTED Z
*
* CH$HT HORIZONTAL TAB - DEFINE .CAHT
* CH$VT VERTICAL TAB - DEFINE .CAVT
*
* CASE OF SPITBOL SOURCE FILES
*
* ORIGINALLY, SNOBOL4 AND SPITBOL CATERED FOR THE ERA OF
* CARD PUNCH WITH FIXED LENGTH RECORDS IN UPPER CASE ONLY.
* MORE RECENT SYSTEMS HAVE READY USE OF LOWER CASE CHARS
* IN THE ASCII OR EBCDIC SET AND WITH SOME SYSTEMS (NOTABLY
* UNIX), USE OF UPPER CASE CHARS IS NOT IDIOMATIC. BY
* SUITABLE CHOICE OF CONDITIONAL ASSEMBLY OPTIONS, A
* SYSTEM CAN BE TAILORED TO SUIT THE PREVAILING STYLE
* OF THE TARGET MACHINE. ADDITIONALLY SOME USER CONTROL IS
* AVAILABLE BY USE OF CONTROL CARDS SO THAT CASE MAY BE
* CONSIDERED SIGNIFICANT OR NOT AS DESIRED.
* THE SPITBOL SOURCE ASSUMES THAT LOWER CASE LETTERS ARE
* RELATED TO UPPER BY THE ADDITION OF A CONSTANT OFFSET.
* IF THIS IS NOT SO, DEFINE TRANSLATIONS FOR CLU, CUL
* OPCODES AND DEFINE CONDITIONAL ASSEMBLY SYMBOL .CSCV .
Page 30 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 6 - CONDITIONAL ASSEMBLY FEATURES
*
* SOME FEATURES OF THE INTERPRETER ARE APPLICABLE TO ONLY
* CERTAIN TARGET MACHINES. THEY MAY BE INCORPORATED OR
* OMITTED BY USE OF CONDITIONAL ASSEMBLY. THE FULL
* FORM OF A CONDITION IS -
* .IF CONDITIONAL ASSEMBLY SYMBOL (CAS)
* .THEN
* MINIMAL STATEMENTS1 (MS1)
* .ELSE
* MINIMAL STATEMENTS2 (MS2)
* .FI
* THE FOLLOWING RULES APPLY
* 1. THE DIRECTIVES .IF, .THEN, .ELSE, .FI MUST
* START IN COLUMN 1.
* 2. THE CONDITIONAL ASSEMBLY SYMBOL MUST START WITH A
* DOT IN COLUMN 8 FOLLOWED BY 4 LETTERS OR DIGITS E.G.
* .CA$1
* 3. .THEN IS REDUNDANT AND MAY BE OMITTED IF WISHED.
* 4. MS1, MS2 ARE ARBITRARY SEQUENCES OF MINIMAL
* STATEMENTS EITHER OF WHICH MAY BE NULL OR MAY
* CONTAIN FURTHER CONDITIONS.
* 5. IF MS2 IS OMITTED, .ELSE MAY ALSO BE OMITTED.
* 6. .FI IS REQUIRED.
* 7. CONDITIONS MAY BE NESTED TO A DEPTH DETERMINED
* BY THE TRANSLATOR (NOT LESS THAN 20, SAY).
*
* SELECTION OF THE ALTERNATIVES MS1, MS2 IS BY MEANS OF THE
* DEFINE AND UNDEFINE DIRECTIVES OF FORM -
* .DEF CAS
* .UNDEF CAS
* WHICH OBEY RULES 1. AND 2. ABOVE AND MAY OCCUR AT ANY
* POINT IN A MINIMAL PROGRAM, INCLUDING WITHIN A CONDITION.
* MULTIPLY DEFINING A SYMBOL IS AN ERROR.
* UNDEFINING A SYMBOL WHICH IS NOT DEFINED IS NOT AN ERROR.
*
* THE EFFECT IS THAT IF A SYMBOL IS CURRENTLY DEFINED,
* THEN IN ANY CONDITION DEPENDING ON IT, MS1 WILL BE
* PROCESSED AND MS2 OMITTED. CONVERSELY IF IT IS UNDEFINED,
* MS1 WILL BE OMITTED AND MS2 PROCESSED.
* NESTING OF CONDITIONS IS SUCH THAT CONDITIONS
* IN A SECTION NOT SELECTED FOR PROCESSING MUST NOT BE
* EVALUATED. NESTED CONDITIONS MUST REMEMBER THEIR
* ENVIRONMENT WHILST BEING PROCESSED. EFFECTIVELY THIS
* IMPLIES USE OF A SCHEME BASED ON A STACK WITH .IF, .FI
* MATCHING BY THE CONDITION PROCESSOR OF THE TRANSLATOR.
Page 31 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 7 - OPERAND FORMATS
*
* THE FOLLOWING SECTION DESCRIBES THE VARIOUS POSSIBILITIES
* FOR OPERANDS OF INSTRUCTIONS AND ASSEMBLY OPERATIONS.
*
* 01 INT UNSIGNED INTEGER LE CFP$M
* 02 DLBL SYMBOL DEFINED IN DEFINITIONS SEC
* 03 WLBL LABEL IN WORKING STORAGE SECTION
* 04 CLBL LABEL IN CONSTANT SECTION
* 05 ELBL PROGRAM SECTION ENTRY LABEL
* 06 PLBL PROGRAM SECTION LABEL (NON-ENTRY)
* 07 X ONE OF THE THREE INDEX REGISTERS
* 08 W ONE OF THE THREE WORK REGISTERS
* 09 (X) LOCATION INDEXED BY X
* 10 (X)+ LIKE (X) BUT POST INCREMENT X
* 11 -(X) LIKE (X) BUT PREDECREMENT X
* 12 INT(X) LOCATION INT WORDS BEYOND ADDR IN X
* 13 DLBL(X) LOCATION DLBL WORDS PAST ADDR IN X
* 14 CLBL(X) LOCATION (X) BAUS BEYOND CLBL
* 15 WLBL(X) LOCATION (X) BAUS BEYOND WLBL
* 16 INTEGER SIGNED INTEGER (DIC)
* 17 REAL SIGNED REAL (DRC)
* 18 =DLBL LOCATION CONTAINING DAC DLBL
* 19 *DLBL LOCATION CONTAINING DAC CFP$B*DLBL
* 20 =WLBL LOCATION CONTAINING DAC WLBL
* 21 =CLBL LOCATION CONTAINING DAC CLBL
* 22 =ELBL LOCATION CONTAINING DAC ELBL
* 23 PNAM PROCEDURE LABEL (ON PRC INSTRUC)
* 24 EQOP OPERAND FOR EQU INSTRUCTION
* 25 PTYP PROCEDURE TYPE (SEE PRC)
* 26 TEXT ARBITRARY TEXT (ERB,ERR,TTL)
* 27 DTEXT DELIMITED TEXT STRING (DTC/DDC)
* 28 RNAM ROUTINE NAME (ON AN RTN INSTRN)
* 29 GLBL GLOBAL LABEL (SEE GLB)
*
* THE NUMBERS IN THE ABOVE LIST ARE USED IN SUBSEQUENT
* DESCRIPTION AND IN SOME OF THE MINIMAL TRANSLATORS.
Page 32 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* OPERAND FORMATS (CONTINUED)
*
* THE FOLLOWING SPECIAL SYMBOLS REFER TO A COLLECTION OF
* THE LISTED POSSIBILITIES
*
* VAL 01,02 PREDEFINED VALUE
*
* VAL IS USED TO REFER TO A PREDEFINED ONE WORD
* INTEGER VALUE IN THE RANGE 0 LE N LE CFP$M.
*
* REG 07,08 REGISTER
*
* REG IS USED TO DESCRIBE AN OPERAND WHICH CAN BE
* ANY OF THE REGISTERS (XL,XR,XS,XT,WA,WB,WC). SUCH
* AN OPERAND CAN HOLD A ONE WORD INTEGER (ADDRESS).
*
* OPC 09,10,11 CHARACTER
*
* OPC IS USED TO DESIGNATE A SPECIFIC CHARACTER
* OPERAND FOR USE IN THE LCH AND SCH INSTRUCTIONS.
* THE INDEX REGISTER REFERENCED MUST BE EITHER XR OR
* XL (NOT XS,XT). SEE SECTION ON CHARACTER OPERATIONS.
*
* OPS 03,04,09,12,13,14,15 MEMORY REFERENCE
*
* OPS IS USED TO DESCRIBE AN OPERAND WHICH IS IN
* MEMORY. THE OPERAND MAY BE ONE OR MORE WORDS LONG
* DEPENDING ON THE DATA TYPE. IN THE CASE OF MULTIWORD
* OPERANDS, THE ADDRESS GIVEN IS THE FIRST WORD.
*
* OPW AS FOR OPS + 08,10,11 FULL WORD
*
* OPW IS USED TO REFER TO AN OPERAND WHOSE CAPACITY IS
* THAT OF A FULL MEMORY WORD. OPW INCLUDES ALL THE
* POSSIBILITIES FOR OPS (THE REFERENCED WORD IS USED)
* PLUS THE USE OF ONE OF THE THREE WORK REGISTERS
* (WA,WB,WC). IN ADDITION, THE FORMATS (X)+ AND -(X)
* ALLOW INDEXED OPERATIONS IN WHICH THE INDEX REGISTER
* IS POPPED BY ONE WORD AFTER THE REFERENCE (X)+,
* OR PUSHED BY ONE WORD BEFORE THE REFERENCE -(X)
* THESE LATTER TWO FORMATS PROVIDE A FACILITY FOR
* MANIPULATION OF STACKS. THE FORMAT DOES NOT IMPLY
* A PARTICULAR DIRECTION IN WHICH STACKS MUST BUILD -
* IT IS USED FOR COMPACTNESS. NOTE THAT THERE IS A
* RESTRICTION WHICH DISALLOWS AN INSTRUCTION TO USE
* AN INDEX REGISTER IN ONE OF THESE FORMATS
* IN SOME OTHER MANNER IN THE SAME INSTRUCTION.
* E.G. MOV XL,(XL)+ IS ILLEGAL.
* THE FORMATS -(X) AND (X)+ MAY ALSO BE USED IN
* PRE-DECREMENTATION, POST-INCREMENTATION TO ACCESS
* THE ADJACENT CHARACTER OF A STRING.
Page 33 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* OPERAND FORMATS (CONTINUED)
*
* OPN AS FOR OPW + 07 ONE WORD INTEGER
*
* OPN IS USED TO REPRESENT AN OPERAND LOCATION WHICH
* CAN CONTAIN A ONE WORD INTEGER (E.G. AN ADDRESS).
* THIS INCLUDES ALL THE POSSIBILITIES FOR OPW PLUS
* THE USE OF ONE OF THE INDEX REGISTERS (XL,XR,XT,
* XS). THE RANGE OF INTEGER VALUES IS 0 LE N LE CFP$M.
*
* OPV AS FOR OPN + 18-22 ONE WORD INTEGER VALUE
*
* OPV IS USED FOR AN OPERAND WHICH CAN YIELD A ONE
* WORD INTEGER VALUE (E.G. AN ADDRESS). IT INCLUDES
* ALL THE POSSIBILITIES FOR OPN (THE CURRENT VALUE OF
* THE LOCATION IS USED) PLUS THE USE OF LITERALS. NOTE
* THAT ALTHOUGH THE LITERAL FORMATS ARE DESCRIBED IN
* TERMS OF A REFERENCE TO A LOCATION CONTAINING AN
* ADDRESS CONSTANT, THIS LOCATION MAY NOT ACTUALLY
* EXIST IN SOME IMPLEMENTATIONS SINCE ONLY THE VALUE
* IS REQUIRED. A RESTRICTION IS PLACED ON LITERALS
* WHICH MAY CONSIST ONLY OF DEFINED SYMBOLS AND
* CERTAIN LABELS. CONSEQUENTLY SMALL INTEGERS TO BE
* USED AS LITERALS MUST BE PRE-DEFINED, A DISCIPLINE
* AIDING PROGRAM MAINTENANCE AND REVISION.
*
* ADDR 01,02,03,04,05 ADDRESS
*
* ADDR IS USED TO DESCRIBE AN EXPLICIT ADDRESS VALUE
* (ONE WORD INTEGER VALUE) FOR USE WITH DAC.
*
* PGLB 06,29 LABEL OR GLOBAL LABEL
*
* ****************************************************
* * IN THE FOLLOWING DESCRIPTIONS THE USAGE -- *
* * (XL),(XR), ... ,(IA) *
* * IN THE DESCRIPTIVE TEXT SIGNIFIES THE +
* * CONTENTS OF THE STATED REGISTER. *
* ****************************************************
Page 34 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 8 - LIST OF INSTRUCTION MNEMONICS
*
* THE FOLLOWING LIST INCLUDES ALL INSTRUCTION AND
* ASSEMBLY OPERATION MNEMONICS IN ALPHABETICAL ORDER.
* THE MNEMONICS ARE PRECEDED BY A NUMBER IDENTIFYING
* THE FOLLOWING SECTION WHERE THE INSTRUCTION IS DESCRIBED.
* A STAR (*) IS APPENDED TO THE MNEMONIC IF THE LAST
* OPERAND MAY OPTIONALLY BE OMITTED.
* SEE SECTION -15- FOR DETAILS OF STATEMENT FORMAT AND
* COMMENT CONVENTIONS.
*
* 2.1 ADD OPV,OPN ADD ADDRESS
* 4.2 ADI OPS ADD INTEGER
* 5.3 ADR OPS ADD REAL
* 7.1 ANB OPW,W AND BIT STRING
* 2.17 AOV OPV,OPN,PLBL ADD ADDRESS, FAIL IF OVERFLOW
* 2.16 BCT W,PLBL BRANCH AND COUNT
* 2.5 BEQ OPN,OPV,PLBL BRANCH IF ADDRESS EQUAL
* 2.8 BGE OPN,OPV,PLBL BRANCH IF ADDRESS GREATER OR EQUL
* 2.7 BGT OPN,OPV,PLBL BRANCH IF ADDRESS GREATER
* 2.12 BHI OPN,OPV,PLBL BRANCH IF ADDRESS HIGH
* 2.10 BLE OPN,OPV,PLBL BRANCH IF ADDRESS LESS OR EQUAL
* 2.11 BLO OPN,OPV,PLBL BRANCH IF ADDRESS LOW
* 2.9 BLT OPN,OPV,PLBL BRANCH IF ADDRESS LESS THAN
* 2.6 BNE OPN,OPV,PLBL BRANCH IF ADDRESS NOT EQUAL
* 2.13 BNZ OPN,PLBL BRANCH IF ADDRESS NON-ZERO
* 1.2 BRN PLBL BRANCH UNCONDITIONAL
* 1.7 BRI OPN BRANCH INDIRECT
* 1.3 BSW* X,VAL,PLBL BRANCH ON SWITCH VALUE
* 8.9 BTC W CONVERT BAUS TO CHAR COUNT
* 8.2 BTW REG CONVERT BAUS TO WORDS
* 2.14 BZE OPN,PLBL BRANCH IF ADDRESS ZERO
* 6.6 CEQ OPW,OPW,PLBL BRANCH IF CHARACTERS EQUAL
* 10.1 CHK CHECK STACK OVERFLOW
* 6.10 CLU W CONVERT LOWER TO UPPER CASE
* 7.4 CMB W COMPLEMENT BIT STRING
* 6.8 CMC PLBL,PLBL COMPARE CHARACTER STRINGS
* 6.7 CNE OPW,OPW,PLBL BRANCH IF CHARACTERS NOT EQUAL
* 6.5 CSC X COMPLETE STORE CHARACTERS
* 8.8 CTB W,VAL CONVERT CHARACTER COUNT TO BAUS
* 8.7 CTW W,VAL CONVERT CHARACTER COUNT TO WORDS
* 6.11 CUL W CONVERT UPPER TO LOWER CASE
* 8.12 CVD CONVERT BY DIVISION
* 8.11 CVM PLBL CONVERT BY MULTIPLICATION
* 11.1 DAC ADDR DEFINE ADDRESS CONSTANT
* 11.5 DBC VAL DEFINE BIT STRING CONSTANT
* 2.4 DCA OPN DECREMENT ADDRESS BY ONE WORD
* 1.17 DCV OPN DECREMENT VALUE BY ONE
* 11.6 DDC DTEXT DEFINE DISPLAY CONSTANT
* 11.2 DIC INTEGER DEFINE INTEGER CONSTANT
Page 35 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
*
* 11.3 DRC REAL DEFINE REAL CONSTANT
* 11.4 DTC DTEXT DEFINE TEXT (CHARACTER) CONSTANT
* 4.5 DVI OPS DIVIDE INTEGER
* 5.6 DVR OPS DIVIDE REAL
* 13.1 EJC EJECT ASSEMBLY LISTING
* 14.2 END END OF ASSEMBLY
* 1.13 ENP DEFINE END OF PROCEDURE
* 1.6 ENT* VAL DEFINE ENTRY POINT
* 12.1 EQU EQOP DEFINE SYMBOLIC VALUE
* 1.15 ERB INT,TEXT ASSEMBLE ERROR CODE AND BRANCH
* 1.14 ERR INT,TEXT ASSEMBLE ERROR CODE
* 1.5 ESW END OF SWITCH LIST FOR BSW
* 1.12 EXI* INT EXIT FROM PROCEDURE
* 12.2 EXP PTYP,INT DEFINE EXTERNAL PROCEDURE
* 2.3 ICA OPN INCREMENT ADDRESS BY ONE WORD
* 12.5 GLB DEFINE GLOBAL LABEL
* 3.4 ICP INCREMENT CODE POINTER
* 1.16 ICV OPN INCREMENT VALUE BY ONE
* 4.11 IEQ PLBL JUMP IF INTEGER ZERO
* 1.4 IFF VAL,PLBL SPECIFY BRANCH FOR BSW
* 4.12 IGE PLBL JUMP IF INTEGER NON-NEGATIVE
* 4.13 IGT PLBL JUMP IF INTEGER POSITIVE
* 4.14 ILE PLBL JUMP IF INTEGER NEGATIVE OR ZERO
* 4.15 ILT PLBL JUMP IF INTEGER NEGATIVE
* 4.16 INE PLBL JUMP IF INTEGER NON-ZERO
* 4.9 INO PLBL JUMP IF NO INTEGER OVERFLOW
* 12.3 INP PTYP,INT INTERNAL PROCEDURE
* 12.4 INR INTERNAL ROUTINE
* 4.10 IOV PLBL JUMP IF INTEGER OVERFLOW
* 8.5 ITR CONVERT INTEGER TO REAL
* 1.23 JMG GLBL JUMP TO GLOBAL LABEL
* 1.9 JSR PNAM CALL PROCEDURE
* 6.3 LCH REG,OPC LOAD CHARACTER
* 3.1 LCP REG LOAD CODE POINTER REGISTER
* 2.15 LCT W,OPV LOAD COUNTER FOR LOOP
* 3.3 LCW REG LOAD NEXT CODE WORD
* 4.1 LDI OPS LOAD INTEGER
* 5.1 LDR OPS LOAD REAL
* 1.8 LEI X LOAD ENTRY POINT ID
* 7.6 LSH W,VAL LEFT SHIFT BIT STRING
* 7.8 LSX W,X LEFT SHIFT INDEXED
* 9.2 MCB MOVE CHARACTERS BACKWARDS
* 8.4 MFI* OPN,PLBL CONVERT (IA) TO ADDRESS VALUE
* 4.3 MLI OPS MULTIPLY INTEGER
* 5.5 MLR OPS MULTIPLY REAL
* 1.19 MNZ OPN MOVE NON-ZERO
* 1.1 MOV OPV,OPN MOVE
* 8.3 MTI OPN MOVE ADDRESS VALUE TO (IA)
* 9.1 MVC MOVE CHARACTERS
* 9.3 MVW MOVE WORDS
* 9.4 MWB MOVE WORDS BACKWARDS
* 4.8 NGI NEGATE INTEGER
Page 36 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
*
* 5.9 NGR NEGATE REAL
* 7.9 NZB W,PLBL JUMP IF NOT ALL ZERO BITS
* 7.2 ORB OPW,W OR BIT STRINGS
* 6.1 PLC* X,OPV PREPARE TO LOAD CHARACTERS
* 1.10 PPM* PLBL PROVIDE PROCEDURE EXIT PARAMETER
* 1.11 PRC PTYP,VAL DEFINE START OF PROCEDURE
* 6.2 PSC* X,OPV PREPARE TO STORE CHARACTERS
* 5.10 REQ PLBL JUMP IF REAL ZERO
* 5.11 RGE PLBL JUMP IF REAL POSITIVE OR ZERO
* 5.12 RGT PLBL JUMP IF REAL POSITIVE
* 5.13 RLE PLBL JUMP IF REAL NEGATIVE OR ZERO
* 5.14 RLT PLBL JUMP IF REAL NEGATIVE
* 4.6 RMI OPS REMAINDER INTEGER
* 5.15 RNE PLBL JUMP IF REAL NON-ZERO
* 5.8 RNO PLBL JUMP IF NO REAL OVERFLOW
* 5.7 ROV PLBL JUMP IF REAL OVERFLOW
* 7.5 RSH W,VAL RIGHT SHIFT BIT STRING
* 7.7 RSX W,X RIGHT SHIFT INDEXED
* 8.6 RTI* PLBL CONVERT REAL TO INTEGER
* 1.22 RTN DEFINE START OF ROUTINE
* 4.4 SBI OPS SUBTRACT INTEGER
* 5.4 SBR OPS SUBTRACT REALS
* 6.4 SCH REG,OPC STORE CHARACTER
* 3.2 SCP REG STORE CODE POINTER
* 14.1 SEC DEFINE START OF ASSEMBLY SECTION
* 1.20 SSL OPW SUBROUTINE STACK LOAD
* 1.21 SSS OPW SUBROUTINE STACK STORE
* 4.7 STI OPS STORE INTEGER
* 5.2 STR OPS STORE REAL
* 2.2 SUB OPV,OPN SUBTRACT ADDRESS
* 6.9 TRC TRANSLATE CHARACTER STRING
* 13.2 TTL TEXT SUPPLY ASSEMBLY TITLE
* 8.1 WTB REG CONVERT WORDS TO BAUS
* 8.10 WTC W CONVERT WORDS TO CHAR COUNT
* 7.3 XOB OPW,W EXCLUSIVE OR BIT STRINGS
* 1.18 ZER OPN ZEROISE INTEGER LOCATION
* 7.11 ZGB OPN ZEROISE GARBAGE BITS
* 7.10 ZRB W,PLBL JUMP IF ALL ZERO BITS
Page 37 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 9 - MINIMAL INSTRUCTIONS
*
* THE FOLLOWING DESCRIPTIONS ASSUME THE DEFINITIONS -
*
* ZEROE EQU 0
* UNITY EQU 1
*
* -1- BASIC INSTRUCTION SET
*
* 1.1 MOV OPV,OPN MOVE ONE WORD VALUE
*
* MOV CAUSES THE VALUE OF OPERAND OPV TO BE SET AS
* THE NEW CONTENTS OF OPERAND LOCATION OPN. IN THE
* CASE WHERE OPN IS NOT AN INDEX REGISTER, ANY VALUE
* WHICH CAN NORMALLY OCCUPY A MEMORY WORD (INCLUDING
* A PART OF A MULTIWORD REAL OR INTEGER VALUE)
* CAN BE TRANSFERRED USING MOV. IF THE TARGET LOCATION
* OPN IS AN INDEX REGISTER, THEN OPV MUST SPECIFY AN
* APPROPRIATE ONE WORD VALUE OR OPERAND CONTAINING
* SUCH AN APPROPRIATE VALUE.
*
* 1.2 BRN PLBL UNCONDITIONAL BRANCH
*
* BRN CAUSES CONTROL TO BE PASSED TO THE INDICATED
* LABEL IN THE PROGRAM SECTION.
*
* 1.3 BSW X,VAL,PLBL BRANCH ON SWITCH VALUE
* 1.4 IFF VAL,PLBL PROVIDE BRANCH FOR SWITCH
* IFF VAL,PLBL ...
* ...
* ...
* 1.5 ESW END OF BRANCH SWITCH TABLE
*
* BSW,IFF,ESW PROVIDE A CAPABILITY FOR A SWITCHED
* BRANCH SIMILAR TO A FORTRAN COMPUTED GOTO. THE
* VAL ON THE BSW INSTRUCTION IS THE MAXIMUM NUMBER
* OF BRANCHES. THE VALUE IN X RANGES FROM ZERO UP TO
* BUT NOT INCLUDING THIS MAXIMUM. EACH IFF PROVIDES A
* BRANCH. VAL MUST BE LESS THAN THAT GIVEN ON THE BSW
* AND CONTROL GOES TO PLBL IF THE VALUE IN X MATCHES.
* IF THE VALUE IN X DOES NOT CORRESPOND TO ANY OF THE
* IFF ENTRIES, THEN CONTROL PASSES TO THE PLBL ON THE
* BSW. THIS PLBL OPERAND MAY BE OMITTED IF THERE ARE
* NO VALUES MISSING FROM THE LIST.
*
* IFF AND ESW MAY ONLY BE USED IN THIS CONTEXT.
* EXECUTION OF BSW MAY DESTROY THE CONTENTS OF X.
* THE IFF ENTRIES MAY BE IN ANY ORDER AND SINCE
* A TRANSLATOR MAY THUS NEED TO STORE AND SORT THEM,
* THE COMMENT FIELD IS RESTRICTED IN LENGTH (SEC 11).
Page 38 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -1- BASIC INSTRUCTIONS (CONTINUED)
*
* 1.6 ENT VAL DEFINE PROGRAM ENTRY POINT
*
* THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
* TO BE A PROGRAM ENTRY POINT (ELBL) WHICH CAN LATER
* BE USED IN CONJUNCTION WITH THE BRI INSTRUCTION,
* WHICH PROVIDES THE ONLY MEANS OF ENTERING THE
* CODE. IT IS ILLEGAL TO FALL INTO CODE
* IDENTIFIED BY AN ENTRY POINT. THE
* ENTRY SYMBOL IS ASSIGNED AN ADDRESS WHICH NEED NOT
* BE A MULTIPLE OF CFP$B BUT WHICH MUST BE IN THE
* RANGE 0 LE CFP$M AND THE ADDRESS MUST NOT LIE WITHIN
* THE ADDRESS RANGE OF THE ALLOCATED DATA AREA.
* FURTHERMORE, ADDRESSES OF SUCCESSIVE ENTRY POINTS
* MUST BE ASSIGNED IN SOME ASCENDING SEQUENCE SO
* THAT THE ADDRESS COMPARISON INSTRUCTIONS CAN BE
* USED TO TEST THE ORDER IN WHICH TWO ENTRY POINTS
* OCCUR. THE SYMBOL VAL GIVES AN IDENTIFYING VALUE
* TO THE ENTRY POINT WHICH CAN BE ACCESSED WITH THE
* LEI INSTRUCTION.
* NOTE - SUBJECT TO THE RESTRICTION BELOW, VAL MAY
* BE OMITTED IF NO SUCH IDENTIFICATION IS NEEDED I.E.
* IF NO LEI REFERENCES THE ENTRY POINT. FOR THIS
* CASE, A TRANSLATION OPTIMISATION IS POSSIBLE IN
* WHICH NO MEMORY NEED BE RESERVED FOR A NULL
* IDENTIFICATION WHICH IS NEVER TO BE REFERENCED, BUT
* ONLY PROVIDED THIS IS DONE SO AS NOT TO INTERFERE
* WITH THE STRICTLY ASCENDING SEQUENCE OF ENTRY POINT
* ADDRESSES. TO SIMPLIFY THIS OPTIMISATION FOR ALL
* IMPLEMENTORS, THE FOLLOWING RESTRICTION IS OBSERVED
* VAL MAY ONLY BE OMITTED IF THE ENTRY POINT IS
* SEPARATED FROM A FOLLOWING ENTRY POINT BY A
* NON-NULL MINIMAL CODE SEQUENCE.
* ENTRY POINT ADDRESSES ARE ACCESSIBLE ONLY BY USE OF
* LITERALS (=ELBL, SECTION 7) OR DAC CONSTANTS
* (SECTION 8-11.1).
*
* 1.7 BRI OPN BRANCH INDIRECT
*
* OPN CONTAINS THE ADDRESS OF A PROGRAM ENTRY POINT
* (SEE ENT). CONTROL IS PASSED TO THE EXECUTABLE
* CODE STARTING AT THE ENTRY POINT ADDRESS. OPN IS
* LEFT UNCHANGED.
*
* 1.8 LEI X LOAD ENTRY POINT IDENTIFICATION
*
* X CONTAINS THE ADDRESS OF AN ENTRY POINT FOR WHICH
* AN IDENTIFYING VALUE WAS GIVEN ON THE THE ENT LINE.
* LEI REPLACES THE CONTENTS OF X BY THIS VALUE.
Page 39 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -1- BASIC INSTRUCTIONS (CONTINUED)
*
* 1.9 JSR PNAM CALL PROCEDURE PNAM
* 1.10 PPM PLBL PROVIDE EXIT PARAMETER
* PPM PLBL ...
* ...
* PPM PLBL ...
*
* JSR CAUSES CONTROL TO BE PASSED TO THE NAMED
* PROCEDURE. PNAM IS THE LABEL ON A PRC STATEMENT
* ELSEWHERE IN THE PROGRAM SECTION (SEE PRC)
* OR HAS BEEN DEFINED USING AN EXP INSTRUCTION.
* THE PPM EXIT PARAMETERS FOLLOWING THE CALL GIVE
* NAMES OF PROGRAM LOCATIONS (PLBL-S) TO WHICH
* ALTERNATIVE EXI RETURNS OF THE CALLED PROCEDURE MAY
* PASS CONTROL. THEY MAY OPTIONALLY BE REPLACED BY
* ERROR RETURNS (SEE ERR). THE NUMBER OF EXIT
* PARAMETERS FOLLOWING A JSR MUST EQUAL THE INT IN THE
* PROCEDURE DEFINITION. THE OPERAND OF PPM MAY BE
* OMITTED IF THE CORRESPONDING EXI RETURN IS CERTAIN
* NOT TO BE TAKEN.
*
* 1.11 PRC PTYP,INT DEFINE START OF PROCEDURE
*
* THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
* AS THE NAME OF A PROCEDURE (PNAM) FOR USE WITH JSR.
* A PROCEDURE IS A CONTIGUOUS SECTION OF INSTRUCTIONS
* TO WHICH CONTROL MAY BE PASSED WITH A JSR
* INSTRUCTION. THIS IS THE ONLY WAY IN WHICH THE
* INSTRUCTIONS IN A PROCEDURE MAY BE EXECUTED. IT IS
* NOT PERMITTED TO FALL INTO A PROCEDURE.
* ALL PROCEDURES SHOULD BE NAMED IN SECTION 0
* INP STATEMENTS.
*
* INT IS THE NUMBER OF EXIT PARAMETERS (PPM-S) TO
* BE USED IN JSR CALLS.
*
* THERE ARE THREE POSSIBILITIES FOR PTYP, EACH
* CONSISTING OF A SINGLE LETTER AS FOLLOWS.
*
* R RECURSIVE
*
* THE RETURN POINT (ONE OR MORE WORDS) IS STORED ON
* THE STACK AS THOUGH ONE OR MORE MOV ..,-(XS)
* INSTRUCTIONS WERE EXECUTED.
Page 40 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -1- BASIC INSTRUCTIONS (CONTINUED)
*
* N NON-RECURSIVE
*
* THE RETURN POINT IS TO BE STORED EITHER
* (1) IN A LOCAL STORAGE WORD ASSOCIATED
* WITH THE PROCEDURE AND NOT DIRECTLY
* AVAILABLE TO THE PROGRAM IN ANY OTHER MANNER OR
* (2) ON A SUBROUTINE LINK STACK QUITE DISTINCT FROM
* THE MINIMAL STACK ADDRESSED BY XS.
* IT IS AN ERROR TO USE THE STACK FOR N-LINKS, SINCE
* PROCEDURE PARAMETERS OR RESULTS MAY BE PASSED VIA
* THE STACK.
* IF METHOD (2) IS USED FOR LINKS, ERROR EXITS
* (ERB,ERR) FROM A PROCEDURE WILL NECESSITATE LINK
* STACK RESETTING. THE SSL AND SSS ORDERS PROVIDED
* FOR THIS MAY BE REGARDED AS NO-OPS FOR
* IMPLEMENTATIONS USING METHOD (1).
*
* E EITHER
*
* THE RETURN POINT MAY BE STORED IN EITHER MANNER
* ACCORDING TO EFFICIENCY REQUIREMENTS OF THE ACTUAL
* PHYSICAL MACHINE USED FOR THE IMPLEMENTATION. NOTE
* THAT PROGRAMMING OF E TYPE PROCEDURES MUST BE
* INDEPENDENT OF THE ACTUAL IMPLEMENTATION.
*
* THE ACTUAL FORM OF THE RETURN POINT IS UNDEFINED.
* HOWEVER, EACH WORD STORED ON THE STACK FOR AN
* R-TYPE CALL MUST MEET THE FOLLOWING REQUIREMENTS.
*
* 1) IT CAN BE HANDLED AS AN ADDRESS
* AND PLACED IN AN INDEX REGISTER.
*
* 2) WHEN USED AS AN OPERAND IN AN
* ADDRESS COMPARISON INSTRUCTION, IT
* MUST NOT APPEAR TO LIE WITHIN
* THE ALLOCATED DATA AREA.
*
* 3) IT IS NOT REQUIRED TO APPEAR
* TO LIE WITHIN THE PROGRAM SECTION.
Page 41 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -1- BASIC INSTRUCTIONS (CONTINUED)
*
* 1.12 EXI INT EXIT FROM PROCEDURE
*
* THE PPM AND ERR PARAMETERS FOLLOWING A JSR ARE
* NUMBERED STARTING FROM 1. EXI INT CAUSES CONTROL
* TO BE RETURNED TO THE INT-TH SUCH PARAM. EXI 1 GIVES
* CONTROL TO THE PLBL OF THE FIRST PPM AFTER THE JSR.
* IF INT IS OMITTED, CONTROL IS PASSED BACK PAST THE
* LAST EXIT PARAMETER (OR PAST THE JSR IF THERE ARE
* NONE). FOR R AND E TYPE PROCEDURES, THE
* STACK POINTER XS MUST BE SET TO ITS APPROPRIATE
* ENTRY VALUE BEFORE EXECUTING AN EXI INSTRUCTION.
* IN THIS CASE, EXI REMOVES RETURN POINTS FROM THE
* STACK IF ANY ARE STORED THERE SO THAT THE STACK
* POINTER IS RESTORED TO ITS CALLING VALUE.
*
* 1.13 ENP DEFINE END OF PROCEDURE BODY
*
* ENP DELIMITS A PROCEDURE BODY AND MAY NOT ACTUALLY
* BE EXECUTED, HENCE IT MUST HAVE NO LABEL.
*
* 1.14 ERR INT,TEXT PROVIDE ERROR RETURN
*
* ERR MAY REPLACE AN EXIT PARAMETER (PPM) IN
* ANY PROCEDURE CALL. THE INT ARGUMENT IS A UNIQUE
* ERROR CODE IN 0 TO 899.
* THE TEXT SUPPLIED AS THE OTHER OPERAND IS
* ARBITRARY TEXT IN THE FORTRAN CHARACTER SET AND
* MAY BE USED IN CONSTRUCTING A FILE OF ERROR
* MESSAGES FOR DOCUMENTING PURPOSES OR FOR BUILDING
* A DIRECT ACCESS OR OTHER FILE OF MESSAGES TO BE
* USED BY THE ERROR HANDLING CODE.
* IN THE EVENT THAT AN EXI ATTEMPTS
* TO RETURN CONTROL VIA AN EXIT PARAMETER TO
* AN ERR, CONTROL IS INSTEAD PASSED TO THE FIRST
* INSTRUCTION IN THE ERROR SECTION (WHICH FOLLOWS THE
* PROGRAM SECTION) WITH THE ERROR CODE IN WA.
*
* 1.15 ERB INT,TEXT ERROR BRANCH
*
* THIS INSTRUCTION RESEMBLES ERR EXCEPT THAT IT MAY
* OCCUR AT ANY POINT WHERE A BRANCH IS PERMITTED.
* IT EFFECTS A TRANSFER OF CONTROL TO THE ERROR
* SECTION WITH THE ERROR CODE IN WA.
*
* 1.16 ICV OPN INCREMENT VALUE BY ONE
*
* ICV INCREMENTS THE VALUE OF THE OPERAND BY UNITY.
* IT IS EQUIVALENT TO ADD =UNITY,OPN
*
* 1.17 DCV OPN DECREMENT VALUE BY ONE
*
* DCV DECREMENTS THE VALUE OF THE OPERAND BY UNITY.
* IT IS EQUIVALENT TO SUB =UNITY,OPN
Page 42 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* BASIC INSTRUCTIONS (CONTINUED)
*
* 1.18 ZER OPN ZEROISE OPN
*
* ZER IS EQUIVALENT TO MOV =ZEROE,OPN
*
* 1.19 MNZ OPN MOVE NON-ZERO TO OPN
*
* ANY NON-ZERO COLLECTABLE VALUE MAY USED, FOR WHICH
* THE OPCODES BNZ/BZE WILL BRANCH/FAIL TO BRANCH.
*
* 1.20 SSL OPW SUBROUTINE STACK LOAD
*
* 1.21 SSS OPW SUBROUTINE STACK STORE
*
* THIS PAIR OF OPERATIONS IS PROVIDED TO MAKE POSSIBLE
* THE USE OF A LOCAL STACK TO HOLD SUBROUTINE (S-R)
* RETURN LINKS FOR N-TYPE PROCEDURES. SSS STORES THE
* S-R STACK POINTER IN OPW AND SSL LOADS THE S-R
* STACK POINTER FROM OPW. BY USING SSS IN THE MAIN
* PROGRAM OR ON ENTRY TO A PROCEDURE WHICH SHOULD
* REGAIN CONTROL ON OCCURRENCE OF AN ERR OR ERB AND BY
* USE OF SSL IN THE ERROR PROCESSING SECTIONS THE
* S-R STACK POINTER CAN BE RESTORED GIVING A LINK
* STACK CLEANED UP READY FOR RESUMED EXECUTION.
* THE FORM OF THE LINK STACK POINTER IS UNDEFINED IN
* MINIMAL (IT IS LIKELY TO BE A PRIVATE REGISTER
* KNOWN TO THE TRANSLATOR) AND THE ONLY REQUIREMENT
* IS THAT IT SHOULD FIT INTO A SINGLE FULL WORD.
* SSL AND SSS ARE NO-OPS IF A PRIVATE LINK STACK IS
* NOT USED.
*
* 1.22 RTN DEFINE START OF ROUTINE
*
* A ROUTINE IS A CODE CHUNK USED FOR SIMILAR PURPOSES
* TO A PROCEDURE. HOWEVER IT IS ENTERED BY ANY TYPE OF
* CONDITIONAL OR UNCONDITIONAL BRANCH (NOT BY JSR). ON
* TERMINATION IT PASSES CONTROL BY A BRANCH (OFTEN
* BRI THROUGH A CODE WORD) OR EVEN PERMITS CONTROL
* TO DROP THROUGH TO ANOTHER ROUTINE. NO RETURN LINK
* EXISTS AND THE END OF A ROUTINE IS NOT MARKED BY
* AN EXPLICIT OPCODE (COMPARE ENP).
* ALL ROUTINES SHOULD BE NAMED IN SECTION 0
* INR STATEMENTS.
*
* 1.23 JMG GLBL JUMP GLOBAL (I.E. NON LOCAL)
*
* PLBL-S ARE INTENDED FOR LOCAL BRANCHING WITHIN
* PROCEDURES AND ROUTINES. OCCASIONALLY (EG ERROR
* RECOVERY) IT MAY BE PERMISSIBLE TO HAVE NON LOCAL
* BRANCHES. THE DESTINATION OF THIS INSTRUCTION IS A
* LABEL NOTED AS BEING GLOBAL BY APPEARING IN THE
* PROCEDURES SECTION LABELLING A GLB OPCODE.
Page 43 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -2- OPERATIONS ON ONE WORD INTEGER VALUES (ADDRESSES)
*
* 2.1 ADD OPV,OPN ADDS OPV TO THE VALUE IN OPN AND
* STORES THE RESULT IN OPN. UNDEFINED
* IF THE RESULT EXCEEDS CFP$M.
*
* 2.2 SUB OPV,OPN SUBTRACTS OPV FROM OPN. STORES THE
* RESULT IN OPN. UNDEFINED IF THE
* RESULT IS NEGATIVE.
*
* 2.3 ICA OPN INCREMENT ADDRESS IN OPN
* EQUIVALENT TO ADD *UNITY,OPN
*
* 2.4 DCA OPN DECREMENT ADDRESS IN OPN
* EQUIVALENT TO SUB *UNITY,OPN
*
* 2.5 BEQ OPN,OPV,PLBL BRANCH TO PLBL IF OPN EQ OPV
* 2.6 BNE OPN,OPV,PLBL BRANCH TO PLBL IF OPN NE OPV
* 2.7 BGT OPN,OPV,PLBL BRANCH TO PLBL IF OPN GT OPV
* 2.8 BGE OPN,OPV,PLBL BRANCH TO PLBL IF OPN GE OPV
* 2.9 BLT OPN,OPV,PLBL BRANCH TO PLBL IF OPN LT OPV
* 2.10 BLE OPN,OPV,PLBL BRANCH TO PLBL IF OPN LE OPV
* 2.11 BLO OPN,OPV,PLBL EQUIVALENT TO BLT OR BLE
* 2.12 BHI OPN,OPV,PLBL EQUIVALENT TO BGT OR BGE
*
* THE ABOVE INSTRUCTIONS COMPARE TWO ADDRESS
* VALUES AS UNSIGNED INTEGER VALUES.
* THE BLO AND BHI INSTRUCTIONS ARE USED IN CASES WHERE
* THE EQUAL CONDITION EITHER DOES NOT OCCUR OR CAN
* RESULT EITHER IN A BRANCH OR NO BRANCH. THIS AVOIDS
* INEFFICIENT TRANSLATIONS IN SOME IMPLEMENTATIONS.
*
* 2.13 BNZ OPN,PLBL EQUIVALENT TO BNE OPN,=ZEROE,PLBL
*
* 2.14 BZE OPN,PLBL EQUIVALENT TO BEQ OPN,=ZEROE,PLBL
*
*
* 2.15 LCT W,OPV LOAD COUNTER FOR BCT
*
* LCT LOADS A COUNTER VALUE FOR USE WITH THE BCT
* INSTRUCTION. THE VALUE IN OPV IS THE NUMBER OF LOOPS
* TO BE EXECUTED. THE VALUE IN W AFTER THIS OPERATION
* IS AN UNDEFINED ONE WORD INTEGER QUANTITY.
*
* 2.16 BCT W,PLBL BRANCH AND COUNT
*
* BCT USES THE COUNTER VALUE IN W TO BRANCH THE
* REQUIRED NUMBER OF TIMES AND THEN FINALLY TO FALL
* THROUGH TO THE NEXT INSTRUCTION. BCT CAN ONLY BE
* USED FOLLOWING AN APPROPRIATE LCT INSTRUCTION.
* THE VALUE IN W AFTER EXECUTION OF BCT IS UNDEFINED.
*
* 2.17 AOV OPV,OPN,PLBL ADD WITH OVERFLOW TEST
*
* ADDS OPV TO THE VALUE IN OPN AND STORES RESULT IN
* OPN. BRANCHES TO PLBL IF RESULT EXCEEDS CFP$M
* WITH RESULT IN OPN UNDEFINED. CF. ADD.
Page 44 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -3- OPERATIONS ON THE CODE POINTER REGISTER (CP)
*
* THE CODE POINTER REGISTER PROVIDES A PSUEDO
* INSTRUCTION COUNTER FOR USE IN AN INTERPRETOR. IT
* MAY BE IMPLEMENTED AS A REAL REGISTER OR AS A
* MEMORY LOCATION, BUT IN EITHER CASE IT IS SEPARATE
* FROM ANY OTHER REGISTER. THE VALUE IN THE CODE
* POINTER REGISTER IS ALWAYS A WORD ADDRESS (I.E.
* A ONE WORD INTEGER WHICH IS A MULTIPLE OF CFP$B).
*
* 3.1 LCP REG LOAD CODE POINTER REGISTER
* THIS INSTRUCTION CAUSES THE CODE
* POINTER REGISTER TO BE SET FROM
* THE VALUE IN REG WHICH IS UNCHANGED
*
* 3.2 SCP REG STORE CODE POINTER REGISTER
* THIS INSTRUCTION LOADS THE CURRENT
* VALUE IN THE CODE POINTER REGISTER
* INTO REG. (CP) IS UNCHANGED.
*
* 3.3 LCW REG LOAD NEXT CODE WORD
* THIS INSTRUCTION CAUSES THE WORD
* POINTED TO BY CP TO BE LOADED INTO
* THE INDICATED REG. THE VALUE IN CP
* IS THEN INCREMENTED BY ONE WORD.
* EXECUTION OF LCW MAY DESTROY XL.
*
* 3.4 ICP INCREMENT CP BY ONE WORD
*
* ON MACHINES WITH MORE THAN THREE INDEX REGISTERS,
* CP CAN BE TREATED SIMPLY AS AN INDEX REGISTER.
* IN THIS CASE, THE FOLLOWING EQUIVALENCES APPLY.
*
* LCP REG IS LIKE MOV REG,CP
* SCP REG IS LIKE MOV CP,REG
* LCW REG IS LIKE MOV (CP)+,REG
* ICP IS LIKE ICA CP
*
* SINCE LCW IS ALLOWED TO DESTROY XL, THE FOLLOWING
* IMPLEMENTATION USING A WORK LOCATION CP$$$ CAN
* ALSO BE USED.
*
* LCP REG MOV REG,CP$$$
*
* SCP REG MOV CP$$$,REG
*
* LCW REG MOV CP$$$,XL
* MOV (XL)+,REG
* MOV XL,CP$$$
*
* ICP ICA CP$$$
Page 45 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -4- OPERATIONS ON SIGNED INTEGER VALUES
*
* 4.1 LDI OPS LOAD INTEGER ACCUMULATOR FROM OPS
* 4.2 ADI OPS ADD OPS TO INTEGER ACCUMULATOR
* 4.3 MLI OPS MULTIPLY INTEGER ACCUMULATOR BY OPS
* 4.4 SBI OPS SUBTRACT OPS FROM INT ACCUMULATOR
* 4.5 DVI OPS DIVIDE INTEGER ACCUMULATOR BY OPS
* 4.6 RMI OPS SET INT ACCUM TO MOD(INTACC,OPS)
* 4.7 STI OPS STORE INTEGER ACCUMULATOR AT OPS
* 4.8 NGI NEGATE THE VALUE IN THE INTEGER
* ACCUMULATOR (CHANGE ITS SIGN)
*
* THE EQUATION SATISFIED BY OPERANDS AND RESULTS OF
* DVI AND RMI IS
* DIV = QOT * OPS + REM WHERE
* DIV = DIVIDEND IN INTEGER ACCUMULATOR
* QOT = QUOTIENT LEFT IN IA BY DIV
* OPS = THE DIVISOR
* REM = REMAINDER LEFT IN IA BY RMI
* THE SIGN OF THE RESULT OF DVI IS + IF (IA) AND (OPS)
* HAVE THE SAME SIGN AND IS - IF THEY HAVE OPPOSITE
* SIGNS. THE SIGN OF (IA) IS ALWAYS USED AS THE SIGN
* OF THE RESULT OF REM.
* ASSUMING IN EACH CASE THAT IA CONTAINS THE NUMBER
* SPECIFIED IN PARENTHESES AND THAT SEVEN AND MSEVN
* HOLD +7 AND -7 RESP. THE ALGORITHM IS ILLUSTRATED
* BELOW.
* (IA = 13)
* DVI SEVEN IA = 1
* RMI SEVEN IA = 6
* DVI MSEVN IA = -1
* RMI MSEVN IA = 6
* (IA = -13)
* DVI SEVEN IA = -1
* RMI SEVEN IA = -6
* DVI MSEVN IA = 1
* RMI MSEVN IA = -6
Page 46 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* THE ABOVE INSTRUCTIONS OPERATE ON A FULL RANGE OF
* SIGNED INTEGER VALUES. WITH THE EXCEPTION OF LDI AND
* STI, THESE INSTRUCTIONS MAY CAUSE INTEGER OVERFLOW
* BY ATTEMPTING TO PRODUCE AN UNDEFINED OR OUT OF
* RANGE RESULT IN WHICH CASE INTEGER OVERFLOW IS SET,
* THE RESULT IN (IA) IS UNDEFINED AND THE FOLLOWING
* INSTRUCTION MUST BE IOV OR INO.
* PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
* HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
* CONDITIONS.
*
* 4.9 INO PLBL JUMP TO PLBL IF NO INTEGER OVERFLOW
* 4.10 IOV PLBL JUMP TO PLBL IF INTEGER OVERFLOW
*
* THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
* FOLLOWING AN INSTRUCTION WHICH CAN CAUSE INTEGER
* OVERFLOW (ADI, SBI, MLI, DVI, RMI, NGI) AND
* TEST THE RESULT OF THE PRECEDING INSTRUCTION.
* IOV AND INO MAY NOT HAVE LABELS.
*
* 4.11 IEQ PLBL JUMP TO PLBL IF (IA) EQ 0
* 4.12 IGE PLBL JUMP TO PLBL IF (IA) GE 0
* 4.13 IGT PLBL JUMP TO PLBL IF (IA) GT 0
* 4.14 ILE PLBL JUMP TO PLBL IF (IA) LE 0
* 4.15 ILT PLBL JUMP TO PLBL IF (IA) LT 0
* 4.16 INE PLBL JUMP TO PLBL IF (IA) NE 0
*
* THE ABOVE CONDITIONAL JUMP INSTRUCTIONS DO
* NOT CHANGE THE CONTENTS OF THE ACCUMULATOR.
* ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
* PRODUCE NEGATIVE ZERO IN IA PROVIDED THESE
* INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
Page 47 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -5- OPERATIONS ON REAL VALUES
*
* 5.1 LDR OPS LOAD REAL ACCUMULATOR FROM OPS
* 5.2 STR OPS STORE REAL ACCUMULATOR AT OPS
* 5.3 ADR OPS ADD OPS TO REAL ACCUMULATOR
* 5.4 SBR OPS SUBTRACT OPS FROM REAL ACCUMULATOR
* 5.5 MLR OPS MULTIPLY REAL ACCUMULATOR BY OPS
* 5.6 DVR OPS DIVIDE REAL ACCUMULATOR BY OPS
*
* IF THE RESULT OF ANY OF THE ABOVE OPERATIONS CAUSES
* UNDERFLOW, THE RESULT YIELDED IS 0.0.
*
* IF THE RESULT OF ANY OF THE ABOVE OPERATIONS IS
* UNDEFINED OR OUT OF RANGE, REAL OVERFLOW IS SET,
* THE CONTENTS OF (RA) ARE UNDEFINED AND THE FOLLOWING
* INSTRUCTION MUST BE EITHER ROV OR RNO.
* PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
* HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
* CONDITIONS.
*
* 5.7 ROV PLBL JUMP TO PLBL IF REAL OVERFLOW
* 5.8 RNO PLBL JUMP TO PLBL IF NO REAL OVERFLOW
*
* THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
* FOLLOWING AN INSTRUCTION WHICH CAN CAUSE REAL
* OVERFLOW (ADR,SBR,MLR,DVR).
*
* 5.9 NGR NEGATE REAL ACCUM (CHANGE SIGN)
*
* 5.10 REQ PLBL JUMP TO PLBL IF (RA) EQ 0.0
* 5.11 RGE PLBL JUMP TO PLBL IF (RA) GE 0.0
* 5.12 RGT PLBL JUMP TO PLBL IF (RA) GT 0.0
* 5.13 RLE PLBL JUMP TO PLBL IF (RA) LE 0.0
* 5.14 RLT PLBL JUMP TO PLBL IF (RA) LT 0.0
* 5.15 RNE PLBL JUMP TO PLBL IF (RA) NE 0.0
*
* THE ABOVE CONDITIONAL INSTRUCTIONS DO NOT AFFECT
* THE VALUE STORED IN THE REAL ACCUMULATOR.
* ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
* PRODUCE NEGATIVE ZERO IN RA PROVIDED THESE
* INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
Page 48 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -6- OPERATIONS ON CHARACTER VALUES
*
* CHARACTER OPERATIONS EMPLOY THE CONCEPT OF A
* CHARACTER POINTER WHICH USES EITHER
* INDEX REGISTER XR OR XL (NOT XS).
*
* A CHARACTER POINTER POINTS TO A SPECIFIC CHARACTER
* IN A STRING OF CHARACTERS STORED CFP$C CHARS TO A
* WORD. THE ONLY OPERATIONS PERMITTED ON A CHARACTER
* POINTER ARE LCH AND SCH. IN PARTICULAR, A CHARACTER
* POINTER MAY NOT EVEN BE MOVED WITH MOV.
*
* RESTRICTION 1.
* --------------
* IT IS IMPORTANT WHEN CODING IN MINIMAL TO ENSURE
* THAT NO ACTION OCCURRING BETWEEN THE INITIAL USE OF
* PLC OR PSC AND THE EVENTUAL CLEARING OF XL OR XR ON
* COMPLETION OF CHARACTER OPERATIONS CAN INITIATE A
* GARBAGE COLLECTION. THE LATTER OF COURSE COULD CAUSE
* THE ADDRESSED CHARACTERS TO BE MOVED LEAVING THE
* CHARACTER POINTERS POINTING TO RUBBISH.
*
* RESTRICTION 2.
* --------------
* A FURTHER RESTRICTION TO BE OBSERVED IN CODE
* HANDLING CHARACTER STRINGS, IS THAT STRINGS BUILT
* DYNAMICALLY SHOULD BE RIGHT PADDED WITH ZERO
* CHARACTERS TO A FULL WORD BOUNDARY TO PERMIT EASY
* HASHING AND USE OF CEQ OR CNE IN TESTING STRINGS
* FOR EQUALITY.
*
* 6.1 PLC X,OPV PREPARE CH PTR FOR LCH,CMC,MVC,TRC
*
* 6.2 PSC X,OPV PREPARE CHAR. PTR FOR SCH,MVC.
*
* OPV CAN BE OMITTED IF IT IS ZERO.
* THE CHAR. INITIALLY ADDRESSED IS DETERMINED BY THE
* WORD ADDRESS IN X AND THE INTEGER OFFSET OPV.
* THERE IS AN AUTOMATIC IMPLIED OFFSET OF CFP$F BAUS.
* CFP$F IS USED TO FORMALLY INTRODUCE INTO MINIMAL A
* VALUE NEEDED IN TRANSLATING THESE OPCODES WHICH,
* SINCE MINIMAL ITSELF DOES NOT PRESCRIBE A STRING
* STRUCTURE IN DETAIL, DEPENDS ON THE CHOICE OF A DATA
* STRUCTURE FOR STRINGS IN THE MINIMAL PROGRAM.
* E.G. IF CFP$B = CFP$C = 3, CFP$F = 6, NUM01 = 1, XL
* POINTS TO A SERIES OF 4 WORDS, ABC/DEF/GHI/JKL, THEN
* PLC XL,=NUM01
* POINTS TO H.
Page 49 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
*
* 6.3 LCH REG,OPC LOAD CHARACTER INTO REG
*
* 6.4 SCH REG,OPC STORE CHARACTER FROM REG
*
* THESE OPERATIONS ARE DEFINED SUCH THAT THE CHARACTER
* IS RIGHT JUSTIFIED IN REGISTER REG WITH ZERO BITS TO
* THE LEFT. AFTER LCH FOR EXAMPLE, IT IS LEGITIMATE
* TO REGARD REG AS CONTAINING THE ORDINAL INTEGER
* CORRESPONDING TO THE CHARACTER.
*
* OPC IS ONE OF THE FOLLOWING THREE POSSIBILITIES.
*
* (X) THE CHARACTER POINTED TO BY THE
* CHARACTER POINTER IN X. THE
* CHARACTER POINTER IS NOT CHANGED.
*
* (X)+ SAME CHARACTER AS (X) BUT THE
* CHARACTER POINTER IS INCREMENTED
* TO POINT TO THE NEXT CHARACTER
* FOLLOWING EXECUTION.
*
* -(X) THE CHARACTER POINTER IS DECRE-
* MENTED BEFORE ACCESSING THE
* CHARACTER SO THAT THE PREVIOUS
* CHARACTER IS REFERENCED.
*
* 6.5 CSC X COMPLETE STORE CHARACTERS
*
* THIS INSTRUCTION MARKS COMPLETION OF A
* PSC,SCH,SCH,...,SCH SEQUENCE INITIATED BY
* A PSC X INSTRUCTION. NO MORE SCH INSTRUCTIONS
* USING X SHOULD BE OBEYED UNTIL ANOTHER PSC IS
* OBEYED. IT IS PROVIDED SOLELY AS AN EFFICIENCY AID
* ON MACHINES WITHOUT CHARACTER ORDERS SINCE IT
* PERMITS USE OF REGISTER BUFFERING OF CHARS IN SCH
* SEQUENCES. WHERE CSC IS NOT A NO-OP, IT MUST OBSERVE
* RESTRICTION 2. (E.G. IN SPITBOL, ALOCS ZEROISES THE
* LAST WORD OF A STRING FRAME PRIOR TO SCH SEQUENCE
* BEING STARTED SO CSC MUST NOT NULLIFY THIS ACTION.)
*
* THE FOLLOWING INSTRUCTIONS ARE USED TO COMPARE
* TWO WORDS CONTAINING CFP$C CHARACTERS.
* COMPARISONS DISTINCT FROM BEQ,BNE ARE PROVIDED AS
* ON SOME TARGET MACHINES, THE POSSIBILITY OF THE SIGN
* BIT BEING SET MAY REQUIRE SPECIAL ACTION.
* NOTE THAT RESTRICTION 2 ABOVE, EASES USE OF THESE
* ORDERS IN TESTING COMPLETE STRINGS FOR EQUALITY,
* SINCE WHOLE WORD TESTS ARE POSSIBLE.
*
* 6.6 CEQ OPW,OPW,PLBL JUMP TO PLBL IF OPW EQ OPW
* 6.7 CNE OPW,OPW,PLBL JUMP TO PLBL IF OPW NE OPW
Page 50 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
*
* 6.8 CMC PLBL,PLBL COMPARE CHARACTERS
*
* CMC IS USED TO COMPARE TWO CHARACTER STRINGS. BEFORE
* EXECUTING CMC, REGISTERS ARE SET UP AS FOLLOWS.
* (XL) CHARACTER PTR FOR FIRST STRING
* (XR) CHARACTER POINTER FOR SECOND STRING
* (WA) CHARACTER COUNT (MUST BE .GT. ZERO)
* XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
* CONTROL PASSES TO FIRST PLBL IF THE FIRST STRING
* IS LEXICALLY LESS THAN THE SECOND STRING, AND TO
* THE SECOND PLBL IF THE FIRST STRING IS LEXICALLY
* GREATER. CONTROL PASSES TO THE FOLLOWING INSTRUCTION
* IF THE STRINGS ARE IDENTICAL. AFTER EXECUTING THIS
* INSTRUCTION, THE VALUES OF XR AND XL ARE SET TO ZERO
* AND THE VALUE IN (WA) IS UNDEFINED.
* ARGUMENTS TO CMC MAY BE COMPLETE OR PARTIAL
* STRINGS, SO MAKING OPTIMISATION TO USE WHOLE WORD
* COMPARISONS DIFFICULT (DEPENDENT IN GENERAL ON
* SHIFTS AND MASKING).
*
* 6.9 TRC TRANSLATE CHARACTERS
*
* TRC IS USED TO TRANSLATE A CHARACTER STRING USING A
* SUPPLIED TRANSLATION TABLE. BEFORE EXECUTING TRC THE
* REGISTERS ARE SET AS FOLLOWS.
* (XL) CHAR PTR TO STRING TO BE TRANSLATED
* (XR) CHAR PTR TO TRANSLATE TABLE
* (WA) LENGTH OF STRING TO BE TRANSLATED
* XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
* THE TRANSLATE TABLE CONSISTS OF CFP$A CONTIGUOUS
* CHARACTERS GIVING THE TRANSLATIONS OF THE CFP$A
* CHARACTERS IN THE ALPHABET. ON COMPLETION, (XR) AND
* (XL) ARE SET TO ZERO AND (WA) IS UNDEFINED.
*
* 6.10 CLU W CONVERT LOWER TO UPPER CASE
* 6.11 CUL W CONVERT UPPER TO LOWER CASE
*
* THIS PAIR MAY BE USED FOR CASE CONVERSION OF CHARACTERS
* IN W, WHERE THE CHARACTER SET SUPPORTS BOTH CASES. THEY
* ARE NOT NEEDED IF THERE IS A SIMPLE RELATION BETWEEN THE
* CASES AS IN ASCII AND EBCDIC. IN THE CASE OF SPITBOL THIS
* ASSUMPTION IS MADE BY DEFAULT (SEE SYMBOL DFA$A) BUT THE
* CODE INCLUDES AN OPTION SELECTABLE BY CONDITIONAL
* ASSEMBLY ON .CSCV TO USE THESE OPCODES INSTEAD IF NEEDED
* OR PREFERRED.
Page 51 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -7- OPERATIONS ON BIT STRING VALUES
*
* 7.1 ANB OPW,W AND BIT STRING VALUES
* 7.2 ORB OPW,W OR BIT STRING VALUES
* 7.3 XOB OPW,W EXCLUSIVE OR BIT STRING VALUES
*
* IN THE ABOVE OPERATIONS, THE LOGICAL CONNECTIVE IS
* APPLIED SEPARATELY TO EACH OF THE CFP$N BITS.
* THE RESULT IS STORED IN THE SECOND OPERAND LOCATION.
*
* 7.4 CMB W COMPLEMENT ALL BITS IN OPW
*
* 7.5 RSH W,VAL RIGHT SHIFT BY VAL BITS
* 7.6 LSH W,VAL LEFT SHIFT BY VAL BITS
* 7.7 RSX W,X RIGHT SHIFT W NUMBER OF BITS IN X
* 7.8 LSX W,X LEFT SHIFT W NUMBER OF BITS IN X
*
* THE ABOVE SHIFTS ARE LOGICAL SHIFTS IN WHICH BITS
* SHIFTED OUT ARE LOST AND ZERO BITS SUPPLIED AS
* REQUIRED. THE SHIFT COUNT IS IN THE RANGE 0-CFP$N.
*
* 7.9 NZB W,PLBL JUMP TO PLBL IF W IS NOT
* ALL ZERO BITS.
*
* 7.10 ZRB W,PLBL JUMP TO PLBL IF W IS ALL ZERO BITS
*
* 7.11 ZGB OPN ZEROISE GARBAGE BITS
*
* OPN CONTAINS A BIT STRING REPRESENTING A WORD
* OF CHARACTERS FROM A STRING OR SOME FUNCTION
* FORMED FROM SUCH CHARACTERS (E.G. AS A RESULT OF
* HASHING). ON A MACHINE WHERE THE WORD SIZE IS NOT A
* MULTIPLE OF THE CHARACTER SIZE, SOME BITS IN REG MAY
* BE UNDEFINED. THIS OPCODE REPLACES SUCH BITS BY THE
* ZERO BIT. ZGB IS A NO-OP IF THE WORD SIZE IS A
* MULTIPLE OF THE CHARACTER SIZE.
Page 52 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -8- CONVERSION INSTRUCTIONS
*
* THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
* BETWEEN LENGTHS IN BAUS AND LENGTHS IN WORDS.
*
* 8.1 WTB REG CONVERT REG FROM WORDS TO BAUS.
* THAT IS, MULTIPLY BY CFP$B. THIS IS
* A NO-OP IF CFP$B IS ONE.
*
* 8.2 BTW REG CONVERT REG FROM BAUS TO WORDS
* BY DIVIDING REG BY CFP$B DISCARDING
* THE FRACTION. NO-OP IF CFP$B IS ONE
*
* THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
* OF ONE WORD INTEGER VALUES (ADDRESSES) TO AND
* FROM THE FULL SIGNED INTEGER FORMAT.
*
* 8.3 MTI OPN THE VALUE OF OPN (AN ADDRESS)
* IS MOVED AS A POSITIVE INTEGER
* TO THE INTEGER ACCUMULATOR.
*
* 8.4 MFI OPN,PLBL THE VALUE CURRENTLY STORED IN THE
* INTEGER ACCUMULATOR IS MOVED
* TO OPN AS AN ADDRESS IF IT IS IN
* THE RANGE 0 TO CFP$M INCLUSIVE.
* IF THE ACCUMULATOR VALUE IS
* OUTSIDE THIS RANGE, THEN THE RESULT
* IN OPN IS UNDEFINED AND CONTROL IS
* PASSED TO PLBL. MFI DESTROYS THE
* VALUE OF (IA) WHETHER OR NOT
* INTEGER OVERFLOW IS SIGNALLED.
* PLBL MAY BE OMITTED IF OVERFLOW
* IS IMPOSSIBLE.
*
* THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
* BETWEEN REAL VALUES AND INTEGER VALUES.
*
* 8.5 ITR CONVERT INTEGER VALUE IN INTEGER
* ACCUMULATOR TO REAL AND STORE IN
* REAL ACCUMULATOR (MAY LOSE
* PRECISION IN SOME CASES)
*
* 8.6 RTI PLBL CONVERT THE REAL VALUE IN RA TO
* AN INTEGER AND PLACE RESULT IN IA.
* CONVERSION IS BY TRUNCATION OF THE
* FRACTION - NO ROUNDING OCCURS.
* JUMP TO PLBL IF OUT OF RANGE. (RA)
* IS NOT CHANGED IN EITHER CASE.
* PLBL MAY BE OMITTED IF OVERFLOW
* IS IMPOSSIBLE.
Page 53 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -8- CONVERSION INSTRUCTIONS (CONTINUED)
*
* THE FOLLOWING INSTRUCTIONS PROVIDE FOR COMPUTING
* THE LENGTH OF STORAGE REQUIRED FOR A TEXT STRING.
*
* 8.7 CTW W,VAL THIS INSTRUCTION COMPUTES THE SUM
* (NUMBER OF WORDS REQUIRED TO STORE
* W CHARACTERS) + (VAL). THE SUM
* IS STORED IN W.
* FOR EXAMPLE, IF CFP$C IS 5, AND WA
* CONTAINS 32, THEN CTW WA,2
* GIVES A RESULT OF 9 IN WA.
*
* 8.8 CTB W,VAL CTB IS EXACTLY LIKE CTW EXCEPT THAT
* THE RESULT IS IN BAUS. IT HAS THE
* SAME EFFECT AS CTW W,VAL WTB W
*
* 8.9 BTC W COMPUTE THE NUMBER OF CHARACTERS
* WHICH CAN BE STORED IN (W) BAUS,
* PLACING THE RESULT IN W.
*
* 8.10 WTC W COMPUTE THE NUMBER OF CHARACTERS
* WHICH CAN BE STORED IN (W) WORDS,
* PLACING THE RESULT IN W.
*
* THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
* FROM INTEGERS TO AND FROM NUMERIC DIGIT CHARACTERS
* FOR USE IN NUMERIC CONVERSION ROUTINES. THEY EMPLOY
* NEGATIVE INTEGER VALUES TO ALLOW FOR PROPER
* CONVERSION OF NUMBERS WHICH CANNOT BE COMPLEMENTED.
*
* 8.11 CVM PLBL CONVERT BY MULTIPLICATION
*
* THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
* IS MULTIPLIED BY 10. WB CONTAINS THE CHARACTER
* CODE FOR A DIGIT. THE VALUE OF THIS DIGIT IS THEN
* SUBTRACTED FROM THE RESULT. IF THE RESULT IS OUT OF
* RANGE, THEN CONTROL IS PASSED TO PLBL WITH THE
* RESULT IN (IA) UNDEFINED. EXECUTION OF CVM LEAVES
* THE RESULT IN (WB) UNDEFINED.
*
* 8.12 CVD CONVERT BY DIVISION
*
* THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
* IS DIVIDED BY 10. THE QUOTIENT (ZERO OR NEGATIVE)
* IS REPLACED IN THE ACCUMULATOR. THE REMAINDER IS
* CONVERTED TO THE CHARACTER CODE OF A DIGIT AND
* PLACED IN WA. FOR EXAMPLE, AN OPERAND OF -523 GIVES
* A QUOTIENT OF -52 AND A REMAINDER IN WA OF CH$D3.
Page 54 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -9- BLOCK MOVE INSTRUCTIONS
*
* THE FOLLOWING INSTRUCTIONS ARE USED FOR TRANSFERRING
* DATA FROM ONE AREA OF MEMORY TO ANOTHER IN BLOCKS.
* THEY CAN BE IMPLEMENTED WITH THE INDICATED SERIES OF
* OTHER MACRO-INSTRUCTIONS, BUT MORE EFFICIENT IMPLE-
* MENTATIONS WILL BE POSSSIBLE ON MOST MACHINES.
* BEFORE OBEYING ANY OF THESE ORDERS WA, XL, XR SHOULD HAVE
* BEEN SET UP (USING PLC, PSC FOR THE CHARACTER MOVES). THE
* FINAL VALUE OF WA IS UNDEFINED.
*
* 9.1 MVC MOVE CHARACTERS
*
* MVC IS EQUIVALENT TO THE SEQUENCE
*
* MOV WB,DUMPB
* LCT WA,WA
* LOOPC LCH WB,(XL)+
* SCH WB,(XR)+
* BCT WA,LOOPC
* CSC XR
* MOV DUMPB,WB
*
* THE CHARACTER POINTERS ARE BUMPED AS INDICATED
* AND THE FINAL VALUE OF WA IS UNDEFINED.
*
* 9.2 MCB MOVE CHARACTERS BACKWARDS
*
* MCB IS EQUIVALENT TO THE SEQUENCE
*
* MOV WB,DUMPB
* LCT WA,WA
* LOOPC LCH WB,-(XL)
* SCH WB,-(XR)
* BCT WA,LOOPC
* CSC XR
* MOV DUMPB,WB
*
* THE CHARACTER POINTERS ARE BUMPED AS INDICATED
* AND THE FINAL VALUE OF WA IS UNDEFINED.
Page 55 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* 9.3 MVW MOVE WORDS
*
* MVW IS EQUIVALENT TO THE SEQUENCE
*
* LOOPW MOV (XL)+,(XR)+
* DCA WA WA = BAUS TO MOVE
* BNZ WA,LOOPW
*
* NOTE THAT THIS IMPLIES THAT THE VALUE IN WA IS THE
* LENGTH IN BAUS WHICH IS A MULTIPLE OF CFP$B.
* THE INITIAL ADDRESSES IN XR,XL ARE WORD ADDRESSES.
* AS INDICATED, THE FINAL XR,XL VALUES POINT PAST THE
* NEW AND OLD REGIONS OF MEMORY RESPECTIVELY.
* THE FINAL VALUE OF WA IS UNDEFINED.
*
* 9.4 MWB MOVE WORDS BACKWARDS
*
* MWB IS EQUIVALENT TO THE SEQUENCE
*
* LOOPB MOV -(XL),-(XR)
* DCA WA WA = BAUS TO MOVE
* BNZ WA,LOOPB
*
* THERE IS A REQUIREMENT THAT THE INITIAL VALUE IN XL
* BE AT LEAST 256 LESS THAN THE VALUE IN XR. THIS
* ALLOWS AN IMPLEMENTATION IN WHICH CHUNKS OF 256
* BAUS ARE MOVED FORWARD (IBM 360, ICL 1900).
* THE FINAL VALUE OF WA IS UNDEFINED.
Page 56 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -10- OPERATIONS CONNECTED WITH THE STACK
*
* THE STACK IS AN AREA IN MEMORY WHICH IS DEDICATED FOR USE
* IN CONJUNCTION WITH THE STACK POINTER REGISTER (XS). AS
* PREVIOUSLY DESCRIBED, IT IS USED BY THE JSR AND EXI
* INSTRUCTIONS AND MAY BE USED FOR STORAGE OF ANY OTHER
* DATA AS REQUIRED.
*
* THE STACK BUILDS EITHER WAY IN MEMORY AND AN IMPORTANT
* RESTRICTION IS THAT THE VALUE IN (XS) MUST BE THE ADDRESS
* OF THE STACK FRONT AT ALL TIMES SINCE
* SOME IMPLEMENTATIONS MAY RANDOMLY DESTROY STACK LOCATIONS
* BEYOND (XS).
*
* THE STARTING STACK BASE ADDRESS IS PASSED
* IN (XS) AT THE START OF EXECUTION. DURING EXECUTION IT
* IS NECESSARY TO MAKE SURE THAT THE STACK DOES NOT
* OVERFLOW. THIS IS ACHIEVED BY EXECUTING THE FOLLOWING
* INSTRUCTION PERIODICALLY.
*
* 10.1 CHK CHECK STACK OVERFLOW
*
* AFTER SUCCESSFULLY EXECUTING CHK, IT IS PERMISSIBLE TO
* USE UP TO 100 ADDITIONAL WORDS BEFORE ISSUING ANOTHER CHK
* THUS CHK NEED NOT BE ISSUED EVERY TIME THE STACK IS
* EXPANDED. IN SOME IMPLEMENTATIONS, THE CHECKING MAY BE
* AUTOMATIC AND CHK WILL HAVE NO EFFECT. FOLLOWING THE
* ABOVE RULE MAKES SURE THAT THE PROGRAM WILL OPERATE
* CORRECTLY IN IMPLEMENTATIONS WITH NO AUTOMATIC CHECK.
*
* IF STACK OVERFLOW OCCURS (DETECTED EITHER AUTOMATICALLY
* OR BY A CHK INSTRUCTION), THEN CONTROL IS PASSED TO THE
* STACK OVERFLOW SECTION (SEE PROGRAM FORM). NOTE THAT THIS
* TRANSFER MAY TAKE PLACE FOLLOWING ANY INSTRUCTION WHICH
* STORES DATA AT A NEW LOCATION ON THE STACK.
* AFTER STACK OVERFLOW, STACK IS ARBITRARILY POPPED
* TO GIVE SOME SPACE IN WHICH THE ERROR PROCEDURE MAY
* OPERATE. OTHERWISE A LOOP OF STACK OVERFLOWS MAY OCCUR.
Page 57 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -11- DATA GENERATION INSTRUCTIONS
*
* THE FOLLOWING INSTRUCTIONS ARE USED TO GENERATE CONSTANT
* VALUES IN THE CONSTANT SECTION AND ALSO TO ASSEMBLE
* INITIAL VALUES IN THE WORKING STORAGE SECTION. THEY
* MAY NOT APPEAR EXCEPT IN THESE TWO SECTIONS.
*
* 11.1 DAC ADDR ASSEMBLE ADDRESS CONSTANT.
* GENERATES ONE WORD CONTAINING THE
* SPECIFIED ONE WORD INTEGER
* VALUE (ADDRESS).
*
* 11.2 DIC INTEGER GENERATES AN INTEGER VALUE WHICH
* OCCUPIES CFP$I CONSECUTIVE WORDS.
* THE OPERAND IS A DIGIT STRING WITH
* A REQUIRED LEADING SIGN.
*
* 11.3 DRC REAL ASSEMBLES A REAL CONSTANT WHICH
* OCCUPIES CFP$R CONSECUTIVE WORDS.
* THE OPERAND FORM MUST OBEY THE
* RULES FOR A FORTRAN REAL CONSTANT
* WITH THE EXTRA REQUIREMENT THAT A
* LEADING SIGN BE PRESENT.
*
* 11.4 DTC DTEXT DEFINE TEXT CONSTANT. DTEXT
* IS STARTED AND ENDED WITH ANY
* CHARACTER NOT CONTAINED IN THE
* CHARACTERS TO BE ASSEMBLED. THE
* CONSTANT OCCUPIES CONSECUTIVE WORDS
* AS DICTATED BY THE CONFIGURATION
* PARAMETER CFP$C. ANY UNUSED CHARS
* IN THE LAST WORD ARE RIGHT FILLED
* WITH ZEROS (I.E. THE CHARACTER
* WHOSE INTERNAL CODE IS ZERO).
* THE STRING CONTAINS A SEQUENCE OF
* LETTERS, DIGITS, BLANKS AND ANY OF
* THE FOLLOWING SPECIAL CHARACTERS.
* =,$.(*)/+-
* NO OTHER CHARACTERS
* MAY BE USED IN A DTEXT OPERAND.
*
* 11.5 DBC VAL ASSEMBLE BIT STRING CONSTANT. THE
* OPERAND IS A POSITIVE INTEGER
* VALUE WHICH IS INTERPRETED IN
* BINARY, RIGHT JUSTIFIED AND LEFT
* FILLED WITH ZERO BITS. THUS 5 WOULD
* IMPLY THE BIT STRING VALUE 00..101.
*
* 11.6 DDC DTEXT DEFINE DISPLAY CONSTANT. IDENTICAL
* TO DTC (SEE ABOVE), HOWEVER ON
* SYSTEMS SUPPORTING LOWER CASE,
* THE TRANSLATION IS FREE TO MIX
* CASES IN A MANNER APPROPRIATE
* TO THE TARGET SYSTEM.
Page 58 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -12- SYMBOL DEFINITION INSTRUCTIONS
*
* THE FOLLOWING INSTRUCTION IS USED TO DEFINE SYMBOLS
* IN THE DEFINITIONS SECTION. IT MAY NOT BE USED ELSEWHERE.
*
* 12.1 EQU EQOP DEFINE SYMBOL
*
* THE SYMBOL WHICH APPEARS IN THE LABEL FIELD IS
* DEFINED TO HAVE THE ABSOLUTE VALUE GIVEN
* BY THE EQOP OPERAND. A GIVEN SYMBOL MAY BE DEFINED
* ONLY ONCE IN THIS MANNER, AND ANY SYMBOLS OCCURING
* IN EQOP MUST BE PREVIOUSLY DEFINED.
*
* THE FOLLOWING ARE THE POSSIBILITIES FOR EQOP
*
* VAL THE INDICATED VALUE IS USED
*
* VAL+VAL THE SUM OF THE TWO VALUES IS USED.
* THIS SUM MUST NOT EXCEED CFP$M
*
* VAL-VAL THE DIFFERENCE BETWEEN THE TWO
* VALUES (MUST BE POSITIVE) IS USED.
*
* * THIS FORMAT DEFINES THE LABEL BY
* USING A VALUE SUPPLIED BY THE
* MINIMAL TRANSLATOR. VALUES ARE
* REQUIRED FOR THE
* CFP$X (CONFIGURATION PARAMETERS)
* E$XXX (ENVIRONMENT PARAMETERS)
* CH$XX (CHARACTER CODES).
* IN ORDER FOR A TRANSLATOR TO
* HANDLE THIS FORMAT CORRECTLY THE
* DEFINITIONS SECTION MUST BE
* CONSULTED FOR DETAILS OF REQUIRED
* SYMBOLS AS LISTED AT THE FRONT OF
* THE SECTION.
Page 59 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SYMBOL DEFINITION INSTRUCTIONS (CONTINUED)
*
* THE FOLLOWING INSTRUCTIONS MAY BE USED TO DEFINE SYMBOLS
* IN THE PROCEDURE SECTION. THEY MAY NOT BE USED IN
* ANY OTHER PART OF THE PROGRAM.
*
* 12.2 EXP PTYP,INT DEFINE EXTERNAL PROCEDURE
*
* EXP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL
* NAMING AN EXTERNAL PROCEDURE WHICH CAN BE
* REFERENCED IN A SUBSEQUENT JSR INSTRUCTION. THE
* CODING FOR THE PROCEDURE IS EXTERNAL TO THE
* CODING OF THE SOURCE PROGRAM IN THIS LANGUAGE.
* THE CODE FOR EXTERNAL PROCEDURES MAY BE
* REFERRED TO COLLECTIVELY AS THE OPERATING SYSTEM
* INTERFACE, OR MORE BRIEFLY, OSINT, AND WILL
* FREQUENTLY BE A SEPARATELY COMPILED SEGMENT OF CODE
* LOADED WITH SPITBOL TO PRODUCE A COMPLETE SYSTEM.
*
* PTYP SPECIFIES THE PROCEDURE TYPE AND INT DESIGNATES
* THE NUMBER OF EXIT PARAMETERS.
*
* 12.3 INP PTYP,INT DEFINE INTERNAL PROCEDURE
*
* INP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL
* NAMING AN INTERNAL PROCEDURE AND GIVES
* ITS TYPE AND NUMBER OF EXIT PARAMETERS. THE LABEL
* CAN BE REFERENCED IN JSR INSTRUCTIONS AND
* IT MUST APPEAR LABELLING A PRC INSTRUCTION IN THE
* PROGRAM SECTION.
*
* 12.4 INR DEFINE INTERNAL ROUTINE
*
* INR DEFINES THE SYMBOL IN THE LABEL FIELD AS A RLBL
* NAMING AN INTERNAL ROUTINE. THE
* LABEL MAY BE REFERENCED IN ANY TYPE OF BRANCH ORDER
* AND IT MUST APPEAR LABELLING A RTN INSTRUCTION IN
* THE PROGRAM SECTION.
*
* 12.5 GLB DEFINE GLOBAL SYMBOL
*
* GLB DEFINES THE SYMBOL IN THE LABEL FIELD AS A GLBL
* NAMING THE DESTINATION OF A JMG (JUMP GLOBAL) ORDER.
* THE SYMBOL MAY ALSO BE THE DESTINATION OF LOCAL
* BRANCHES OF ALL TYPES.
* THE LABEL MUST APPEAR IN THE PROCEDURE SECTION
* LABELLING AN INSTRUCTION.
Page 60 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -13- ASSEMBLY LISTING LAYOUT INSTRUCTIONS
*
* 13.1 EJC EJECT TO NEXT PAGE
*
* 13.2 TTL TEXT SET NEW ASSEMBLY TITLE
*
* TTL IMPLIES AN IMMEDIATE EJECT OF THE
* ASSEMBLY LISTING TO PRINT THE NEW TITLE.
*
* THE USE OF TTL AND EJC CARDS IS SUCH THAT THE
* PROGRAM WILL LIST NEATLY IF THE PRINTER PRINTS
* AS MANY AS 58 LINES PER PAGE. IN THE EVENT THAT
* THE PRINTER DEPTH IS LESS THAN THIS, OR IF THE
* LISTING CONTAINS INTERSPERSED LINES (SUCH AS ACTUAL
* GENERATED CODE), THEN THE FORMAT MAY BE UPSET.
*
* LINES STARTING WITH AN ASTERISK ARE COMMENT LINES
* WHICH CAUSE NO CODE TO BE GENERATED AND MAY OCCUR
* FREELY ANYWHERE IN THE PROGRAM. THE FORMAT FOR
* COMMENT LINES IS GIVEN IN SECTION -15-.
Page 61 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* -14- PROGRAM FORM
*
* THE PROGRAM CONSISTS OF SEPARATE SECTIONS SEPARATED
* BY SEC OPERATIONS. THE SECTIONS MUST APPEAR IN THE
* FOLLOWING SPECIFIED ORDER.
*
* 14.1 SEC START OF PROCEDURE SECTION
*
* (PROCEDURE SECTION)
*
* SEC START OF DEFINITIONS SECTION
*
* (DEFINITIONS SECTION)
*
* SEC START OF CONSTANT STORAGE SECTION
*
* (CONSTANT STORAGE SECTION)
*
* SEC START OF WORKING STORAGE SECTION
*
* (WORKING STORAGE SECTION)
*
* SEC START OF PROGRAM SECTION
*
* (PROGRAM SECTION)
*
* SEC START OF STACK OVERFLOW SECTION
*
* (STACK OVERFLOW SECTION)
*
* SEC START OF ERROR SECTION
*
* (ERROR SECTION)
*
* 14.2 END END OF ASSEMBLY
Page 62 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 10 - PROGRAM FORM
*
* PROCEDURE SECTION
*
* THE PROCEDURE SECTION CONTAINS ALL THE EXP
* INSTRUCTIONS FOR EXTERNALLY AVAILABLE PROCEDURES
* AND INP,INR OPCODES FOR INTERNAL PROCEDURES,ROUTINES
* SO THAT A SINGLE PASS MINIMAL TRANSLATOR HAS ADVANCE
* KNOWLEDGE OF PROCEDURE TYPES WHEN TRANSLATING CALLS.
*
* DEFINITIONS SECTION
*
* THE DEFINITIONS SECTION CONTAINS EQU INSTRUCTIONS
* WHICH DEFINE SYMBOLS REFERENCED LATER ON IN THE
* PROGRAM, CONSTANT AND WORK SECTIONS.
*
* CONSTANT STORAGE SECTION
*
* THE CONSTANT STORAGE SECTION CONSISTS ENTIRELY
* OF CONSTANTS ASSEMBLED WITH THE DAC,DDC,DIC,DRC
* DTC,DBC ASSEMBLY OPERATIONS. THESE CONSTANTS CAN
* BE FREELY REFERENCED BY THE PROGRAM INSTRUCTIONS.
*
* WORKING STORAGE SECTION
*
* THE WORKING STORAGE SECTION CONSISTS ENTIRELY OF
* DAC,DDC,DIC,DRC,DBC,DTC INSTRUCTIONS TO DEFINE A
* FIXED LENGTH WORK AREA. THE WORK LOCATIONS IN THIS
* AREA CAN BE DIRECTLY REFERENCED IN PROGRAM
* INSTRUCTIONS. THE AREA IS INITIALIZED IN ACCORDANCE
* WITH THE VALUES ASSEMBLED IN THE INSTRUCTIONS.
*
* PROGRAM SECTION
*
* THE PROGRAM SECTION CONTAINS PROGRAM INSTRUCTIONS
* AND ASSOCIATED OPERATIONS (SUCH AS PRC, ENP, ENT).
* CONTROL IS PASSED TO THE FIRST INSTRUCTION IN THIS
* SECTION WHEN EXECUTION IS INITIATED.
*
* STACK OVERFLOW SECTION
*
* THE STACK OVERFLOW SECTION CONTAINS INSTRUCTIONS
* LIKE THE PROGRAM SECTION. CONTROL IS PASSED TO THE
* FIRST INSTRUCTION IN THIS SECTION FOLLOWING THE
* OCCURRENCE OF STACK OVERFLOW, SEE CHK INSTRUCTION.
*
* ERROR SECTION
*
* THE ERROR SECTION CONTAINS INSTRUCTIONS LIKE THE
* PROGRAM SECTION. CONTROL IS PASSED TO THE FIRST
* INSTRUCTION IN THIS SECTION WHEN A PROCEDURE EXIT
* CORRESPONDS TO AN ERROR PARAMETER (SEE ERR)
* OR WHEN AN ERB OPCODE IS OBEYED. THE ERROR CODE
* MUST CLEAN UP THE MAIN STACK AND CATER FOR THE
* POSSIBILITY THAT A SUBROUTINE STACK MAY NEED CLEAN
* UP.
Page 63 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
* OSINT
*
* THOUGH NOT PART OF THE MINIMAL SOURCE, IT IS USEFUL
* TO REFER TO THE COLLECTION OF INITIALISATION AND
* EXP ROUTINES AS OSINT (OPERATING SYSTEM INTERFACE).
* ERRORS OCCURRING WITHIN OSINT PROCEDURES ARE
* USUALLY HANDLED BY MAKING AN ERROR RETURN. IF THIS
* IS NOT FEASIBLE OR APPROPRIATE, OSINT MAY USE THE
* MINIMAL ERROR SECTION TO REPORT ERRORS DIRECTLY BY
* BRANCHING TO IT WITH A SUITABLE NUMERIC ERROR
* CODE IN WA.
Page 64 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 11 - STATEMENT FORMAT
*
* ALL LABELS ARE EXACTLY FIVE CHARACTERS LONG AND START
* WITH THREE LETTERS (ABCDEFGHIJKLMNOPQRSTUVWXY$) FOLLOWED
* BY TWO LETTERS OR DIGITS.
* THE LETTER Z MAY NOT BE USED IN MINIMAL SYMBOLS BUT $ IS
* PERMITTED.
* FOR IMPLEMENTATIONS WHERE $ MAY NOT APPEAR IN THE
* TARGET CODE , A SIMPLE SUBSTITUTION OF Z FOR $
* MAY THUS BE MADE WITHOUT RISK OF PRODUCING NON-UNIQUE
* SYMBOLS.
* THE LETTER Z IS HOWEVER PERMITTED IN OPCODE MNEMONICS AND
* IN COMMENTS.
*
* MINIMAL STATEMENTS ARE IN A FIXED FORMAT AS FOLLOWS.
*
* COLS 1-5 LABEL IF ANY (ELSE BLANK)
*
* COLS 6-7 ALWAYS BLANK
*
* COLS 8-10 OPERATION MNEMONIC
*
* COLS 11-12 BLANKS
*
* COLS 13-28 OPERAND FIELD, TERMINATED BY A
* BLANK. MAY OCCASIONALLY
* EXTEND PAST COLUMN 28.
*
* COLS 30-64 COMMENT. ALWAYS SEPARATED FROM THE
* OPERAND FIELD BY AT LEAST ONE BLANK
* MAY OCCASIONALLY START AFTER COLUMN
* 30 IF THE OPERAND EXTENDS PAST 28.
* A SPECIAL EXCEPTION OCCURS FOR THE
* IFF INSTRUCTION, WHOSE COMMENT MAY
* BE ONLY 20 CHARACTERS LONG (30-49).
*
* COLS 65 ON UNUSED
*
*
* COMMENT LINES HAVE THE FOLLOWING FORMAT
*
* COL 1 ASTERISK
*
* COLS 2-7 BLANK
*
* COLS 8-64 ARBITRARY TEXT, RESTRICTED TO THE
* FORTRAN CHARACTER SET.
*
*
* THE FORTRAN CHARACTER SET IS A-Z 0-9 =,$.(*)-/+
Page 65 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
*
* SECTION 12 - PROGRAM EXECUTION
*
* EXECUTION OF THE PROGRAM BEGINS WITH THE FIRST
* INSTRUCTION IN THE PROGRAM SECTION.
*
* IN ADDITION TO THE FIXED LENGTH MEMORY REGIONS DEFINED
* BY THE ASSEMBLY, THERE ARE TWO DYNAMICALLY ALLOCATED
* MEMORY REGIONS AS FOLLOWS.
*
* DATA AREA THIS IS AN AREA AVAILABLE TO THE
* PROGRAM FOR GENERAL STORAGE OF DATA
* ANY DATA VALUE MAY BE STORED IN
* THIS AREA EXCEPT INSTRUCTIONS.
* IN SOME IMPLEMENTATIONS, IT MAY BE
* POSSIBLE TO INCREASE THE SIZE OF
* THIS AREA DYNAMICALLY BY ADDING
* WORDS AT THE TOP END WITH A CALL
* TO A SYSTEM PROCEDURE.
*
* STACK AREA THIS REGION OF MEMORY HOLDS
* THE STACK USED FOR SUBROUTINE CALLS
* AND OTHER STORAGE OF ONE WORD
* INTEGER VALUES (ADDRESSES). THIS
* IS THE STACK ASSOCIATED WITH
* INDEX REGISTER XS.
*
* THE LOCATIONS AND SIZES OF THESE AREAS ARE SPECIFIED
* BY THE VALUES IN THE REGISTERS AT THE START OF PROGRAM
* EXECUTION AS FOLLOWS.
*
* (XS) ADDRESS ONE PAST THE STACK BASE.
* E.G. IF XS IS 23456, A D-STACK WILL
* OCCUPY WORDS 23455,23454,...
* WHEREAS A U-STACK WILL OCCUPY
* 23457,23458,...
*
* (XR) ADDRESS OF THE FIRST WORD
* IN THE DATA AREA
*
* (XL) ADDRESS OF THE LAST WORD IN THE
* DATA AREA.
*
* (WA,WB,WC,IA,RA,CP) AS DEFINED BY THE PROGRAM
*
* THERE IS NO EXPLICIT WAY TO TERMINATE THE EXECUTION OF A
* PROGRAM. THIS FUNCTION IS PERFORMED BY AN APPROPRIATE
* SYSTEM PROCEDURE REFERENCED WITH THE SYSEJ INSTRUCTION.
Page 66 S P I T B O L -- BASIC INFORMATION
*
* 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 IMPLEMENTATION IS DISCUSSED IN DEWAR AND MCCANN,
* MACRO SPITBOL - A SNOBOL4 COMPILER, SOFTWARE PRACTICE AND
* EXPERIENCE, 7, 95-113, 1977.
* THE LANGUAGE IS AS IMPLEMENTED BY THE BTL TRANSLATOR
* (GRISWOLD, POAGE AND POLONSKY, PRENTICE HALL, 1971)
* WITH THE FOLLOWING PRINCIPAL 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.
Page 67 S P I T B O L -- BASIC INFORMATION
*
* 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 BAU 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.
Page 68 S P I T B O L -- BASIC INFORMATION
*
* 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
Page 69 S P I T B O L -- BASIC INFORMATION
*
* 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 BAUS. 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.
Page 70 S P I T B O L -- BASIC INFORMATION
*
* 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.
Page 71 S P I T B O L -- BASIC INFORMATION
* 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.
* SOME OF THE RULES ARE SUBTLE SO IT IS PREFERABLE FOR
* OSINT TO MANAGE ITS OWN MEMORY NEEDS. SPITBOL PROCS
* OBEY RULES TO ENSURE THAT NO ACTION CAN CAUSE A GARBAGE
* COLLECTION EXCEPT AT SUCH TIMES AS CONTENTS OF XL, XR
* AND THE STACK ARE +CLEAN+ (SEE COMMENT BEFORE UTILITY
* PROCEDURES AND IN GBCOL FOR MORE DETAIL). NOTE
* THAT CALLS OF ALOST MAY CAUSE GARBAGE COLLECTION (SHIFT
* OF MEMORY TO FREE SPACE). SPITBOL PROCS WHICH CALL
* SYSTEM ROUTINES ASSUME THAT THEY CANNOT PRECIPITATE
* COLLECTION AND THIS MUST BE RESPECTED.
Page 72 S P I T B O L -- BASIC INFORMATION
*
* 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.
*
* ENTRY VALUES
*
* IN ADDITION TO THE ENTRY VALUES OF XS, XL, XR AS DEFINED
* FOR MINIMAL, THE PROGRAM-SPECIFIC ENTRY REGISTERS MUST
* BE SET AS FOLLOWS
*
* (WA) INITIAL VALUE FOR CODE KEYWORD
*
* (WB,WC,IA,RA,CP) ZERO
*
Page 73 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.
* A MODEL MINIMAL EXP PSEUDO-OP FOR EACH PROCEDURE IS
* INCLUDED IN THE DESCRIPTION. MACHINE PROCESSABLE VERSIONS
* OF THESE ARE COLLECTED AT THE END OF THE SECTION,
* FOLLOWING THE SEC OPCODE.
* 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 BLOCKS.
*
* SCBLK FORMAT IS OUTLINED HERE, SINCE STRINGS ARE OFTEN
* PASSED AS PARAMETERS TO OSINT OR MAY BE RETURNED BY
* OSINT. AN SCBLK CONTAINS 2 HEADER WORDS, THE FIRST OF
* WHICH CONTAINS A VALUE ONLY OF INTEREST TO SPITBOL.
* IT IS NOT NECESSARY TO SET THIS FIELD IN RETURNED
* SCBLKS.
* THE SECOND WORD CONTAINS THE NUMBER OF CHARACTERS IN THE
* STRING AND SHOULD BE CORRECTLY SET IN RETURNED SCBLKS.
* THE REMAINING WORDS CONTAIN THE CHARACTERS OF THE STRING,
* PACKED CFP$C PER WORD, WITH THE LAST WORD PADDED OUT IF
* NECESSARY WITH BLANK CHARACTERS.
Page 74 S P I T B O L -- PROCEDURES SECTION
*
* OSINT FAILURE (FLOSI) AND ERROR (EROSI) RETURNS
* ----- ------- ------- --- ----- ------- -------
*
* WHERE IT MAKES SENSE, OSINT CALLS MAY BE ABLE TO
* RETURN IN SUCH A WAY AS TO CAUSE SPITBOL STATEMENT
* FAILURE SO THAT THE USER CAN REGAIN CONTROL FOR SOME
* CONDITIONS AND ATTEMPT RECOVERY OR A RE-TRY.
* THESE CASES ARE IDENTIFIED BY INCLUDING
* PPM FLOSI
* IN THE LIST OF RETURNS.
* THE CONDITIONS ON REGISTER PRESERVATION WHEN A FLOSI
* RETURN IS TAKEN ARE AS FOLLOWS.
* ANY REGISTER APPEARING IN THE LIST FOLLOWING THE MODEL
* CALL AS BEING DESTROYED ON A NORMAL RETURN, NEED NOT BE
* PRESERVED. ADDITIONALLY ANY REGISTER CONTAINING ENTRY
* PARAMETERS NEED NOT BE PRESERVED ON A FLOSI RETURN.
* OTHER REGISTERS, NOT EXPLICITLY REFERENCED, MUST BE
* PRESERVED.
*
* SOME OSINT CALLS ARE PERMITTED TO RETURN AN ERROR
* CODE AND/OR MESSAGE. THIS ALLOWS REPORTING OF ERROR
* CONDITIONS DETECTED BY THE OSINT ROUTINE IN TERMS
* RELEVANT TO THE IMPLEMENTATION. SUCH RETURNS WILL RESULT
* IN EXECUTION TERMINATION (UNLESS AN ERROR TRAP IS
* OPERATIVE). IN THE DOCUMENTATION OF THE SYS-- ROUTINES
* THEY APPEAR AS
* PPM EROSI
* RETURNS AND THE CONVENTIONS USED ARE AS FOLLOWS -
* TAKE THE SPECIFIED RETURN WITH
* (WA) SET TO 0 AS A DEFAULT ERROR CODE
* OR (WA) SET TO ANY PRIVATE CODE IN 300 TO 999.
* (XL) SET TO 0 IN WHICH CASE SPITBOL WILL MAKE A
* LATER SYSEM CALL TO OBTAIN THE ERROR TEXT
* USING THE ERROR CODE PASSED IN WA.
* OR (WA) SET TO ANY PRIVATE CODE IN 300 TO 999.
* (XL) POINTING TO AN SCBLK CONTAINING THE TEXT OF AN
* ERROR MESSAGE AND WITH ITS LENGTH FIELD SET.
* THIS WILL BE COPIED ON RETURN TO SPITBOL AND
* USED IN THE USUAL ERROR PROCESSING.
* IN THIS CASE, NO SYSEM CALL WILL FOLLOW.
*
* THE REMARKS REGARDING REGISTER PRESERVATION UNDER THE
* FLOSI DESCRIPTION APPLY ALSO TO AN EROSI RETURN EXCEPT
* THAT PRESCRIBED VALUES FOR WA, XL MUST BE SET UP.
*
Page 75 S P I T B O L -- PROCEDURES SECTION
*
* SYSAX -- AFTER EXECUTION
*
* SYSAX EXP E,0 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
*
* SYSBX -- BEFORE EXECUTION
*
* SYSBX EXP E,0 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
Page 76 S P I T B O L -- PROCEDURES SECTION
*
* SYSCI -- CONVERT INTEGER
*
* SYSCI EXP E,0 DEFINE EXTERNAL ENTRY POINT
*
* SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO
* CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER
* THAN USING THE SPITBOL 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 .CSCI 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
* PRECEDING 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
*
* SYSDT -- GET CURRENT DATE
*
* SYSDT EXP E,0 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.
Page 77 S P I T B O L -- PROCEDURES SECTION
*
* SYSEC -- END -COPY INCLUSION
*
* SYSEC PRC E,2 DEFINE EXTERNAL ENTRY POINT
*
* (WA) IOTAG FROM MATCHING SYSSC
* JSR SYSEC CALL TO END -COPY
* PPM DUMMY FAIL EXIT (DO NOT USE)
* PPM EROSI ERROR EXIT
* (WA,WB,WC) DESTRUCTABLE
*
* THE CALL TO SYSEC SIGNALS THE OSINT THAT INPUT IS
* TO BE CLOSED OUT FROM THE CURRENT SYSRD -COPY FILE
* AND INPUT RESTORED FROM THE NEXT OUTER LEVEL. WA
* IS THE IOTAG RETURNED FROM THE MATCHING SYSSC CALL.
* NOTE THAT SYSEC MAY BE CALLED EITHER AS A
* CONSEQUENCE OF FLOSI EXIT FROM SYSRD, OR PREMATURELY
* IN THE EVENT OF A CODE() COMPILATION ERROR CONTAINING
* A -COPY, OR "END" LABEL ENCOUNTERED DURING INITIAL
* COMPILATION. A MISSING FLOSI EXIT FOR SYSEC IS INCLUDED
* FOR STRUCTURAL CONFORMANCE, BUT MUST NEVER BE TAKEN.
Page 78 S P I T B O L -- PROCEDURES SECTION
*
* SYSSC -- START -COPY INCLUSION FOR SYSRD
*
* SYSSC PRC E,2 DEFINE EXTERNAL ENTRY POINT
*
* (XR) FILETAG SCBLK FOR -COPY
* JSR SYSSC CALL TO NEST -COPY INPUT
* PPM DUMMY FAIL EXIT (DO NOT USE)
* PPM EROSI ERROR EXIT
* (WA) IOTAG TO BE PRESENTED TO SYSEC
* (WB,WC) DESTRUCTABLE
*
* SYSSC IS CALLED BY SPITBOL WHEN A -COPY CONTROL
* CARD IS ENCOUNTERED, EITHER AT COMPILE TIME IN
* THE INPUT STREAM OR AT EXECUTION TIME IN A
* CALL TO CODE. THE INTENDED SEMANTICS ARE THAT
* FURTHER INPUT FROM THE CURRENT STANDARD INPUT
* FILE BE SUSPENDED AND THAT SUBSEQENT CALLS
* TO SYSRD RETURN LINES FROM THE NEW FILE
* IDENTIFIED BY THE SCBLK PTR GIVEN TO SYSSC IN XR.
* THIS NEW FILE IS CLOSED AND SUSPENDED INPUT
* RESUMED BY THE OSINT WHEN SYSEC IS CALLED.
*
* FAILURE TO FIND A -COPY FILE MUST BE VIEWED
* AS AN EROSI. THE DUMMY PPM IS INCLUDED ONLY FOR
* STRUCTURAL COMPATIBILITY WITH OTHER FLOSI/EROSI
* OSINT ROUTINE DEFINITIONS. THE IOTAG RETURNED
* WILL BE SAVED AND PRESENTED TO SYSEC
* WHEN SPITBOL WISHES THIS LEVEL OF -COPY TERMINATED.
* IT MUST BE NON-COLLECTABLE.
*
* IN GENERAL, SPITBOL SUPPORTS ARBITRARY NESTING
* OF SYSSC/SYSEC IN THE NATURAL MANNER. IT IS
* RECOGNISED THAT THE IMPLEMENTATION MAY NEED TO
* LIMIT THE DEGREE OF NESTING. HOWEVER
* IMPLEMENTORS ARE MOST STRONGLY ENCOURAGED TO
* PROVIDE AT LEAST A SINGLE LEVEL OF -COPY TO GIVE
* A DEGREE OF MODULARITY TO A LANGUAGE WHICH
* DEFINITELY NEEDS IT.
Page 79 S P I T B O L -- PROCEDURES SECTION
*
* SYSEF -- EJECT FILE
*
* SYSEF EXP E,2 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).
* THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT
* PERMIT EJECTS.
* THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED
* FAILURE EVENTS.
* SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG.
*
* (XL) FILETAG (PTR TO SCBLK FOR ARG)
* (WA) IOTAG FROM INITIAL SYSIO CALL
* (WC) VALUE/0 FOR INTEGER/STRING FILETAG
* JSR SYSEF CALL TO EJECT FILE
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (XL,WA,WC) DESTROYED
*
* SYSEJ -- END OF JOB
*
* SYSEJ EXP E,0 DEFINE EXTERNAL ENTRY POINT
*
* SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO
* TERMINATE THE RUN.
* RUN STATISTICS, ENDING MESSAGES ETC WILL HAVE BEEN
* PROVIDED ALREADY BY SPITBOL BEFORE THIS CALL IS MADE.
*
* (WA) VALUE OF CODE KEYWORD
* JSR SYSEJ CALL TO END JOB
* DOES NOT RETURN TO CALLER
*
Page 80 S P I T B O L -- PROCEDURES SECTION
*
* SYSEM -- GET ERROR MESSAGE TEXT
*
* SYSEM EXP E,0 DEFINE EXTERNAL ENTRY POINT
*
* SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE
* SOURCE PROGRAM OR OF OSINT ERROR MESSAGES.
* THE ERROR CODE IS EITHER THAT GIVEN IN THE ERR, ERB
* ORDER OR IS THAT RETURNED VIA THE EROSI MECHANISM OF
* AN EARLIER OSINT CALL.
* SYSEM SHOULD RETURN A NULL STRING (LENGTH ZERO) IF IT
* DOES NOT SUPPORT THIS FEATURE OR NO MESSAGE CORRESPONDS
* TO THE PRESENTED CODE.
* IN THIS CASE, SPITBOL WILL PRINT THE STRING, IF ANY,
* STORED IN THE ERRTEXT KEYWORD.
*
* (WA) ERROR CODE NUMBER
* JSR SYSEM CALL TO GET TEXT
* (XR) POINTER TO 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.
Page 81 S P I T B O L -- PROCEDURES SECTION
*
* SYSEN -- ENDFILE
*
* SYSEN EXP E,2 DEFINE EXTERNAL ENTRY POINT
*
* SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE.
* THE FILE SHOULD NORMALLY BE CLOSED BY THIS CALL (UNLESS
* THE CALL IS INTENDED TO ACCESS, VIA THE SECOND ARGUMENT,
* SOME SPECIAL HOST FEATURE WHICH DOES NOT IMPLY CLOSURE).
* ANY INTERNAL BUFFERS, TABLE ENTRIES OR MARKERS RELATING
* TO THE FILE MAY BE FREED IF FILE CLOSURE OCCURS.
* THE SECOND ARGUMENT IS USED TO REQUEST FEATURES SUCH AS
* FILE DELETION, RENAMING, REPROTECTION, REWINDING ETC AS
* APPROPRIATE TO THE HOST OPERATING SYSTEM. ITS FORMAT IS
* HOST SPECIFIC AND IT IS THE RESPONSIBILITY OF SYSEN TO
* PARSE IT.
* (WA) IS USED AS A CLOSURE FLAG ON RETURN. IF THE VALUE
* IS NON-ZERO, SUBSEQUENT INPUT/OUTPUT SYS-- CALLS
* INVOKED THROUGH ACCESS TO THE ASSOCIATED VARIABLE WILL
* OCCUR AS THOUGH THERE HAD BEEN NO SYSEN CALL.
* IF IT IS SET TO ZERO SPITBOL WILL CAUSE STATEMENT FAILURE
* FOR SUBSEQUENT ATTEMPTS TO INVOKE INPUT/OUTPUT ACTIVITY
* THROUGH THE ASSOCIATED VARIABLE (CF A READ MADE AFTER
* PHYSICAL END OF FILE IS REACHED). THIS WILL BE DONE
* WITHOUT ANY FURTHER INVOCATION OF SYS-- ROUTINES.
* SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG.
*
* (XL) FILETAG (PTR TO SCBLK FOR 1ST ARG)
* (XR) SCBLK PTR FOR 2ND ARG (0 IF NONE)
* (WA) IOTAG FROM INITIAL SYSIO CALL
* (WC) VALUE/0 FOR INTEGER/STRING FILETAG
* JSR SYSEN CALL TO ENDFILE
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WA) CLOSURE FLAG (SEE ABOVE)
* (XL,XR,WC) DESTROYED
*
* THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT
* PERMIT ENDFILE (E.G. STANDARD INPUT AND OUTPUT FILES)
* OR IF IT IS CLOSED ALREADY OR FOR APPROPRIATE CONDITIONS
* WHERE A NON-NULL SECOND ARGUMENT WAS SUPPLIED.
* THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED
* FAILURE EVENTS.
Page 82 S P I T B O L -- PROCEDURES SECTION
*
* SYSEP -- EJECT PRINTER PAGE
*
* SYSEP EXP E,2 DEFINE EXTERNAL ENTRY POINT
*
* SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD
* PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT).
* IF THE STANDARD PRINTER FILE DOES NOT SUPPORT PAGE EJECTS
* THEN THIS ROUTINE SHOULD USE THE FAILURE RETURN.
* IF SYSPP OPTIONS ARE SET TO MAKE THE TERMINAL THE
* STANDARD OUTPUT FILE, EITHER ENSURE THAT PAGE SIZE IS
* SET TO AVOID EJECTS OR CODE THIS ROUTINE TO HANDLE
* POTENTIAL EJECTS TO TERMINAL.
*
* JSR SYSEP CALL TO EJECT PRINTER OUTPUT
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
Page 83 S P I T B O L -- PROCEDURES SECTION
*
* SYSEX -- CALL EXTERNAL FUNCTION
*
* SYSEX EXP E,1 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.
Page 84 S P I T B O L -- PROCEDURES SECTION
*
* SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES ON
*
* SYSHS EXP E,2 DEFINE EXTERNAL ENTRY POINT
*
* PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES
* DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRIES ARE
* (1) 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.
* (2) FIRST ARGUMENT IS 1 (AS AN INTEGER OR STRING) TO GET,
* AS A STRING, THE JCL COMMAND LINE FOR THE SPITBOL RUN.
* ALL ENTRY PARAMETERS ARE CONVERTED TO STRINGS BEFORE THE
* CALL IS MADE.
* THE RESULT RETURNED FROM ANY CALL IS A STRING IN THE FORM
* OF AN SCBLK WITH A POINTER TO IT IN XL. A NULL STRING
* MAY BE RETURNED BY POINTING TO AN SCBLK WITH LENGTH
* FIELD ZERO.
* SPITBOL COPIES THE STRING ON RETURN AND SUPPLIES THE
* CORRECT VALUE FOR THE FIRST WORD.
* RETURNS ARE PROVIDED TO PERMIT STATEMENT FAILURE OR
* THE REPORTING OF ERRORS.
*
* (WA) ARGUMENT 1 SCBLK
* (XL) ARGUMENT 2 SCBLK
* (XR) ARGUMENT 3 SCBLK
* (WB) 0 IF ALL ARGS ARE NULL ELSE NONZERO
* JSR SYSHS CALL TO GET HOST INFORMATION
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (XL) PTR TO SCBLK RESULT OF CALL
* (XR,WA,WB) DESTROYED
*
* SYSID -- RETURN SYSTEM IDENTIFICATION
*
* SYSID EXP E,0 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.
*
* JSR SYSID CALL FOR SYSTEM IDENTIFICATION
* (XR) SCBLK PTR FOR ADDITION TO HEADER
* (XL) SCBLK PTR FOR SECOND HEADER
Page 85 S P I T B O L -- PROCEDURES SECTION
*
* SYSIL -- GET INPUT RECORD LENGTH
*
* SYSIL EXP E,0 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) IOTAG FROM INITIAL SYSIO CALL
* JSR SYSIL CALL TO GET RECORD LENGTH
* (WA) LENGTH
*
* NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE
* UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL.
* SYSIL MUST NEVER REQUEST A NULL (ZERO LENGTH) BUFFER.
*
* SYSIN -- READ INPUT RECORD
*
* SYSIN EXP E,2 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 BLANKS.
* IT IS ALSO PERMISSIBLE TO TAKE EITHER OF THE ALTERNATIVE
* RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED.
* THE FLOSI RETURN SHOULD BE TAKEN WHEN PHYSICAL END OF
* FILE OCCURS.
* SYSIN SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS
* BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS
* MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS.
* SEE SYSIO FOR ACCOUNT OF IOTAG.
*
* (XR) POINTER TO BUFFER (SCBLK PTR)
* (WA) IOTAG FROM INITIAL SYSIO CALL
* (WC) LENGTH OF BUFFER IN CHARACTERS
* JSR SYSIN CALL TO READ RECORD
* PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE)
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WA,WC) DESTROYED
Page 86 S P I T B O L -- PROCEDURES SECTION
*
* SYSIO -- INPUT/OUTPUT FILE ASSOCIATION
*
* SYSIO EXP E,2 DEFINE EXTERNAL ENTRY POINT
*
* SYSIO IS CALLED IN RESPONSE TO A SPITBOL INPUT() OR
* OUTPUT() CALL.
* THE FIRST ARGUMENT TO SUCH A CALL IS THE NAME OF A
* SPITBOL VARIABLE WHICH IS NOT PASSED TO THIS ROUTINE.
* THE SECOND ARGUMENT OF THE CALL WILL BE REFERRED TO FOR
* CONVENIENCE AS THE FILETAG. IT IDENTIFIES IN SOME WAY
* APPROPRIATE TO THE HOST, THE NAME OF THE FILE TO BE
* OPENED. SPITBOL RECOGNISES THREE FORMS OF FILETAG,
* (1) A NON-NUMERIC STRING IN WHICH CASE WC ON ENTRY WILL
* CONTAIN ZERO
* (2) AN INTEGER VALUE OR A STRING REPRESENTING AN INTEGER,
* IN WHICH CASE WC ON ENTRY HOLDS THIS NUMERIC VALUE.
* IN BOTH CASES, XL WILL CONTAIN A POINTER TO AN SCBLK
* GIVING THE FILETAG AS A STRING ON ENTRY TO SYSIO.
* (3) ONE OF THE NAMES, .INPUT, .OUTPUT, .TERMINAL
* FOR ASSOCIATING THE FIRST ARGUMENT NAME TO THE
* RELEVANT STANDARD FILE IN WHICH CASE SYSIO IS
* NOT CALLED.
* THE THIRD ARGUMENT OF THE CALL WILL BE CALLED THE
* FILEPROPS. IT IS AN OPTIONAL STRING WHICH DETAILS FILE
* PROPERTIES OR CHARACTERISTICS RELEVANT TO THE HOST
* OPERATING SYSTEM. IT MAY INCLUDE INFORMATION ON RECORD
* SIZE, RECORD TYPE, PAPER FEED CONTROL CHARACTERS, ACCESS
* MODE, CHARACTER SET ETC. SUCH INFORMATION IS VERY HOST
* DEPENDENT SO THE FORMAT IS NOT PRESCRIBED.
* SYSIO MUST PARSE THE FILEPROPS ARGUMENT IF THE FEATURE
* IS SUPPORTED.
*
* SYSIO SHOULD ATTEMPT TO OPEN THE FILE AS REQUESTED, AND
* SHOULD MAKE THE NORMAL RETURN IF SUCCESSFUL.
* THE FLOSI RETURN SHOULD BE TAKEN FOR FILE NOT FOUND ON
* INPUT() CALL, OR FOR AN OUTPUT() CALL FAILURE ON ACCOUNT
* OF WRITE PROTECTION VIOLATION OR SIMILAR EVENTS.
* THIS ALLOWS THE USER TO ATTEMPT RECOVERY.
* THIS RETURN MAY BE RELEVANT FOR VARIOUS HOST
* SPECIFIC EVENTS AT THE DISCRETION OF THE IMPLEMENTOR.
* THE EROSI RETURN SHOULD BE USED TO REPORT THE NATURE OF
* OTHER ERRORS.
* IT IS THE TASK OF SYSIO TO FIND AND ADMINISTER ANY
* BUFFER SPACE, TABLE ENTRIES OR OTHER INFORMATION NEEDED
* FOR FILE INPUT/OUTPUT. SUCH SPACE MUST BE FOUND OUTSIDE
* THE AREA ALLOCATED TO SPITBOL FOR STATIC AND DYNAMIC
* STORE (UNLESS THE IMPLEMENTOR HAS INTIMATE KNOWLEDGE OF
* THE INNER WORKINGS OF SPITBOL).
* CORRELATION BETWEEN THE SYSIO CALL WHICH OPENS A FILE AND
* THE SYS-- CALLS USED TO READ, WRITE AND MANIPULATE IT IS
* BASED ON A ONE WORD VALUE REFERRED TO AS THE IOTAG.
* THIS MUST BE PUT IN WA BEFORE MAKING A SUCCESSFUL RETURN
* FROM SYSIO. ITS FORMAT IS ENTIRELY AT THE DISCRETION OF
* IMPLEMENTORS WITH THE RESTRICTIONS (A) THAT IT MUST NOT
* BE POSSIBLE FOR IT TO BE INTERPRETED AS AN ADDRESS IN
* DYNAMIC MEMORY, SINCE THIS WILL CAUSE GARBAGE COLLECTION
* ERRORS AND (B) IT MUST BE NON-ZERO.
Page 87 S P I T B O L -- PROCEDURES SECTION
*
* SYSIO (CONTINUED)
*
* DEPENDING ON THE HOST, IT MAY OR MAY NOT BE FEASIBLE
* TO OPEN NEW FILES CONNECTED TO, AND OR CHANGE THE
* PROPERTIES OF THE STANDARD INPUT AND OUTPUT FILES.
* IOTAG IS PASSED AS A PARAMETER IN ALL SYS-- CALLS
* RELATING TO ANY FILE EXCEPT THOSE FOR THE STANDARD
* INPUT/OUTPUT FILES WHERE ANY REQUIRED IOTAG FIELD IS
* ALWAYS PASSED AS ZERO. NOTE THAT SPITBOL ASSUMES SYSRD
* AND SYSPR STANDARD FILES ARE ALREADY OPEN WHEN OSINT
* FIRST PASSES CONTROL TO IT - NO CALLS OF SYSIO ARE MADE
* FOR INITIAL OPENING OF THESE FILES.
* THE FOLLOWING CONVENTIONS ARE ADOPTED.
* (1) IN ANY CALL, FILETAG ARG IS ALWAYS PRESENT.
* IN ANY CALL, FILEPROPS MAY OR MAY NOT BE PRESENT.
* (2) IF ANY EARLIER SYSIO CALL HAS BEEN MADE WITH A
* PARTICULAR FILETAG THEN THE RELEVANT IOTAG IS PASSED
* IN AS A PARAMETER.
* (3) SPITBOL DOES NOT PRECLUDE ATTEMPTS TO OPEN A
* FILE IDENTIFIED BY A PARTICULAR FILETAG FOR BOTH
* INPUT AND OUTPUT BY SUCCESSIVE SYSIO CALLS. IT IS
* FOR SYSIO TO ACCEPT OR REJECT SUCH CALLS, ALL OF
* WHICH, SUBSEQUENT TO THE FIRST, WILL PASS THE
* IOTAG AS A PARAMETER.
* (4) PARAMETER WB HOLDS VALUES AS FOLLOWS -
* 0 INPUT CALL FOR STANDARD INPUT (SYSRD) FILE
* 1 INPUT CALL FOR ANY OTHER FILE
* 2 OUTPUT CALL FOR STANDARD OUTPUT (SYSPR) FILE
* 3 OUTPUT CALL FOR ANY OTHER FILE.
*
* (XL) FILETAG SCBLK POINTER
* (XR) FILEPROPS SCBLK POINTER OR ZERO
* (WA) IOTAG FROM PRIOR CALL OR ZERO
* (WB) 0,1,2,3 FOR ASSOCIATION TYPE
* (WC) POSSIBLY INT VALUE OF FILETAG OR 0
* JSR SYSIO CALL TO ASSOCIATE FILE
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WA) IOTAG
* (XL,XR,WB,WC) DESTROYED
Page 88 S P I T B O L -- PROCEDURES SECTION
* THIS INTERFACE MAY BE SUMMARIZED BY THE FOLLOWING TABLE.
* IT IS ASSUMED THAT THERE IS EXPLICIT OR IMPLICIT
* NUMBERING OF FILE PARAMETERS APPEARING IN THE COMMAND
* LINE USED TO INITIATE A SPITBOL RUN. IF WC CONTAINS A
* NUMERIC ARG, /JCL $WC/ IMPLIES THE MATCHING FILE
* PARAMETER FROM THE COMMAND LINE.
*
* ---------------------------------------------------------
* I WA == 0 (FIRST CALL) I
* ---------------------------------------------------------
* I WC == 0 (ALPHA FILETAG) I WC /= 0 (NUMERIC FILETAG) I
* I---------------------------I---------------------------I
* I XR == 0 I XR /= 0 I XR == 0 I XR /= 0 I
* I-------------I-------------I-------------I-------------I
* I I I I I
* I OPEN FILE, I OPEN FILE I OPEN FILE I OPEN FILE I
* I RETURN IOTAGI WITH PROPS, I JCL $WC, I JCL $WC I
* I I RETURN IOTAGI RETURN IOTAGI WITH PROPS,I
* I I I I RETURN IOTAGI
* I I I I I
* ---------------------------------------------------------
*
* ---------------------------------------------------------
* I WA /= 0 (SUBSEQUENT CALL) I
* ---------------------------------------------------------
* I WC == 0 (ALPHA FILETAG) I WC /= 0 (NUMERIC FILETAG) I
* I---------------------------I---------------------------I
* I XR == 0 I XR /= 0 I XR == 0 I XR /= 0 I
* I-------------I-------------I-------------I-------------I
* I I I I I
* I CLOSE FILE, I MODIFY FILE I CLOSE FILE I MODIFY FILE I
* IRE-OPEN FILE,I PROPS, I JCL $WC, I JCL $WC I
* IRETURN IOTAG I IRE-OPEN FILE,I PROPS, I
* I I IRETURN IOTAG I I
* I I (*)I I I
* ---------------------------------------------------------
*
* INPUT ASSOCIATION FOR WB == 1
* OUTPUT ASSOCIATION FOR WB == 3
*
* IF WB == 0 OR WB == 2, THEN THE FILETAG IS .INPUT OR
* .OUTPUT RESPECTIVELY.
* OPTION (*) IS THE ONLY VALID OPTION IN GENERAL FOR
* THESE CASES BUT OTHERS ARE NOT EXCLUDED IF AN
* IMPLEMENTOR SEES SOME USE FOR THEM.
Page 89 S P I T B O L -- PROCEDURES SECTION
*
* SYSLD -- LOAD EXTERNAL FUNCTION
*
* SYSLD EXP E,2 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).
* THE FLOSI RETURN MAY BE TAKEN ON FAILURE TO FIND THE
* FUNCTION AND THE EROSI RETURN TO REPORT ERRORS.
*
* (XR) POINTER TO FUNCTION NAME (SCBLK)
* (XL) POINTER TO LIBRARY NAME (SCBLK)
* JSR SYSLD CALL TO LOAD FUNCTION
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (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.
*
* SYSMM -- GET MORE MEMORY
*
* SYSMM EXP E,0 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
Page 90 S P I T B O L -- PROCEDURES SECTION
*
* SYSMX -- SUPPLY MXLEN
*
* SYSMX EXP E,0 DEFINE EXTERNAL ENTRY POINT
*
* BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL
* OBJECT IS ALLOWED TO OCCUPY MORE BAUS 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
Page 91 S P I T B O L -- PROCEDURES SECTION
*
* SYSOU -- OUTPUT RECORD
*
* SYSOU EXP E,2 DEFINE EXTERNAL ENTRY POINT
*
* SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY
* ASSOCIATED WITH A SYSIO CALL.
* THE FLOSI RETURN IS TAKEN IF ANY MAXIMUM CAPACITY OF THE
* FILE IS EXCEEDED.
* SYSOU SHOULD BE PREPARED TO MAKE REPEATED FLOSI RETURNS
* BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS
* MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS.
* SEE SYSIO FOR ACCOUNT OF IOTAG.
*
* (XR) RECORD TO BE WRITTEN (SCBLK)
* (WA) IOTAG FROM INITIAL SYSIO CALL
* (WC) NUMBER OF CHARACTERS TO WRITE
* JSR SYSOU CALL TO OUTPUT RECORD
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WA,WC) DESTROYED
*
* SYSPI -- PRINT ON INTERACTIVE TERMINAL
*
* SYSPI EXP E,2 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 TERMINAL.
* SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL
* THROUGH THE SPECIAL VARIABLE NAME, TERMINAL.
* THE LINE LENGTH WILL NOT EXCEED THAT HELD IN XL ON
* RETURN FROM SYSPP CALL AND MAY BE ZERO IN WHICH CASE A
* BLANK LINE IS TO BE PRINTED.
* IT IS POSSIBLE TO DIRECT STANDARD LISTING AND OTHER
* OUTPUT TO THIS ROUTINE BY SELECTING OPTIONS IN SYSPP.
*
* (XR) PTR TO LINE BUFFER (SCBLK)
* (WA) LINE LENGTH
* (WC) NUMBER OF CHARACTERS TO WRITE
* JSR SYSPI CALL TO PRINT LINE
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WA,WC) DESTROYED
Page 92 S P I T B O L -- PROCEDURES SECTION
*
* SYSPP -- OBTAIN PRINT PARAMETERS
*
* SYSPP -- OBTAIN PRINT PARAMETERS
*
* SYSPP EXP E,0 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 VALUES RETURNED IN XL, WA MAY BE LESS THAN OR EQUAL
* TO THOSE RETURNED IN INITIAL CALL BUT MAY NOT BE
* GREATER SINCE BUFFERS HAVE BEEN SET UP IN THE CORE IMAGE.
* OSINT MUST ENSURE THAT NON-CONFLICTING OPTIONS ARE
* SELECTED.
* THE INFORMATION RETURNED IS -
* 1. LINE LENGTH IN CHARS FOR OUTPUT TO TERMINAL. IF ZERO
* IS RETURNED IT IS ASSUMED THERE IS NO ONLINE TERML.
* IF A TERMINAL IS AVAILABLE ERROR MESSAGES WILL BE
* SENT TO IT AS WELL AS TO THE LISTING FILE.
* 2. LINE LENGTH IN CHARS FOR STANDARD PRINT FILE.
* IF ZERO IS RETURNED IT IS ASSUMED THERE IS NO
* STANDARD PRINT FILE.
* IN THIS CASE SPITBOL MAY REDUCE LISTING OVERHEADS.
* IF THIS OPTION IS SELECTED, SPECIFICATION OF OTHER
* OPTIONS RELATING TO FILE CHARACTERISTICS IS
* REDUNDANT (UNLESS THE OPTION TO SELECT TERMINAL
* AS STANDARD OUTPUT FILE IS TAKEN).
* IT IS NOT ADVISABLE TO RETURN BOTH XL AND WA AS ZERO
* SINCE ERRORS CANNOT THEN BE REPORTED.
* 3. NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED
* DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING
* PAGE THROWS ARE SUPPRESSED.
* 4. STANDARD INPUT MAY BE READ FROM THE TERMINAL,
* IN WHICH CASE SYSRI WILL BE CALLED INSTEAD OF SYSRD.
* 5. STANDARD OUTPUT MAY BE SENT TO TERMINAL, IN WHICH
* CASE SYSPI WILL BE CALLED INSTEAD OF SYSPR.
* 6. AN INITIAL -NOLIST OPTION WHICH SUPPRESSES LISTING
* UNLESS THE PROGRAM CONTAINS AN EXPLICIT -LIST.
* 7. OPTION TO SUPPRESS LISTING OF COMPILATION STATS.
* 8. OPTION TO SUPPRESS LISTING OF EXECUTION STATS.
* THESE OPTIONS ARE USEFUL FOR ESTABLISHED PROGRAMS.
* 9. OPTION TO SUPPRESS EXECUTION AS THOUGH A
* -NOEXECUTE CARD WERE SUPPLIED.
Page 93 S P I T B O L -- PROCEDURES SECTION
*
* SYSPP (CONTINUED)
*
* 10. BY DEFAULT, IF AN ONLINE TERMINAL IS AVAILABLE,
* ERROR MESSAGE COPIES ARE SENT TO IT AS WELL AS TO
* THE REGULAR OUTPUT FILE. THIS OPTION SUPPRESSES THE
* DEFAULT.
* 11. OPTION TO SUPPRESS SYSID LISTING HEADER.
* 12. TWO BITS ARE ALLOCATED TO SELECT LISTING OPTION.
* /00/ SIGNIFIES COMPACT LISTING SUITABLE FOR TERML.
* A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH
* OF -- LISTING, COMPILATION STATISTICS, EXECUTION
* OUTPUT, EXECUTION STATISTICS, DUMP OUTPUT.
* /01/ SIGNIFIES STANDARD LISTING OPTION IN WHICH
* SOURCE LISTINGS INCLUDE SOME PAGE EJECTS BUT
* NOT PRECEDING ALL ITEMS LISTED ABOVE.
* /10/ MEANS AN EXTENDED LISTING WITH FULL SET OF
* PAGE EJECTS.
* /11/ IS REDUNDANT AND ACHIEVES SAME EFFECT AS /10/.
*
* JSR SYSPP CALL TO GET PRINT PARAMETERS
* (XL) 1. TERMINAL LINE LENGTH
* (WA) 2. PRINT LINE LENGTH IN CHARS
* (WB) 3. NUMBER OF LINES/PAGE
* (WC) BITS VALUE ...JIHGFEDCBA WHERE
* 4. A = 1 STD INPUT FROM TERMINAL
* 5. B = 1 STD OUTPUT TO TERMINAL
* 6. C = 1 TO SUPPRESS LISTING
* 7. D = 1 TO SUPPRESS COMPILN. STATS
* 8. E = 1 TO SUPPRESS EXECN. STATS
* 9. F = 1 TO SUPPRESS EXECUTION
* 10. G = 1 TO SUPPRESS ERRORS TO TERML
* 11. H = 1 TO SUPPRESS SYSID HEADER
* 12. JI= 00, 01, 10 FOR LISTING OPTIONS
Page 94 S P I T B O L -- PROCEDURES SECTION
*
* SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE
*
* SYSPR EXP E,2 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
* (WC) NUMBER OF CHARACTERS TO WRITE
* JSR SYSPR CALL TO PRINT LINE
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WA,WC) DESTROYED
*
* THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE
* SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE
* VALUE IN WC IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS
* THAN THE MAXIMUM LINE LENGTH POSSIBLE.
* NULL LINES (WC = 0) ARE POSSIBLE IN WHICH CASE A BLANK
* LINE IS TO BE PRINTED.
* IT IS POSSIBLE TO OPT FOR HAVING STANDARD OUTPUT DIRECTED
* TO USE SYSPI INSTEAD OF SYSPR BY MAKING A PARTICULAR
* REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED.
*
* THE FLOSI RETURN IS USED WITH SYSTEMS WHICH LIMIT THE
* AMOUNT OF PRINTED OUTPUT TO SIGNAL THAT THE LIMIT HAS
* BEEN REACHED. 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 SUCH CALLS ARE UNACCEPTABLE, SYSPR MUST TAKE
* APPROPRIATE ACTION (E.G. IGNORE THE CALL, TAKE THE EROSI
* RETURN, CLOSE THE OUTPUT FILE, TERMINATE EXECUTION WITH
* A DIAGNOSTIC).
Page 95 S P I T B O L -- PROCEDURES SECTION
*
* SYSRD -- READ RECORD FROM STANDARD INPUT FILE
*
* SYSRD EXP E,2 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.
* IT CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD
* (DEFAULT 160).
* 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 BLANKS.
* IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURNS
* AFTER SUCH AN ADJUSTMENT HAS BEEN MADE.
* SYSRD SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS
* BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS
* MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS.
* IT IS POSSIBLE TO OPT FOR READING STANDARD INPUT
* FROM SYSRI INSTEAD OF SYSRD BY MAKING A PARTICULAR
* REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED.
*
* (XR) POINTER TO BUFFER (SCBLK PTR)
* (WC) LENGTH OF BUFFER IN CHARACTERS
* JSR SYSRD CALL TO READ LINE
* PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE)
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WC) DESTROYED
*
* SYSRI -- READ RECORD FROM INTERACTIVE TERMINAL
*
* SYSRI EXP E,2 DEFINE EXTERNAL ENTRY POINT
*
* READS A RECORD FROM AN ONLINE TERMINAL.
* THE BUFFER PROVIDED IS OF LENGTH EQUAL TO THE VALUE
* RETURNED IN XL BY SYSPP. SYSRI SHOULD REPLACE THE
* COUNT IN THE SECOND WORD OF THE SCBLK BY THE ACTUAL
* CHARACTER COUNT UNLESS THE BUFFER IS RIGHT
* PADDED WITH BLANKS.
* IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE
* RETURNS AFTER ADJUSTING THE COUNT.
* THE END OF FILE FLOSI RETURN MAY BE USED IF THIS MAKES
* SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN
* EOF CHARACTER.)
*
* (XR) PTR TO CHAR BUFFER (SCBLK PTR)
* (WC) LENGTH OF BUFFER IN CHARACTERS
* JSR SYSRI CALL TO READ LINE FROM TERMINAL
* PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE)
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (WC) DESTROYED
Page 96 S P I T B O L -- PROCEDURES SECTION
*
* SYSST -- SET FILE POINTER
*
* SYSST EXP E,2 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) IOTAG FROM INITIAL SYSIO CALL
* (WB) 2ND ARGUMENT
* (WC) 3RD ARGUMENT
* JSR SYSST CALL TO SET FILE POINTER
* PPM FLOSI FAIL RETURN
* PPM EROSI ERROR RETURN
* (WA,WB,WC) DESTROYED
Page 97 S P I T B O L -- PROCEDURES SECTION
*
* SYSTM -- GET EXECUTION TIME SO FAR
*
* SYSTM EXP E,0 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.
* BY DEFINING .CTMD, THE DEFAULT UNITS CAN BE REPLACED BY
* DECISECONDS.
* WHERE POSSIBLE, THE VALUE SHOULD RELATE TO PROCESSOR
* RATHER THAN CLOCK-ON-THE-WALL TIMING VALUES.
*
* JSR SYSTM CALL TO GET TIMER VALUE
* (IA) TIME SO FAR IN MILLISECONDS
*
* SYSTT -- TRACE TOGGLE
*
* SYSTT EXP E,0 DEFINE EXTERNAL ENTRY POINT
*
* CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO
* TOGGLE A SYSTEM TRACE SWITCH. THIS PERMITS TRACING OF
* LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF AND IS
* INTENDED AS AN AID TO IMPLEMENTORS, NOT REGULAR USERS.
*
* JSR SYSTT CALL TO TOGGLE TRACE SWITCH
*
* SYSUL -- UNLOAD EXTERNAL FUNCTION
*
* SYSUL EXP E,0 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).
Page 98 S P I T B O L -- PROCEDURES SECTION
*
* SYSXI -- EXIT TO PRODUCE LOAD MODULE
*
* SYSXI EXP E,2 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. NO RETURN FROM
* SYSXI OCCURS IN THIS CASE. 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 FILES INCLUDING
* THE STANDARD ONES ARE AVAILABLE 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.
Page 99 S P I T B O L -- PROCEDURES SECTION
*
* SYSXI (CONTINUED)
*
* IF THE REQUESTED SYSXI FEATURE IS NOT PROVIDED, THEN
* THE FLOSI RETURN SHOULD BE TAKEN.
*
* (XL) ZERO OR SCBLK PTR
* (XR) PTR TO V.V SCBLK
* (IA) SIGNED INTEGER ARGUMENT
* (WA) VALUE OF CODE KEYWORD
* JSR SYSXI CALL TO EXIT
* PPM FLOSI STATEMENT FAILURE RETURN
* PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
* (REGISTERS) SHOULD BE PRESERVED OVER CALL
*
* LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM
* JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AS THOUGH
* THE NORMAL RETURN HAD BEEN TAKEN FROM THE CALL.
* 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.
*