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. *