|
|
1.1 ! root 1: TTL S P I T B O L -- COPYRIGHT NOTICE ! 2: * ! 3: * COPYRIGHT (C) BY ROBERT B. K. DEWAR, 1983 ! 4: * ! 5: * THIS SOFTWARE IS THE PROPERTY OF ! 6: * PROFESSOR ROBERT B. K. DEWAR ! 7: * COURANT INSTITUTE OF MATHEMATICAL SCIENCES ! 8: * 251 MERCER STREET ! 9: * NEW YORK, NY 10012 ! 10: * U.S.A ! 11: * TEL NO - (212) 460 7497 ! 12: * ! 13: EJC ! 14: TTL S P I T B O L -- NOTES TO IMPLEMENTORS ! 15: * ! 16: * M A C R O S P I T B O L V E R S I O N 4 . 2 ! 17: * --------------------------------------------------- ! 18: * ! 19: * DATE OF RELEASE - 01 NOV 1983 ! 20: * ! 21: * THIS PROGRAM IS MAINTAINED BY BOTH ! 22: * DR. A. P. MCCANN ! 23: * DEPARTMENT OF COMPUTER STUDIES ! 24: * UNIVERSITY OF LEEDS ! 25: * LEEDS LS2 9JT ! 26: * ENGLAND. ! 27: * TEL NO - (0532) 431751 ! 28: * ! 29: * AND ! 30: * ! 31: * DAVID SHIELDS ! 32: * COURANT INSTITUTE OF MATHEMATICAL SCIENCES ! 33: * 251 MERCER STREET ! 34: * NEW YORK, NY 10012 ! 35: * U.S.A. ! 36: * TEL NO - (212) 460 7168 ! 37: * ! 38: * WHO WILL BE GLAD TO RECEIVE REPORTS OF FAULTS FOUND ! 39: * BY USERS OR IMPLEMENTORS. ! 40: * ! 41: * PERMISSION TO USE SPITBOL MAY BE NEGOTIATED WITH ! 42: * ANY OF THE ABOVE NAMED. ! 43: * SITES WHICH HAVE OBTAINED SUCH PERMISSION MAY NOT PASS ON ! 44: * COPIES OF THE SPITBOL SYSTEM OR PARTS OF IT EXCEPT ! 45: * BY AGREEMENT WITH DEWAR. ! 46: * ! 47: * ! 48: * TO ASSIST IMPLEMENTORS A REVISION HISTORY BASED ON ! 49: * VERSION 2.7 IS BEING MAINTAINED. IN ADDITION FILE ! 50: * SBL.CHG (AVAILABLE WITH THE SOURCE FILE) INDICATES ! 51: * DETAILED CHANGES MADE FROM ONE RELEASED VERSION TO ! 52: * ANOTHER BY LISTING NEW AND CHANGED LINES IN THE CONTEXT ! 53: * OF THE TEN SURROUNDING LINES. ! 54: TTL S P I T B O L - REVISION HISTORY ! 55: EJC ! 56: * R E V I S I O N H I S T O R Y ! 57: * ------------------------------- ! 58: * ! 59: * ! 60: * VERSION 4.1 TO 4.2 (NOV 83) ! 61: * --------------------------- ! 62: * ! 63: * BUGS FIXED ! 64: * ---------- ! 65: * ! 66: * B4.101 ERROR IN HANDLING OF STACK WHEN GTARR ! 67: * GIVEN AN EMPTY TABLE ARG. ! 68: * B4.102 OMITTED WTB IN ACESS. CAUSES ILLEGAL ON ! 69: * ACCESSING PATTERN VALUED KEYWORDS. ! 70: * B4.103 DID NOT REPORT ERROR FOR BLANKS IN ! 71: * DEFINE PROTOTYPE. FIXED BY IGNORING LEADING ! 72: * AND TRAILING BLANKS. ! 73: * B4.104 FAILURE TO IGNORE SUPERFLUOUS COMMAS IN ! 74: * ARGS, LOCALS OF DEFINE FUNCTION PROTOTYPE. ! 75: * B4.105 CORRUPTION OF PROGRAM TIMER IF IA, WC OVERLAP ! 76: * B4.106 REGISTERS NOT SET UP FOR SYSEJ CALLS. ! 77: * B4.107 MISUSE OF MFI AT ERR02+8. ! 78: * B4.108 MISUSE OF EXNUL IN TRACE PROCEDURE. ! 79: * B4.109 NO STATEMENT FAILURE IF STOPTR APPLIED TO NON- ! 80: * EXISTENT TRACE. ! 81: * B4.110 LISTING FILE PAGE OVERFLOW FOR SOME ERRORS. ! 82: * B4.111 INCORRECT TRAILING BLANK PADDING IN INSBF. ! 83: * B4.112 ERROR ON INSERTING NULL INTO A BUFFER. ! 84: * B4.113 GTNUM FAILED TO PRESERVE IA. ! 85: * ! 86: * CHANGES ! 87: * ------- ! 88: * ! 89: * C4.101 CONDITIONAL ASSEMBLY SYMBOLS IN THE /EQU */ ! 90: * SECTION ARE REMOVED. USE DUMMIES IF NECESSARY. ! 91: * VARIABLITY OF NUMBER OF EQUATES CAUSED TRANSLATOR ! 92: * PROBLEMS FOR DIFFERENT VERSIONS FOR SIMILAR C/RS. ! 93: * C4.102 POSSIBILITY OF IGNORING CASE OF IDENTIFIERS BY ! 94: * USE OF -CASEIG, -NOCASEIG CTRL CARDS INTRODUCED. ! 95: * CONDITIONAL ASSEMBLY SYMBOL .CSIG, SETS DEFAULT ! 96: * FOR IGNORING CASE IF SET. ! 97: * C4.103 DEFINITION OF .CPLC INDICATES SYSTEM PREFERENCE ! 98: * FOR LOWER CASE SO THAT SYSTEM MESSAGES, DUMPS ! 99: * ETC APPEAR IN LOWER CASE. IMPLEMENTORS DEFINING ! 100: * THIS SYMBOL MUST TRANSLATE ARGS OF ERB, ERR, DTC, ! 101: * WHICH ARE IN UPPER CASE, AS IF THEY WERE IN ! 102: * LOWER CASE. ESSENTIAL THAT .CASL BE ALSO DEFINED. ! 103: * C4.104 EJECT AT END OF COMPILATION DONE BEFORE CALL OF ! 104: * SYSBX INSTEAD OF AFTER IT. ! 105: * C4.105 BUFFER BLANKING FOR STANDARD PRINTER BUFFER NOW ! 106: * USES MVW. DONE PARTLY TO ACCOMMODATE HONEYWELL ! 107: * H66 AND PARTLY FOR EFFICIENCY. ! 108: * C4.106 IF SORT, RSORT ARGUMENTS ARE EMPTY TABLES, ! 109: * STATEMENT FAILURE OCCURS INSTEAD OF AN ERROR. ! 110: EJC ! 111: * C4.107 THE THREE SECTIONS OF EXECUTABLE CODE FOLLOWING ! 112: * SEC OPCODES HAVE BEEN LABELLED AS RTN-S. ! 113: * THE FEW WILD BRANCHES TO PLBLS (MAINLY FOR ! 114: * RESUMPTION AFTER ERRORS) HAVE BEEN REPLACED BY A ! 115: * NEW OPCODE ! 116: * JMG GLABL ! 117: * WHICH CAUSES A JUMP TO A GLOBAL LABEL (GLBL) ! 118: * DECLARED AS SUCH BY APPEARING IN THE PROCEDURES ! 119: * SECTION WITH THE OPCODE, GLB, AS IN ! 120: * GLABL GLB ! 121: * IMPLEMENTORS WITH ADDRESSABILITY PROBLEMS WILL ! 122: * FIND THIS ADVANTAGEOUS. OTHERS CAN IGNORE GLB AND ! 123: * TRANSLATE JMG IDENTICALLY WITH BRN. ! 124: * C4.108 ROUTINES SYSAB, SYSTU, FOR USE BY OSINT TO ! 125: * CLOSE DOWNS SPITBOL CLEANLY IN EMERGENCY ARE ! 126: * REMOVED AS BEING INSUFFICIENTLY GENERAL. ! 127: * C4.109 SPITBOL PERFORMED AN EJECT EVEN WITH OPTIONS ! 128: * SELECTED TO SUPPRESS OUTPUT TO STANDARD OUTPUT ! 129: * FILE. THIS HAS BEEN RECTIFIED. ! 130: * C4.110 SECOND OPERAND OF MINIMAL OPCODES LSX, RSX ! 131: * REDEFINED TO BE X NOT (X) FOR CONSISTENCY. ! 132: * C4.111 THE FOLLOWING FEATURES ARE REMOVED - ! 133: * CTRL CARDS - DOUBLE DUMP ERRORS EXECUTE NOERRORS ! 134: * NOEXECUTE NOOPT NOPRINT OPTIMISE PRINT SINGLE. ! 135: * FUNCTIONS - ARG FIELD ITEM LOCAL REWIND. ! 136: * KEYWORD - ABEND. ! 137: EJC ! 138: * C4.112 ADDED FUNCTIONS ITC(N), CTI(S) WHICH CONVERT ! 139: * INTEGER N TO NTH CHAR OF ALPHABET AND ! 140: * CHARACTER S TO CORRESPONDING INTEGER. ! 141: * C4.113 ADDED FUNCTION SET(FILETAG,RECNO,PAR3) ! 142: * WHICH MAY BE USED TO EFFECT FILE RANDOM ACCESS. ! 143: * C4.114 OPTIONAL MINIMAL OPCODES CLU, CUL TO CONVERT ! 144: * FROM LOWER TO UPPER CASE OR VICE VERSA DESCRIBED. ! 145: * MOST IMPLEMENTORS NEED NOT USE THEM. ! 146: * C4.115 ALL ERROR CODES HAVE BEEN REASSIGNED TO BRING ! 147: * THEM BELOW 256 AND TO SORT THEM IN THE SOURCE. ! 148: * THIS REPRESENTS A DISCONTINUITY WHICH IT IS ! 149: * HOPED WILL NOT BE REPEATED. ! 150: * C4.116 DEFAULT INPUT RECORD LENGTH SET TO 160 INSTEAD ! 151: * OF 72 CHARACTERS. ! 152: * C4.117 OSINT INTERFACE MASSIVELY REDEFINED. SOME ! 153: * SYS-- ROUTINES ARE REMOVED. THIS REPRESENTS AN ! 154: * ISOLATED UPHEAVAL TO REALLY ADDRESS COMPLAINTS ! 155: * FROM IMPLEMENTORS ON FILE HANDLING AND ERROR ! 156: * REPORTING. NOTE THE DISAPPEARANCE OF THE FCBLK. ! 157: EJC ! 158: * C4.118 SECOND ARG OF INPUT(), OUTPUT() BECOMES A ! 159: * FILETAG WHICH TYPICALLY IS A FILE NAME. ! 160: * C4.119 FUNCTIONALITY OF ENDFILE() EXTENDED. ! 161: * WHEN USED TO CLOSE A FILE, IT DOES NOT CAUSE ! 162: * DETACHING OF ASSOCIATED VARIABLES. ! 163: * C4.120 TERMINAL I/O IS PUT ON THE SAME FOOTING AS FILE ! 164: * I/O. STANDARD INPUT AND OUTPUT CAN BE OBTAINED ! 165: * FROM OR DIRECTED TO A TERMINAL. ! 166: * C4.121 THE /COMMAND LINE/ USED TO EFFECT A SPITBOL RUN ! 167: * IS MADE AVAILABLE TO THE PROGRAM VIA HOST(1). ! 168: * THIS PERMITS USER TO CHECK AND TAKE ACTION ON ! 169: * RUN OPTIONS. ! 170: * C4.122 MINIMAL OPCODES BTC AND WTC TO CONVERT FROM BAUS ! 171: * AND WORDS TO CHARACTERS INTRODUCED. ! 172: * ! 173: * DOCUMENTATION REVISIONS ! 174: * ----------------------- ! 175: * ! 176: * D4.101 RULES ABOUT NOT UPSETTING GARBAGE COLLECTOR IN ! 177: * OSINT IMPLEMENTATION MADE CLEARER. ! 178: * D4.102 MORE DETAIL ON CONDITIONAL ASSEMBLY GIVEN. ! 179: * D4.103 SYSRD AND SYSRI DESCRIPTIONS MODIFIED. ANY ! 180: * PADDING CHARS USED SHOULD BE BLANKS NOT ZEROES. ! 181: * D4.104 MOTIVATION FOR CSC CLARIFIED. ! 182: * D4.105 DESCRIPTION OF EXP CORRECTED. ! 183: * ! 184: * ! 185: * ! 186: * VERSION 4.0 TO 4.1 (JUL 80) ! 187: * --------------------------- ! 188: * ! 189: * BUGS FIXED ! 190: * ---------- ! 191: * ! 192: * B4.001 ERROR IN CONVERT(ARRAY,/TABLE/) - TFIND MESSED WB ! 193: * B4.002 SORTH IS N-TYPE PROCEDURE. ! 194: * B4.003 ERROR PROC COULD TRY LISTING ABSENT SOURCE LINE. ! 195: * B4.004 REF TO UNDEFINED B$RCL IF .CNRA DEFINED. ! 196: * B4.005 LEX COMPARISONS ON NULL STRINGS FIXED. ! 197: * ! 198: * CHANGES ! 199: * ------- ! 200: * ! 201: * C4.001 DEFINITION OF .CNLD OMITS MORE EXTERNAL FN CODE. ! 202: EJC ! 203: * ! 204: * VERSION 3.5 TO 3.6 (JUN 83) ! 205: * --------------------------- ! 206: * ! 207: * OVER THE PERIOD 1979 TO 1983 TWO SEPARATE MAINTENANCE ! 208: * AND ENHANCEMENT ROUTES COEXISTED. WHAT IS RECORDED HERE ! 209: * RELATING TO VERSION 3.6 RESULTS PRINCIPALLY FROM THE ! 210: * EFFORTS OF DAVE SHIELDS, STEVE DUFF AND ROBERT ! 211: * GOLDBERG, COORDINATED AT NYU. ! 212: * THE OTHER EFFORT BY TONY MCCANN AT LEEDS TOOK PLACE AT ! 213: * TWO DISCRETE TIMES DURING THE PERIOD, ULTIMATELY GIVING ! 214: * THE CONSOLIDATED VERSION 4.2 WHICH INCORPORATES V3.6 ! 215: * CHANGES. NOTATION (C4.XXX) MEANS THAT C4.XXX ALSO ! 216: * EFFECTED THIS CHANGE OR PROVIDES A SIMILAR FEATURE. ! 217: * CODES USED TO IDENTIFY AUTHORS ARE (SGD) FOR DUFF, ! 218: * (REG) FOR GOLDBERG, AND (LDS) FOR SHIELDS. ! 219: * ! 220: * BUGS FIXED ! 221: * ---------- ! 222: * ! 223: * B3.601 (SGD) TO FIX MULTIPLE TRAP BLOCK ERROR IN ASIGN. ! 224: * B3.602 (SGD) PATCH GTARR TO FIX NULL CONVERT (B4.101). ! 225: * B3.603 (SGD) INSERTED MISSING WTB AFTER SYSMM CALLS. ! 226: * B3.604 (SGD) USE STRING LENGTH IN HASHS. ! 227: * B3.605 (SGD) FIXED SERIOUS PARSER PROBLEM ! 228: * RELATING TO (X Y) ON LINE BEING VIEWED AS PATTERN ! 229: * MATCH. FIXED BY ADDITION OF NEW CMTYP VALUE ! 230: * C$CNP (CONCATENATION - NOT PATTERN MATCH). ! 231: * B3.606 (SGD) FIXED EXIT(N) RESPECIFICATION CODE ! 232: * TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN. ! 233: * B3.607 (SGD) BYPASS PRTPG CALL AT INITIALIZATION ! 234: * FOLLOWING COMPILATION IF NO OUTPUT GENERATED. ! 235: * THIS PREVENTS OUTPUT FILES CONSISTING OF THE ! 236: * HEADERS AND A FEW BLANK LINES WHEN THERE IS NO ! 237: * SOURCE LISTING AND NO COMPILATION STATS (C4.109). ! 238: * ALSO FIX TIMSX INITIALIZATION IN SAME CODE. ! 239: * B3.608 (SGD) B$EFC CODE DID NOT CHECK FOR ! 240: * UNCONVERTED RESULT RETURNING NULL STRING. ! 241: * B3.609 (SGD) LOAD PFVBL FIELD IN RETRN FOR ! 242: * RETURN TRACING. THIS WAS CAUSING BUG ON RETURN ! 243: * TRACES THAT TRIED TO ACCESS THE VARIABLE NAME. ! 244: * B3.610 (SGD) FIXED PROBLEM RELATING TO COMPILATION OF ! 245: * GOTO FIELDS CONTAINING SMALL INTEGERS. ! 246: * B3.611 (REG) PREVENT CLEAR() FROM CLOBBERING PROTECTED ! 247: * VARIABLES AT LABEL SCLR5. ! 248: * B3.612 (REG) FIXED GTEXP FROM ACCEPTING TRAILING ! 249: * SEMICOLON OR COLON. THIS IS NOT A LEGAL WAY ! 250: * TO END AN EXPRESSION. ! 251: EJC ! 252: * B3.613 (REG) FIXED DIFFICULTIES WITH LISTINGS DURING ! 253: * EXECUTION WHEN NO LISTING GENERATED DURING ! 254: * COMPILATION. -LIST TO CODE() CAUSED BOMB. ! 255: * FIX IS TO RESET R$TTL AND R$STL TO NULLS NOT 0 ! 256: * AFTER COMPILATION. (LISTR, LISTT EXPECT NULLS). ! 257: * WHEN LISTING AND STATISTICS ROUTED TO DIFFERENT ! 258: * FILE THAN EXECUTION OUTPUT, ERROR MESSAGE IS SENT ! 259: * TO EXECUTION OUTPUT (AND GETS SEPARATED FROM ! 260: * ... IN STATEMENT ... MSG). LABO1 CALLS SYSAX AND ! 261: * STOPR DOES NOT CALL SYSAX IF ENTERED FROM LABO1. ! 262: * B3.614 (LDS) FIX MISUSE OF WC JUST AFTER ASG10. ! 263: * B3.615 (LDS) ADD COMMENT POINTING OUT SUSPICIOUS CODE ! 264: * AFTER TFN02. EXPLANATION NOW ADDED (APM). ! 265: * B3.616 (LDS) FIX INCONSISTENT TYPE OF SORTH (B4.002). ! 266: * B3.617 (LDS) INSERT MISSING CONDITIONAL TESTS ON CNBF. ! 267: * B3.618 (LDS) FIX VIOLATIONS OF MINIMAL LANGUAGE WHICH ! 268: * HAD SLIPPED PAST SOME TRANSLATORS. ! 269: EJC ! 270: * CHANGES ! 271: * ------- ! 272: * ! 273: * C3.601 (SGD) ADDITION OF .CSCI AND SYSCI (INT TO STRING ! 274: * SYSTEM ROUTINE OPTION) ! 275: * C3.602 (REG) CHANGED INILN AND INILS TO 258 (C4.116). ! 276: * C3.603 (SGD) MERGED IN PROFILER PATCHES AND FIXED CODE ! 277: * C3.604 (SGD) ADDED BUFFER TYPE AND SYMBOL .CNBF ! 278: * C3.605 (SGD) ADDED CHAR FUNCTION. CHAR(N) RETURNS NTH ! 279: * CHAR OF HOST MACHINE CHAR SET (C4.112). ! 280: * C3.606 (REG) ADDED CFP$U TO EASE TRANSLATION ON SMALLER ! 281: * SYSTEMS ! 282: * C3.607 (REG) ADDED LOWER CASE SUPPORT (C4.102/3). ! 283: * C3.608 (REG) ADDED SET I/O FUNCTION - UNDER .CUST ! 284: * C3.609 (REG) CONDITIONALIZED PAGE EJECT AFTER CALL TO ! 285: * SYSBX AND ADDED ANOTHER BEFORE CALL TO SYSBX, ! 286: * SO THAT, IF DESIRED BY THE IMPLEMENTOR, ! 287: * STANDARD OUTPUT WILL REFLECT ASSIGNMENTS MADE ! 288: * BY EXECUTING PROGRAM ONLY (C4.104). ! 289: * C3.610 (LDS) INTRODUCE .CTMD TO SUPPORT SYSTM THAT ! 290: * REPORTS ELAPSED TIME IN DECISECONDS INSTEAD OF ! 291: * MILLISECONDS. ! 292: * C3.611 (LDS) PROVIDE PLACE FOR .DEF OR .UND FOR EACH ! 293: * CONDITIONAL OPTION, SO THAT SETTINGS CAN BE ! 294: * CHANGED WITHOUT CHANGING LINE NUMBERS. ! 295: * C3.612 (LDS) OBEY (NEW) RESTRICTION THAT OPERAND IN ! 296: * CONDITIONAL BRANCH INSTRUCTION CANNOT HAVE FORM ! 297: * (X)+ IN ORDER TO SIMPLIFY TRANSLATIONS FOR WHICH ! 298: * POSTINCREMENT NOT READILY AVAILABLE. ! 299: * C3.613 (REG,LDS) ADD OP ! 300: * FLC WREG ! 301: * THAT FOLDS CHAR IN WREG TO UPPER CASE (C4.114). ! 302: * C3.614 (LDS) ADD OPTION .CS16 TO ALLOW INITIALIZATION OF ! 303: * STATEMENT LIMIT VALUES TO 32767 FOR 16 BIT ! 304: * MACHINES. ! 305: * C3.615 (LDS) PERMIT RETURN POINT AND ENTRY POINT ! 306: * ADDRESSES TO BE DISTINGUISHED BY THEIR PARITY ! 307: * INSTEAD OF BY LYING WITHIN A CERTAIN RANGE ! 308: * OF VALUES. INTRODUCE CONDITIONAL SYMBOLS ! 309: * .CRPP RETURN POINTS HAVE ODD PARITY ! 310: * .CEPP ENTRY POINTS HAVE ODD PARITY ! 311: * C3.616 (LDS) INTRODUCE NEW MINIMAL OPCODES TO BRANCH ! 312: * ACCORDING TO PARITY, ! 313: * BEV OPN,PLBL BRANCH IF ADDRESS EVEN ! 314: * BOD OPN,PLBL BRANCH IF ADDRESS ODD ! 315: * AN ADDRESS IS EVEN IF IT IS A MULTIPLE OF CFP$B. ! 316: * C3.617 (SGD) OPCODE MCB (MOVE CHARS BACKWARDS) DEFINED. ! 317: * C3.618 (SGD) FUNCTION FENCE DEFINED. ! 318: EJC ! 319: * VERSION 3.5 TO 4.0 (JUL 79) ! 320: * --------------------------- ! 321: * ! 322: * BUGS FIXED ! 323: * ---------- ! 324: * ! 325: * B3.501 OMITTED BTW OPCODE IN IOPUT. ! 326: * B3.502 ILLEGAL ON SORTING A = ARRAY(1). ! 327: * B3.503 FAILURE TO SORT VECTOR WITH ORIGIN OTHER THAN 1. ! 328: * B3.504 INCORRECT HANDLING OF VARIABLE ALPHABET. ! 329: * B3.505 EVAL MISHANDLES DEFAULT VALUE OF TABLE ELEMENT. ! 330: * ! 331: * CHANGES ! 332: * ------- ! 333: * ! 334: * C3.501 PROFILE KEYWORD GIVES EXECUTION PROFILE. ! 335: * C3.502 NUMERIC CONSTANTS STARTING WITH . + OR - ! 336: * ARE FOLDED ON LEXICAL SCANNING. ! 337: * ! 338: * DOCUMENTATION REVISIONS ! 339: * ----------------------- ! 340: * ! 341: * D3.501 TERM BAU (BASIC ADDRESSING UNIT) INTRODUCED. ! 342: * D3.502 ERROR IN REFERENCE TO IA,WC OVERLAP IN SEC 3. ! 343: EJC ! 344: * VERSION 3.4 TO 3.5 (FEB 79) ! 345: * --------------------------- ! 346: * ! 347: * BUGS FIXED ! 348: * ---------- ! 349: * ! 350: * B3.401 PRTST SHOULD BE DECLARED AS AN R TYPE PROCEDURE. ! 351: * B3.402 TIMING ERROR IF SPITBOL FAILS IN DUMP. ! 352: * B3.403 ERROR IN HANDLING OMITTED ARGS OF OPERATORS. ! 353: * B3.404 TOO MANY LINES PUT ON FIRST PAGE OF LISTING. ! 354: * B3.405 LEADING UNARY OPERATOR IN EVAL ERRONEOUSLY NEEDED ! 355: * PRECEDING BLANK. ! 356: * B3.406 TAG IN DUMP OF ARRAY OR TABLE VALUES WAS OMITTED. ! 357: * B3.407 EVAL UNABLE TO RETURN A DEFERRED EXPRESSION. ! 358: * B3.408 ILLEGAL IF SETEXIT CODE BRANCHES TO RETURN, WITH ! 359: * FURTHER COMPLICATIONS IF WITHIN CALL OF EVAL. ! 360: * B3.409 ILLEGAL ON DETACHING INPUT, OUTPUT, TERMINAL. ! 361: * B3.410 PRTNL SHOULD BE DECLARED AS AN R TYPE PROCEDURE. ! 362: * B3.411 MISPLACED LCT AFTER SDF09. ! 363: * ! 364: * CHANGES ! 365: * ------- ! 366: * ! 367: * C3.401 -SEQU AND -NOSE CONTROL CARDS REMOVED. ! 368: * C3.402 OPTION PROVIDED TO SUPPRESS SYSTEM IDENTIFICATION ! 369: * ON LISTING. ! 370: * C3.403 DESCRIPTION OF SYSBX SLIGHTLY REVISED. ! 371: * C3.404 PERMISSIBLE TO MODIFY SCBLK LENGTH BEFORE TAKING ! 372: * ERROR RETURNS FROM SYSIN, SYSRD, SYSRI. ! 373: * C3.405 CONDITIONAL .CNLD MAY BE DEFINED TO OMIT LOAD(). ! 374: * C3.406 CONDITIONAL .CNEX MAY BE DEFINED TO OMIT EXIT(). ! 375: * C3.407 TABLE NOW ACCEPTS A THIRD ARGUMENT SPECIFYING ! 376: * DEFAULT INITIAL LOOKUP VALUE. ! 377: * C3.408 ROUTINES SORT, RSORT FOR SORTING ARRAYS, TABLES ! 378: * INTRODUCED. SPECIFICATION IS AS IN SITBOL. ! 379: * ROUTINES MAY BE OMITTED BY DEFINING .CNSR . ! 380: * C3.409 ERROR IN CODE(), EVAL() CALL NOW CAUSES STATEMENT ! 381: * FAILURE BUT ERRTEXT KEYWORD IS STILL SET. ! 382: * C3.410 ARG TO CODE() MAY CONTAIN EMBEDDED CONTROL CARDS ! 383: * AND COMMENT DELIMITED BY A SEMICOLON. ! 384: * ! 385: * DOCUMENTATION REVISIONS ! 386: * ----------------------- ! 387: * ! 388: * D3.401 PURPOSE OF RESTRICTION 2 IN MINIMAL SECTION -6- ! 389: * (OPERATIONS ON CHAR VALUES), ERRONEOUSLY STATED ! 390: * TO BE FOR CMC, RATHER THAN FOR CEQ, CNE. ! 391: * DESCRIPTIONS OF ABOVE OPCODES REVISED. ! 392: * D3.402 DESCRIPTION OF ENT CLARIFIED. ! 393: * D3.403 DESCRIPTIONS OF SEVERAL OPCODES REVISED TO REMOVE ! 394: * TECHNICALLY INVALID LITERALS E.G. =0 , *1. ! 395: * D3.405 RESTRICTED USE OF LETTER Z IN MINIMAL CLARIFIED. ! 396: * D3.406 DIVIDE BY ZERO EXPLICITLY MENTIONED IN RELATION ! 397: * TO OVERFLOW SETTING. ! 398: EJC ! 399: * VERSION 3.3 TO 3.4 (OCT 78) ! 400: * --------------------------- ! 401: * ! 402: * ! 403: * BUGS FIXED ! 404: * ---------- ! 405: * ! 406: * B3.301 ILLEGAL FOR ERRONEOUS EVAL() ARG. ! 407: * B3.302 ADDRESS ARITHMETIC OVERFLOW IN ALLOC AND ALOCS. ! 408: * B3.303 -EJECT AND -SPACE IGNORED -NOLIST OPTION. ! 409: * B3.304 ERRONEOUS ARGUMENT SCAN IN LOAD(). ! 410: * B3.305 ERRONEOUS PLC ON UNINITIALISED R$CIM IN NEXTS. ! 411: * B3.306 LDI USED INSTEAD OF MTI AFTER PRV07. ! 412: * B3.307 MISUSE OF RMI AT ERRA2. ! 413: * B3.308 MISUSE OF MTI IN HASHS. ! 414: * B3.309 BUG IN -SEQU CARD SEQUENCE NUMBER CHECKING. ! 415: * B3.310 STACK OVERFLOW ERROR MESSAGE NOT ALWAYS PRINTED. ! 416: * B3.311 CORRUPT PROTOTYPE PRINT FOR TRACED ARRAYS. ! 417: * B3.312 PATTERN FIRST ARG IN DUPL CAUSED ERROR. ! 418: * B3.313 OMITTED CSC IN S$RPD, ERRONEOUS CSC IN CONVERT. ! 419: * B3.314 MISPLACED BTW IN EXBLD. ! 420: * B3.315 INCORRECT CODE IN HASHS. ! 421: * B3.316 FAILURE OF LOAD TO SCAN INTEGER ARG. ! 422: * B3.317 TABLE ACCESS WITH NEGATIVE INTEGER ARG. FAILED. ! 423: * B3.318 ERROR IN RETURNING RESULT OF LOADED FUNCTION. ! 424: * B3.319 =E$SRS USED AFTER INI01 INSTEAD OF *E$SRS. ! 425: * B3.320 ERR USED INSTEAD OF ERB AFTER SYSTU ! 426: * B3.321 LABEL COULD START WITH DISALLOWED CHARACTER. ! 427: * B3.322 CONTINUE AFTER SETEXIT HAD BAD HEURISTIC. ! 428: EJC ! 429: * ! 430: * ! 431: * CHANGES ! 432: * ------- ! 433: * ! 434: * C3.301 SYSAX AND .CSAX INTRODUCED - SEE SYSAX ! 435: * IN PROCEDURES SECTION. ! 436: * C3.302 VARIABLE MXLEN INTRODUCED. CONTAINS THE MAXIMUM ! 437: * SIZE OF A SPITBOL OBJECT AND IS NOT CHANGEABLE ! 438: * AFTER INITIALISATION. MAY BE DEFAULTED OR SET ! 439: * EXPLICITLY BY SYSMX. ! 440: * C3.303 SYSHS RETURNS REVISED - SEE SYSHS. ! 441: * C3.304 NEW MINIMAL OPCODE AOV TO FIX B3.302. ! 442: * C3.305 INHIBIT STLIMIT CHECK IF STLIMIT MADE NEGATIVE. ! 443: * C3.306 CFP$M IS REQUIRED TO BE OF FORM 2**N - 1. ! 444: * C3.307 DUPL MADE TO CONFORM TO SIL SNOBOL4 STANDARD. ! 445: * C3.308 LCH AND SCH ACTIONS MORE CLOSELY DEFINED. ! 446: * C3.309 BATCH INITIALISATION CODE OMITTED IF CONDITIONAL ! 447: * ASSEMBLY SYMBOL .CNBT (NO BATCH) DEFINED. ! 448: * C3.310 (WA) CONTAINS ARGUMENT COUNT IN SYSEX CALL. ! 449: * C3.311 SYSFC MAY REQUEST ALLOCATION OF STATIC FCBLK. ! 450: * C3.312 IF IA,WC OVERLAP, RESTRICTION PUT ON DUMPING/ ! 451: * RESTORING THESE REGISTERS. ! 452: * C3.313 NEW LISTING OPTION INTERMEDIATE BETWEEN COMPACT ! 453: * AND EXTENDED PROVIDED (SEE SYSPP). ! 454: * C3.314 REVISION OF SYSXI INTERFACE TO PERMIT OPTIONS FOR ! 455: * LOAD MODULE STANDARD O/P FILE (SEE SYSXI,SYSPP). ! 456: * C3.315 LAST ARG OF SUBSTR MAY BE OMITTED - TREATED ! 457: * AS REMAINDER OF STRING. ! 458: EJC ! 459: * VERSION 3.2 TO 3.3 (JAN 78) ! 460: * --------------------------- ! 461: * ! 462: * BUGS FIXED ! 463: * ---------- ! 464: * ! 465: * B3.201 ARRAY REFERENCE AND EXTERNAL FUNCTION LOAD ! 466: * ROUTINES ILLEGALLY ACCESSED INFORMATION ! 467: * BEYOND THE STACK FRONT. ! 468: * SIMILAR FAULT IN UNANCHORED PATTERN MATCHING. ! 469: * B3.202 DUMP(1) PRODUCED DUMP(2) TYPE OUTPUT. ! 470: * B3.203 WTB CONVERSION OMITTED IN CODE FOLLOWING ! 471: * INI01, INI02, EXBLD. ! 472: * B3.204 INCORRECT FAIL RETURN FROM TFIND IN ARREF. ! 473: * B3.205 ENDFILE DID NOT DETACH I/O ASSOCIATED VARIABLES. ! 474: * B3.206 -SPACE WITH OMITTED ARG. FAILED ! 475: * B3.207 LOOPED IF DUMP KEYWORD NON-ZERO AFTER STACK ! 476: * OVERFLOW IN GARBAGE COLLECT FAILURE. ! 477: * B3.208 FAILURE IN READING NUMBERS WITH TRAILING BLANKS. ! 478: * ! 479: * CHANGES ! 480: * ------- ! 481: * ! 482: * THE EXTENSIVE CHANGES MADE HERE MOSTLY RESULT FROM A ! 483: * SNOBOL4 IMPLEMENTORS MEETING HELD AT NEW YORK UNIVERSITY ! 484: * IN AUGUST 1977. THEY ARE AIMED AT ! 485: * (1) HAVING SPITBOL CONFORM TO CERTAIN SNOBOL4 ! 486: * LANGUAGE STANDARDS AND ! 487: * (2) PRODUCING A STABLE DEFINITION OF MINIMAL BY ! 488: * CARRYING OUT A FEW ESSENTIAL REVISIONS IN THE LIGHT ! 489: * OF EXPERIENCE IN ITS USE. ! 490: * ! 491: * CHANGES TO SPITBOL ! 492: * ------------------ ! 493: * ! 494: * C3.201 DEFAULT VALUES FOR KEYWORDS TRIM AND ANCHOR ARE ! 495: * ZERO. ON SYSTEMS WHERE RECORDS ARE CUSTOMARILY ! 496: * HANDLED WITHOUT TRALING BLANKS, THERE IS NO ! 497: * OBLIGATION TO SUPPLY SUCH BLANKS. ! 498: * C3.202 DEFAULT VALUE OF -INXX CONTROL CARD IS -IN72. ! 499: EJC ! 500: * C3.203 THE SECOND ARGUMENT OF INPUT AND OUTPUT IS ! 501: * PERMITTED TO BE AN INTEGER AS IN SNOBOL4. ! 502: * IN ADDITION INPUT(), OUTPUT() NOW GIVE A SNOBOL4 ! 503: * STATEMENT FAILURE IF SYSIO USES THE FILE NOT ! 504: * FOUND RETURN. ! 505: * THE THIRD ARGUMENT HAS A RECOMMENDED FORMAT AND ! 506: * TO OVERRIDE ITS DEFAULT DELIMITER (,) A ! 507: * CONDITIONAL ASSEMBLY SYMBOL, .CIOD, IS USED. ! 508: * INTERFACES TO SYSEF,SYSEJ,SYFC,SYSIO,SYSRW ! 509: * ARE REVISED. ! 510: * WC MAY NOW BE USED TO RETURN FROM SYSIO, A MAX ! 511: * RECORD LENGTH. ! 512: * C3.204 NEW CONFIGURATION PARAMETER CFP$F (SCBLK OFFSET) ! 513: * IS INTRODUCED. CFP$U IS REMOVED. ! 514: * C3.205 IMPLEMENTATION AND VERSION IDENTIFICATION IS ! 515: * REQUIRED - SEE SYSID. ! 516: * C3.206 ROUTINE SYSMX RETURNS THE MAXIMUM LENGTH OF ! 517: * SPITBOL OBJECTS (STRINGS ARRAYS ETC). THIS ! 518: * INFORMATION IS NOT NOW NEEDED AT TIME OF ENTRY TO ! 519: * SPITBOL AND HENCE WC SHOULD BE ZERO ON ENTRY. ! 520: * C3.207 A CONDITIONAL PARAMETER .CNRA PERMITS ASSEMBLY ! 521: * OF A MORE COMPACT VERSION WITH NO REAL ! 522: * ARITHMETIC CODE. ! 523: * C3.208 TERMINAL IS A NEW PRE-ASSOCIATED VARIABLE ! 524: * CAPABLE OF PERFORMING INPUT AND OUTPUT TO AN ! 525: * ONLINE TERMINAL. ! 526: * SYSRI IS A NEW ROUTINE USED IN THE IMPLEMENTATION ! 527: * OF THIS. SEE ALSO SYSPP. ! 528: * C3.209 THE ENVIRONMENT PARAMETERS E$--- ARE NOW ! 529: * PROVIDED BY THE MINIMAL TRANSLATOR USING THE ! 530: * REVISED EQU * FORMAT (SEE C3.229 AND START ! 531: * OF SPITBOL DEFINITIONS SECTION - SOME REORDERING ! 532: * OF SYMBOLS HAS OCCURRED). ! 533: * C3.210 THE INTERFACE OF SYSXI HAS BEEN SLIGHTLY REVISED. ! 534: * UNAVAILABILITY OF I/O CHANNELS AFTER EXIT(1), ! 535: * EXIT(-1) IS DOCUMENTED TOGETHER WITH ADDITIONAL ! 536: * ERROR RETURN USAGE FOR SYSIN,SYSOU,SYSPR,SYSRD. ! 537: * C3.211 SPITBOL ERROR CODES HAVE BEEN FROZEN - SEE C3.230 ! 538: * C3.212 THE UTILITY ROUTINES ARREF ETC. ARE NOW ! 539: * INTRODUCED BY RTN STATEMENTS. ! 540: * C3.213 SYSRL (RECORD LENGTH FOR STD INPUT FILE) IS ! 541: * REMOVED. SINCE IMPLEMENTATION OF A GENERAL -INXXX ! 542: * CONTROL CARD AND AN ABILITY TO SPECIFY MAX RECORD ! 543: * LENGTH USING THE THIRD ARGUMENT OF INPUT, SYSRL ! 544: * HAS BECOME REDUNDANT. ! 545: * C3.214 SYSEJ AND SYSXI ARE NOW PASSED A CHAIN LINKING ! 546: * ALL FCBLKS IN USE. ! 547: * C3.215 A SPECIAL ENDING CODE IN SYSEJ IS USED WHEN ! 548: * ATTEMPTS TO USE STANDARD OUTPUT CHANNEL FAIL. ! 549: * C3.216 RESTRICTION C3.233 OBSERVED SO SIMPLIFYING ! 550: * OPTIMISED TRANSLATION OF ENT WITH OMITTED VAL. ! 551: EJC ! 552: * ! 553: * CHANGES TO MINIMAL ! 554: * ------------------ ! 555: * ! 556: * C3.220 MINIMAL OPCODES DEC, DIM, INC, AND BMP ! 557: * ARE WITHDRAWN AND REPLACED BY THE MORE CONSISTENT ! 558: * SET DCA, DCV, ICA, ICV. ! 559: * C3.221 CHS HAS BEEN REPLACED BY THE MORE GENERALLY ! 560: * USEFUL ZGB (STILL LIKELY TO BE A NO-OP FOR MOST ! 561: * IMPLEMENTATIONS HOWEVER). ! 562: * C3.222 THE SET OF CHARACTER COMPARISONS HAS BEEN ! 563: * REDUCED TO CEQ AND CNE TO EASE IMPLEMENTATION ! 564: * PROBLEMS. ! 565: * C3.223 OPCODE IRZ IS REMOVED AND DVI, RMI ORDERS ARE ! 566: * REDEFINED TO CONFORM TO MORE COMMON USAGE. ! 567: * C3.224 NEW OPCODES SSL AND SSS ARE DEFINED. THEIR USE ! 568: * PERMITS RETURN LINKS FOR N TYPE PROCEDURES TO BE ! 569: * PLACED ON A LOCAL STACK IF DESIRED. ! 570: * C3.225 OPCODE MNZ COMPLEMENTS ZER. IT MOVES A NON-ZERO ! 571: * FLAG TO ITS DESTINATION. ! 572: * C3.226 FOR SOME MACHINES IT IS PREFERABLE FOR THE STACK ! 573: * TO BUILD UP RATHER THAN DOWN. TO PERMIT THIS ! 574: * WITHOUT NEED FOR MASSIVE CHANGES IN MINIMAL AND ! 575: * RECODING OF EXISTING PROGRAMS, A SCHEME HAS BEEN ! 576: * DEVISED IN WHICH AN ADDITIONAL REGISTER NAME, XT, ! 577: * IS USED AS A SYNONYM FOR XL WHEN THIS REGISTER ! 578: * IS INVOLVED IN STACK MANIPULATION- SEE SECTION 4. ! 579: * C3.227 SECTION 0 OF A MINIMAL PROGRAM IS RENAMED THE ! 580: * PROCEDURE SECTION. IT NOW CONTAINS, IN ADDITION ! 581: * TO EXP, SPECIFICATIONS OF INTERNAL PROCEDURES ! 582: * AND ROUTINES BY MEANS OF THE INP AND INR OPCODES. ! 583: * C3.228 THE LITERAL OPERAND FORMATS =INT AND *INT HAVE ! 584: * BEEN WITHDRAWN. =DLBL AND *DLBL MUST BE USED IN ! 585: * THEIR STEAD. ! 586: * C3.229 THE FORMAT ! 587: * LABEL EQU *NN ! 588: * USED TO SPECIFY VALUES SUPPLIED BY THE MINIMAL ! 589: * TRANSLATOR FOR CHAR. CODES ETC. IS REPLACED BY ! 590: * LABEL EQU * ! 591: * WHERE THE ORDER IN WHICH THE DEFINITIONS ARE ! 592: * SUPPLIED BY THE TRANSLATOR SHOULD MATCH THE ! 593: * ORDER OF OCCURRENCE IN THE DEFINITIONS SECTION. ! 594: * C3.230 THE FORMAT OF ERR,ERB OPCODES IS CHANGED TO ! 595: * REQUIRE A NUMERIC OPERAND. ! 596: * C3.231 THE RTN OPCODE IS USED TO INTRODUCE ROUTINES ! 597: * (WHICH ARE QUITE DISTINCT FROM PROCEDURES). ! 598: * C3.232 CONDITIONAL ASSEMBLY DIRECTIVES MAY BE NESTED. ! 599: * C3.233 MINOR RESTRICTION PLACED ON THE OMISSION OF ! 600: * VAL WITH THE ENT OPCODE. ! 601: EJC ! 602: * VERSION 3.1 TO 3.2 (AUG 77) ! 603: * --------------------------- ! 604: * ! 605: * BUGS FIXED ! 606: * ---------- ! 607: * ! 608: * B3.101 ASTONISHING THIS WAS UNNOTICED FOR THREE YEARS. ! 609: * BAD CODE FOR SNOBOL4 INTEGER DIVIDE, /, GAVE ! 610: * WRONG RESULT FOR OPERANDS OF OPPOSITE SIGNS. ! 611: * IMPLEMENTATIONS HAVE EITHER WRONGLY TRANSLATED ! 612: * DVI AND GOT CORRECT RESULT OR CORRECTLY ! 613: * TRANSLATED DVI AND GOT WRONG RESULT - LEEDS HAD ! 614: * ONE OF EACH. SEE ALSO C3.106. ! 615: * TEST PROGRAM NO. 1 NOW EXTENDED TO CHECK / ! 616: * MORE THOROUGHLY. ! 617: * B3.102 GARBAGE COLLECTION BUG IN SCANE ! 618: * ! 619: * CHANGES ! 620: * ------- ! 621: * ! 622: * C3.101 OPTION TO USE ADDITIONAL CHARACTERS CH$HT,CH$VT ! 623: * (HORIZONTAL AND VERTICAL TAB) WITH SAME SYNTACTIC ! 624: * SIGNIFICANCE AS CH$BL (BLANK). ! 625: * C3.102 OPTION TO USE A SET OF SHIFTED CASE ALPHABETIC ! 626: * CHARACTERS CH$$A ... CH$$$. ! 627: * C3.103 CONDITIONAL ASSEMBLY FEATURES ARE INTRODUCED INTO ! 628: * MINIMAL ON ACCOUNT OF THE ABOVE. ! 629: * SEE MINIMAL DOCUMENTATION SECTION FOR DETAILS ! 630: * OF ABOVE CHANGES. ! 631: * C3.104 LCH AND SCH MAY USE AN X REGISTER FIRST ! 632: * OPERAND AS ALTERNATIVE TO A W REGISTER. ! 633: * C3.105 SPITBOL STATEMENT NUMBERS IN THE LISTING MAY ! 634: * OPTIONALLY BE PADDED TO 6 OR 8 CHARS INSTEAD OF 5 ! 635: * BY DEFINING CONDITIONAL ASSEMBLY SYMBOLS ! 636: * .CSN6 OR .CSN8 . ! 637: * C3.106 TO FIX BUG 3.101. AT MODERATE COST, ! 638: * OPCODE IRZ (BRANCH IF INTEGER DIVIDE REMAINDER ! 639: * ZERO) INTRODUCED. ! 640: * C3.107 TO HANDLE POSSIBLE MACHINE DEPENDENCY IN STRING ! 641: * HASHING, CHS (COMPLETE HASHING OF STRING) OPCODE ! 642: * IS INTRODUCED. PROBABLY A NO-OP ON MOST MACHINES ! 643: * - NOT ON THE DEC10. ! 644: * C3.108 PROCEDURES PATIN,TFIND,TRACE HAVE BEEN ! 645: * MODIFIED TO CONFORM TO THE MINIMAL STANDARD ! 646: * CALL AND RETURN REGIME. ! 647: * C3.109 SYSFC INTERFACE REVISED SLIGHTLY TO PERMIT ! 648: * OSINT TO RETURN A POINTER TO A PRIVATELY ! 649: * ALLOCATED FCBLK WHICH SPITBOL WILL RETURN ON ! 650: * SUBSEQUENT I/O - SEE SYSFC DOC. ! 651: * C3.110 TO REMOVE INCONSISTENCIES IN CALLING SEQUENCES, ! 652: * ALL SYS ROUTINES HAVING ACCESS TO A POSSIBLE ! 653: * FCBLK HAVE FCBLK PTR OR ZERO IN REG. WA ON ENTRY. ! 654: * CHANGE AFFECTS SYSEF, SYSEN, SYSIL, SYSIN, ! 655: * SYSOU, SYSRW. ! 656: * C3.111 SYSPP BIT ALLOCATED TO PROVIDE ! 657: * -NOEXEC OPTION ON ENTRY TO SPITBOL. ! 658: EJC ! 659: * ! 660: * DOCUMENTATION REVISIONS ! 661: * ----------------------- ! 662: * ! 663: * D3.101 NEED TO PRESERVE REGISTERS IN SYSPI, SYSPR, ! 664: * SYSRD CALLS WAS OVERSTATED. ! 665: EJC ! 666: * VERSION 3.0 TO 3.1 (MAR 77) ! 667: * --------------------------- ! 668: * ! 669: * BUGS FIXED ! 670: * ---------- ! 671: * ! 672: * B3.001 REPLACE() COULD FAIL DURING PRE-EVALUATION. ! 673: * SPITBOL NOW SIGNALS AN ERROR FOR NULL OR ! 674: * UNEQUALLY LONG 2ND AND 3RD ARGUMENTS. ! 675: * B3.002 NEGATIVE SECOND ARGUMENTS TO DUPL, LPAD, RPAD ! 676: * CAUSED SPITBOL TO SIGNAL AN ERROR. NOW CAUSES ! 677: * RETURN OF NULL STRING OR FIRST ARG RESPECTIVELY. ! 678: * B3.003 BRN-S USED INSTEAD OF PPM-S IN S$SUB. ! 679: * B3.004 ERR USED INSTEAD OF ERB AFTER CMP30. ! 680: * B3.005 B$PFC, S$CNV, S$DEF, ARITH AND ARREF KEPT ! 681: * INFORMATION ILLEGALLY ABOVE THE STACK TOP. ! 682: * B3.006 PRE-EVALUATION OF CONSTANT PARTS OF ! 683: * COMPLEX GOTOS WAS ERRONEOUS. ! 684: * B3.007 INCORRECT HANDLING OF LABELS COMPILED BY CODE(). ! 685: * B3.008 THE SINGLE USE OF TRC (IN S$RPL) WAS NOT IN ! 686: * ACCORD WITH ITS DEFINITION. SOME TRANSLATIONS OF ! 687: * TRC MAY NEED REVISION NOW THAT THE USE ! 688: * HAS BEEN BROUGHT INTO LINE WITH DEFINITION. ! 689: * ! 690: * CHANGES ! 691: * ------- ! 692: * ! 693: * A DEBATE ON A FEW WEAKNESSES IN MINIMAL DESIGN HAS ! 694: * BEEN RESOLVED BY INTRODUCING 4 NEW OPCODES. ! 695: * ! 696: * C3.001 NEW MINIMAL OPCODES BMP AND DIM INTRODUCED ! 697: * TO AUGMENT INC AND DEC WHICH ARE APPLICABLE ! 698: * ONLY TO ADDRESSES. ! 699: * C3.002 THE OPCODE SZC (STORE ZERO CHARACTERS) HAD ! 700: * A RESTRICTED APPLICABILITY. IT HAS BEEN ! 701: * REPLACED BY THE MORE GENERAL ZER (ZEROISE). ! 702: * C3.003 FCBLKS MAY BE OPTIONALLY ALLOCATED AS XRBLK-S OR ! 703: * XNBLK-S - SEE SYSFC FOR VITAL INFORMATION. ! 704: * C3.004 CONTROL CARD PROCESSING HAS BEEN RECODED. ! 705: * -INXXX ALLOWS SPECIFICATION OF STANDARD INPUT ! 706: * FILE RECORD LENGTHS OTHER THAN 72 OR 80, SEE ALSO ! 707: * SYSRL. -SEQU IS IGNORED UNLESS -IN80 IS IN EFFECT ! 708: * C3.005 TO ENABLE EFFICIENT BUFFERING OF CHARS ON ! 709: * MACHINES WITHOUT CHAR. HANDLING ORDERS, THE ! 710: * CSC (COMPLETE STORE CHARACTERS) INSTRUCTION ! 711: * IS INTRODUCED. CURRENT IMPLEMENTATIONS CAN ! 712: * TRANSLATE IT AS A NO-OP IF IT IS OF NO BENEFIT. ! 713: * C3.006 INTEGERS 0,1,2 ARE TREATED SPECIALLY. ! 714: * ICBLKS IN STATIC ARE USED INSTEAD OF ! 715: * ALLOCATING SPACE IN DYNAMIC. ! 716: EJC ! 717: * ! 718: * VERSION 2.7 (JUNE 76) TO 3.0 (JAN 77) ! 719: * ------------------------------------- ! 720: * ! 721: * BUGS FIXED ! 722: * ---------- ! 723: * ! 724: * B2.701 GOES ILLEGAL IF TIMED OUT DURING PROCESSING OF ! 725: * DUMP() CALL. ! 726: * B2.702 GOES ILLEGAL IF SPITBOL ERROR DETECTED IN ARGS OF ! 727: * CODE() OR EVAL(). BUG FIXED SO THAT USER NOW GETS ! 728: * A SPITBOL ERROR REPORT (TRAPPABLE BY SETEXIT) ! 729: * BEFORE STATEMENT FAILURE. ! 730: * B2.703 GOES ILLEGAL IN SOME CIRCUMSTANCES WHEN ! 731: * MULTIPLE COMPILATION ERRORS OCCUR IN A STATEMENT ! 732: * B2.704 GOES ILLEGAL IF GARBAGE COLLECTOR RUNS OUT OF ! 733: * STACK SPACE. ! 734: * B2.705 CONTROL CARD PROCESSING INCORRECT FOR CDC 6400. ! 735: * B2.706 INCORRECT HANDLING OF MULTIPLE OCCURRENCES OF ! 736: * CHARS IN REPLACE 2ND AND 3RD ARGS. ! 737: * B2.707 STACK OVERFLOW IN PRE-EVALUATION OF REPLACE IN ! 738: * CDC 6400 VERSION. ! 739: * B2.708 AN EXPLICIT CALL OF SYSMW WAS CODED IN S$DAT ! 740: * INSTEAD OF THE MVW OPCODE. ! 741: * B2.709 CALL OF GARBAGE COLLECTOR WHILST DUMPING ! 742: * CAUSED HAVOC. ! 743: * B2.710 SIZE RESTRICTION ON SPITBOL OBJECTS (SIZE MUST BE ! 744: * NUMERICALLY LESS THAN LOWEST DYNAMIC ADDRESS) ! 745: * WAS NOT ENFORCED, WITH POTENTIAL FOR CATASTROPHE. ! 746: * B2.711 DEFERRED EXPRESSIONS INVOLVING ALTERNATION OR ! 747: * NEGATION WERE INCORRECTLY TRANSLATED. ! 748: * B2.712 LISTING OF A COMPILATION ERROR AT THE END OF A ! 749: * LONG LINE COULD CAUSE COMPILER TO GO ILLEGAL. ! 750: * B2.713 INCORRECT -NOFAIL CODE WITH SUCCESS GOTO. ! 751: EJC ! 752: * ! 753: * ! 754: * CHANGES ! 755: * ------- ! 756: * ! 757: * (IT IS NOT ANTICIPATED THAT MAJOR REVISIONS ON THIS ! 758: * SCALE WILL BE FREQUENT). ! 759: * ! 760: * C2.701 DEFAULT VALUE OF ANCHOR KEYWORD IS SET TO 1. THIS ! 761: * CONFLICTS WITH SNOBOL4 PRACTICE BUT IS A ! 762: * PREFERABLE DEFAULT FOR MOST APPLICATIONS. ! 763: * C2.702 IF ERRTYPE IS OUT OF RANGE THE STRING IN KEYWORD ! 764: * ERRTEXT IS PRINTED AS THE ERROR MESSAGE. ! 765: * C2.703 IF STLIMIT IS EXCEEDED, UP TO 10 MORE STATEMENTS ! 766: * MAY BE OBEYED TO PERMIT SETEXIT TRAP TO GAIN ! 767: * CONTROL. ! 768: * C2.704 THE CONCEPT OF AN INTERACTIVE CHANNEL IS ! 769: * INTRODUCED FOR IMPLEMENTATIONS WHERE AN ONLINE ! 770: * TERMINAL MAY BE USED FOR SPITBOL. THE STANDARD ! 771: * PRINT FILE MAY BE SPECIFIED AS INTERACTIVE IN ! 772: * WHICH CASE SHORTER TITLE LINES ARE OUTPUT. ! 773: * ALTERNATIVELY COPIES OF COMPILATION AND ! 774: * EXECUTION ERRORS ONLY MAY BE SENT TO THIS CHANNEL ! 775: * C2.705 PRINTING OF COMPILATION STATISTICS MAY BE ! 776: * SUPPRESSED. ! 777: * C2.706 PRINTING OF EXECUTION STATISTICS MAY BE ! 778: * SUPPRESSED. ! 779: * C2.707 EXTENDED OR COMPACT LISTING FORMAT MAY BE ! 780: * SELECTED. ! 781: * C2.708 AN INITIAL -NOLIST OPTION MAY BE SPECIFIED ! 782: * BEFORE COMPILATION STARTS. ! 783: * C2.709 TO SPECIFY CHOICES IMPLIED BY C2.704 TO C2.708 ! 784: * SYSPP INTERFACE IS REVISED AND SYSPI IS DEFINED. ! 785: * C2.710 COMPILATION AND EXECUTION TIME STATISTICS ! 786: * MESSAGES HAVE BEEN SHORTENED. ! 787: * C2.711 THE EXIT FUNCTION AS IN SITBOL IS INTRODUCED ! 788: * TO PERMIT SAVING LOAD MODULES - SEE SYSXI, S$EXT. ! 789: * C2.712 DIAGNOSTIC ROUTINES SYSGB AND SYSGD HAVE BEEN ! 790: * REMOVED. THEY WERE USEFUL IN THE EARLY DEBUGGING ! 791: * DAYS BUT HAVE FALLEN INTO DISUSE NOW. ! 792: * C2.713 SZC MAY HAVE AN OPERAND OF TYPE OPN INSTEAD OF ! 793: * TYPE OPW ! 794: * C2.714 INPUT/OUTPUT ASSOCIATION INTERFACE HAS BEEN ! 795: * REVISED. SYSIF,SYSOF HAVE BEEN CONSOLIDATED INTO ! 796: * THE NEW SYSTEM ROUTINE , SYSIO , AND THE ! 797: * SPECIFICATION OF SYSFC HAS BEEN SLIGHTLY CHANGED. ! 798: * C2.715 CONFIGURATION PARAMETER MXLEN HAS BEEN WITHDRAWN ! 799: * AND THE MAXIMUM SIZE OF A SPITBOL OBJECT WHICH ! 800: * WAS FORMERLY FIXED AT SPITBOL COMPILE TIME BY ! 801: * REFERENCE TO IT MAY NOW BE SPECIFIED AS A RUN ! 802: * TIME OPTION BY PLACING A VALUE IN WC BEFORE ENTRY ! 803: * TO SPITBOL. (SEE COMMENT ON DYNAMIC AREA IN ! 804: * BASIC INFORMATION SECTION). ! 805: * C2.716 A FUNCTION, HOST, IS INTRODUCED WHICH YIELDS ! 806: * INFORMATION ABOUT THE HOST MACHINE - SEE SYSHS ! 807: * AND S$HST. ! 808: EJC ! 809: * ! 810: * DOCUMENTATION REVISIONS ! 811: * ----------------------- ! 812: * ! 813: * D2.701 THE DESCRIPTION OF MVC HAS BEEN REVISED TO ! 814: * REFLECT THE FACT THAT SOME SPITBOL CODE SEQUENCES ! 815: * RELY ON ON MVC NOT DESTROYING WB. MINOR CHANGES ! 816: * HAVE BEEN MADE TO MWB AND MVW DESCRIPTIONS TO ! 817: * EMPHASISE SIMILARITIES IN THE IMPLICIT LOOPS OF ! 818: * THESE ORDERS. ! 819: * D2.702 DESCRIPTIONS OF DVI AND RMI HAVE BEEN CLARIFIED. ! 820: * D2.703 IMPLEMENTATION OF RSX,LSX,CEQ,CGE,CGT,CHI,CLO,CLT ! 821: * IS OPTIONAL AT PRESENT SINCE THEY ARE CURRENTLY ! 822: * UNUSED. THEIR USE IN LATER VERSIONS IS NOT ! 823: * EXCLUDED. ! 824: * D2.704 IMPOSSIBILITY OF USING STACK FOR RETURN LINKS OF ! 825: * N TYPE PROCEDURES IS EMPHASISED. ! 826: * D2.705 NOTATION (XL),(WC) ETC IN LANGUAGE DESCRIPTION IS ! 827: * CLARIFIED. ! 828: * D2.706 DOCUMENTATION OF SYSFC, SYSIO HAS BEEN IMPROVED. ! 829: * D2.707 OPCODE DESCRIPTIONS ARE CROSS REFERENCED FROM ! 830: * THE ALPHABETICAL OPCODE LIST. ! 831: * D2.708 GENERAL DESCRIPTION OF COMPILER HAS BEEN MOVED TO ! 832: * THE START OF THE COMPILER PROPER. ! 833: * D2.709 DEFINITIONS OF ENVIRONMENT PARAMETERS HAVE BEEN ! 834: * PUT NEAR THE FRONT OF THE DEFINITIONS SECTION. ! 835: TTL MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 836: EJC ! 837: * THE FOLLOWING SECTIONS DESCRIBE THE IMPLEMENTATION ! 838: * LANGUAGE ORIGINALLY DEVELOPED FOR SPITBOL BUT NOW MORE ! 839: * WIDELY USED. MINIMAL IS AN ASSEMBLY LANGUAGE FOR AN ! 840: * IDEALISED MACHINE WHICH IS NOW DESCRIBED. ! 841: * ! 842: * SECTION 1 - CONFIGURATION PARAMETERS ! 843: * ! 844: * THERE ARE SEVERAL PARAMETERS WHICH MAY VARY WITH THE ! 845: * TARGET MACHINE. THE MACRO-PROGRAM IS INDEPENDENT OF THE ! 846: * ACTUAL DEFINITIONS OF THESE PARAMETERS. ! 847: * THE DEFINITIONS OF THESE PARAMETERS ARE SUPPLIED BY ! 848: * THE TRANSLATION PROGRAM TO MATCH THE TARGET MACHINE. ! 849: * ! 850: * CFP$A NUMBER OF DISTINCT CHARACTERS IN ! 851: * INTERNAL ALPHABET IN THE RANGE ! 852: * 64 LE CFP$A LE MXLEN. ! 853: * ! 854: * CFP$B NUMBER OF BAUS IN A WORD WHERE A ! 855: * BAU IS THE AMOUNT OF STORAGE ! 856: * ADDRESSED BY THE LEAST SIGNIFICANT ! 857: * ADDRESS BIT (SEE NEXT SECTION). ! 858: * ! 859: * CFP$C NUMBER OF CHARACTERS WHICH CAN ! 860: * BE STORED IN A SINGLE WORD. ! 861: * ! 862: * CFP$F BAU OFFSET FROM START OF A STRING ! 863: * BLOCK TO THE FIRST CHARACTER. ! 864: * DEPENDS BOTH ON TARGET MACHINE AND ! 865: * STRING DATA STRUCTURE. SEE PLC,PSC. ! 866: * ! 867: * CFP$I NUMBER OF WORDS IN A SIGNED ! 868: * INTEGER CONSTANT ! 869: * ! 870: * CFP$M THE LARGEST POSITIVE INTEGER ! 871: * OF FORM 2**N - 1 WHICH CAN BE ! 872: * STORED IN A SINGLE WORD. N WILL ! 873: * OFTEN BE CFP$N BUT NEED NOT BE. ! 874: * ! 875: * ! 876: * CFP$N NUMBER OF BITS WHICH CAN BE STORED ! 877: * IN A ONE WORD BIT STRING. ! 878: * ! 879: * CFP$R NUMBER OF WORDS IN A REAL CONSTANT ! 880: * ! 881: * CFP$S NUMBER OF SIGNIFICANT DIGITS TO ! 882: * BE OUTPUT IN CONVERSION OF A REAL ! 883: * QUANTITY. THE INTEGER CONSISTING OF ! 884: * THIS NUMBER OF 9S MUST NOT BE TOO ! 885: * LARGE TO FIT IN THE INTEGER ACCUM. ! 886: * ! 887: * CFP$U UPPER BOUND ON NUMBER OF CHARS IN ! 888: * THE SUBSET USED IN BSW SWITCHES IN ! 889: * RANGE 64 LE CFP$U LE CFP$A. TYPICAL ! 890: * FOR ASCII IS CFP$U, 128 CFP$A, 256 ! 891: * ! 892: * CFP$X NUMBER OF DIGITS IN REAL EXPONENT ! 893: EJC ! 894: * ! 895: * SECTION 2 - MEMORY ! 896: * ! 897: * MEMORY IS ORGANIZED INTO WORDS WHICH EACH CONTAIN CFP$B ! 898: * BAUS. THE REASONING BEHIND THIS IS THAT MINIMAL PROGRAMS ! 899: * SHOULD RUN EITHER ON MACHINES HAVING BYTE ADDRESSING ! 900: * OR THOSE HAVING WORD ADDRESSING SCHEMES. MINIMAL MOV ! 901: * INSTRUCTIONS ALWAYS OPERATE ON WORD SIZED OPERANDS OR, ! 902: * IN THE CASE OF THE CHARACTER OPCODES, ON CHARACTER ! 903: * SIZED OPERANDS. NOWHERE IN MINIMAL ARE BYTE SIZED ! 904: * OPERANDS PERMITTED. HOWEVER SINCE ADDRESSING ON BYTE ! 905: * MACHINES MUST BE CATERED FOR, THE CONCEPT OF BASIC ! 906: * ADDRESSABLE UNIT, HENCEFORTH REFERRED TO AS BAU, IS USED ! 907: * A BAU IS THAT COLLECTION OF MEMORY BITS WHICH ! 908: * CORRESPONDS TO A CHANGE OF UNITY IN THE LEAST SIGNIFICANT ! 909: * BIT OF AN ADDRESS. ON A BYTE MACHINE, A BAU WILL ! 910: * CORRESPOND TO A BYTE AND ON A WORD MACHINE TO A WORD. ! 911: * BY CONVENTION ADDRESSES ARE HELD IN BAU FORM (SINCE A ! 912: * BAU IS A BASIC ADDRESSING UNIT). HOWEVER SOME OF THE ! 913: * OPERAND FORMATS PERMIT ADDRESSING WITH WORD ! 914: * OFFSETS PAST A BAU ADDRESS IN A REGISTER. SINCE ! 915: * MEMORY ACCESSING IS IN TERMS OF WORDS, CARE IS NEEDED ! 916: * FOR EXAMPLE WHEN WORD COUNTS ARE COMPUTED FROM ADDRESSES ! 917: * AS A BAU DOES NOT NECESSARILY COINCIDE WITH A WORD. ON ! 918: * THE OTHER HAND, THE BLOCK MOVE ORDER, MVW, REQUIRES A ! 919: * COUNT IN BAUS. THE DEFINITIONS OF THE MINIMAL OPCODES ! 920: * SHOULD BE READ WITH CAREFUL ATTENTION TO THEIR ADDRESSING ! 921: * IMPLICATIONS. ! 922: * FOR WORD MACHINES CFP$B, WHICH IS A CONFIGURATION ! 923: * PARAMETER, WILL BE ONE IN WHICH CASE WORDS AND BAUS ARE ! 924: * IDENTICAL. TO EACH WORD CORRESPONDS AN ADDRESS IN BAUS, ! 925: * A NON-NEGATIVE QUANTITY WHICH IS A MULTIPLE OF CFP$B. ! 926: * DATA IS ORGANIZED INTO WORDS AS FOLLOWS. ! 927: * ! 928: * 1) A SIGNED INTEGER VALUE OCCUPIES CFP$I CONSECUTIVE ! 929: * WORDS (CFP$I IS A CONFIGURATION PARAMETER). ! 930: * THE RANGE MAY INCLUDE MORE NEGATIVE NUMBERS THAN ! 931: * POSITIVE (E.G. THE TWOS COMPLEMENT REPRESENTATION). ! 932: * ! 933: * 2) A SIGNED REAL VALUE OCCUPIES CFP$R CONSECUTIVE ! 934: * WORDS. (CFP$R IS A CONFIGURATION PARAMETER). ! 935: * ! 936: * 3) CFP$C CHARACTERS MAY BE STORED IN A SINGLE WORD ! 937: * (CFP$C IS A CONFIGURATION PARAMETER). ! 938: * ! 939: * 4) A BIT STRING CONTAINING CFP$N BITS CAN BE STORED IN ! 940: * A SINGLE WORD (CFP$N IS A CONFIGURATION PARAMETER). ! 941: EJC ! 942: * ! 943: * 5) A WORD CAN CONTAIN A NON-NEGATIVE INTEGER VALUE IN ! 944: * THE RANGE (0 LE N LE CFP$M). THESE INTEGER VALUES ! 945: * MAY REPRESENT ADDRESSES OF OTHER WORDS AND SOME OF ! 946: * THE INSTRUCTIONS USE THIS FACT TO PROVIDE INDEXING ! 947: * AND INDIRECTION FACILITIES. ! 948: * ! 949: * 6) PROGRAM INSTRUCTIONS OCCUPY WORDS IN AN UNDEFINED ! 950: * MANNER. DEPENDING ON THE ACTUAL IMPLEMENTATION, ! 951: * INSTRUCTIONS MAY OCCUPY SEVERAL WORDS, OR PART OF ! 952: * A WORD, OR EVEN BE SPLIT OVER WORD BOUNDARIES. ! 953: * ! 954: * THE FOLLOWING REGIONS OF MEMORY ARE AVAILABLE TO THE ! 955: * PROGRAM. EACH REGION CONSISTS OF A SERIES OF WORDS WITH ! 956: * CONSECUTIVE ADDRESSES. ! 957: * ! 958: * 1) CONSTANT SECTION ASSEMBLED CONSTANTS ! 959: * 2) WORKING STORAGE SECTION ASSEMBLED WORK AREAS ! 960: * 3) PROGRAM SECTION ASSEMBLED INSTRUCTIONS ! 961: * 4) STACK AREA ALLOCATED STACK AREA ! 962: * 5) DATA AREA ALLOCATED DATA AREA ! 963: * ! 964: * SECTION 3 - REGISTERS ! 965: * ! 966: * THERE ARE THREE INDEX REGISTERS CALLED XR,XL,XS. IN ! 967: * ADDITION XL MAY SOMETIMES BE REFERRED TO BY THE ALIAS ! 968: * OF XT - SEE SECTION 4. ANY OF THE ABOVE ! 969: * REGISTERS MAY HOLD A POSITIVE INTEGER IN THE RANGE ! 970: * (0 LE N LE CFP$M). WHEN THE INDEX REGISTER IS USED FOR ! 971: * INDEXING PURPOSES, THIS MUST BE AN APPROPRIATE ADDRESS ! 972: * IN BAUS. ! 973: * XS IS SPECIAL IN THAT IT IS USED TO POINT TO THE TOP ! 974: * ITEM OF A STACK IN MEMORY. THE STACK MAY BUILD UP OR ! 975: * DOWN IN MEMORY.SINCE IT IS REQUIRED THAT XS POINTS TO THE ! 976: * STACK TOP BUT ACCESS TO ITEMS BELOW THE TOP IS PERMITTED, ! 977: * REGISTERS XS AND XT MAY BE USED WITH SUITABLE OFFSETS ! 978: * TO INDEX STACKED ITEMS. ONLY XS AND XT MAY BE USED FOR ! 979: * THIS PURPOSE SINCE THE DIRECTION OF THE OFFSET IS ! 980: * TARGET MACHINE DEPENDENT. XT IS A SYNONYM FOR XL ! 981: * WHICH THEREFORE CANNOT BE USED IN CODE SEQUENCES ! 982: * REFERENCING XT. ! 983: * THE STACK IS USED FOR S-R LINKAGE AND TEMPORARY ! 984: * DATA STORAGE FOR WHICH THE STACK ARRANGEMENT IS SUITABLE. ! 985: * XR,XL CAN ALSO CONTAIN A CHARACTER POINTER IN CONJUNCTION ! 986: * WITH THE CHARACTER INSTRUCTIONS (SEE DESCRIPTION OF PLC). ! 987: EJC ! 988: * ! 989: * THERE ARE THREE WORK REGISTERS CALLED WA,WB,WC WHICH ! 990: * CAN CONTAIN ANY DATA ITEM WHICH CAN BE STORED IN A ! 991: * SINGLE MEMORY WORD. IN FACT, THE WORK REGISTERS ARE JUST ! 992: * LIKE MEMORY LOCATIONS EXCEPT THAT THEY HAVE NO ADDRESSES ! 993: * AND ARE REFERENCED IN A SPECIAL WAY BY THE INSTRUCTIONS. ! 994: * NOTE THAT REGISTERS WA,WB HAVE SPECIAL USES IN CONNECTION ! 995: * WITH THE CVD, CVM, MVC, MVW, MWB, CMC, TRC INSTRUCTIONS. ! 996: * REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN ! 997: * SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE ! 998: * VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA ! 999: * EXCEPT AS NOTED IN THE FOLLOWING RESTRICTION ON SIMPLE ! 1000: * DUMP/RESTORE OPERATIONS. ! 1001: * ! 1002: * RESTRICTION ! 1003: * ----------- ! 1004: * ! 1005: * IF IA AND WC OVERLAP THEN ! 1006: * STI IASAV ! 1007: * LDI IASAV ! 1008: * DOES NOT CHANGE WC, AND ! 1009: * MOV WC,WCSAV ! 1010: * MOV WCSAV,WC ! 1011: * DOES NOT CHANGE IA. ! 1012: * ! 1013: * ! 1014: * ! 1015: * THERE IS AN INTEGER ACCUMULATOR (IA) WHICH IS CAPABLE OF ! 1016: * HOLDING A SIGNED INTEGER VALUE (CFP$I WORDS LONG). ! 1017: * REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN ! 1018: * SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE ! 1019: * VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA ! 1020: * EXCEPT AS NOTED IN THE ABOVE RESTRICTION ON SIMPLE ! 1021: * DUMP/RESTORE OPERATIONS. ! 1022: * ! 1023: * ! 1024: * ! 1025: * THERE IS A SINGLE REAL ACCUMULATOR (RA) WHICH CAN HOLD ! 1026: * ANY REAL VALUE AND IS COMPLETELY SEPARATE FROM ANY OF ! 1027: * THE OTHER REGISTERS OR PROGRAM ACCESSIBLE LOCATIONS. ! 1028: * ! 1029: * ! 1030: * ! 1031: * THE CODE POINTER REGISTER (CP) IS A SPECIAL INDEX ! 1032: * REGISTER FOR USE IN IMPLEMENTATIONS OF INTERPRETORS. ! 1033: * IT IS USED TO CONTAIN A PSEUDO-CODE POINTER AND CAN ! 1034: * ONLY BE AFFECTED BY ICP, LCP, SCP AND LCW INSTRUCTIONS. ! 1035: EJC ! 1036: * SECTION 4 - THE STACK ! 1037: * ! 1038: * THE FOLLOWING NOTES ARE TO GUIDE BOTH IMPLEMENTORS OF ! 1039: * SYSTEMS WRITTEN IN MINIMAL AND MINIMAL PROGRAMMERS IN ! 1040: * DEALING WITH STACK MANIPULATION. IMPLEMENTATION OF A ! 1041: * DOWNWARDS BUILDING STACK IS EASIEST AND IN GENERAL IS ! 1042: * TO BE PREFERRED, IN WHICH CASE IT IS MERELY NECESSARY TO ! 1043: * CONSIDER XT AS AN ALTERNATIVE NAME FOR XL. ! 1044: * ! 1045: * THE MINIMAL VIRTUAL MACHINE INCLUDES A STACK AND HAS ! 1046: * OPERAND FORMATS -(XS) AND (XS)+ FOR PUSHING AND POPPING ! 1047: * ITEMS WITH AN IMPLICATION THAT THE STACK BUILDS DOWN IN ! 1048: * MEMORY (A D-STACK). HOWEVER ON SOME TARGET MACHINES IT IS ! 1049: * BETTER FOR THE STACK TO BUILD UP (A U-STACK). ! 1050: * A STACK ADDRESSED ONLY BY PUSH AND POP OPERATIONS CAN ! 1051: * BUILD IN EITHER DIRECTION WITH NO COMPLICATION BUT ! 1052: * SUCH A PURE SCHEME OF STACK ACCESS PROVES RESTRICTIVE. ! 1053: * HENCE IT IS PERMITTED TO ACCESS BURIED ITEMS USING AN ! 1054: * INTEGER OFFSET PAST THE INDEX REGISTER POINTING TO THE ! 1055: * STACK TOP. ON TARGET MACHINES THIS OFFSET WILL BE ! 1056: * POSITIVE/NEGATIVE FOR D-STACKS/U-STACKS AND THIS MUST ! 1057: * BE ALLOWED FOR IN THE TRANSLATION. ! 1058: * A FURTHER RESTRICTION IS THAT AT NO TIME MAY AN ITEM BE ! 1059: * PLACED ABOVE THE STACK TOP. FOR SOME OPERATIONS THIS ! 1060: * MAKES IT CONVENIENT TO ADVANCE THE STACK POINTER AND THEN ! 1061: * ADDRESS ITEMS BELOW IT USING A SECOND INDEX REGISTER. ! 1062: * THE PROBLEM OF SIGNED OFFSETS PAST SUCH A REGISTER THEN ! 1063: * ARISES. TO DISTINGUISH STACK OFFSETS, WHICH IN SOME ! 1064: * IMPLEMENTATIONS MAY BE NEGATIVE, FROM NON-STACK OFFSETS ! 1065: * WHICH ARE INVARIABLY POSITIVE, XT, AN ALIAS OR ! 1066: * SYNONYM FOR XL IS USED. FOR A U-STACK IMPLEMENTATION, THE ! 1067: * MINIMAL TRANSLATOR SHOULD NEGATE THE SIGN OF OFFSETS ! 1068: * APPLIED TO BOTH (XS) AND (XT). ! 1069: * PROGRAMMERS SHOULD NOTE THAT SINCE XT IS NOT A ! 1070: * SEPARATE REGISTER, XL SHOULD NOT BE USED IN CODE WHERE ! 1071: * XT IS REFERENCED. OTHER MODIFICATIONS NEEDED IN U-STACK ! 1072: * TRANSLATIONS ARE IN THE ADD, SUB, ICA, DCA OPCODES ! 1073: * APPLIED TO XS, XT. FOR EXAMPLE ! 1074: * ! 1075: * MINIMAL D-STACK TRANS. U-STACK TRANS. ! 1076: * ! 1077: * MOV WA,-(XS) SBI XS,1 ADI XS,1 ! 1078: * STO WA,(XS) STO WA,(XS) ! 1079: * MOV (XT)+,WC LOD WC,(XL) LOD WC,(XL) ! 1080: * ADI XL,1 SBI XL,1 ! 1081: * ADD =SEVEN,XS ADI XS,7 SBI XS,7 ! 1082: * MOV 2(XT),WA LOD WA,2(XL) LOD WA,-2(XL) ! 1083: * ICA XS ADI XS,1 SBI XS,1 ! 1084: * ! 1085: * NOTE THAT FORMS SUCH AS ! 1086: * MOV -(XS),WA ! 1087: * ADD WA,(XS)+ ! 1088: * ARE ILLEGAL, SINCE THEY ASSUME INFORMATION STORAGE ! 1089: * ABOVE THE STACK TOP. ! 1090: EJC ! 1091: * SECTION 5 - INTERNAL CHARACTER SET ! 1092: * ! 1093: * THE INTERNAL CHARACTER SET IS REPRESENTED BY A SET OF ! 1094: * CONTIGUOUS CODES FROM 0 TO CFP$A-1. THE CODES FOR THE ! 1095: * DIGITS 0-9 MUST BE CONTIGUOUS AND IN SEQUENCE. OTHER ! 1096: * THAN THIS, THERE ARE NO RESTRAINTS. ! 1097: * ! 1098: * THE FOLLOWING SYMBOLS ARE AUTOMATICALLY DEFINED TO HAVE ! 1099: * THE VALUE OF THE CORRESPONDING INTERNAL CHARACTER CODE. ! 1100: * ! 1101: * CH$LA LETTER A ! 1102: * CH$LB LETTER B ! 1103: * . . ! 1104: * CH$L$ LETTER Z ! 1105: * ! 1106: * CH$D0 DIGIT 0 ! 1107: * . . ! 1108: * CH$D9 DIGIT 9 ! 1109: * ! 1110: * CH$AM AMPERSAND ! 1111: * CH$AS ASTERISK ! 1112: * CH$AT AT ! 1113: * CH$BB LEFT BRACKET ! 1114: * CH$BL BLANK ! 1115: * CH$BR VERTICAL BAR ! 1116: * CH$CL COLON ! 1117: * CH$CM COMMA ! 1118: * CH$DL DOLLAR SIGN ! 1119: * CH$DT DOT (PERIOD) ! 1120: * CH$DQ DOUBLE QUOTE ! 1121: * CH$EQ EQUAL SIGN ! 1122: * CH$EX EXCLAMATION MARK ! 1123: * CH$MN MINUS ! 1124: * CH$NM NUMBER SIGN ! 1125: * CH$NT NOT ! 1126: * CH$PC PERCENT ! 1127: * CH$PL PLUS ! 1128: * CH$PP LEFT PAREN ! 1129: * CH$RB RIGHT BRACKET ! 1130: * CH$RP RIGHT PAREN ! 1131: * CH$QU QUESTION MARK ! 1132: * CH$SL SLASH ! 1133: * CH$SM SEMI-COLON ! 1134: * CH$SQ SINGLE QUOTE ! 1135: * CH$UN UNDERLINE ! 1136: EJC ! 1137: * ! 1138: * THE FOLLOWING OPTIONAL SYMBOLS ARE INCORPORATED ! 1139: * BY DEFINING THE CONDITIONAL ASSEMBLY SYMBOL NAMED. ! 1140: * ! 1141: * 26 SHIFTED LETTERS INCORPORATED BY DEFINING .CASL ! 1142: * ! 1143: * CH$$A SHIFTED A ! 1144: * CH$$B SHIFTED B ! 1145: * . . ! 1146: * CH$$$ SHIFTED Z ! 1147: * ! 1148: * CH$HT HORIZONTAL TAB - DEFINE .CAHT ! 1149: * CH$VT VERTICAL TAB - DEFINE .CAVT ! 1150: * ! 1151: * CASE OF SPITBOL SOURCE FILES ! 1152: * ! 1153: * ORIGINALLY, SNOBOL4 AND SPITBOL CATERED FOR THE ERA OF ! 1154: * CARD PUNCH WITH FIXED LENGTH RECORDS IN UPPER CASE ONLY. ! 1155: * MORE RECENT SYSTEMS HAVE READY USE OF LOWER CASE CHARS ! 1156: * IN THE ASCII OR EBCDIC SET AND WITH SOME SYSTEMS (NOTABLY ! 1157: * UNIX), USE OF UPPER CASE CHARS IS NOT IDIOMATIC. BY ! 1158: * SUITABLE CHOICE OF CONDITIONAL ASSEMBLY OPTIONS, A ! 1159: * SYSTEM CAN BE TAILORED TO SUIT THE PREVAILING STYLE ! 1160: * OF THE TARGET MACHINE. ADDITIONALLY SOME USER CONTROL IS ! 1161: * AVAILABLE BY USE OF CONTROL CARDS SO THAT CASE MAY BE ! 1162: * CONSIDERED SIGNIFICANT OR NOT AS DESIRED. ! 1163: * THE SPITBOL SOURCE ASSUMES THAT LOWER CASE LETTERS ARE ! 1164: * RELATED TO UPPER BY THE ADDITION OF A CONSTANT OFFSET. ! 1165: * IF THIS IS NOT SO, DEFINE TRANSLATIONS FOR CLU, CUL ! 1166: * OPCODES AND DEFINE CONDITIONAL ASSEMBLY SYMBOL .CSCV . ! 1167: EJC ! 1168: * ! 1169: * SECTION 6 - CONDITIONAL ASSEMBLY FEATURES ! 1170: * ! 1171: * SOME FEATURES OF THE INTERPRETER ARE APPLICABLE TO ONLY ! 1172: * CERTAIN TARGET MACHINES. THEY MAY BE INCORPORATED OR ! 1173: * OMITTED BY USE OF CONDITIONAL ASSEMBLY. THE FULL ! 1174: * FORM OF A CONDITION IS - ! 1175: * .IF CONDITIONAL ASSEMBLY SYMBOL (CAS) ! 1176: * .THEN ! 1177: * MINIMAL STATEMENTS1 (MS1) ! 1178: * .ELSE ! 1179: * MINIMAL STATEMENTS2 (MS2) ! 1180: * .FI ! 1181: * THE FOLLOWING RULES APPLY ! 1182: * 1. THE DIRECTIVES .IF, .THEN, .ELSE, .FI MUST ! 1183: * START IN COLUMN 1. ! 1184: * 2. THE CONDITIONAL ASSEMBLY SYMBOL MUST START WITH A ! 1185: * DOT IN COLUMN 8 FOLLOWED BY 4 LETTERS OR DIGITS E.G. ! 1186: * .CA$1 ! 1187: * 3. .THEN IS REDUNDANT AND MAY BE OMITTED IF WISHED. ! 1188: * 4. MS1, MS2 ARE ARBITRARY SEQUENCES OF MINIMAL ! 1189: * STATEMENTS EITHER OF WHICH MAY BE NULL OR MAY ! 1190: * CONTAIN FURTHER CONDITIONS. ! 1191: * 5. IF MS2 IS OMITTED, .ELSE MAY ALSO BE OMITTED. ! 1192: * 6. .FI IS REQUIRED. ! 1193: * 7. CONDITIONS MAY BE NESTED TO A DEPTH DETERMINED ! 1194: * BY THE TRANSLATOR (NOT LESS THAN 20, SAY). ! 1195: * ! 1196: * SELECTION OF THE ALTERNATIVES MS1, MS2 IS BY MEANS OF THE ! 1197: * DEFINE AND UNDEFINE DIRECTIVES OF FORM - ! 1198: * .DEF CAS ! 1199: * .UNDEF CAS ! 1200: * WHICH OBEY RULES 1. AND 2. ABOVE AND MAY OCCUR AT ANY ! 1201: * POINT IN A MINIMAL PROGRAM, INCLUDING WITHIN A CONDITION. ! 1202: * MULTIPLY DEFINING A SYMBOL IS AN ERROR. ! 1203: * UNDEFINING A SYMBOL WHICH IS NOT DEFINED IS NOT AN ERROR. ! 1204: * ! 1205: * THE EFFECT IS THAT IF A SYMBOL IS CURRENTLY DEFINED, ! 1206: * THEN IN ANY CONDITION DEPENDING ON IT, MS1 WILL BE ! 1207: * PROCESSED AND MS2 OMITTED. CONVERSELY IF IT IS UNDEFINED, ! 1208: * MS1 WILL BE OMITTED AND MS2 PROCESSED. ! 1209: * NESTING OF CONDITIONS IS SUCH THAT CONDITIONS ! 1210: * IN A SECTION NOT SELECTED FOR PROCESSING MUST NOT BE ! 1211: * EVALUATED. NESTED CONDITIONS MUST REMEMBER THEIR ! 1212: * ENVIRONMENT WHILST BEING PROCESSED. EFFECTIVELY THIS ! 1213: * IMPLIES USE OF A SCHEME BASED ON A STACK WITH .IF, .FI ! 1214: * MATCHING BY THE CONDITION PROCESSOR OF THE TRANSLATOR. ! 1215: EJC ! 1216: * ! 1217: * SECTION 7 - OPERAND FORMATS ! 1218: * ! 1219: * THE FOLLOWING SECTION DESCRIBES THE VARIOUS POSSIBILITIES ! 1220: * FOR OPERANDS OF INSTRUCTIONS AND ASSEMBLY OPERATIONS. ! 1221: * ! 1222: * 01 INT UNSIGNED INTEGER LE CFP$M ! 1223: * 02 DLBL SYMBOL DEFINED IN DEFINITIONS SEC ! 1224: * 03 WLBL LABEL IN WORKING STORAGE SECTION ! 1225: * 04 CLBL LABEL IN CONSTANT SECTION ! 1226: * 05 ELBL PROGRAM SECTION ENTRY LABEL ! 1227: * 06 PLBL PROGRAM SECTION LABEL (NON-ENTRY) ! 1228: * 07 X ONE OF THE THREE INDEX REGISTERS ! 1229: * 08 W ONE OF THE THREE WORK REGISTERS ! 1230: * 09 (X) LOCATION INDEXED BY X ! 1231: * 10 (X)+ LIKE (X) BUT POST INCREMENT X ! 1232: * 11 -(X) LIKE (X) BUT PREDECREMENT X ! 1233: * 12 INT(X) LOCATION INT WORDS BEYOND ADDR IN X ! 1234: * 13 DLBL(X) LOCATION DLBL WORDS PAST ADDR IN X ! 1235: * 14 CLBL(X) LOCATION (X) BAUS BEYOND CLBL ! 1236: * 15 WLBL(X) LOCATION (X) BAUS BEYOND WLBL ! 1237: * 16 INTEGER SIGNED INTEGER (DIC) ! 1238: * 17 REAL SIGNED REAL (DRC) ! 1239: * 18 =DLBL LOCATION CONTAINING DAC DLBL ! 1240: * 19 *DLBL LOCATION CONTAINING DAC CFP$B*DLBL ! 1241: * 20 =WLBL LOCATION CONTAINING DAC WLBL ! 1242: * 21 =CLBL LOCATION CONTAINING DAC CLBL ! 1243: * 22 =ELBL LOCATION CONTAINING DAC ELBL ! 1244: * 23 PNAM PROCEDURE LABEL (ON PRC INSTRUC) ! 1245: * 24 EQOP OPERAND FOR EQU INSTRUCTION ! 1246: * 25 PTYP PROCEDURE TYPE (SEE PRC) ! 1247: * 26 TEXT ARBITRARY TEXT (ERB,ERR,TTL) ! 1248: * 27 DTEXT DELIMITED TEXT STRING (DTC/DDC) ! 1249: * 28 RNAM ROUTINE NAME (ON AN RTN INSTRN) ! 1250: * 29 GLBL GLOBAL LABEL (SEE GLB) ! 1251: * ! 1252: * THE NUMBERS IN THE ABOVE LIST ARE USED IN SUBSEQUENT ! 1253: * DESCRIPTION AND IN SOME OF THE MINIMAL TRANSLATORS. ! 1254: EJC ! 1255: * ! 1256: * OPERAND FORMATS (CONTINUED) ! 1257: * ! 1258: * THE FOLLOWING SPECIAL SYMBOLS REFER TO A COLLECTION OF ! 1259: * THE LISTED POSSIBILITIES ! 1260: * ! 1261: * VAL 01,02 PREDEFINED VALUE ! 1262: * ! 1263: * VAL IS USED TO REFER TO A PREDEFINED ONE WORD ! 1264: * INTEGER VALUE IN THE RANGE 0 LE N LE CFP$M. ! 1265: * ! 1266: * REG 07,08 REGISTER ! 1267: * ! 1268: * REG IS USED TO DESCRIBE AN OPERAND WHICH CAN BE ! 1269: * ANY OF THE REGISTERS (XL,XR,XS,XT,WA,WB,WC). SUCH ! 1270: * AN OPERAND CAN HOLD A ONE WORD INTEGER (ADDRESS). ! 1271: * ! 1272: * OPC 09,10,11 CHARACTER ! 1273: * ! 1274: * OPC IS USED TO DESIGNATE A SPECIFIC CHARACTER ! 1275: * OPERAND FOR USE IN THE LCH AND SCH INSTRUCTIONS. ! 1276: * THE INDEX REGISTER REFERENCED MUST BE EITHER XR OR ! 1277: * XL (NOT XS,XT). SEE SECTION ON CHARACTER OPERATIONS. ! 1278: * ! 1279: * OPS 03,04,09,12,13,14,15 MEMORY REFERENCE ! 1280: * ! 1281: * OPS IS USED TO DESCRIBE AN OPERAND WHICH IS IN ! 1282: * MEMORY. THE OPERAND MAY BE ONE OR MORE WORDS LONG ! 1283: * DEPENDING ON THE DATA TYPE. IN THE CASE OF MULTIWORD ! 1284: * OPERANDS, THE ADDRESS GIVEN IS THE FIRST WORD. ! 1285: * ! 1286: * OPW AS FOR OPS + 08,10,11 FULL WORD ! 1287: * ! 1288: * OPW IS USED TO REFER TO AN OPERAND WHOSE CAPACITY IS ! 1289: * THAT OF A FULL MEMORY WORD. OPW INCLUDES ALL THE ! 1290: * POSSIBILITIES FOR OPS (THE REFERENCED WORD IS USED) ! 1291: * PLUS THE USE OF ONE OF THE THREE WORK REGISTERS ! 1292: * (WA,WB,WC). IN ADDITION, THE FORMATS (X)+ AND -(X) ! 1293: * ALLOW INDEXED OPERATIONS IN WHICH THE INDEX REGISTER ! 1294: * IS POPPED BY ONE WORD AFTER THE REFERENCE (X)+, ! 1295: * OR PUSHED BY ONE WORD BEFORE THE REFERENCE -(X) ! 1296: * THESE LATTER TWO FORMATS PROVIDE A FACILITY FOR ! 1297: * MANIPULATION OF STACKS. THE FORMAT DOES NOT IMPLY ! 1298: * A PARTICULAR DIRECTION IN WHICH STACKS MUST BUILD - ! 1299: * IT IS USED FOR COMPACTNESS. NOTE THAT THERE IS A ! 1300: * RESTRICTION WHICH DISALLOWS AN INSTRUCTION TO USE ! 1301: * AN INDEX REGISTER IN ONE OF THESE FORMATS ! 1302: * IN SOME OTHER MANNER IN THE SAME INSTRUCTION. ! 1303: * E.G. MOV XL,(XL)+ IS ILLEGAL. ! 1304: * THE FORMATS -(X) AND (X)+ MAY ALSO BE USED IN ! 1305: * PRE-DECREMENTATION, POST-INCREMENTATION TO ACCESS ! 1306: * THE ADJACENT CHARACTER OF A STRING. ! 1307: EJC ! 1308: * ! 1309: * OPERAND FORMATS (CONTINUED) ! 1310: * ! 1311: * OPN AS FOR OPW + 07 ONE WORD INTEGER ! 1312: * ! 1313: * OPN IS USED TO REPRESENT AN OPERAND LOCATION WHICH ! 1314: * CAN CONTAIN A ONE WORD INTEGER (E.G. AN ADDRESS). ! 1315: * THIS INCLUDES ALL THE POSSIBILITIES FOR OPW PLUS ! 1316: * THE USE OF ONE OF THE INDEX REGISTERS (XL,XR,XT, ! 1317: * XS). THE RANGE OF INTEGER VALUES IS 0 LE N LE CFP$M. ! 1318: * ! 1319: * OPV AS FOR OPN + 18-22 ONE WORD INTEGER VALUE ! 1320: * ! 1321: * OPV IS USED FOR AN OPERAND WHICH CAN YIELD A ONE ! 1322: * WORD INTEGER VALUE (E.G. AN ADDRESS). IT INCLUDES ! 1323: * ALL THE POSSIBILITIES FOR OPN (THE CURRENT VALUE OF ! 1324: * THE LOCATION IS USED) PLUS THE USE OF LITERALS. NOTE ! 1325: * THAT ALTHOUGH THE LITERAL FORMATS ARE DESCRIBED IN ! 1326: * TERMS OF A REFERENCE TO A LOCATION CONTAINING AN ! 1327: * ADDRESS CONSTANT, THIS LOCATION MAY NOT ACTUALLY ! 1328: * EXIST IN SOME IMPLEMENTATIONS SINCE ONLY THE VALUE ! 1329: * IS REQUIRED. A RESTRICTION IS PLACED ON LITERALS ! 1330: * WHICH MAY CONSIST ONLY OF DEFINED SYMBOLS AND ! 1331: * CERTAIN LABELS. CONSEQUENTLY SMALL INTEGERS TO BE ! 1332: * USED AS LITERALS MUST BE PRE-DEFINED, A DISCIPLINE ! 1333: * AIDING PROGRAM MAINTENANCE AND REVISION. ! 1334: * ! 1335: * ADDR 01,02,03,04,05 ADDRESS ! 1336: * ! 1337: * ADDR IS USED TO DESCRIBE AN EXPLICIT ADDRESS VALUE ! 1338: * (ONE WORD INTEGER VALUE) FOR USE WITH DAC. ! 1339: * ! 1340: * PGLB 06,29 LABEL OR GLOBAL LABEL ! 1341: * ! 1342: * **************************************************** ! 1343: * * IN THE FOLLOWING DESCRIPTIONS THE USAGE -- * ! 1344: * * (XL),(XR), ... ,(IA) * ! 1345: * * IN THE DESCRIPTIVE TEXT SIGNIFIES THE + ! 1346: * * CONTENTS OF THE STATED REGISTER. * ! 1347: * **************************************************** ! 1348: EJC ! 1349: * ! 1350: * SECTION 8 - LIST OF INSTRUCTION MNEMONICS ! 1351: * ! 1352: * THE FOLLOWING LIST INCLUDES ALL INSTRUCTION AND ! 1353: * ASSEMBLY OPERATION MNEMONICS IN ALPHABETICAL ORDER. ! 1354: * THE MNEMONICS ARE PRECEDED BY A NUMBER IDENTIFYING ! 1355: * THE FOLLOWING SECTION WHERE THE INSTRUCTION IS DESCRIBED. ! 1356: * A STAR (*) IS APPENDED TO THE MNEMONIC IF THE LAST ! 1357: * OPERAND MAY OPTIONALLY BE OMITTED. ! 1358: * SEE SECTION -15- FOR DETAILS OF STATEMENT FORMAT AND ! 1359: * COMMENT CONVENTIONS. ! 1360: * ! 1361: * 2.1 ADD OPV,OPN ADD ADDRESS ! 1362: * 4.2 ADI OPS ADD INTEGER ! 1363: * 5.3 ADR OPS ADD REAL ! 1364: * 7.1 ANB OPW,W AND BIT STRING ! 1365: * 2.17 AOV OPV,OPN,PLBL ADD ADDRESS, FAIL IF OVERFLOW ! 1366: * 2.16 BCT W,PLBL BRANCH AND COUNT ! 1367: * 2.5 BEQ OPN,OPV,PLBL BRANCH IF ADDRESS EQUAL ! 1368: * 2.8 BGE OPN,OPV,PLBL BRANCH IF ADDRESS GREATER OR EQUL ! 1369: * 2.7 BGT OPN,OPV,PLBL BRANCH IF ADDRESS GREATER ! 1370: * 2.12 BHI OPN,OPV,PLBL BRANCH IF ADDRESS HIGH ! 1371: * 2.10 BLE OPN,OPV,PLBL BRANCH IF ADDRESS LESS OR EQUAL ! 1372: * 2.11 BLO OPN,OPV,PLBL BRANCH IF ADDRESS LOW ! 1373: * 2.9 BLT OPN,OPV,PLBL BRANCH IF ADDRESS LESS THAN ! 1374: * 2.6 BNE OPN,OPV,PLBL BRANCH IF ADDRESS NOT EQUAL ! 1375: * 2.13 BNZ OPN,PLBL BRANCH IF ADDRESS NON-ZERO ! 1376: * 1.2 BRN PLBL BRANCH UNCONDITIONAL ! 1377: * 1.7 BRI OPN BRANCH INDIRECT ! 1378: * 1.3 BSW* X,VAL,PLBL BRANCH ON SWITCH VALUE ! 1379: * 8.9 BTC W CONVERT BAUS TO CHAR COUNT ! 1380: * 8.2 BTW REG CONVERT BAUS TO WORDS ! 1381: * 2.14 BZE OPN,PLBL BRANCH IF ADDRESS ZERO ! 1382: * 6.6 CEQ OPW,OPW,PLBL BRANCH IF CHARACTERS EQUAL ! 1383: * 10.1 CHK CHECK STACK OVERFLOW ! 1384: * 6.10 CLU W CONVERT LOWER TO UPPER CASE ! 1385: * 7.4 CMB W COMPLEMENT BIT STRING ! 1386: * 6.8 CMC PLBL,PLBL COMPARE CHARACTER STRINGS ! 1387: * 6.7 CNE OPW,OPW,PLBL BRANCH IF CHARACTERS NOT EQUAL ! 1388: * 6.5 CSC X COMPLETE STORE CHARACTERS ! 1389: * 8.8 CTB W,VAL CONVERT CHARACTER COUNT TO BAUS ! 1390: * 8.7 CTW W,VAL CONVERT CHARACTER COUNT TO WORDS ! 1391: * 6.11 CUL W CONVERT UPPER TO LOWER CASE ! 1392: * 8.12 CVD CONVERT BY DIVISION ! 1393: * 8.11 CVM PLBL CONVERT BY MULTIPLICATION ! 1394: * 11.1 DAC ADDR DEFINE ADDRESS CONSTANT ! 1395: * 11.5 DBC VAL DEFINE BIT STRING CONSTANT ! 1396: * 2.4 DCA OPN DECREMENT ADDRESS BY ONE WORD ! 1397: * 1.17 DCV OPN DECREMENT VALUE BY ONE ! 1398: * 11.6 DDC DTEXT DEFINE DISPLAY CONSTANT ! 1399: * 11.2 DIC INTEGER DEFINE INTEGER CONSTANT ! 1400: EJC ! 1401: * ! 1402: * ALPHABETICAL LIST OF MNEMONICS (CONTINUED) ! 1403: * ! 1404: * 11.3 DRC REAL DEFINE REAL CONSTANT ! 1405: * 11.4 DTC DTEXT DEFINE TEXT (CHARACTER) CONSTANT ! 1406: * 4.5 DVI OPS DIVIDE INTEGER ! 1407: * 5.6 DVR OPS DIVIDE REAL ! 1408: * 13.1 EJC EJECT ASSEMBLY LISTING ! 1409: * 14.2 END END OF ASSEMBLY ! 1410: * 1.13 ENP DEFINE END OF PROCEDURE ! 1411: * 1.6 ENT* VAL DEFINE ENTRY POINT ! 1412: * 12.1 EQU EQOP DEFINE SYMBOLIC VALUE ! 1413: * 1.15 ERB INT,TEXT ASSEMBLE ERROR CODE AND BRANCH ! 1414: * 1.14 ERR INT,TEXT ASSEMBLE ERROR CODE ! 1415: * 1.5 ESW END OF SWITCH LIST FOR BSW ! 1416: * 1.12 EXI* INT EXIT FROM PROCEDURE ! 1417: * 12.2 EXP PTYP,INT DEFINE EXTERNAL PROCEDURE ! 1418: * 2.3 ICA OPN INCREMENT ADDRESS BY ONE WORD ! 1419: * 12.5 GLB DEFINE GLOBAL LABEL ! 1420: * 3.4 ICP INCREMENT CODE POINTER ! 1421: * 1.16 ICV OPN INCREMENT VALUE BY ONE ! 1422: * 4.11 IEQ PLBL JUMP IF INTEGER ZERO ! 1423: * 1.4 IFF VAL,PLBL SPECIFY BRANCH FOR BSW ! 1424: * 4.12 IGE PLBL JUMP IF INTEGER NON-NEGATIVE ! 1425: * 4.13 IGT PLBL JUMP IF INTEGER POSITIVE ! 1426: * 4.14 ILE PLBL JUMP IF INTEGER NEGATIVE OR ZERO ! 1427: * 4.15 ILT PLBL JUMP IF INTEGER NEGATIVE ! 1428: * 4.16 INE PLBL JUMP IF INTEGER NON-ZERO ! 1429: * 4.9 INO PLBL JUMP IF NO INTEGER OVERFLOW ! 1430: * 12.3 INP PTYP,INT INTERNAL PROCEDURE ! 1431: * 12.4 INR INTERNAL ROUTINE ! 1432: * 4.10 IOV PLBL JUMP IF INTEGER OVERFLOW ! 1433: * 8.5 ITR CONVERT INTEGER TO REAL ! 1434: * 1.23 JMG GLBL JUMP TO GLOBAL LABEL ! 1435: * 1.9 JSR PNAM CALL PROCEDURE ! 1436: * 6.3 LCH REG,OPC LOAD CHARACTER ! 1437: * 3.1 LCP REG LOAD CODE POINTER REGISTER ! 1438: * 2.15 LCT W,OPV LOAD COUNTER FOR LOOP ! 1439: * 3.3 LCW REG LOAD NEXT CODE WORD ! 1440: * 4.1 LDI OPS LOAD INTEGER ! 1441: * 5.1 LDR OPS LOAD REAL ! 1442: * 1.8 LEI X LOAD ENTRY POINT ID ! 1443: * 7.6 LSH W,VAL LEFT SHIFT BIT STRING ! 1444: * 7.8 LSX W,X LEFT SHIFT INDEXED ! 1445: * 9.2 MCB MOVE CHARACTERS BACKWARDS ! 1446: * 8.4 MFI* OPN,PLBL CONVERT (IA) TO ADDRESS VALUE ! 1447: * 4.3 MLI OPS MULTIPLY INTEGER ! 1448: * 5.5 MLR OPS MULTIPLY REAL ! 1449: * 1.19 MNZ OPN MOVE NON-ZERO ! 1450: * 1.1 MOV OPV,OPN MOVE ! 1451: * 8.3 MTI OPN MOVE ADDRESS VALUE TO (IA) ! 1452: * 9.1 MVC MOVE CHARACTERS ! 1453: * 9.3 MVW MOVE WORDS ! 1454: * 9.4 MWB MOVE WORDS BACKWARDS ! 1455: * 4.8 NGI NEGATE INTEGER ! 1456: EJC ! 1457: * ! 1458: * ALPHABETICAL LIST OF MNEMONICS (CONTINUED) ! 1459: * ! 1460: * 5.9 NGR NEGATE REAL ! 1461: * 7.9 NZB W,PLBL JUMP IF NOT ALL ZERO BITS ! 1462: * 7.2 ORB OPW,W OR BIT STRINGS ! 1463: * 6.1 PLC* X,OPV PREPARE TO LOAD CHARACTERS ! 1464: * 1.10 PPM* PLBL PROVIDE PROCEDURE EXIT PARAMETER ! 1465: * 1.11 PRC PTYP,VAL DEFINE START OF PROCEDURE ! 1466: * 6.2 PSC* X,OPV PREPARE TO STORE CHARACTERS ! 1467: * 5.10 REQ PLBL JUMP IF REAL ZERO ! 1468: * 5.11 RGE PLBL JUMP IF REAL POSITIVE OR ZERO ! 1469: * 5.12 RGT PLBL JUMP IF REAL POSITIVE ! 1470: * 5.13 RLE PLBL JUMP IF REAL NEGATIVE OR ZERO ! 1471: * 5.14 RLT PLBL JUMP IF REAL NEGATIVE ! 1472: * 4.6 RMI OPS REMAINDER INTEGER ! 1473: * 5.15 RNE PLBL JUMP IF REAL NON-ZERO ! 1474: * 5.8 RNO PLBL JUMP IF NO REAL OVERFLOW ! 1475: * 5.7 ROV PLBL JUMP IF REAL OVERFLOW ! 1476: * 7.5 RSH W,VAL RIGHT SHIFT BIT STRING ! 1477: * 7.7 RSX W,X RIGHT SHIFT INDEXED ! 1478: * 8.6 RTI* PLBL CONVERT REAL TO INTEGER ! 1479: * 1.22 RTN DEFINE START OF ROUTINE ! 1480: * 4.4 SBI OPS SUBTRACT INTEGER ! 1481: * 5.4 SBR OPS SUBTRACT REALS ! 1482: * 6.4 SCH REG,OPC STORE CHARACTER ! 1483: * 3.2 SCP REG STORE CODE POINTER ! 1484: * 14.1 SEC DEFINE START OF ASSEMBLY SECTION ! 1485: * 1.20 SSL OPW SUBROUTINE STACK LOAD ! 1486: * 1.21 SSS OPW SUBROUTINE STACK STORE ! 1487: * 4.7 STI OPS STORE INTEGER ! 1488: * 5.2 STR OPS STORE REAL ! 1489: * 2.2 SUB OPV,OPN SUBTRACT ADDRESS ! 1490: * 6.9 TRC TRANSLATE CHARACTER STRING ! 1491: * 13.2 TTL TEXT SUPPLY ASSEMBLY TITLE ! 1492: * 8.1 WTB REG CONVERT WORDS TO BAUS ! 1493: * 8.10 WTC W CONVERT WORDS TO CHAR COUNT ! 1494: * 7.3 XOB OPW,W EXCLUSIVE OR BIT STRINGS ! 1495: * 1.18 ZER OPN ZEROISE INTEGER LOCATION ! 1496: * 7.11 ZGB OPN ZEROISE GARBAGE BITS ! 1497: * 7.10 ZRB W,PLBL JUMP IF ALL ZERO BITS ! 1498: EJC ! 1499: * ! 1500: * SECTION 9 - MINIMAL INSTRUCTIONS ! 1501: * ! 1502: * THE FOLLOWING DESCRIPTIONS ASSUME THE DEFINITIONS - ! 1503: * ! 1504: * ZEROE EQU 0 ! 1505: * UNITY EQU 1 ! 1506: * ! 1507: * -1- BASIC INSTRUCTION SET ! 1508: * ! 1509: * 1.1 MOV OPV,OPN MOVE ONE WORD VALUE ! 1510: * ! 1511: * MOV CAUSES THE VALUE OF OPERAND OPV TO BE SET AS ! 1512: * THE NEW CONTENTS OF OPERAND LOCATION OPN. IN THE ! 1513: * CASE WHERE OPN IS NOT AN INDEX REGISTER, ANY VALUE ! 1514: * WHICH CAN NORMALLY OCCUPY A MEMORY WORD (INCLUDING ! 1515: * A PART OF A MULTIWORD REAL OR INTEGER VALUE) ! 1516: * CAN BE TRANSFERRED USING MOV. IF THE TARGET LOCATION ! 1517: * OPN IS AN INDEX REGISTER, THEN OPV MUST SPECIFY AN ! 1518: * APPROPRIATE ONE WORD VALUE OR OPERAND CONTAINING ! 1519: * SUCH AN APPROPRIATE VALUE. ! 1520: * ! 1521: * 1.2 BRN PLBL UNCONDITIONAL BRANCH ! 1522: * ! 1523: * BRN CAUSES CONTROL TO BE PASSED TO THE INDICATED ! 1524: * LABEL IN THE PROGRAM SECTION. ! 1525: * ! 1526: * 1.3 BSW X,VAL,PLBL BRANCH ON SWITCH VALUE ! 1527: * 1.4 IFF VAL,PLBL PROVIDE BRANCH FOR SWITCH ! 1528: * IFF VAL,PLBL ... ! 1529: * ... ! 1530: * ... ! 1531: * 1.5 ESW END OF BRANCH SWITCH TABLE ! 1532: * ! 1533: * BSW,IFF,ESW PROVIDE A CAPABILITY FOR A SWITCHED ! 1534: * BRANCH SIMILAR TO A FORTRAN COMPUTED GOTO. THE ! 1535: * VAL ON THE BSW INSTRUCTION IS THE MAXIMUM NUMBER ! 1536: * OF BRANCHES. THE VALUE IN X RANGES FROM ZERO UP TO ! 1537: * BUT NOT INCLUDING THIS MAXIMUM. EACH IFF PROVIDES A ! 1538: * BRANCH. VAL MUST BE LESS THAN THAT GIVEN ON THE BSW ! 1539: * AND CONTROL GOES TO PLBL IF THE VALUE IN X MATCHES. ! 1540: * IF THE VALUE IN X DOES NOT CORRESPOND TO ANY OF THE ! 1541: * IFF ENTRIES, THEN CONTROL PASSES TO THE PLBL ON THE ! 1542: * BSW. THIS PLBL OPERAND MAY BE OMITTED IF THERE ARE ! 1543: * NO VALUES MISSING FROM THE LIST. ! 1544: * ! 1545: * IFF AND ESW MAY ONLY BE USED IN THIS CONTEXT. ! 1546: * EXECUTION OF BSW MAY DESTROY THE CONTENTS OF X. ! 1547: * THE IFF ENTRIES MAY BE IN ANY ORDER AND SINCE ! 1548: * A TRANSLATOR MAY THUS NEED TO STORE AND SORT THEM, ! 1549: * THE COMMENT FIELD IS RESTRICTED IN LENGTH (SEC 11). ! 1550: EJC ! 1551: * ! 1552: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1553: * ! 1554: * 1.6 ENT VAL DEFINE PROGRAM ENTRY POINT ! 1555: * ! 1556: * THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED ! 1557: * TO BE A PROGRAM ENTRY POINT (ELBL) WHICH CAN LATER ! 1558: * BE USED IN CONJUNCTION WITH THE BRI INSTRUCTION, ! 1559: * WHICH PROVIDES THE ONLY MEANS OF ENTERING THE ! 1560: * CODE. IT IS ILLEGAL TO FALL INTO CODE ! 1561: * IDENTIFIED BY AN ENTRY POINT. THE ! 1562: * ENTRY SYMBOL IS ASSIGNED AN ADDRESS WHICH NEED NOT ! 1563: * BE A MULTIPLE OF CFP$B BUT WHICH MUST BE IN THE ! 1564: * RANGE 0 LE CFP$M AND THE ADDRESS MUST NOT LIE WITHIN ! 1565: * THE ADDRESS RANGE OF THE ALLOCATED DATA AREA. ! 1566: * FURTHERMORE, ADDRESSES OF SUCCESSIVE ENTRY POINTS ! 1567: * MUST BE ASSIGNED IN SOME ASCENDING SEQUENCE SO ! 1568: * THAT THE ADDRESS COMPARISON INSTRUCTIONS CAN BE ! 1569: * USED TO TEST THE ORDER IN WHICH TWO ENTRY POINTS ! 1570: * OCCUR. THE SYMBOL VAL GIVES AN IDENTIFYING VALUE ! 1571: * TO THE ENTRY POINT WHICH CAN BE ACCESSED WITH THE ! 1572: * LEI INSTRUCTION. ! 1573: * NOTE - SUBJECT TO THE RESTRICTION BELOW, VAL MAY ! 1574: * BE OMITTED IF NO SUCH IDENTIFICATION IS NEEDED I.E. ! 1575: * IF NO LEI REFERENCES THE ENTRY POINT. FOR THIS ! 1576: * CASE, A TRANSLATION OPTIMISATION IS POSSIBLE IN ! 1577: * WHICH NO MEMORY NEED BE RESERVED FOR A NULL ! 1578: * IDENTIFICATION WHICH IS NEVER TO BE REFERENCED, BUT ! 1579: * ONLY PROVIDED THIS IS DONE SO AS NOT TO INTERFERE ! 1580: * WITH THE STRICTLY ASCENDING SEQUENCE OF ENTRY POINT ! 1581: * ADDRESSES. TO SIMPLIFY THIS OPTIMISATION FOR ALL ! 1582: * IMPLEMENTORS, THE FOLLOWING RESTRICTION IS OBSERVED ! 1583: * VAL MAY ONLY BE OMITTED IF THE ENTRY POINT IS ! 1584: * SEPARATED FROM A FOLLOWING ENTRY POINT BY A ! 1585: * NON-NULL MINIMAL CODE SEQUENCE. ! 1586: * ENTRY POINT ADDRESSES ARE ACCESSIBLE ONLY BY USE OF ! 1587: * LITERALS (=ELBL, SECTION 7) OR DAC CONSTANTS ! 1588: * (SECTION 8-11.1). ! 1589: * ! 1590: * 1.7 BRI OPN BRANCH INDIRECT ! 1591: * ! 1592: * OPN CONTAINS THE ADDRESS OF A PROGRAM ENTRY POINT ! 1593: * (SEE ENT). CONTROL IS PASSED TO THE EXECUTABLE ! 1594: * CODE STARTING AT THE ENTRY POINT ADDRESS. OPN IS ! 1595: * LEFT UNCHANGED. ! 1596: * ! 1597: * 1.8 LEI X LOAD ENTRY POINT IDENTIFICATION ! 1598: * ! 1599: * X CONTAINS THE ADDRESS OF AN ENTRY POINT FOR WHICH ! 1600: * AN IDENTIFYING VALUE WAS GIVEN ON THE THE ENT LINE. ! 1601: * LEI REPLACES THE CONTENTS OF X BY THIS VALUE. ! 1602: EJC ! 1603: * ! 1604: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1605: * ! 1606: * 1.9 JSR PNAM CALL PROCEDURE PNAM ! 1607: * 1.10 PPM PLBL PROVIDE EXIT PARAMETER ! 1608: * PPM PLBL ... ! 1609: * ... ! 1610: * PPM PLBL ... ! 1611: * ! 1612: * JSR CAUSES CONTROL TO BE PASSED TO THE NAMED ! 1613: * PROCEDURE. PNAM IS THE LABEL ON A PRC STATEMENT ! 1614: * ELSEWHERE IN THE PROGRAM SECTION (SEE PRC) ! 1615: * OR HAS BEEN DEFINED USING AN EXP INSTRUCTION. ! 1616: * THE PPM EXIT PARAMETERS FOLLOWING THE CALL GIVE ! 1617: * NAMES OF PROGRAM LOCATIONS (PLBL-S) TO WHICH ! 1618: * ALTERNATIVE EXI RETURNS OF THE CALLED PROCEDURE MAY ! 1619: * PASS CONTROL. THEY MAY OPTIONALLY BE REPLACED BY ! 1620: * ERROR RETURNS (SEE ERR). THE NUMBER OF EXIT ! 1621: * PARAMETERS FOLLOWING A JSR MUST EQUAL THE INT IN THE ! 1622: * PROCEDURE DEFINITION. THE OPERAND OF PPM MAY BE ! 1623: * OMITTED IF THE CORRESPONDING EXI RETURN IS CERTAIN ! 1624: * NOT TO BE TAKEN. ! 1625: * ! 1626: * 1.11 PRC PTYP,INT DEFINE START OF PROCEDURE ! 1627: * ! 1628: * THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED ! 1629: * AS THE NAME OF A PROCEDURE (PNAM) FOR USE WITH JSR. ! 1630: * A PROCEDURE IS A CONTIGUOUS SECTION OF INSTRUCTIONS ! 1631: * TO WHICH CONTROL MAY BE PASSED WITH A JSR ! 1632: * INSTRUCTION. THIS IS THE ONLY WAY IN WHICH THE ! 1633: * INSTRUCTIONS IN A PROCEDURE MAY BE EXECUTED. IT IS ! 1634: * NOT PERMITTED TO FALL INTO A PROCEDURE. ! 1635: * ALL PROCEDURES SHOULD BE NAMED IN SECTION 0 ! 1636: * INP STATEMENTS. ! 1637: * ! 1638: * INT IS THE NUMBER OF EXIT PARAMETERS (PPM-S) TO ! 1639: * BE USED IN JSR CALLS. ! 1640: * ! 1641: * THERE ARE THREE POSSIBILITIES FOR PTYP, EACH ! 1642: * CONSISTING OF A SINGLE LETTER AS FOLLOWS. ! 1643: * ! 1644: * R RECURSIVE ! 1645: * ! 1646: * THE RETURN POINT (ONE OR MORE WORDS) IS STORED ON ! 1647: * THE STACK AS THOUGH ONE OR MORE MOV ..,-(XS) ! 1648: * INSTRUCTIONS WERE EXECUTED. ! 1649: EJC ! 1650: * ! 1651: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1652: * ! 1653: * N NON-RECURSIVE ! 1654: * ! 1655: * THE RETURN POINT IS TO BE STORED EITHER ! 1656: * (1) IN A LOCAL STORAGE WORD ASSOCIATED ! 1657: * WITH THE PROCEDURE AND NOT DIRECTLY ! 1658: * AVAILABLE TO THE PROGRAM IN ANY OTHER MANNER OR ! 1659: * (2) ON A SUBROUTINE LINK STACK QUITE DISTINCT FROM ! 1660: * THE MINIMAL STACK ADDRESSED BY XS. ! 1661: * IT IS AN ERROR TO USE THE STACK FOR N-LINKS, SINCE ! 1662: * PROCEDURE PARAMETERS OR RESULTS MAY BE PASSED VIA ! 1663: * THE STACK. ! 1664: * IF METHOD (2) IS USED FOR LINKS, ERROR EXITS ! 1665: * (ERB,ERR) FROM A PROCEDURE WILL NECESSITATE LINK ! 1666: * STACK RESETTING. THE SSL AND SSS ORDERS PROVIDED ! 1667: * FOR THIS MAY BE REGARDED AS NO-OPS FOR ! 1668: * IMPLEMENTATIONS USING METHOD (1). ! 1669: * ! 1670: * E EITHER ! 1671: * ! 1672: * THE RETURN POINT MAY BE STORED IN EITHER MANNER ! 1673: * ACCORDING TO EFFICIENCY REQUIREMENTS OF THE ACTUAL ! 1674: * PHYSICAL MACHINE USED FOR THE IMPLEMENTATION. NOTE ! 1675: * THAT PROGRAMMING OF E TYPE PROCEDURES MUST BE ! 1676: * INDEPENDENT OF THE ACTUAL IMPLEMENTATION. ! 1677: * ! 1678: * THE ACTUAL FORM OF THE RETURN POINT IS UNDEFINED. ! 1679: * HOWEVER, EACH WORD STORED ON THE STACK FOR AN ! 1680: * R-TYPE CALL MUST MEET THE FOLLOWING REQUIREMENTS. ! 1681: * ! 1682: * 1) IT CAN BE HANDLED AS AN ADDRESS ! 1683: * AND PLACED IN AN INDEX REGISTER. ! 1684: * ! 1685: * 2) WHEN USED AS AN OPERAND IN AN ! 1686: * ADDRESS COMPARISON INSTRUCTION, IT ! 1687: * MUST NOT APPEAR TO LIE WITHIN ! 1688: * THE ALLOCATED DATA AREA. ! 1689: * ! 1690: * 3) IT IS NOT REQUIRED TO APPEAR ! 1691: * TO LIE WITHIN THE PROGRAM SECTION. ! 1692: EJC ! 1693: * ! 1694: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1695: * ! 1696: * 1.12 EXI INT EXIT FROM PROCEDURE ! 1697: * ! 1698: * THE PPM AND ERR PARAMETERS FOLLOWING A JSR ARE ! 1699: * NUMBERED STARTING FROM 1. EXI INT CAUSES CONTROL ! 1700: * TO BE RETURNED TO THE INT-TH SUCH PARAM. EXI 1 GIVES ! 1701: * CONTROL TO THE PLBL OF THE FIRST PPM AFTER THE JSR. ! 1702: * IF INT IS OMITTED, CONTROL IS PASSED BACK PAST THE ! 1703: * LAST EXIT PARAMETER (OR PAST THE JSR IF THERE ARE ! 1704: * NONE). FOR R AND E TYPE PROCEDURES, THE ! 1705: * STACK POINTER XS MUST BE SET TO ITS APPROPRIATE ! 1706: * ENTRY VALUE BEFORE EXECUTING AN EXI INSTRUCTION. ! 1707: * IN THIS CASE, EXI REMOVES RETURN POINTS FROM THE ! 1708: * STACK IF ANY ARE STORED THERE SO THAT THE STACK ! 1709: * POINTER IS RESTORED TO ITS CALLING VALUE. ! 1710: * ! 1711: * 1.13 ENP DEFINE END OF PROCEDURE BODY ! 1712: * ! 1713: * ENP DELIMITS A PROCEDURE BODY AND MAY NOT ACTUALLY ! 1714: * BE EXECUTED, HENCE IT MUST HAVE NO LABEL. ! 1715: * ! 1716: * 1.14 ERR INT,TEXT PROVIDE ERROR RETURN ! 1717: * ! 1718: * ERR MAY REPLACE AN EXIT PARAMETER (PPM) IN ! 1719: * ANY PROCEDURE CALL. THE INT ARGUMENT IS A UNIQUE ! 1720: * ERROR CODE IN 0 TO 899. ! 1721: * THE TEXT SUPPLIED AS THE OTHER OPERAND IS ! 1722: * ARBITRARY TEXT IN THE FORTRAN CHARACTER SET AND ! 1723: * MAY BE USED IN CONSTRUCTING A FILE OF ERROR ! 1724: * MESSAGES FOR DOCUMENTING PURPOSES OR FOR BUILDING ! 1725: * A DIRECT ACCESS OR OTHER FILE OF MESSAGES TO BE ! 1726: * USED BY THE ERROR HANDLING CODE. ! 1727: * IN THE EVENT THAT AN EXI ATTEMPTS ! 1728: * TO RETURN CONTROL VIA AN EXIT PARAMETER TO ! 1729: * AN ERR, CONTROL IS INSTEAD PASSED TO THE FIRST ! 1730: * INSTRUCTION IN THE ERROR SECTION (WHICH FOLLOWS THE ! 1731: * PROGRAM SECTION) WITH THE ERROR CODE IN WA. ! 1732: * ! 1733: * 1.15 ERB INT,TEXT ERROR BRANCH ! 1734: * ! 1735: * THIS INSTRUCTION RESEMBLES ERR EXCEPT THAT IT MAY ! 1736: * OCCUR AT ANY POINT WHERE A BRANCH IS PERMITTED. ! 1737: * IT EFFECTS A TRANSFER OF CONTROL TO THE ERROR ! 1738: * SECTION WITH THE ERROR CODE IN WA. ! 1739: * ! 1740: * 1.16 ICV OPN INCREMENT VALUE BY ONE ! 1741: * ! 1742: * ICV INCREMENTS THE VALUE OF THE OPERAND BY UNITY. ! 1743: * IT IS EQUIVALENT TO ADD =UNITY,OPN ! 1744: * ! 1745: * 1.17 DCV OPN DECREMENT VALUE BY ONE ! 1746: * ! 1747: * DCV DECREMENTS THE VALUE OF THE OPERAND BY UNITY. ! 1748: * IT IS EQUIVALENT TO SUB =UNITY,OPN ! 1749: EJC ! 1750: * ! 1751: * BASIC INSTRUCTIONS (CONTINUED) ! 1752: * ! 1753: * 1.18 ZER OPN ZEROISE OPN ! 1754: * ! 1755: * ZER IS EQUIVALENT TO MOV =ZEROE,OPN ! 1756: * ! 1757: * 1.19 MNZ OPN MOVE NON-ZERO TO OPN ! 1758: * ! 1759: * ANY NON-ZERO COLLECTABLE VALUE MAY USED, FOR WHICH ! 1760: * THE OPCODES BNZ/BZE WILL BRANCH/FAIL TO BRANCH. ! 1761: * ! 1762: * 1.20 SSL OPW SUBROUTINE STACK LOAD ! 1763: * ! 1764: * 1.21 SSS OPW SUBROUTINE STACK STORE ! 1765: * ! 1766: * THIS PAIR OF OPERATIONS IS PROVIDED TO MAKE POSSIBLE ! 1767: * THE USE OF A LOCAL STACK TO HOLD SUBROUTINE (S-R) ! 1768: * RETURN LINKS FOR N-TYPE PROCEDURES. SSS STORES THE ! 1769: * S-R STACK POINTER IN OPW AND SSL LOADS THE S-R ! 1770: * STACK POINTER FROM OPW. BY USING SSS IN THE MAIN ! 1771: * PROGRAM OR ON ENTRY TO A PROCEDURE WHICH SHOULD ! 1772: * REGAIN CONTROL ON OCCURRENCE OF AN ERR OR ERB AND BY ! 1773: * USE OF SSL IN THE ERROR PROCESSING SECTIONS THE ! 1774: * S-R STACK POINTER CAN BE RESTORED GIVING A LINK ! 1775: * STACK CLEANED UP READY FOR RESUMED EXECUTION. ! 1776: * THE FORM OF THE LINK STACK POINTER IS UNDEFINED IN ! 1777: * MINIMAL (IT IS LIKELY TO BE A PRIVATE REGISTER ! 1778: * KNOWN TO THE TRANSLATOR) AND THE ONLY REQUIREMENT ! 1779: * IS THAT IT SHOULD FIT INTO A SINGLE FULL WORD. ! 1780: * SSL AND SSS ARE NO-OPS IF A PRIVATE LINK STACK IS ! 1781: * NOT USED. ! 1782: * ! 1783: * 1.22 RTN DEFINE START OF ROUTINE ! 1784: * ! 1785: * A ROUTINE IS A CODE CHUNK USED FOR SIMILAR PURPOSES ! 1786: * TO A PROCEDURE. HOWEVER IT IS ENTERED BY ANY TYPE OF ! 1787: * CONDITIONAL OR UNCONDITIONAL BRANCH (NOT BY JSR). ON ! 1788: * TERMINATION IT PASSES CONTROL BY A BRANCH (OFTEN ! 1789: * BRI THROUGH A CODE WORD) OR EVEN PERMITS CONTROL ! 1790: * TO DROP THROUGH TO ANOTHER ROUTINE. NO RETURN LINK ! 1791: * EXISTS AND THE END OF A ROUTINE IS NOT MARKED BY ! 1792: * AN EXPLICIT OPCODE (COMPARE ENP). ! 1793: * ALL ROUTINES SHOULD BE NAMED IN SECTION 0 ! 1794: * INR STATEMENTS. ! 1795: * ! 1796: * 1.23 JMG GLBL JUMP GLOBAL (I.E. NON LOCAL) ! 1797: * ! 1798: * PLBL-S ARE INTENDED FOR LOCAL BRANCHING WITHIN ! 1799: * PROCEDURES AND ROUTINES. OCCASIONALLY (EG ERROR ! 1800: * RECOVERY) IT MAY BE PERMISSIBLE TO HAVE NON LOCAL ! 1801: * BRANCHES. THE DESTINATION OF THIS INSTRUCTION IS A ! 1802: * LABEL NOTED AS BEING GLOBAL BY APPEARING IN THE ! 1803: * PROCEDURES SECTION LABELLING A GLB OPCODE. ! 1804: EJC ! 1805: * ! 1806: * -2- OPERATIONS ON ONE WORD INTEGER VALUES (ADDRESSES) ! 1807: * ! 1808: * 2.1 ADD OPV,OPN ADDS OPV TO THE VALUE IN OPN AND ! 1809: * STORES THE RESULT IN OPN. UNDEFINED ! 1810: * IF THE RESULT EXCEEDS CFP$M. ! 1811: * ! 1812: * 2.2 SUB OPV,OPN SUBTRACTS OPV FROM OPN. STORES THE ! 1813: * RESULT IN OPN. UNDEFINED IF THE ! 1814: * RESULT IS NEGATIVE. ! 1815: * ! 1816: * 2.3 ICA OPN INCREMENT ADDRESS IN OPN ! 1817: * EQUIVALENT TO ADD *UNITY,OPN ! 1818: * ! 1819: * 2.4 DCA OPN DECREMENT ADDRESS IN OPN ! 1820: * EQUIVALENT TO SUB *UNITY,OPN ! 1821: * ! 1822: * 2.5 BEQ OPN,OPV,PLBL BRANCH TO PLBL IF OPN EQ OPV ! 1823: * 2.6 BNE OPN,OPV,PLBL BRANCH TO PLBL IF OPN NE OPV ! 1824: * 2.7 BGT OPN,OPV,PLBL BRANCH TO PLBL IF OPN GT OPV ! 1825: * 2.8 BGE OPN,OPV,PLBL BRANCH TO PLBL IF OPN GE OPV ! 1826: * 2.9 BLT OPN,OPV,PLBL BRANCH TO PLBL IF OPN LT OPV ! 1827: * 2.10 BLE OPN,OPV,PLBL BRANCH TO PLBL IF OPN LE OPV ! 1828: * 2.11 BLO OPN,OPV,PLBL EQUIVALENT TO BLT OR BLE ! 1829: * 2.12 BHI OPN,OPV,PLBL EQUIVALENT TO BGT OR BGE ! 1830: * ! 1831: * THE ABOVE INSTRUCTIONS COMPARE TWO ADDRESS ! 1832: * VALUES AS UNSIGNED INTEGER VALUES. ! 1833: * THE BLO AND BHI INSTRUCTIONS ARE USED IN CASES WHERE ! 1834: * THE EQUAL CONDITION EITHER DOES NOT OCCUR OR CAN ! 1835: * RESULT EITHER IN A BRANCH OR NO BRANCH. THIS AVOIDS ! 1836: * INEFFICIENT TRANSLATIONS IN SOME IMPLEMENTATIONS. ! 1837: * ! 1838: * 2.13 BNZ OPN,PLBL EQUIVALENT TO BNE OPN,=ZEROE,PLBL ! 1839: * ! 1840: * 2.14 BZE OPN,PLBL EQUIVALENT TO BEQ OPN,=ZEROE,PLBL ! 1841: * ! 1842: * ! 1843: * 2.15 LCT W,OPV LOAD COUNTER FOR BCT ! 1844: * ! 1845: * LCT LOADS A COUNTER VALUE FOR USE WITH THE BCT ! 1846: * INSTRUCTION. THE VALUE IN OPV IS THE NUMBER OF LOOPS ! 1847: * TO BE EXECUTED. THE VALUE IN W AFTER THIS OPERATION ! 1848: * IS AN UNDEFINED ONE WORD INTEGER QUANTITY. ! 1849: * ! 1850: * 2.16 BCT W,PLBL BRANCH AND COUNT ! 1851: * ! 1852: * BCT USES THE COUNTER VALUE IN W TO BRANCH THE ! 1853: * REQUIRED NUMBER OF TIMES AND THEN FINALLY TO FALL ! 1854: * THROUGH TO THE NEXT INSTRUCTION. BCT CAN ONLY BE ! 1855: * USED FOLLOWING AN APPROPRIATE LCT INSTRUCTION. ! 1856: * THE VALUE IN W AFTER EXECUTION OF BCT IS UNDEFINED. ! 1857: * ! 1858: * 2.17 AOV OPV,OPN,PLBL ADD WITH OVERFLOW TEST ! 1859: * ! 1860: * ADDS OPV TO THE VALUE IN OPN AND STORES RESULT IN ! 1861: * OPN. BRANCHES TO PLBL IF RESULT EXCEEDS CFP$M ! 1862: * WITH RESULT IN OPN UNDEFINED. CF. ADD. ! 1863: EJC ! 1864: * ! 1865: * -3- OPERATIONS ON THE CODE POINTER REGISTER (CP) ! 1866: * ! 1867: * THE CODE POINTER REGISTER PROVIDES A PSUEDO ! 1868: * INSTRUCTION COUNTER FOR USE IN AN INTERPRETOR. IT ! 1869: * MAY BE IMPLEMENTED AS A REAL REGISTER OR AS A ! 1870: * MEMORY LOCATION, BUT IN EITHER CASE IT IS SEPARATE ! 1871: * FROM ANY OTHER REGISTER. THE VALUE IN THE CODE ! 1872: * POINTER REGISTER IS ALWAYS A WORD ADDRESS (I.E. ! 1873: * A ONE WORD INTEGER WHICH IS A MULTIPLE OF CFP$B). ! 1874: * ! 1875: * 3.1 LCP REG LOAD CODE POINTER REGISTER ! 1876: * THIS INSTRUCTION CAUSES THE CODE ! 1877: * POINTER REGISTER TO BE SET FROM ! 1878: * THE VALUE IN REG WHICH IS UNCHANGED ! 1879: * ! 1880: * 3.2 SCP REG STORE CODE POINTER REGISTER ! 1881: * THIS INSTRUCTION LOADS THE CURRENT ! 1882: * VALUE IN THE CODE POINTER REGISTER ! 1883: * INTO REG. (CP) IS UNCHANGED. ! 1884: * ! 1885: * 3.3 LCW REG LOAD NEXT CODE WORD ! 1886: * THIS INSTRUCTION CAUSES THE WORD ! 1887: * POINTED TO BY CP TO BE LOADED INTO ! 1888: * THE INDICATED REG. THE VALUE IN CP ! 1889: * IS THEN INCREMENTED BY ONE WORD. ! 1890: * EXECUTION OF LCW MAY DESTROY XL. ! 1891: * ! 1892: * 3.4 ICP INCREMENT CP BY ONE WORD ! 1893: * ! 1894: * ON MACHINES WITH MORE THAN THREE INDEX REGISTERS, ! 1895: * CP CAN BE TREATED SIMPLY AS AN INDEX REGISTER. ! 1896: * IN THIS CASE, THE FOLLOWING EQUIVALENCES APPLY. ! 1897: * ! 1898: * LCP REG IS LIKE MOV REG,CP ! 1899: * SCP REG IS LIKE MOV CP,REG ! 1900: * LCW REG IS LIKE MOV (CP)+,REG ! 1901: * ICP IS LIKE ICA CP ! 1902: * ! 1903: * SINCE LCW IS ALLOWED TO DESTROY XL, THE FOLLOWING ! 1904: * IMPLEMENTATION USING A WORK LOCATION CP$$$ CAN ! 1905: * ALSO BE USED. ! 1906: * ! 1907: * LCP REG MOV REG,CP$$$ ! 1908: * ! 1909: * SCP REG MOV CP$$$,REG ! 1910: * ! 1911: * LCW REG MOV CP$$$,XL ! 1912: * MOV (XL)+,REG ! 1913: * MOV XL,CP$$$ ! 1914: * ! 1915: * ICP ICA CP$$$ ! 1916: EJC ! 1917: * ! 1918: * -4- OPERATIONS ON SIGNED INTEGER VALUES ! 1919: * ! 1920: * 4.1 LDI OPS LOAD INTEGER ACCUMULATOR FROM OPS ! 1921: * 4.2 ADI OPS ADD OPS TO INTEGER ACCUMULATOR ! 1922: * 4.3 MLI OPS MULTIPLY INTEGER ACCUMULATOR BY OPS ! 1923: * 4.4 SBI OPS SUBTRACT OPS FROM INT ACCUMULATOR ! 1924: * 4.5 DVI OPS DIVIDE INTEGER ACCUMULATOR BY OPS ! 1925: * 4.6 RMI OPS SET INT ACCUM TO MOD(INTACC,OPS) ! 1926: * 4.7 STI OPS STORE INTEGER ACCUMULATOR AT OPS ! 1927: * 4.8 NGI NEGATE THE VALUE IN THE INTEGER ! 1928: * ACCUMULATOR (CHANGE ITS SIGN) ! 1929: * ! 1930: * THE EQUATION SATISFIED BY OPERANDS AND RESULTS OF ! 1931: * DVI AND RMI IS ! 1932: * DIV = QOT * OPS + REM WHERE ! 1933: * DIV = DIVIDEND IN INTEGER ACCUMULATOR ! 1934: * QOT = QUOTIENT LEFT IN IA BY DIV ! 1935: * OPS = THE DIVISOR ! 1936: * REM = REMAINDER LEFT IN IA BY RMI ! 1937: * THE SIGN OF THE RESULT OF DVI IS + IF (IA) AND (OPS) ! 1938: * HAVE THE SAME SIGN AND IS - IF THEY HAVE OPPOSITE ! 1939: * SIGNS. THE SIGN OF (IA) IS ALWAYS USED AS THE SIGN ! 1940: * OF THE RESULT OF REM. ! 1941: * ASSUMING IN EACH CASE THAT IA CONTAINS THE NUMBER ! 1942: * SPECIFIED IN PARENTHESES AND THAT SEVEN AND MSEVN ! 1943: * HOLD +7 AND -7 RESP. THE ALGORITHM IS ILLUSTRATED ! 1944: * BELOW. ! 1945: * (IA = 13) ! 1946: * DVI SEVEN IA = 1 ! 1947: * RMI SEVEN IA = 6 ! 1948: * DVI MSEVN IA = -1 ! 1949: * RMI MSEVN IA = 6 ! 1950: * (IA = -13) ! 1951: * DVI SEVEN IA = -1 ! 1952: * RMI SEVEN IA = -6 ! 1953: * DVI MSEVN IA = 1 ! 1954: * RMI MSEVN IA = -6 ! 1955: EJC ! 1956: * ! 1957: * THE ABOVE INSTRUCTIONS OPERATE ON A FULL RANGE OF ! 1958: * SIGNED INTEGER VALUES. WITH THE EXCEPTION OF LDI AND ! 1959: * STI, THESE INSTRUCTIONS MAY CAUSE INTEGER OVERFLOW ! 1960: * BY ATTEMPTING TO PRODUCE AN UNDEFINED OR OUT OF ! 1961: * RANGE RESULT IN WHICH CASE INTEGER OVERFLOW IS SET, ! 1962: * THE RESULT IN (IA) IS UNDEFINED AND THE FOLLOWING ! 1963: * INSTRUCTION MUST BE IOV OR INO. ! 1964: * PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES ! 1965: * HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO ! 1966: * CONDITIONS. ! 1967: * ! 1968: * 4.9 INO PLBL JUMP TO PLBL IF NO INTEGER OVERFLOW ! 1969: * 4.10 IOV PLBL JUMP TO PLBL IF INTEGER OVERFLOW ! 1970: * ! 1971: * THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY ! 1972: * FOLLOWING AN INSTRUCTION WHICH CAN CAUSE INTEGER ! 1973: * OVERFLOW (ADI, SBI, MLI, DVI, RMI, NGI) AND ! 1974: * TEST THE RESULT OF THE PRECEDING INSTRUCTION. ! 1975: * IOV AND INO MAY NOT HAVE LABELS. ! 1976: * ! 1977: * 4.11 IEQ PLBL JUMP TO PLBL IF (IA) EQ 0 ! 1978: * 4.12 IGE PLBL JUMP TO PLBL IF (IA) GE 0 ! 1979: * 4.13 IGT PLBL JUMP TO PLBL IF (IA) GT 0 ! 1980: * 4.14 ILE PLBL JUMP TO PLBL IF (IA) LE 0 ! 1981: * 4.15 ILT PLBL JUMP TO PLBL IF (IA) LT 0 ! 1982: * 4.16 INE PLBL JUMP TO PLBL IF (IA) NE 0 ! 1983: * ! 1984: * THE ABOVE CONDITIONAL JUMP INSTRUCTIONS DO ! 1985: * NOT CHANGE THE CONTENTS OF THE ACCUMULATOR. ! 1986: * ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO ! 1987: * PRODUCE NEGATIVE ZERO IN IA PROVIDED THESE ! 1988: * INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE. ! 1989: EJC ! 1990: * ! 1991: * -5- OPERATIONS ON REAL VALUES ! 1992: * ! 1993: * 5.1 LDR OPS LOAD REAL ACCUMULATOR FROM OPS ! 1994: * 5.2 STR OPS STORE REAL ACCUMULATOR AT OPS ! 1995: * 5.3 ADR OPS ADD OPS TO REAL ACCUMULATOR ! 1996: * 5.4 SBR OPS SUBTRACT OPS FROM REAL ACCUMULATOR ! 1997: * 5.5 MLR OPS MULTIPLY REAL ACCUMULATOR BY OPS ! 1998: * 5.6 DVR OPS DIVIDE REAL ACCUMULATOR BY OPS ! 1999: * ! 2000: * IF THE RESULT OF ANY OF THE ABOVE OPERATIONS CAUSES ! 2001: * UNDERFLOW, THE RESULT YIELDED IS 0.0. ! 2002: * ! 2003: * IF THE RESULT OF ANY OF THE ABOVE OPERATIONS IS ! 2004: * UNDEFINED OR OUT OF RANGE, REAL OVERFLOW IS SET, ! 2005: * THE CONTENTS OF (RA) ARE UNDEFINED AND THE FOLLOWING ! 2006: * INSTRUCTION MUST BE EITHER ROV OR RNO. ! 2007: * PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES ! 2008: * HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO ! 2009: * CONDITIONS. ! 2010: * ! 2011: * 5.7 ROV PLBL JUMP TO PLBL IF REAL OVERFLOW ! 2012: * 5.8 RNO PLBL JUMP TO PLBL IF NO REAL OVERFLOW ! 2013: * ! 2014: * THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY ! 2015: * FOLLOWING AN INSTRUCTION WHICH CAN CAUSE REAL ! 2016: * OVERFLOW (ADR,SBR,MLR,DVR). ! 2017: * ! 2018: * 5.9 NGR NEGATE REAL ACCUM (CHANGE SIGN) ! 2019: * ! 2020: * 5.10 REQ PLBL JUMP TO PLBL IF (RA) EQ 0.0 ! 2021: * 5.11 RGE PLBL JUMP TO PLBL IF (RA) GE 0.0 ! 2022: * 5.12 RGT PLBL JUMP TO PLBL IF (RA) GT 0.0 ! 2023: * 5.13 RLE PLBL JUMP TO PLBL IF (RA) LE 0.0 ! 2024: * 5.14 RLT PLBL JUMP TO PLBL IF (RA) LT 0.0 ! 2025: * 5.15 RNE PLBL JUMP TO PLBL IF (RA) NE 0.0 ! 2026: * ! 2027: * THE ABOVE CONDITIONAL INSTRUCTIONS DO NOT AFFECT ! 2028: * THE VALUE STORED IN THE REAL ACCUMULATOR. ! 2029: * ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO ! 2030: * PRODUCE NEGATIVE ZERO IN RA PROVIDED THESE ! 2031: * INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE. ! 2032: EJC ! 2033: * ! 2034: * -6- OPERATIONS ON CHARACTER VALUES ! 2035: * ! 2036: * CHARACTER OPERATIONS EMPLOY THE CONCEPT OF A ! 2037: * CHARACTER POINTER WHICH USES EITHER ! 2038: * INDEX REGISTER XR OR XL (NOT XS). ! 2039: * ! 2040: * A CHARACTER POINTER POINTS TO A SPECIFIC CHARACTER ! 2041: * IN A STRING OF CHARACTERS STORED CFP$C CHARS TO A ! 2042: * WORD. THE ONLY OPERATIONS PERMITTED ON A CHARACTER ! 2043: * POINTER ARE LCH AND SCH. IN PARTICULAR, A CHARACTER ! 2044: * POINTER MAY NOT EVEN BE MOVED WITH MOV. ! 2045: * ! 2046: * RESTRICTION 1. ! 2047: * -------------- ! 2048: * IT IS IMPORTANT WHEN CODING IN MINIMAL TO ENSURE ! 2049: * THAT NO ACTION OCCURRING BETWEEN THE INITIAL USE OF ! 2050: * PLC OR PSC AND THE EVENTUAL CLEARING OF XL OR XR ON ! 2051: * COMPLETION OF CHARACTER OPERATIONS CAN INITIATE A ! 2052: * GARBAGE COLLECTION. THE LATTER OF COURSE COULD CAUSE ! 2053: * THE ADDRESSED CHARACTERS TO BE MOVED LEAVING THE ! 2054: * CHARACTER POINTERS POINTING TO RUBBISH. ! 2055: * ! 2056: * RESTRICTION 2. ! 2057: * -------------- ! 2058: * A FURTHER RESTRICTION TO BE OBSERVED IN CODE ! 2059: * HANDLING CHARACTER STRINGS, IS THAT STRINGS BUILT ! 2060: * DYNAMICALLY SHOULD BE RIGHT PADDED WITH ZERO ! 2061: * CHARACTERS TO A FULL WORD BOUNDARY TO PERMIT EASY ! 2062: * HASHING AND USE OF CEQ OR CNE IN TESTING STRINGS ! 2063: * FOR EQUALITY. ! 2064: * ! 2065: * 6.1 PLC X,OPV PREPARE CH PTR FOR LCH,CMC,MVC,TRC ! 2066: * ! 2067: * 6.2 PSC X,OPV PREPARE CHAR. PTR FOR SCH,MVC. ! 2068: * ! 2069: * OPV CAN BE OMITTED IF IT IS ZERO. ! 2070: * THE CHAR. INITIALLY ADDRESSED IS DETERMINED BY THE ! 2071: * WORD ADDRESS IN X AND THE INTEGER OFFSET OPV. ! 2072: * THERE IS AN AUTOMATIC IMPLIED OFFSET OF CFP$F BAUS. ! 2073: * CFP$F IS USED TO FORMALLY INTRODUCE INTO MINIMAL A ! 2074: * VALUE NEEDED IN TRANSLATING THESE OPCODES WHICH, ! 2075: * SINCE MINIMAL ITSELF DOES NOT PRESCRIBE A STRING ! 2076: * STRUCTURE IN DETAIL, DEPENDS ON THE CHOICE OF A DATA ! 2077: * STRUCTURE FOR STRINGS IN THE MINIMAL PROGRAM. ! 2078: * E.G. IF CFP$B = CFP$C = 3, CFP$F = 6, NUM01 = 1, XL ! 2079: * POINTS TO A SERIES OF 4 WORDS, ABC/DEF/GHI/JKL, THEN ! 2080: * PLC XL,=NUM01 ! 2081: * POINTS TO H. ! 2082: EJC ! 2083: * ! 2084: * -6- OPERATIONS ON CHARACTER VALUES (CONTINUED) ! 2085: * ! 2086: * 6.3 LCH REG,OPC LOAD CHARACTER INTO REG ! 2087: * ! 2088: * 6.4 SCH REG,OPC STORE CHARACTER FROM REG ! 2089: * ! 2090: * THESE OPERATIONS ARE DEFINED SUCH THAT THE CHARACTER ! 2091: * IS RIGHT JUSTIFIED IN REGISTER REG WITH ZERO BITS TO ! 2092: * THE LEFT. AFTER LCH FOR EXAMPLE, IT IS LEGITIMATE ! 2093: * TO REGARD REG AS CONTAINING THE ORDINAL INTEGER ! 2094: * CORRESPONDING TO THE CHARACTER. ! 2095: * ! 2096: * OPC IS ONE OF THE FOLLOWING THREE POSSIBILITIES. ! 2097: * ! 2098: * (X) THE CHARACTER POINTED TO BY THE ! 2099: * CHARACTER POINTER IN X. THE ! 2100: * CHARACTER POINTER IS NOT CHANGED. ! 2101: * ! 2102: * (X)+ SAME CHARACTER AS (X) BUT THE ! 2103: * CHARACTER POINTER IS INCREMENTED ! 2104: * TO POINT TO THE NEXT CHARACTER ! 2105: * FOLLOWING EXECUTION. ! 2106: * ! 2107: * -(X) THE CHARACTER POINTER IS DECRE- ! 2108: * MENTED BEFORE ACCESSING THE ! 2109: * CHARACTER SO THAT THE PREVIOUS ! 2110: * CHARACTER IS REFERENCED. ! 2111: * ! 2112: * 6.5 CSC X COMPLETE STORE CHARACTERS ! 2113: * ! 2114: * THIS INSTRUCTION MARKS COMPLETION OF A ! 2115: * PSC,SCH,SCH,...,SCH SEQUENCE INITIATED BY ! 2116: * A PSC X INSTRUCTION. NO MORE SCH INSTRUCTIONS ! 2117: * USING X SHOULD BE OBEYED UNTIL ANOTHER PSC IS ! 2118: * OBEYED. IT IS PROVIDED SOLELY AS AN EFFICIENCY AID ! 2119: * ON MACHINES WITHOUT CHARACTER ORDERS SINCE IT ! 2120: * PERMITS USE OF REGISTER BUFFERING OF CHARS IN SCH ! 2121: * SEQUENCES. WHERE CSC IS NOT A NO-OP, IT MUST OBSERVE ! 2122: * RESTRICTION 2. (E.G. IN SPITBOL, ALOCS ZEROISES THE ! 2123: * LAST WORD OF A STRING FRAME PRIOR TO SCH SEQUENCE ! 2124: * BEING STARTED SO CSC MUST NOT NULLIFY THIS ACTION.) ! 2125: * ! 2126: * THE FOLLOWING INSTRUCTIONS ARE USED TO COMPARE ! 2127: * TWO WORDS CONTAINING CFP$C CHARACTERS. ! 2128: * COMPARISONS DISTINCT FROM BEQ,BNE ARE PROVIDED AS ! 2129: * ON SOME TARGET MACHINES, THE POSSIBILITY OF THE SIGN ! 2130: * BIT BEING SET MAY REQUIRE SPECIAL ACTION. ! 2131: * NOTE THAT RESTRICTION 2 ABOVE, EASES USE OF THESE ! 2132: * ORDERS IN TESTING COMPLETE STRINGS FOR EQUALITY, ! 2133: * SINCE WHOLE WORD TESTS ARE POSSIBLE. ! 2134: * ! 2135: * 6.6 CEQ OPW,OPW,PLBL JUMP TO PLBL IF OPW EQ OPW ! 2136: * 6.7 CNE OPW,OPW,PLBL JUMP TO PLBL IF OPW NE OPW ! 2137: EJC ! 2138: * ! 2139: * -6- OPERATIONS ON CHARACTER VALUES (CONTINUED) ! 2140: * ! 2141: * 6.8 CMC PLBL,PLBL COMPARE CHARACTERS ! 2142: * ! 2143: * CMC IS USED TO COMPARE TWO CHARACTER STRINGS. BEFORE ! 2144: * EXECUTING CMC, REGISTERS ARE SET UP AS FOLLOWS. ! 2145: * (XL) CHARACTER PTR FOR FIRST STRING ! 2146: * (XR) CHARACTER POINTER FOR SECOND STRING ! 2147: * (WA) CHARACTER COUNT (MUST BE .GT. ZERO) ! 2148: * XL AND XR SHOULD HAVE BEEN PREPARED BY PLC. ! 2149: * CONTROL PASSES TO FIRST PLBL IF THE FIRST STRING ! 2150: * IS LEXICALLY LESS THAN THE SECOND STRING, AND TO ! 2151: * THE SECOND PLBL IF THE FIRST STRING IS LEXICALLY ! 2152: * GREATER. CONTROL PASSES TO THE FOLLOWING INSTRUCTION ! 2153: * IF THE STRINGS ARE IDENTICAL. AFTER EXECUTING THIS ! 2154: * INSTRUCTION, THE VALUES OF XR AND XL ARE SET TO ZERO ! 2155: * AND THE VALUE IN (WA) IS UNDEFINED. ! 2156: * ARGUMENTS TO CMC MAY BE COMPLETE OR PARTIAL ! 2157: * STRINGS, SO MAKING OPTIMISATION TO USE WHOLE WORD ! 2158: * COMPARISONS DIFFICULT (DEPENDENT IN GENERAL ON ! 2159: * SHIFTS AND MASKING). ! 2160: * ! 2161: * 6.9 TRC TRANSLATE CHARACTERS ! 2162: * ! 2163: * TRC IS USED TO TRANSLATE A CHARACTER STRING USING A ! 2164: * SUPPLIED TRANSLATION TABLE. BEFORE EXECUTING TRC THE ! 2165: * REGISTERS ARE SET AS FOLLOWS. ! 2166: * (XL) CHAR PTR TO STRING TO BE TRANSLATED ! 2167: * (XR) CHAR PTR TO TRANSLATE TABLE ! 2168: * (WA) LENGTH OF STRING TO BE TRANSLATED ! 2169: * XL AND XR SHOULD HAVE BEEN PREPARED BY PLC. ! 2170: * THE TRANSLATE TABLE CONSISTS OF CFP$A CONTIGUOUS ! 2171: * CHARACTERS GIVING THE TRANSLATIONS OF THE CFP$A ! 2172: * CHARACTERS IN THE ALPHABET. ON COMPLETION, (XR) AND ! 2173: * (XL) ARE SET TO ZERO AND (WA) IS UNDEFINED. ! 2174: * ! 2175: * 6.10 CLU W CONVERT LOWER TO UPPER CASE ! 2176: * 6.11 CUL W CONVERT UPPER TO LOWER CASE ! 2177: * ! 2178: * THIS PAIR MAY BE USED FOR CASE CONVERSION OF CHARACTERS ! 2179: * IN W, WHERE THE CHARACTER SET SUPPORTS BOTH CASES. THEY ! 2180: * ARE NOT NEEDED IF THERE IS A SIMPLE RELATION BETWEEN THE ! 2181: * CASES AS IN ASCII AND EBCDIC. IN THE CASE OF SPITBOL THIS ! 2182: * ASSUMPTION IS MADE BY DEFAULT (SEE SYMBOL DFA$A) BUT THE ! 2183: * CODE INCLUDES AN OPTION SELECTABLE BY CONDITIONAL ! 2184: * ASSEMBLY ON .CSCV TO USE THESE OPCODES INSTEAD IF NEEDED ! 2185: * OR PREFERRED. ! 2186: EJC ! 2187: * ! 2188: * -7- OPERATIONS ON BIT STRING VALUES ! 2189: * ! 2190: * 7.1 ANB OPW,W AND BIT STRING VALUES ! 2191: * 7.2 ORB OPW,W OR BIT STRING VALUES ! 2192: * 7.3 XOB OPW,W EXCLUSIVE OR BIT STRING VALUES ! 2193: * ! 2194: * IN THE ABOVE OPERATIONS, THE LOGICAL CONNECTIVE IS ! 2195: * APPLIED SEPARATELY TO EACH OF THE CFP$N BITS. ! 2196: * THE RESULT IS STORED IN THE SECOND OPERAND LOCATION. ! 2197: * ! 2198: * 7.4 CMB W COMPLEMENT ALL BITS IN OPW ! 2199: * ! 2200: * 7.5 RSH W,VAL RIGHT SHIFT BY VAL BITS ! 2201: * 7.6 LSH W,VAL LEFT SHIFT BY VAL BITS ! 2202: * 7.7 RSX W,X RIGHT SHIFT W NUMBER OF BITS IN X ! 2203: * 7.8 LSX W,X LEFT SHIFT W NUMBER OF BITS IN X ! 2204: * ! 2205: * THE ABOVE SHIFTS ARE LOGICAL SHIFTS IN WHICH BITS ! 2206: * SHIFTED OUT ARE LOST AND ZERO BITS SUPPLIED AS ! 2207: * REQUIRED. THE SHIFT COUNT IS IN THE RANGE 0-CFP$N. ! 2208: * ! 2209: * 7.9 NZB W,PLBL JUMP TO PLBL IF W IS NOT ! 2210: * ALL ZERO BITS. ! 2211: * ! 2212: * 7.10 ZRB W,PLBL JUMP TO PLBL IF W IS ALL ZERO BITS ! 2213: * ! 2214: * 7.11 ZGB OPN ZEROISE GARBAGE BITS ! 2215: * ! 2216: * OPN CONTAINS A BIT STRING REPRESENTING A WORD ! 2217: * OF CHARACTERS FROM A STRING OR SOME FUNCTION ! 2218: * FORMED FROM SUCH CHARACTERS (E.G. AS A RESULT OF ! 2219: * HASHING). ON A MACHINE WHERE THE WORD SIZE IS NOT A ! 2220: * MULTIPLE OF THE CHARACTER SIZE, SOME BITS IN REG MAY ! 2221: * BE UNDEFINED. THIS OPCODE REPLACES SUCH BITS BY THE ! 2222: * ZERO BIT. ZGB IS A NO-OP IF THE WORD SIZE IS A ! 2223: * MULTIPLE OF THE CHARACTER SIZE. ! 2224: EJC ! 2225: * ! 2226: * -8- CONVERSION INSTRUCTIONS ! 2227: * ! 2228: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2229: * BETWEEN LENGTHS IN BAUS AND LENGTHS IN WORDS. ! 2230: * ! 2231: * 8.1 WTB REG CONVERT REG FROM WORDS TO BAUS. ! 2232: * THAT IS, MULTIPLY BY CFP$B. THIS IS ! 2233: * A NO-OP IF CFP$B IS ONE. ! 2234: * ! 2235: * 8.2 BTW REG CONVERT REG FROM BAUS TO WORDS ! 2236: * BY DIVIDING REG BY CFP$B DISCARDING ! 2237: * THE FRACTION. NO-OP IF CFP$B IS ONE ! 2238: * ! 2239: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2240: * OF ONE WORD INTEGER VALUES (ADDRESSES) TO AND ! 2241: * FROM THE FULL SIGNED INTEGER FORMAT. ! 2242: * ! 2243: * 8.3 MTI OPN THE VALUE OF OPN (AN ADDRESS) ! 2244: * IS MOVED AS A POSITIVE INTEGER ! 2245: * TO THE INTEGER ACCUMULATOR. ! 2246: * ! 2247: * 8.4 MFI OPN,PLBL THE VALUE CURRENTLY STORED IN THE ! 2248: * INTEGER ACCUMULATOR IS MOVED ! 2249: * TO OPN AS AN ADDRESS IF IT IS IN ! 2250: * THE RANGE 0 TO CFP$M INCLUSIVE. ! 2251: * IF THE ACCUMULATOR VALUE IS ! 2252: * OUTSIDE THIS RANGE, THEN THE RESULT ! 2253: * IN OPN IS UNDEFINED AND CONTROL IS ! 2254: * PASSED TO PLBL. MFI DESTROYS THE ! 2255: * VALUE OF (IA) WHETHER OR NOT ! 2256: * INTEGER OVERFLOW IS SIGNALLED. ! 2257: * PLBL MAY BE OMITTED IF OVERFLOW ! 2258: * IS IMPOSSIBLE. ! 2259: * ! 2260: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2261: * BETWEEN REAL VALUES AND INTEGER VALUES. ! 2262: * ! 2263: * 8.5 ITR CONVERT INTEGER VALUE IN INTEGER ! 2264: * ACCUMULATOR TO REAL AND STORE IN ! 2265: * REAL ACCUMULATOR (MAY LOSE ! 2266: * PRECISION IN SOME CASES) ! 2267: * ! 2268: * 8.6 RTI PLBL CONVERT THE REAL VALUE IN RA TO ! 2269: * AN INTEGER AND PLACE RESULT IN IA. ! 2270: * CONVERSION IS BY TRUNCATION OF THE ! 2271: * FRACTION - NO ROUNDING OCCURS. ! 2272: * JUMP TO PLBL IF OUT OF RANGE. (RA) ! 2273: * IS NOT CHANGED IN EITHER CASE. ! 2274: * PLBL MAY BE OMITTED IF OVERFLOW ! 2275: * IS IMPOSSIBLE. ! 2276: EJC ! 2277: * ! 2278: * -8- CONVERSION INSTRUCTIONS (CONTINUED) ! 2279: * ! 2280: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR COMPUTING ! 2281: * THE LENGTH OF STORAGE REQUIRED FOR A TEXT STRING. ! 2282: * ! 2283: * 8.7 CTW W,VAL THIS INSTRUCTION COMPUTES THE SUM ! 2284: * (NUMBER OF WORDS REQUIRED TO STORE ! 2285: * W CHARACTERS) + (VAL). THE SUM ! 2286: * IS STORED IN W. ! 2287: * FOR EXAMPLE, IF CFP$C IS 5, AND WA ! 2288: * CONTAINS 32, THEN CTW WA,2 ! 2289: * GIVES A RESULT OF 9 IN WA. ! 2290: * ! 2291: * 8.8 CTB W,VAL CTB IS EXACTLY LIKE CTW EXCEPT THAT ! 2292: * THE RESULT IS IN BAUS. IT HAS THE ! 2293: * SAME EFFECT AS CTW W,VAL WTB W ! 2294: * ! 2295: * 8.9 BTC W COMPUTE THE NUMBER OF CHARACTERS ! 2296: * WHICH CAN BE STORED IN (W) BAUS, ! 2297: * PLACING THE RESULT IN W. ! 2298: * ! 2299: * 8.10 WTC W COMPUTE THE NUMBER OF CHARACTERS ! 2300: * WHICH CAN BE STORED IN (W) WORDS, ! 2301: * PLACING THE RESULT IN W. ! 2302: * ! 2303: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2304: * FROM INTEGERS TO AND FROM NUMERIC DIGIT CHARACTERS ! 2305: * FOR USE IN NUMERIC CONVERSION ROUTINES. THEY EMPLOY ! 2306: * NEGATIVE INTEGER VALUES TO ALLOW FOR PROPER ! 2307: * CONVERSION OF NUMBERS WHICH CANNOT BE COMPLEMENTED. ! 2308: * ! 2309: * 8.11 CVM PLBL CONVERT BY MULTIPLICATION ! 2310: * ! 2311: * THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE, ! 2312: * IS MULTIPLIED BY 10. WB CONTAINS THE CHARACTER ! 2313: * CODE FOR A DIGIT. THE VALUE OF THIS DIGIT IS THEN ! 2314: * SUBTRACTED FROM THE RESULT. IF THE RESULT IS OUT OF ! 2315: * RANGE, THEN CONTROL IS PASSED TO PLBL WITH THE ! 2316: * RESULT IN (IA) UNDEFINED. EXECUTION OF CVM LEAVES ! 2317: * THE RESULT IN (WB) UNDEFINED. ! 2318: * ! 2319: * 8.12 CVD CONVERT BY DIVISION ! 2320: * ! 2321: * THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE, ! 2322: * IS DIVIDED BY 10. THE QUOTIENT (ZERO OR NEGATIVE) ! 2323: * IS REPLACED IN THE ACCUMULATOR. THE REMAINDER IS ! 2324: * CONVERTED TO THE CHARACTER CODE OF A DIGIT AND ! 2325: * PLACED IN WA. FOR EXAMPLE, AN OPERAND OF -523 GIVES ! 2326: * A QUOTIENT OF -52 AND A REMAINDER IN WA OF CH$D3. ! 2327: EJC ! 2328: * ! 2329: * -9- BLOCK MOVE INSTRUCTIONS ! 2330: * ! 2331: * THE FOLLOWING INSTRUCTIONS ARE USED FOR TRANSFERRING ! 2332: * DATA FROM ONE AREA OF MEMORY TO ANOTHER IN BLOCKS. ! 2333: * THEY CAN BE IMPLEMENTED WITH THE INDICATED SERIES OF ! 2334: * OTHER MACRO-INSTRUCTIONS, BUT MORE EFFICIENT IMPLE- ! 2335: * MENTATIONS WILL BE POSSSIBLE ON MOST MACHINES. ! 2336: * BEFORE OBEYING ANY OF THESE ORDERS WA, XL, XR SHOULD HAVE ! 2337: * BEEN SET UP (USING PLC, PSC FOR THE CHARACTER MOVES). THE ! 2338: * FINAL VALUE OF WA IS UNDEFINED. ! 2339: * ! 2340: * 9.1 MVC MOVE CHARACTERS ! 2341: * ! 2342: * MVC IS EQUIVALENT TO THE SEQUENCE ! 2343: * ! 2344: * MOV WB,DUMPB ! 2345: * LCT WA,WA ! 2346: * LOOPC LCH WB,(XL)+ ! 2347: * SCH WB,(XR)+ ! 2348: * BCT WA,LOOPC ! 2349: * CSC XR ! 2350: * MOV DUMPB,WB ! 2351: * ! 2352: * THE CHARACTER POINTERS ARE BUMPED AS INDICATED ! 2353: * AND THE FINAL VALUE OF WA IS UNDEFINED. ! 2354: * ! 2355: * 9.2 MCB MOVE CHARACTERS BACKWARDS ! 2356: * ! 2357: * MCB IS EQUIVALENT TO THE SEQUENCE ! 2358: * ! 2359: * MOV WB,DUMPB ! 2360: * LCT WA,WA ! 2361: * LOOPC LCH WB,-(XL) ! 2362: * SCH WB,-(XR) ! 2363: * BCT WA,LOOPC ! 2364: * CSC XR ! 2365: * MOV DUMPB,WB ! 2366: * ! 2367: * THE CHARACTER POINTERS ARE BUMPED AS INDICATED ! 2368: * AND THE FINAL VALUE OF WA IS UNDEFINED. ! 2369: EJC ! 2370: * ! 2371: * 9.3 MVW MOVE WORDS ! 2372: * ! 2373: * MVW IS EQUIVALENT TO THE SEQUENCE ! 2374: * ! 2375: * LOOPW MOV (XL)+,(XR)+ ! 2376: * DCA WA WA = BAUS TO MOVE ! 2377: * BNZ WA,LOOPW ! 2378: * ! 2379: * NOTE THAT THIS IMPLIES THAT THE VALUE IN WA IS THE ! 2380: * LENGTH IN BAUS WHICH IS A MULTIPLE OF CFP$B. ! 2381: * THE INITIAL ADDRESSES IN XR,XL ARE WORD ADDRESSES. ! 2382: * AS INDICATED, THE FINAL XR,XL VALUES POINT PAST THE ! 2383: * NEW AND OLD REGIONS OF MEMORY RESPECTIVELY. ! 2384: * THE FINAL VALUE OF WA IS UNDEFINED. ! 2385: * ! 2386: * 9.4 MWB MOVE WORDS BACKWARDS ! 2387: * ! 2388: * MWB IS EQUIVALENT TO THE SEQUENCE ! 2389: * ! 2390: * LOOPB MOV -(XL),-(XR) ! 2391: * DCA WA WA = BAUS TO MOVE ! 2392: * BNZ WA,LOOPB ! 2393: * ! 2394: * THERE IS A REQUIREMENT THAT THE INITIAL VALUE IN XL ! 2395: * BE AT LEAST 256 LESS THAN THE VALUE IN XR. THIS ! 2396: * ALLOWS AN IMPLEMENTATION IN WHICH CHUNKS OF 256 ! 2397: * BAUS ARE MOVED FORWARD (IBM 360, ICL 1900). ! 2398: * THE FINAL VALUE OF WA IS UNDEFINED. ! 2399: EJC ! 2400: * ! 2401: * -10- OPERATIONS CONNECTED WITH THE STACK ! 2402: * ! 2403: * THE STACK IS AN AREA IN MEMORY WHICH IS DEDICATED FOR USE ! 2404: * IN CONJUNCTION WITH THE STACK POINTER REGISTER (XS). AS ! 2405: * PREVIOUSLY DESCRIBED, IT IS USED BY THE JSR AND EXI ! 2406: * INSTRUCTIONS AND MAY BE USED FOR STORAGE OF ANY OTHER ! 2407: * DATA AS REQUIRED. ! 2408: * ! 2409: * THE STACK BUILDS EITHER WAY IN MEMORY AND AN IMPORTANT ! 2410: * RESTRICTION IS THAT THE VALUE IN (XS) MUST BE THE ADDRESS ! 2411: * OF THE STACK FRONT AT ALL TIMES SINCE ! 2412: * SOME IMPLEMENTATIONS MAY RANDOMLY DESTROY STACK LOCATIONS ! 2413: * BEYOND (XS). ! 2414: * ! 2415: * THE STARTING STACK BASE ADDRESS IS PASSED ! 2416: * IN (XS) AT THE START OF EXECUTION. DURING EXECUTION IT ! 2417: * IS NECESSARY TO MAKE SURE THAT THE STACK DOES NOT ! 2418: * OVERFLOW. THIS IS ACHIEVED BY EXECUTING THE FOLLOWING ! 2419: * INSTRUCTION PERIODICALLY. ! 2420: * ! 2421: * 10.1 CHK CHECK STACK OVERFLOW ! 2422: * ! 2423: * AFTER SUCCESSFULLY EXECUTING CHK, IT IS PERMISSIBLE TO ! 2424: * USE UP TO 100 ADDITIONAL WORDS BEFORE ISSUING ANOTHER CHK ! 2425: * THUS CHK NEED NOT BE ISSUED EVERY TIME THE STACK IS ! 2426: * EXPANDED. IN SOME IMPLEMENTATIONS, THE CHECKING MAY BE ! 2427: * AUTOMATIC AND CHK WILL HAVE NO EFFECT. FOLLOWING THE ! 2428: * ABOVE RULE MAKES SURE THAT THE PROGRAM WILL OPERATE ! 2429: * CORRECTLY IN IMPLEMENTATIONS WITH NO AUTOMATIC CHECK. ! 2430: * ! 2431: * IF STACK OVERFLOW OCCURS (DETECTED EITHER AUTOMATICALLY ! 2432: * OR BY A CHK INSTRUCTION), THEN CONTROL IS PASSED TO THE ! 2433: * STACK OVERFLOW SECTION (SEE PROGRAM FORM). NOTE THAT THIS ! 2434: * TRANSFER MAY TAKE PLACE FOLLOWING ANY INSTRUCTION WHICH ! 2435: * STORES DATA AT A NEW LOCATION ON THE STACK. ! 2436: * AFTER STACK OVERFLOW, STACK IS ARBITRARILY POPPED ! 2437: * TO GIVE SOME SPACE IN WHICH THE ERROR PROCEDURE MAY ! 2438: * OPERATE. OTHERWISE A LOOP OF STACK OVERFLOWS MAY OCCUR. ! 2439: EJC ! 2440: * ! 2441: * -11- DATA GENERATION INSTRUCTIONS ! 2442: * ! 2443: * THE FOLLOWING INSTRUCTIONS ARE USED TO GENERATE CONSTANT ! 2444: * VALUES IN THE CONSTANT SECTION AND ALSO TO ASSEMBLE ! 2445: * INITIAL VALUES IN THE WORKING STORAGE SECTION. THEY ! 2446: * MAY NOT APPEAR EXCEPT IN THESE TWO SECTIONS. ! 2447: * ! 2448: * 11.1 DAC ADDR ASSEMBLE ADDRESS CONSTANT. ! 2449: * GENERATES ONE WORD CONTAINING THE ! 2450: * SPECIFIED ONE WORD INTEGER ! 2451: * VALUE (ADDRESS). ! 2452: * ! 2453: * 11.2 DIC INTEGER GENERATES AN INTEGER VALUE WHICH ! 2454: * OCCUPIES CFP$I CONSECUTIVE WORDS. ! 2455: * THE OPERAND IS A DIGIT STRING WITH ! 2456: * A REQUIRED LEADING SIGN. ! 2457: * ! 2458: * 11.3 DRC REAL ASSEMBLES A REAL CONSTANT WHICH ! 2459: * OCCUPIES CFP$R CONSECUTIVE WORDS. ! 2460: * THE OPERAND FORM MUST OBEY THE ! 2461: * RULES FOR A FORTRAN REAL CONSTANT ! 2462: * WITH THE EXTRA REQUIREMENT THAT A ! 2463: * LEADING SIGN BE PRESENT. ! 2464: * ! 2465: * 11.4 DTC DTEXT DEFINE TEXT CONSTANT. DTEXT ! 2466: * IS STARTED AND ENDED WITH ANY ! 2467: * CHARACTER NOT CONTAINED IN THE ! 2468: * CHARACTERS TO BE ASSEMBLED. THE ! 2469: * CONSTANT OCCUPIES CONSECUTIVE WORDS ! 2470: * AS DICTATED BY THE CONFIGURATION ! 2471: * PARAMETER CFP$C. ANY UNUSED CHARS ! 2472: * IN THE LAST WORD ARE RIGHT FILLED ! 2473: * WITH ZEROS (I.E. THE CHARACTER ! 2474: * WHOSE INTERNAL CODE IS ZERO). ! 2475: * THE STRING CONTAINS A SEQUENCE OF ! 2476: * LETTERS, DIGITS, BLANKS AND ANY OF ! 2477: * THE FOLLOWING SPECIAL CHARACTERS. ! 2478: * =,$.(*)/+- ! 2479: * NO OTHER CHARACTERS ! 2480: * MAY BE USED IN A DTEXT OPERAND. ! 2481: * ! 2482: * 11.5 DBC VAL ASSEMBLE BIT STRING CONSTANT. THE ! 2483: * OPERAND IS A POSITIVE INTEGER ! 2484: * VALUE WHICH IS INTERPRETED IN ! 2485: * BINARY, RIGHT JUSTIFIED AND LEFT ! 2486: * FILLED WITH ZERO BITS. THUS 5 WOULD ! 2487: * IMPLY THE BIT STRING VALUE 00..101. ! 2488: * ! 2489: * 11.6 DDC DTEXT DEFINE DISPLAY CONSTANT. IDENTICAL ! 2490: * TO DTC (SEE ABOVE), HOWEVER ON ! 2491: * SYSTEMS SUPPORTING LOWER CASE, ! 2492: * THE TRANSLATION IS FREE TO MIX ! 2493: * CASES IN A MANNER APPROPRIATE ! 2494: * TO THE TARGET SYSTEM. ! 2495: EJC ! 2496: * ! 2497: * -12- SYMBOL DEFINITION INSTRUCTIONS ! 2498: * ! 2499: * THE FOLLOWING INSTRUCTION IS USED TO DEFINE SYMBOLS ! 2500: * IN THE DEFINITIONS SECTION. IT MAY NOT BE USED ELSEWHERE. ! 2501: * ! 2502: * 12.1 EQU EQOP DEFINE SYMBOL ! 2503: * ! 2504: * THE SYMBOL WHICH APPEARS IN THE LABEL FIELD IS ! 2505: * DEFINED TO HAVE THE ABSOLUTE VALUE GIVEN ! 2506: * BY THE EQOP OPERAND. A GIVEN SYMBOL MAY BE DEFINED ! 2507: * ONLY ONCE IN THIS MANNER, AND ANY SYMBOLS OCCURING ! 2508: * IN EQOP MUST BE PREVIOUSLY DEFINED. ! 2509: * ! 2510: * THE FOLLOWING ARE THE POSSIBILITIES FOR EQOP ! 2511: * ! 2512: * VAL THE INDICATED VALUE IS USED ! 2513: * ! 2514: * VAL+VAL THE SUM OF THE TWO VALUES IS USED. ! 2515: * THIS SUM MUST NOT EXCEED CFP$M ! 2516: * ! 2517: * VAL-VAL THE DIFFERENCE BETWEEN THE TWO ! 2518: * VALUES (MUST BE POSITIVE) IS USED. ! 2519: * ! 2520: * * THIS FORMAT DEFINES THE LABEL BY ! 2521: * USING A VALUE SUPPLIED BY THE ! 2522: * MINIMAL TRANSLATOR. VALUES ARE ! 2523: * REQUIRED FOR THE ! 2524: * CFP$X (CONFIGURATION PARAMETERS) ! 2525: * E$XXX (ENVIRONMENT PARAMETERS) ! 2526: * CH$XX (CHARACTER CODES). ! 2527: * IN ORDER FOR A TRANSLATOR TO ! 2528: * HANDLE THIS FORMAT CORRECTLY THE ! 2529: * DEFINITIONS SECTION MUST BE ! 2530: * CONSULTED FOR DETAILS OF REQUIRED ! 2531: * SYMBOLS AS LISTED AT THE FRONT OF ! 2532: * THE SECTION. ! 2533: EJC ! 2534: * ! 2535: * SYMBOL DEFINITION INSTRUCTIONS (CONTINUED) ! 2536: * ! 2537: * THE FOLLOWING INSTRUCTIONS MAY BE USED TO DEFINE SYMBOLS ! 2538: * IN THE PROCEDURE SECTION. THEY MAY NOT BE USED IN ! 2539: * ANY OTHER PART OF THE PROGRAM. ! 2540: * ! 2541: * 12.2 EXP PTYP,INT DEFINE EXTERNAL PROCEDURE ! 2542: * ! 2543: * EXP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL ! 2544: * NAMING AN EXTERNAL PROCEDURE WHICH CAN BE ! 2545: * REFERENCED IN A SUBSEQUENT JSR INSTRUCTION. THE ! 2546: * CODING FOR THE PROCEDURE IS EXTERNAL TO THE ! 2547: * CODING OF THE SOURCE PROGRAM IN THIS LANGUAGE. ! 2548: * THE CODE FOR EXTERNAL PROCEDURES MAY BE ! 2549: * REFERRED TO COLLECTIVELY AS THE OPERATING SYSTEM ! 2550: * INTERFACE, OR MORE BRIEFLY, OSINT, AND WILL ! 2551: * FREQUENTLY BE A SEPARATELY COMPILED SEGMENT OF CODE ! 2552: * LOADED WITH SPITBOL TO PRODUCE A COMPLETE SYSTEM. ! 2553: * ! 2554: * PTYP SPECIFIES THE PROCEDURE TYPE AND INT DESIGNATES ! 2555: * THE NUMBER OF EXIT PARAMETERS. ! 2556: * ! 2557: * 12.3 INP PTYP,INT DEFINE INTERNAL PROCEDURE ! 2558: * ! 2559: * INP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL ! 2560: * NAMING AN INTERNAL PROCEDURE AND GIVES ! 2561: * ITS TYPE AND NUMBER OF EXIT PARAMETERS. THE LABEL ! 2562: * CAN BE REFERENCED IN JSR INSTRUCTIONS AND ! 2563: * IT MUST APPEAR LABELLING A PRC INSTRUCTION IN THE ! 2564: * PROGRAM SECTION. ! 2565: * ! 2566: * 12.4 INR DEFINE INTERNAL ROUTINE ! 2567: * ! 2568: * INR DEFINES THE SYMBOL IN THE LABEL FIELD AS A RLBL ! 2569: * NAMING AN INTERNAL ROUTINE. THE ! 2570: * LABEL MAY BE REFERENCED IN ANY TYPE OF BRANCH ORDER ! 2571: * AND IT MUST APPEAR LABELLING A RTN INSTRUCTION IN ! 2572: * THE PROGRAM SECTION. ! 2573: * ! 2574: * 12.5 GLB DEFINE GLOBAL SYMBOL ! 2575: * ! 2576: * GLB DEFINES THE SYMBOL IN THE LABEL FIELD AS A GLBL ! 2577: * NAMING THE DESTINATION OF A JMG (JUMP GLOBAL) ORDER. ! 2578: * THE SYMBOL MAY ALSO BE THE DESTINATION OF LOCAL ! 2579: * BRANCHES OF ALL TYPES. ! 2580: * THE LABEL MUST APPEAR IN THE PROCEDURE SECTION ! 2581: * LABELLING AN INSTRUCTION. ! 2582: EJC ! 2583: * ! 2584: * -13- ASSEMBLY LISTING LAYOUT INSTRUCTIONS ! 2585: * ! 2586: * 13.1 EJC EJECT TO NEXT PAGE ! 2587: * ! 2588: * 13.2 TTL TEXT SET NEW ASSEMBLY TITLE ! 2589: * ! 2590: * TTL IMPLIES AN IMMEDIATE EJECT OF THE ! 2591: * ASSEMBLY LISTING TO PRINT THE NEW TITLE. ! 2592: * ! 2593: * THE USE OF TTL AND EJC CARDS IS SUCH THAT THE ! 2594: * PROGRAM WILL LIST NEATLY IF THE PRINTER PRINTS ! 2595: * AS MANY AS 58 LINES PER PAGE. IN THE EVENT THAT ! 2596: * THE PRINTER DEPTH IS LESS THAN THIS, OR IF THE ! 2597: * LISTING CONTAINS INTERSPERSED LINES (SUCH AS ACTUAL ! 2598: * GENERATED CODE), THEN THE FORMAT MAY BE UPSET. ! 2599: * ! 2600: * LINES STARTING WITH AN ASTERISK ARE COMMENT LINES ! 2601: * WHICH CAUSE NO CODE TO BE GENERATED AND MAY OCCUR ! 2602: * FREELY ANYWHERE IN THE PROGRAM. THE FORMAT FOR ! 2603: * COMMENT LINES IS GIVEN IN SECTION -15-. ! 2604: EJC ! 2605: * ! 2606: * -14- PROGRAM FORM ! 2607: * ! 2608: * THE PROGRAM CONSISTS OF SEPARATE SECTIONS SEPARATED ! 2609: * BY SEC OPERATIONS. THE SECTIONS MUST APPEAR IN THE ! 2610: * FOLLOWING SPECIFIED ORDER. ! 2611: * ! 2612: * 14.1 SEC START OF PROCEDURE SECTION ! 2613: * ! 2614: * (PROCEDURE SECTION) ! 2615: * ! 2616: * SEC START OF DEFINITIONS SECTION ! 2617: * ! 2618: * (DEFINITIONS SECTION) ! 2619: * ! 2620: * SEC START OF CONSTANT STORAGE SECTION ! 2621: * ! 2622: * (CONSTANT STORAGE SECTION) ! 2623: * ! 2624: * SEC START OF WORKING STORAGE SECTION ! 2625: * ! 2626: * (WORKING STORAGE SECTION) ! 2627: * ! 2628: * SEC START OF PROGRAM SECTION ! 2629: * ! 2630: * (PROGRAM SECTION) ! 2631: * ! 2632: * SEC START OF STACK OVERFLOW SECTION ! 2633: * ! 2634: * (STACK OVERFLOW SECTION) ! 2635: * ! 2636: * SEC START OF ERROR SECTION ! 2637: * ! 2638: * (ERROR SECTION) ! 2639: * ! 2640: * 14.2 END END OF ASSEMBLY ! 2641: EJC ! 2642: * ! 2643: * SECTION 10 - PROGRAM FORM ! 2644: * ! 2645: * PROCEDURE SECTION ! 2646: * ! 2647: * THE PROCEDURE SECTION CONTAINS ALL THE EXP ! 2648: * INSTRUCTIONS FOR EXTERNALLY AVAILABLE PROCEDURES ! 2649: * AND INP,INR OPCODES FOR INTERNAL PROCEDURES,ROUTINES ! 2650: * SO THAT A SINGLE PASS MINIMAL TRANSLATOR HAS ADVANCE ! 2651: * KNOWLEDGE OF PROCEDURE TYPES WHEN TRANSLATING CALLS. ! 2652: * ! 2653: * DEFINITIONS SECTION ! 2654: * ! 2655: * THE DEFINITIONS SECTION CONTAINS EQU INSTRUCTIONS ! 2656: * WHICH DEFINE SYMBOLS REFERENCED LATER ON IN THE ! 2657: * PROGRAM, CONSTANT AND WORK SECTIONS. ! 2658: * ! 2659: * CONSTANT STORAGE SECTION ! 2660: * ! 2661: * THE CONSTANT STORAGE SECTION CONSISTS ENTIRELY ! 2662: * OF CONSTANTS ASSEMBLED WITH THE DAC,DDC,DIC,DRC ! 2663: * DTC,DBC ASSEMBLY OPERATIONS. THESE CONSTANTS CAN ! 2664: * BE FREELY REFERENCED BY THE PROGRAM INSTRUCTIONS. ! 2665: * ! 2666: * WORKING STORAGE SECTION ! 2667: * ! 2668: * THE WORKING STORAGE SECTION CONSISTS ENTIRELY OF ! 2669: * DAC,DDC,DIC,DRC,DBC,DTC INSTRUCTIONS TO DEFINE A ! 2670: * FIXED LENGTH WORK AREA. THE WORK LOCATIONS IN THIS ! 2671: * AREA CAN BE DIRECTLY REFERENCED IN PROGRAM ! 2672: * INSTRUCTIONS. THE AREA IS INITIALIZED IN ACCORDANCE ! 2673: * WITH THE VALUES ASSEMBLED IN THE INSTRUCTIONS. ! 2674: * ! 2675: * PROGRAM SECTION ! 2676: * ! 2677: * THE PROGRAM SECTION CONTAINS PROGRAM INSTRUCTIONS ! 2678: * AND ASSOCIATED OPERATIONS (SUCH AS PRC, ENP, ENT). ! 2679: * CONTROL IS PASSED TO THE FIRST INSTRUCTION IN THIS ! 2680: * SECTION WHEN EXECUTION IS INITIATED. ! 2681: * ! 2682: * STACK OVERFLOW SECTION ! 2683: * ! 2684: * THE STACK OVERFLOW SECTION CONTAINS INSTRUCTIONS ! 2685: * LIKE THE PROGRAM SECTION. CONTROL IS PASSED TO THE ! 2686: * FIRST INSTRUCTION IN THIS SECTION FOLLOWING THE ! 2687: * OCCURRENCE OF STACK OVERFLOW, SEE CHK INSTRUCTION. ! 2688: * ! 2689: * ERROR SECTION ! 2690: * ! 2691: * THE ERROR SECTION CONTAINS INSTRUCTIONS LIKE THE ! 2692: * PROGRAM SECTION. CONTROL IS PASSED TO THE FIRST ! 2693: * INSTRUCTION IN THIS SECTION WHEN A PROCEDURE EXIT ! 2694: * CORRESPONDS TO AN ERROR PARAMETER (SEE ERR) ! 2695: * OR WHEN AN ERB OPCODE IS OBEYED. THE ERROR CODE ! 2696: * MUST CLEAN UP THE MAIN STACK AND CATER FOR THE ! 2697: * POSSIBILITY THAT A SUBROUTINE STACK MAY NEED CLEAN ! 2698: * UP. ! 2699: EJC ! 2700: * OSINT ! 2701: * ! 2702: * THOUGH NOT PART OF THE MINIMAL SOURCE, IT IS USEFUL ! 2703: * TO REFER TO THE COLLECTION OF INITIALISATION AND ! 2704: * EXP ROUTINES AS OSINT (OPERATING SYSTEM INTERFACE). ! 2705: * ERRORS OCCURRING WITHIN OSINT PROCEDURES ARE ! 2706: * USUALLY HANDLED BY MAKING AN ERROR RETURN. IF THIS ! 2707: * IS NOT FEASIBLE OR APPROPRIATE, OSINT MAY USE THE ! 2708: * MINIMAL ERROR SECTION TO REPORT ERRORS DIRECTLY BY ! 2709: * BRANCHING TO IT WITH A SUITABLE NUMERIC ERROR ! 2710: * CODE IN WA. ! 2711: EJC ! 2712: * ! 2713: * SECTION 11 - STATEMENT FORMAT ! 2714: * ! 2715: * ALL LABELS ARE EXACTLY FIVE CHARACTERS LONG AND START ! 2716: * WITH THREE LETTERS (ABCDEFGHIJKLMNOPQRSTUVWXY$) FOLLOWED ! 2717: * BY TWO LETTERS OR DIGITS. ! 2718: * THE LETTER Z MAY NOT BE USED IN MINIMAL SYMBOLS BUT $ IS ! 2719: * PERMITTED. ! 2720: * FOR IMPLEMENTATIONS WHERE $ MAY NOT APPEAR IN THE ! 2721: * TARGET CODE , A SIMPLE SUBSTITUTION OF Z FOR $ ! 2722: * MAY THUS BE MADE WITHOUT RISK OF PRODUCING NON-UNIQUE ! 2723: * SYMBOLS. ! 2724: * THE LETTER Z IS HOWEVER PERMITTED IN OPCODE MNEMONICS AND ! 2725: * IN COMMENTS. ! 2726: * ! 2727: * MINIMAL STATEMENTS ARE IN A FIXED FORMAT AS FOLLOWS. ! 2728: * ! 2729: * COLS 1-5 LABEL IF ANY (ELSE BLANK) ! 2730: * ! 2731: * COLS 6-7 ALWAYS BLANK ! 2732: * ! 2733: * COLS 8-10 OPERATION MNEMONIC ! 2734: * ! 2735: * COLS 11-12 BLANKS ! 2736: * ! 2737: * COLS 13-28 OPERAND FIELD, TERMINATED BY A ! 2738: * BLANK. MAY OCCASIONALLY ! 2739: * EXTEND PAST COLUMN 28. ! 2740: * ! 2741: * COLS 30-64 COMMENT. ALWAYS SEPARATED FROM THE ! 2742: * OPERAND FIELD BY AT LEAST ONE BLANK ! 2743: * MAY OCCASIONALLY START AFTER COLUMN ! 2744: * 30 IF THE OPERAND EXTENDS PAST 28. ! 2745: * A SPECIAL EXCEPTION OCCURS FOR THE ! 2746: * IFF INSTRUCTION, WHOSE COMMENT MAY ! 2747: * BE ONLY 20 CHARACTERS LONG (30-49). ! 2748: * ! 2749: * COLS 65 ON UNUSED ! 2750: * ! 2751: * ! 2752: * COMMENT LINES HAVE THE FOLLOWING FORMAT ! 2753: * ! 2754: * COL 1 ASTERISK ! 2755: * ! 2756: * COLS 2-7 BLANK ! 2757: * ! 2758: * COLS 8-64 ARBITRARY TEXT, RESTRICTED TO THE ! 2759: * FORTRAN CHARACTER SET. ! 2760: * ! 2761: * ! 2762: * THE FORTRAN CHARACTER SET IS A-Z 0-9 =,$.(*)-/+ ! 2763: EJC ! 2764: * ! 2765: * SECTION 12 - PROGRAM EXECUTION ! 2766: * ! 2767: * EXECUTION OF THE PROGRAM BEGINS WITH THE FIRST ! 2768: * INSTRUCTION IN THE PROGRAM SECTION. ! 2769: * ! 2770: * IN ADDITION TO THE FIXED LENGTH MEMORY REGIONS DEFINED ! 2771: * BY THE ASSEMBLY, THERE ARE TWO DYNAMICALLY ALLOCATED ! 2772: * MEMORY REGIONS AS FOLLOWS. ! 2773: * ! 2774: * DATA AREA THIS IS AN AREA AVAILABLE TO THE ! 2775: * PROGRAM FOR GENERAL STORAGE OF DATA ! 2776: * ANY DATA VALUE MAY BE STORED IN ! 2777: * THIS AREA EXCEPT INSTRUCTIONS. ! 2778: * IN SOME IMPLEMENTATIONS, IT MAY BE ! 2779: * POSSIBLE TO INCREASE THE SIZE OF ! 2780: * THIS AREA DYNAMICALLY BY ADDING ! 2781: * WORDS AT THE TOP END WITH A CALL ! 2782: * TO A SYSTEM PROCEDURE. ! 2783: * ! 2784: * STACK AREA THIS REGION OF MEMORY HOLDS ! 2785: * THE STACK USED FOR SUBROUTINE CALLS ! 2786: * AND OTHER STORAGE OF ONE WORD ! 2787: * INTEGER VALUES (ADDRESSES). THIS ! 2788: * IS THE STACK ASSOCIATED WITH ! 2789: * INDEX REGISTER XS. ! 2790: * ! 2791: * THE LOCATIONS AND SIZES OF THESE AREAS ARE SPECIFIED ! 2792: * BY THE VALUES IN THE REGISTERS AT THE START OF PROGRAM ! 2793: * EXECUTION AS FOLLOWS. ! 2794: * ! 2795: * (XS) ADDRESS ONE PAST THE STACK BASE. ! 2796: * E.G. IF XS IS 23456, A D-STACK WILL ! 2797: * OCCUPY WORDS 23455,23454,... ! 2798: * WHEREAS A U-STACK WILL OCCUPY ! 2799: * 23457,23458,... ! 2800: * ! 2801: * (XR) ADDRESS OF THE FIRST WORD ! 2802: * IN THE DATA AREA ! 2803: * ! 2804: * (XL) ADDRESS OF THE LAST WORD IN THE ! 2805: * DATA AREA. ! 2806: * ! 2807: * (WA,WB,WC,IA,RA,CP) AS DEFINED BY THE PROGRAM ! 2808: * ! 2809: * THERE IS NO EXPLICIT WAY TO TERMINATE THE EXECUTION OF A ! 2810: * PROGRAM. THIS FUNCTION IS PERFORMED BY AN APPROPRIATE ! 2811: * SYSTEM PROCEDURE REFERENCED WITH THE SYSEJ INSTRUCTION. ! 2812: TTL S P I T B O L -- BASIC INFORMATION ! 2813: EJC ! 2814: * ! 2815: * GENERAL STRUCTURE ! 2816: * ----------------- ! 2817: * ! 2818: * THIS PROGRAM IS A TRANSLATOR FOR A VERSION OF THE SNOBOL4 ! 2819: * PROGRAMMING LANGUAGE. LANGUAGE DETAILS ARE CONTAINED IN ! 2820: * THE MANUAL MACRO SPITBOL BY DEWAR AND MCCANN, TECHNICAL ! 2821: * REPORT 90, UNIVERSITY OF LEEDS 1976. ! 2822: * THE IMPLEMENTATION IS DISCUSSED IN DEWAR AND MCCANN, ! 2823: * MACRO SPITBOL - A SNOBOL4 COMPILER, SOFTWARE PRACTICE AND ! 2824: * EXPERIENCE, 7, 95-113, 1977. ! 2825: * THE LANGUAGE IS AS IMPLEMENTED BY THE BTL TRANSLATOR ! 2826: * (GRISWOLD, POAGE AND POLONSKY, PRENTICE HALL, 1971) ! 2827: * WITH THE FOLLOWING PRINCIPAL EXCEPTIONS. ! 2828: * ! 2829: * 1) REDEFINITION OF STANDARD SYSTEM FUNCTIONS AND ! 2830: * OPERATORS IS NOT PERMITTED. ! 2831: * ! 2832: * 2) THE VALUE FUNCTION IS NOT PROVIDED. ! 2833: * ! 2834: * 3) ACCESS TRACING IS PROVIDED IN ADDITION TO THE ! 2835: * OTHER STANDARD TRACE MODES. ! 2836: * ! 2837: * 4) THE KEYWORD STFCOUNT IS NOT PROVIDED. ! 2838: * ! 2839: * 5) THE KEYWORD FULLSCAN IS NOT PROVIDED AND ALL PATTERN ! 2840: * MATCHING TAKES PLACE IN FULLSCAN MODE (I.E. WITH NO ! 2841: * HEURISTICS APPLIED). ! 2842: * ! 2843: * 6) A SERIES OF EXPRESSIONS SEPARATED BY COMMAS MAY ! 2844: * BE GROUPED WITHIN PARENTHESES TO PROVIDE A SELECTION ! 2845: * CAPABILITY. THE SEMANTICS ARE THAT THE SELECTION ! 2846: * ASSUMES THE VALUE OF THE FIRST EXPRESSION WITHIN IT ! 2847: * WHICH SUCCEEDS AS THEY ARE EVALUATED FROM THE LEFT. ! 2848: * IF NO EXPRESSION SUCCEEDS THE ENTIRE STATEMENT FAILS ! 2849: * ! 2850: * 7) AN EXPLICIT PATTERN MATCHING OPERATOR IS PROVIDED. ! 2851: * THIS IS THE BINARY QUERY (SEE GIMPEL SIGPLAN OCT 74) ! 2852: * ! 2853: * 8) THE ASSIGNMENT OPERATOR IS INTRODUCED AS IN THE ! 2854: * GIMPEL REFERENCE. ! 2855: * ! 2856: * 9) THE EXIT FUNCTION IS PROVIDED FOR GENERATING LOAD ! 2857: * MODULES - CF. GIMPELS SITBOL. ! 2858: * ! 2859: * ! 2860: * THE METHOD USED IN THIS PROGRAM IS TO TRANSLATE THE ! 2861: * SOURCE CODE INTO AN INTERNAL PSEUDO-CODE (SEE FOLLOWING ! 2862: * SECTION). AN INTERPRETOR IS THEN USED TO EXECUTE THIS ! 2863: * GENERATED PSEUDO-CODE. THE NATURE OF THE SNOBOL4 LANGUAGE ! 2864: * IS SUCH THAT THE LATTER TASK IS MUCH MORE COMPLEX THAN ! 2865: * THE ACTUAL TRANSLATION PHASE. ACCORDINGLY, NEARLY ALL THE ! 2866: * CODE IN THE PROGRAM SECTION IS CONCERNED WITH THE ACTUAL ! 2867: * EXECUTION OF THE SNOBOL4 PROGRAM. ! 2868: EJC ! 2869: * ! 2870: * INTERPRETIVE CODE FORMAT ! 2871: * ------------------------ ! 2872: * ! 2873: * THE INTERPRETIVE PSEUDO-CODE CONSISTS OF A SERIES OF ! 2874: * ADDRESS POINTERS. THE EXACT FORMAT OF THE CODE IS ! 2875: * DESCRIBED IN CONNECTION WITH THE CDBLK FORMAT. THE ! 2876: * PURPOSE OF THIS SECTION IS TO GIVE GENERAL INSIGHT INTO ! 2877: * THE INTERPRETIVE APPROACH INVOLVED. ! 2878: * ! 2879: * THE BASIC FORM OF THE CODE IS RELATED TO REVERSE POLISH. ! 2880: * IN OTHER WORDS, THE OPERANDS PRECEDE THE OPERATORS WHICH ! 2881: * ARE ZERO ADDRESS OPERATORS. THERE ARE SOME EXCEPTIONS TO ! 2882: * THESE RULES, NOTABLY THE UNARY NOT OPERATOR AND THE ! 2883: * SELECTION CONSTRUCTION WHICH CLEARLY REQUIRE ADVANCE ! 2884: * KNOWLEDGE OF THE OPERATOR INVOLVED. ! 2885: * ! 2886: * THE OPERANDS ARE MOVED TO THE TOP OF THE MAIN STACK AND ! 2887: * THE OPERATORS ARE APPLIED TO THE TOP STACK ENTRIES. LIKE ! 2888: * OTHER VERSIONS OF SPITBOL, THIS PROCESSOR DEPENDS ON ! 2889: * KNOWING WHETHER OPERANDS ARE REQUIRED BY NAME OR BY VALUE ! 2890: * AND MOVES THE APPROPRIATE OBJECT TO THE STACK. THUS NO ! 2891: * NAME/VALUE CHECKS ARE INCLUDED IN THE OPERATOR CIRCUITS. ! 2892: * ! 2893: * THE ACTUAL POINTERS IN THE CODE POINT TO A BLOCK WHOSE ! 2894: * FIRST WORD IS THE ADDRESS OF THE INTERPRETOR ROUTINE ! 2895: * TO BE EXECUTED FOR THE CODE WORD. ! 2896: * ! 2897: * IN THE CASE OF OPERATORS, THE POINTER IS TO A WORD WHICH ! 2898: * CONTAINS THE ADDRESS OF THE OPERATOR TO BE EXECUTED. IN ! 2899: * THE CASE OF OPERANDS SUCH AS CONSTANTS, THE POINTER IS TO ! 2900: * THE OPERAND ITSELF. ACCORDINGLY, ALL OPERANDS CONTAIN ! 2901: * A FIELD WHICH POINTS TO THE ROUTINE TO LOAD THE VALUE OF ! 2902: * THE OPERAND ONTO THE STACK. IN THE CASE OF A VARIABLE, ! 2903: * THERE ARE THREE SUCH POINTERS. ONE TO LOAD THE VALUE, ! 2904: * ONE TO STORE THE VALUE AND A THIRD TO JUMP TO THE LABEL. ! 2905: * ! 2906: * THE HANDLING OF FAILURE RETURNS DESERVES SPECIAL COMMENT. ! 2907: * THE LOCATION FLPTR CONTAINS THE POINTER TO THE LOCATION ! 2908: * ON THE MAIN STACK WHICH CONTAINS THE FAILURE RETURN ! 2909: * WHICH IS IN THE FORM OF A BAU OFFSET IN THE CURRENT ! 2910: * CODE BLOCK (CDBLK OR EXBLK). WHEN A FAILURE OCCURS, THE ! 2911: * STACK IS POPPED AS INDICATED BY THE SETTING OF FLPTR AND ! 2912: * CONTROL IS PASSED TO THE APPROPRIATE LOCATION IN THE ! 2913: * CURRENT CODE BLOCK WITH THE STACK POINTER POINTING TO THE ! 2914: * FAILURE OFFSET ON THE STACK AND FLPTR UNCHANGED. ! 2915: EJC ! 2916: * ! 2917: * INTERNAL DATA REPRESENTATIONS ! 2918: * ----------------------------- ! 2919: * ! 2920: * REPRESENTATION OF VALUES ! 2921: * ! 2922: * A VALUE IS REPRESENTED BY A POINTER TO A BLOCK WHICH ! 2923: * DESCRIBES THE TYPE AND PARTICULARS OF THE DATA VALUE. ! 2924: * IN GENERAL, A VARIABLE IS A LOCATION CONTAINING SUCH A ! 2925: * POINTER (ALTHOUGH IN THE CASE OF TRACE ASSOCIATIONS THIS ! 2926: * IS MODIFIED, SEE DESCRIPTION OF TRBLK). ! 2927: * ! 2928: * THE FOLLOWING IS A LIST OF POSSIBLE DATATYPES SHOWING THE ! 2929: * TYPE OF BLOCK USED TO HOLD THE VALUE. THE DETAILS OF ! 2930: * EACH BLOCK FORMAT ARE GIVEN LATER. ! 2931: * ! 2932: * DATATYPE BLOCK TYPE ! 2933: * -------- ---------- ! 2934: * ! 2935: * ARRAY ARBLK OR VCBLK ! 2936: * ! 2937: * CODE CDBLK ! 2938: * ! 2939: * EXPRESSION EXBLK OR SEBLK ! 2940: * ! 2941: * INTEGER ICBLK ! 2942: * ! 2943: * NAME NMBLK ! 2944: * ! 2945: * PATTERN P0BLK OR P1BLK OR P2BLK ! 2946: * ! 2947: * REAL RCBLK ! 2948: * ! 2949: * STRING SCBLK ! 2950: * ! 2951: * TABLE TBBLK ! 2952: * ! 2953: * PROGRAM DATATYPE PDBLK ! 2954: EJC ! 2955: * ! 2956: * REPRESENTATION OF VARIABLES ! 2957: * --------------------------- ! 2958: * ! 2959: * DURING THE COURSE OF EVALUATING EXPRESSIONS, IT IS ! 2960: * NECESSARY TO GENERATE NAMES OF VARIABLES (FOR EXAMPLE ! 2961: * ON THE LEFT SIDE OF A BINARY EQUALS OPERATOR). THESE ARE ! 2962: * NOT TO BE CONFUSED WITH OBJECTS OF DATATYPE NAME WHICH ! 2963: * ARE IN FACT VALUES. ! 2964: * ! 2965: * FROM A LOGICAL POINT OF VIEW, SUCH NAMES COULD BE SIMPLY ! 2966: * REPRESENTED BY A POINTER TO THE APPROPRIATE VALUE CELL. ! 2967: * HOWEVER IN THE CASE OF ARRAYS AND PROGRAM DEFINED ! 2968: * DATATYPES, THIS WOULD VIOLATE THE RULE THAT THERE MUST BE ! 2969: * NO POINTERS INTO THE MIDDLE OF A BLOCK IN DYNAMIC STORE. ! 2970: * ACCORDINGLY, A NAME IS ALWAYS REPRESENTED BY A BASE AND ! 2971: * OFFSET. THE BASE POINTS TO THE START OF THE BLOCK ! 2972: * CONTAINING THE VARIABLE VALUE AND THE OFFSET IS THE ! 2973: * OFFSET WITHIN THIS BLOCK IN BAUS. THUS THE ADDRESS ! 2974: * OF THE ACTUAL VARIABLE IS DETERMINED BY ADDING THE BASE ! 2975: * AND OFFSET VALUES. ! 2976: * ! 2977: * THE FOLLOWING ARE THE INSTANCES OF VARIABLES REPRESENTED ! 2978: * IN THIS MANNER. ! 2979: * ! 2980: * 1) NATURAL VARIABLE BASE IS PTR TO VRBLK ! 2981: * OFFSET IS *VRVAL ! 2982: * ! 2983: * 2) TABLE ELEMENT BASE IS PTR TO TEBLK ! 2984: * OFFSET IS *TEVAL ! 2985: * ! 2986: * 3) ARRAY ELEMENT BASE IS PTR TO ARBLK ! 2987: * OFFSET IS OFFSET TO ELEMENT ! 2988: * ! 2989: * 4) VECTOR ELEMENT BASE IS PTR TO VCBLK ! 2990: * OFFSET IS OFFSET TO ELEMENT ! 2991: * ! 2992: * 5) PROG DEF DTP BASE IS PTR TO PDBLK ! 2993: * OFFSET IS OFFSET TO FIELD VALUE ! 2994: * ! 2995: * IN ADDITION THERE ARE TWO CASES OF OBJECTS WHICH ARE ! 2996: * LIKE VARIABLES BUT CANNOT BE HANDLED IN THIS MANNER. ! 2997: * THESE ARE CALLED PSEUDO-VARIABLES AND ARE REPRESENTED ! 2998: * WITH A SPECIAL BASE POINTER AS FOLLOWS= ! 2999: * ! 3000: * EXPRESSION VARIABLE PTR TO EVBLK (SEE EVBLK) ! 3001: * ! 3002: * KEYWORD VARIABLE PTR TO KVBLK (SEE KVBLK) ! 3003: * ! 3004: * PSEUDO-VARIABLES ARE HANDLED AS SPECIAL CASES BY THE ! 3005: * ACCESS PROCEDURE (ACESS) AND THE ASSIGNMENT PROCEDURE ! 3006: * (ASIGN). SEE THESE TWO PROCEDURES FOR DETAILS. ! 3007: EJC ! 3008: * ! 3009: * ORGANIZATION OF DATA AREA ! 3010: * ------------------------- ! 3011: * ! 3012: * THE DATA AREA IS DIVIDED INTO TWO REGIONS. ! 3013: * ! 3014: * STATIC AREA ! 3015: * ! 3016: * THE STATIC AREA BUILDS UP FROM THE BOTTOM AND CONTAINS ! 3017: * DATA AREAS WHICH ARE ALLOCATED DYNAMICALLY BUT ARE NEVER ! 3018: * DELETED OR MOVED AROUND. THE MACRO-PROGRAM ITSELF ! 3019: * USES THE STATIC AREA FOR THE FOLLOWING. ! 3020: * ! 3021: * 1) ALL VARIABLE BLOCKS (VRBLK). ! 3022: * ! 3023: * 2) THE HASH TABLE FOR VARIABLE BLOCKS. ! 3024: * ! 3025: * 3) MISCELLANEOUS BUFFERS AND WORK AREAS (SEE PROGRAM ! 3026: * INITIALIZATION SECTION). ! 3027: * ! 3028: * IN ADDITION, THE SYSTEM PROCEDURES MAY USE THIS AREA FOR ! 3029: * INPUT/OUTPUT BUFFERS, EXTERNAL FUNCTIONS ETC. SPACE IN ! 3030: * THE STATIC REGION IS ALLOCATED BY CALLING PROCEDURE ALOST ! 3031: * ! 3032: * THE FOLLOWING GLOBAL VARIABLES DEFINE THE CURRENT ! 3033: * LOCATION AND SIZE OF THE STATIC AREA. ! 3034: * ! 3035: * STATB ADDRESS OF START OF STATIC AREA ! 3036: * STATE ADDRESS+1 OF LAST WORD IN AREA. ! 3037: * ! 3038: * THE MINIMUM SIZE OF STATIC IS GIVEN APPROXIMATELY BY ! 3039: * 12 + *E$HNB + *E$STS + SPACE FOR ALPHABET STRING ! 3040: * AND STANDARD PRINT BUFFER. ! 3041: EJC ! 3042: * DYNAMIC AREA ! 3043: * ! 3044: * THE DYNAMIC AREA IS BUILT UPWARDS IN MEMORY AFTER THE ! 3045: * STATIC REGION. DATA IN THIS AREA MUST ALL BE IN STANDARD ! 3046: * BLOCK FORMATS SO THAT IT CAN BE PROCESSED BY THE GARBAGE ! 3047: * COLLECTOR (PROCEDURE GBCOL). GBCOL COMPACTS BLOCKS DOWN ! 3048: * IN THIS REGION AS REQUIRED BY SPACE EXHAUSTION AND CAN ! 3049: * ALSO MOVE ALL BLOCKS UP TO ALLOW FOR EXPANSION OF THE ! 3050: * STATIC REGION. ! 3051: * WITH THE EXCEPTION OF TABLES AND ARRAYS, NO SPITBOL ! 3052: * OBJECT ONCE BUILT IN DYNAMIC MEMORY IS EVER SUBSEQUENTLY ! 3053: * MODIFIED. OBSERVING THIS RULE NECESSITATES A COPYING ! 3054: * ACTION DURING STRING AND PATTERN CONCATENATION. ! 3055: * GARBAGE COLLECTION IS FUNDAMENTAL TO THE ALLOCATION OF ! 3056: * SPACE FOR VALUES. SPITBOL USES A VERY EFFICIENT GARBAGE ! 3057: * COLLECTOR WHICH INSISTS THAT POINTERS INTO DYNAMIC STORE ! 3058: * SHOULD BE IDENTIFIABLE WITHOUT USE OF BIT TABLES, ! 3059: * MARKER BITS ETC. TO SATISFY THIS REQUIREMENT, DYNAMIC ! 3060: * MEMORY MUST NOT START AT TOO LOW AN ADDRESS AND LENGTHS ! 3061: * OF ARRAYS, TABLES, STRINGS, CODE AND EXPRESSION BLOCKS ! 3062: * MAY NOT EXCEED THE NUMERICAL VALUE OF THE LOWEST DYNAMIC ! 3063: * ADDRESS. TO AVOID EITHER PENALIZING USERS WITH MODEST ! 3064: * REQUIREMENTS OR RESTRICTING THOSE WITH GREATER NEEDS ON ! 3065: * HOST SYSTEMS WHERE DYNAMIC MEMORY IS ALLOCATED IN LOW ! 3066: * ADDRESSES, THE MINIMUM DYNAMIC ADDRESS MAY BE SPECIFIED ! 3067: * SUFFICIENTLY HIGH TO PERMIT ARBITRARILY LARGE SPITBOL ! 3068: * OBJECTS TO BE CREATED ( WITH THE POSSIBILITY IN EXTREME ! 3069: * CASES OF WASTING LARGE AMOUNTS OF MEMORY BELOW THE ! 3070: * START ADDRESS). THIS MINIMUM VALUE IS MADE AVAILABLE ! 3071: * IN VARIABLE MXLEN BY A SYSTEM ROUTINE, SYSMX. ! 3072: * ALTERNATIVELY SYSMX MAY INDICATE THAT A ! 3073: * DEFAULT MAY BE USED IN WHICH DYNAMIC IS PLACED ! 3074: * AT THE LOWEST POSSIBLE ADDRESS FOLLOWING STATIC. ! 3075: * THE FOLLOWING GLOBAL WORK CELLS DEFINE THE LOCATION AND ! 3076: * LENGTH OF THE DYNAMIC AREA. ! 3077: * ! 3078: * DNAMB START OF DYNAMIC AREA ! 3079: * DNAMP NEXT AVAILABLE LOCATION ! 3080: * DNAME LAST AVAILABLE LOCATION + 1 ! 3081: * ! 3082: * DNAMB IS ALWAYS HIGHER THAN STATE SINCE THE ALOST ! 3083: * PROCEDURE MAINTAINS SOME EXPANSION SPACE ABOVE STATE. ! 3084: * *** DNAMB MUST NEVER BE PERMITTED TO HAVE A VALUE LESS ! 3085: * THAN THAT IN MXLEN *** ! 3086: * ! 3087: * SPACE IN THE DYNAMIC REGION IS ALLOCATED BY THE ALLOC ! 3088: * PROCEDURE. THE DYNAMIC REGION MAY BE USED BY SYSTEM ! 3089: * PROCEDURES PROVIDED THAT ALL THE RULES ARE OBEYED. ! 3090: * SOME OF THE RULES ARE SUBTLE SO IT IS PREFERABLE FOR ! 3091: * OSINT TO MANAGE ITS OWN MEMORY NEEDS. SPITBOL PROCS ! 3092: * OBEY RULES TO ENSURE THAT NO ACTION CAN CAUSE A GARBAGE ! 3093: * COLLECTION EXCEPT AT SUCH TIMES AS CONTENTS OF XL, XR ! 3094: * AND THE STACK ARE +CLEAN+ (SEE COMMENT BEFORE UTILITY ! 3095: * PROCEDURES AND IN GBCOL FOR MORE DETAIL). NOTE ! 3096: * THAT CALLS OF ALOST MAY CAUSE GARBAGE COLLECTION (SHIFT ! 3097: * OF MEMORY TO FREE SPACE). SPITBOL PROCS WHICH CALL ! 3098: * SYSTEM ROUTINES ASSUME THAT THEY CANNOT PRECIPITATE ! 3099: * COLLECTION AND THIS MUST BE RESPECTED. ! 3100: EJC ! 3101: * ! 3102: * REGISTER USAGE ! 3103: * -------------- ! 3104: * ! 3105: * (CP) CODE POINTER REGISTER. USED TO ! 3106: * HOLD A POINTER TO THE CURRENT ! 3107: * LOCATION IN THE INTERPRETIVE PSEUDO ! 3108: * CODE (I.E. PTR INTO A CDBLK). ! 3109: * ! 3110: * (XL,XR) GENERAL INDEX REGISTERS. USUALLY ! 3111: * USED TO HOLD POINTERS TO BLOCKS IN ! 3112: * DYNAMIC STORAGE. AN IMPORTANT ! 3113: * RESTRICTION IS THAT THE VALUE IN ! 3114: * XL MUST BE COLLECTABLE FOR ! 3115: * A GARBAGE COLLECT CALL. A VALUE ! 3116: * IS COLLECTABLE IF IT EITHER POINTS ! 3117: * OUTSIDE THE DYNAMIC AREA, OR IF IT ! 3118: * POINTS TO THE START OF A BLOCK IN ! 3119: * THE DYNAMIC AREA. ! 3120: * ! 3121: * (XS) STACK POINTER. USED TO POINT TO ! 3122: * THE STACK FRONT. THE STACK MAY ! 3123: * BUILD UP OR DOWN AND IS USED ! 3124: * TO STACK SUBROUTINE RETURN POINTS ! 3125: * AND OTHER RECURSIVELY SAVED DATA. ! 3126: * ! 3127: * (XT) AN ALTERNATIVE NAME FOR XL DURING ! 3128: * ITS USE IN ACCESSING STACKED ITEMS. ! 3129: * ! 3130: * (WA,WB,WC) GENERAL WORK REGISTERS. CANNOT BE ! 3131: * USED FOR INDEXING, BUT MAY HOLD ! 3132: * VARIOUS TYPES OF DATA. ! 3133: * ! 3134: * (IA) USED FOR ALL SIGNED INTEGER ! 3135: * ARITHMETIC, BOTH THAT USED BY THE ! 3136: * TRANSLATOR AND THAT ARISING FROM ! 3137: * USE OF SNOBOL4 ARITHMETIC OPERATORS ! 3138: * ! 3139: * (RA) REAL ACCUMULATOR. USED FOR ALL ! 3140: * FLOATING POINT ARITHMETIC. ! 3141: * ! 3142: * ENTRY VALUES ! 3143: * ! 3144: * IN ADDITION TO THE ENTRY VALUES OF XS, XL, XR AS DEFINED ! 3145: * FOR MINIMAL, THE PROGRAM-SPECIFIC ENTRY REGISTERS MUST ! 3146: * BE SET AS FOLLOWS ! 3147: * ! 3148: * (WA) INITIAL VALUE FOR CODE KEYWORD ! 3149: * ! 3150: * (WB,WC,IA,RA,CP) ZERO ! 3151: * ! 3152: TTL S P I T B O L -- PROCEDURES SECTION ! 3153: EJC ! 3154: * ! 3155: * THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING ! 3156: * SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL ! 3157: * TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES ! 3158: * BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL ! 3159: * ORDER. ! 3160: * ALL PROCEDURES HAVE A SPECIFICATION CONSISTING OF A ! 3161: * MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER ! 3162: * CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND ! 3163: * FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS ! 3164: * REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD ! 3165: * THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY ! 3166: * MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR ! 3167: * VALUES CHANGED. ! 3168: * A MODEL MINIMAL EXP PSEUDO-OP FOR EACH PROCEDURE IS ! 3169: * INCLUDED IN THE DESCRIPTION. MACHINE PROCESSABLE VERSIONS ! 3170: * OF THESE ARE COLLECTED AT THE END OF THE SECTION, ! 3171: * FOLLOWING THE SEC OPCODE. ! 3172: * THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS ! 3173: * CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM ! 3174: * INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE ! 3175: * FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN ! 3176: * ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES, ! 3177: * IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH ! 3178: * DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS ! 3179: * OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT. ! 3180: * E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB, ! 3181: * JSR SYSTC IN SOME IMPLEMENTATIONS. ! 3182: * ! 3183: * IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK ! 3184: * FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL ! 3185: * DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF BLOCKS. ! 3186: * ! 3187: * SCBLK FORMAT IS OUTLINED HERE, SINCE STRINGS ARE OFTEN ! 3188: * PASSED AS PARAMETERS TO OSINT OR MAY BE RETURNED BY ! 3189: * OSINT. AN SCBLK CONTAINS 2 HEADER WORDS, THE FIRST OF ! 3190: * WHICH CONTAINS A VALUE ONLY OF INTEREST TO SPITBOL. ! 3191: * IT IS NOT NECESSARY TO SET THIS FIELD IN RETURNED ! 3192: * SCBLKS. ! 3193: * THE SECOND WORD CONTAINS THE NUMBER OF CHARACTERS IN THE ! 3194: * STRING AND SHOULD BE CORRECTLY SET IN RETURNED SCBLKS. ! 3195: * THE REMAINING WORDS CONTAIN THE CHARACTERS OF THE STRING, ! 3196: * PACKED CFP$C PER WORD, WITH THE LAST WORD PADDED OUT IF ! 3197: * NECESSARY WITH BLANK CHARACTERS. ! 3198: EJC ! 3199: * ! 3200: * OSINT FAILURE (FLOSI) AND ERROR (EROSI) RETURNS ! 3201: * ----- ------- ------- --- ----- ------- ------- ! 3202: * ! 3203: * WHERE IT MAKES SENSE, OSINT CALLS MAY BE ABLE TO ! 3204: * RETURN IN SUCH A WAY AS TO CAUSE SPITBOL STATEMENT ! 3205: * FAILURE SO THAT THE USER CAN REGAIN CONTROL FOR SOME ! 3206: * CONDITIONS AND ATTEMPT RECOVERY OR A RE-TRY. ! 3207: * THESE CASES ARE IDENTIFIED BY INCLUDING ! 3208: * PPM FLOSI ! 3209: * IN THE LIST OF RETURNS. ! 3210: * THE CONDITIONS ON REGISTER PRESERVATION WHEN A FLOSI ! 3211: * RETURN IS TAKEN ARE AS FOLLOWS. ! 3212: * ANY REGISTER APPEARING IN THE LIST FOLLOWING THE MODEL ! 3213: * CALL AS BEING DESTROYED ON A NORMAL RETURN, NEED NOT BE ! 3214: * PRESERVED. ADDITIONALLY ANY REGISTER CONTAINING ENTRY ! 3215: * PARAMETERS NEED NOT BE PRESERVED ON A FLOSI RETURN. ! 3216: * OTHER REGISTERS, NOT EXPLICITLY REFERENCED, MUST BE ! 3217: * PRESERVED. ! 3218: * ! 3219: * SOME OSINT CALLS ARE PERMITTED TO RETURN AN ERROR ! 3220: * CODE AND/OR MESSAGE. THIS ALLOWS REPORTING OF ERROR ! 3221: * CONDITIONS DETECTED BY THE OSINT ROUTINE IN TERMS ! 3222: * RELEVANT TO THE IMPLEMENTATION. SUCH RETURNS WILL RESULT ! 3223: * IN EXECUTION TERMINATION (UNLESS AN ERROR TRAP IS ! 3224: * OPERATIVE). IN THE DOCUMENTATION OF THE SYS-- ROUTINES ! 3225: * THEY APPEAR AS ! 3226: * PPM EROSI ! 3227: * RETURNS AND THE CONVENTIONS USED ARE AS FOLLOWS - ! 3228: * TAKE THE SPECIFIED RETURN WITH ! 3229: * (WA) SET TO 0 AS A DEFAULT ERROR CODE ! 3230: * OR (WA) SET TO ANY PRIVATE CODE IN 300 TO 999. ! 3231: * (XL) SET TO 0 IN WHICH CASE SPITBOL WILL MAKE A ! 3232: * LATER SYSEM CALL TO OBTAIN THE ERROR TEXT ! 3233: * USING THE ERROR CODE PASSED IN WA. ! 3234: * OR (WA) SET TO ANY PRIVATE CODE IN 300 TO 999. ! 3235: * (XL) POINTING TO AN SCBLK CONTAINING THE TEXT OF AN ! 3236: * ERROR MESSAGE AND WITH ITS LENGTH FIELD SET. ! 3237: * THIS WILL BE COPIED ON RETURN TO SPITBOL AND ! 3238: * USED IN THE USUAL ERROR PROCESSING. ! 3239: * IN THIS CASE, NO SYSEM CALL WILL FOLLOW. ! 3240: * ! 3241: * THE REMARKS REGARDING REGISTER PRESERVATION UNDER THE ! 3242: * FLOSI DESCRIPTION APPLY ALSO TO AN EROSI RETURN EXCEPT ! 3243: * THAT PRESCRIBED VALUES FOR WA, XL MUST BE SET UP. ! 3244: * ! 3245: EJC ! 3246: * ! 3247: * SYSAX -- AFTER EXECUTION ! 3248: * ! 3249: * SYSAX EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3250: * ! 3251: * IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED, ! 3252: * THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND ! 3253: * BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT. ! 3254: * PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND ! 3255: * IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX ! 3256: * IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED. ! 3257: * ! 3258: * JSR SYSAX CALL AFTER EXECUTION ! 3259: * ! 3260: * SYSBX -- BEFORE EXECUTION ! 3261: * ! 3262: * SYSBX EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3263: * ! 3264: * CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE ! 3265: * COMMENCING EXECUTION IN CASE OSINT NEEDS ! 3266: * TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES. ! 3267: * OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE ! 3268: * TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING. ! 3269: * ! 3270: * JSR SYSBX CALL BEFORE EXECUTION STARTS ! 3271: EJC ! 3272: * ! 3273: * SYSCI -- CONVERT INTEGER ! 3274: * ! 3275: * SYSCI EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3276: * ! 3277: * SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO ! 3278: * CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER ! 3279: * THAN USING THE SPITBOL INTERNAL CONVERSION CODE. THIS ! 3280: * CODE MAY BE LESS EFFICIENT ON MACHINES WITH HARDWARE ! 3281: * CONVERSION INSTRUCTIONS AND IN SUCH CASES, IT MAY BE AN ! 3282: * ADVANTAGE TO INCLUDE SYSCI. THE SYMBOL .CSCI MUST BE ! 3283: * DEFINED IF THIS ROUTINE IS TO BE USED. ! 3284: * ! 3285: * THE RULES FOR CONVERTING INTEGERS TO STRINGS ARE THAT ! 3286: * POSITIVE VALUES ARE REPRESENTED WITHOUT ANY SIGN, AND ! 3287: * THERE ARE NEVER ANY LEADING BLANKS OR ZEROS, EXCEPT IN ! 3288: * THE CASE OF ZERO ITSELF WHICH IS REPRESENTED AS A SINGLE ! 3289: * ZERO DIGIT. NEGATIVE NUMBERS ARE REPRESENTED WITH A ! 3290: * PRECEDING MINUS SIGN. THERE ARE NEVER ANY TRAILING ! 3291: * BLANKS, AND CONVERSION CANNOT FAIL. ! 3292: * ! 3293: * (IA) VALUE TO BE CONVERTED ! 3294: * JSR SYSCI CALL TO CONVERT INTEGER VALUE ! 3295: * (XL) POINTER TO PSEUDO-SCBLK WITH STRING ! 3296: * ! 3297: * SYSDT -- GET CURRENT DATE ! 3298: * ! 3299: * SYSDT EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3300: * ! 3301: * SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS ! 3302: * RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE ! 3303: * TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE ! 3304: * CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE ! 3305: * SNOBOL4 FUNCTION DATE(). ! 3306: * ! 3307: * JSR SYSDT CALL TO GET DATE ! 3308: * (XL) POINTER TO BLOCK CONTAINING DATE ! 3309: * ! 3310: * THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT ! 3311: * THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED ! 3312: * INTO SPITBOL DYNAMIC MEMORY ON RETURN. ! 3313: EJC ! 3314: * ! 3315: * SYSEC -- END -COPY INCLUSION ! 3316: * ! 3317: * SYSEC PRC E,2 DEFINE EXTERNAL ENTRY POINT ! 3318: * ! 3319: * (WA) IOTAG FROM MATCHING SYSSC ! 3320: * JSR SYSEC CALL TO END -COPY ! 3321: * PPM DUMMY FAIL EXIT (DO NOT USE) ! 3322: * PPM EROSI ERROR EXIT ! 3323: * (WA,WB,WC) DESTRUCTABLE ! 3324: * ! 3325: * THE CALL TO SYSEC SIGNALS THE OSINT THAT INPUT IS ! 3326: * TO BE CLOSED OUT FROM THE CURRENT SYSRD -COPY FILE ! 3327: * AND INPUT RESTORED FROM THE NEXT OUTER LEVEL. WA ! 3328: * IS THE IOTAG RETURNED FROM THE MATCHING SYSSC CALL. ! 3329: * NOTE THAT SYSEC MAY BE CALLED EITHER AS A ! 3330: * CONSEQUENCE OF FLOSI EXIT FROM SYSRD, OR PREMATURELY ! 3331: * IN THE EVENT OF A CODE() COMPILATION ERROR CONTAINING ! 3332: * A -COPY, OR "END" LABEL ENCOUNTERED DURING INITIAL ! 3333: * COMPILATION. A MISSING FLOSI EXIT FOR SYSEC IS INCLUDED ! 3334: * FOR STRUCTURAL CONFORMANCE, BUT MUST NEVER BE TAKEN. ! 3335: EJC ! 3336: * ! 3337: * SYSSC -- START -COPY INCLUSION FOR SYSRD ! 3338: * ! 3339: * SYSSC PRC E,2 DEFINE EXTERNAL ENTRY POINT ! 3340: * ! 3341: * (XR) FILETAG SCBLK FOR -COPY ! 3342: * JSR SYSSC CALL TO NEST -COPY INPUT ! 3343: * PPM DUMMY FAIL EXIT (DO NOT USE) ! 3344: * PPM EROSI ERROR EXIT ! 3345: * (WA) IOTAG TO BE PRESENTED TO SYSEC ! 3346: * (WB,WC) DESTRUCTABLE ! 3347: * ! 3348: * SYSSC IS CALLED BY SPITBOL WHEN A -COPY CONTROL ! 3349: * CARD IS ENCOUNTERED, EITHER AT COMPILE TIME IN ! 3350: * THE INPUT STREAM OR AT EXECUTION TIME IN A ! 3351: * CALL TO CODE. THE INTENDED SEMANTICS ARE THAT ! 3352: * FURTHER INPUT FROM THE CURRENT STANDARD INPUT ! 3353: * FILE BE SUSPENDED AND THAT SUBSEQENT CALLS ! 3354: * TO SYSRD RETURN LINES FROM THE NEW FILE ! 3355: * IDENTIFIED BY THE SCBLK PTR GIVEN TO SYSSC IN XR. ! 3356: * THIS NEW FILE IS CLOSED AND SUSPENDED INPUT ! 3357: * RESUMED BY THE OSINT WHEN SYSEC IS CALLED. ! 3358: * ! 3359: * FAILURE TO FIND A -COPY FILE MUST BE VIEWED ! 3360: * AS AN EROSI. THE DUMMY PPM IS INCLUDED ONLY FOR ! 3361: * STRUCTURAL COMPATIBILITY WITH OTHER FLOSI/EROSI ! 3362: * OSINT ROUTINE DEFINITIONS. THE IOTAG RETURNED ! 3363: * WILL BE SAVED AND PRESENTED TO SYSEC ! 3364: * WHEN SPITBOL WISHES THIS LEVEL OF -COPY TERMINATED. ! 3365: * IT MUST BE NON-COLLECTABLE. ! 3366: * ! 3367: * IN GENERAL, SPITBOL SUPPORTS ARBITRARY NESTING ! 3368: * OF SYSSC/SYSEC IN THE NATURAL MANNER. IT IS ! 3369: * RECOGNISED THAT THE IMPLEMENTATION MAY NEED TO ! 3370: * LIMIT THE DEGREE OF NESTING. HOWEVER ! 3371: * IMPLEMENTORS ARE MOST STRONGLY ENCOURAGED TO ! 3372: * PROVIDE AT LEAST A SINGLE LEVEL OF -COPY TO GIVE ! 3373: * A DEGREE OF MODULARITY TO A LANGUAGE WHICH ! 3374: * DEFINITELY NEEDS IT. ! 3375: EJC ! 3376: * ! 3377: * SYSEF -- EJECT FILE ! 3378: * ! 3379: * SYSEF EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3380: * ! 3381: * SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT ! 3382: * MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES ! 3383: * SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE ! 3384: * STANDARD OUTPUT FILE (SEE SYSEP). ! 3385: * THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT ! 3386: * PERMIT EJECTS. ! 3387: * THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED ! 3388: * FAILURE EVENTS. ! 3389: * SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG. ! 3390: * ! 3391: * (XL) FILETAG (PTR TO SCBLK FOR ARG) ! 3392: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3393: * (WC) VALUE/0 FOR INTEGER/STRING FILETAG ! 3394: * JSR SYSEF CALL TO EJECT FILE ! 3395: * PPM FLOSI STATEMENT FAILURE RETURN ! 3396: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3397: * (XL,WA,WC) DESTROYED ! 3398: * ! 3399: * SYSEJ -- END OF JOB ! 3400: * ! 3401: * SYSEJ EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3402: * ! 3403: * SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO ! 3404: * TERMINATE THE RUN. ! 3405: * RUN STATISTICS, ENDING MESSAGES ETC WILL HAVE BEEN ! 3406: * PROVIDED ALREADY BY SPITBOL BEFORE THIS CALL IS MADE. ! 3407: * ! 3408: * (WA) VALUE OF CODE KEYWORD ! 3409: * JSR SYSEJ CALL TO END JOB ! 3410: * DOES NOT RETURN TO CALLER ! 3411: * ! 3412: EJC ! 3413: * ! 3414: * SYSEM -- GET ERROR MESSAGE TEXT ! 3415: * ! 3416: * SYSEM EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3417: * ! 3418: * SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE ! 3419: * SOURCE PROGRAM OR OF OSINT ERROR MESSAGES. ! 3420: * THE ERROR CODE IS EITHER THAT GIVEN IN THE ERR, ERB ! 3421: * ORDER OR IS THAT RETURNED VIA THE EROSI MECHANISM OF ! 3422: * AN EARLIER OSINT CALL. ! 3423: * SYSEM SHOULD RETURN A NULL STRING (LENGTH ZERO) IF IT ! 3424: * DOES NOT SUPPORT THIS FEATURE OR NO MESSAGE CORRESPONDS ! 3425: * TO THE PRESENTED CODE. ! 3426: * IN THIS CASE, SPITBOL WILL PRINT THE STRING, IF ANY, ! 3427: * STORED IN THE ERRTEXT KEYWORD. ! 3428: * ! 3429: * (WA) ERROR CODE NUMBER ! 3430: * JSR SYSEM CALL TO GET TEXT ! 3431: * (XR) POINTER TO TEXT OF MESSAGE ! 3432: * ! 3433: * THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK ! 3434: * FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE ! 3435: * STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN. ! 3436: EJC ! 3437: * ! 3438: * SYSEN -- ENDFILE ! 3439: * ! 3440: * SYSEN EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3441: * ! 3442: * SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE. ! 3443: * THE FILE SHOULD NORMALLY BE CLOSED BY THIS CALL (UNLESS ! 3444: * THE CALL IS INTENDED TO ACCESS, VIA THE SECOND ARGUMENT, ! 3445: * SOME SPECIAL HOST FEATURE WHICH DOES NOT IMPLY CLOSURE). ! 3446: * ANY INTERNAL BUFFERS, TABLE ENTRIES OR MARKERS RELATING ! 3447: * TO THE FILE MAY BE FREED IF FILE CLOSURE OCCURS. ! 3448: * THE SECOND ARGUMENT IS USED TO REQUEST FEATURES SUCH AS ! 3449: * FILE DELETION, RENAMING, REPROTECTION, REWINDING ETC AS ! 3450: * APPROPRIATE TO THE HOST OPERATING SYSTEM. ITS FORMAT IS ! 3451: * HOST SPECIFIC AND IT IS THE RESPONSIBILITY OF SYSEN TO ! 3452: * PARSE IT. ! 3453: * (WA) IS USED AS A CLOSURE FLAG ON RETURN. IF THE VALUE ! 3454: * IS NON-ZERO, SUBSEQUENT INPUT/OUTPUT SYS-- CALLS ! 3455: * INVOKED THROUGH ACCESS TO THE ASSOCIATED VARIABLE WILL ! 3456: * OCCUR AS THOUGH THERE HAD BEEN NO SYSEN CALL. ! 3457: * IF IT IS SET TO ZERO SPITBOL WILL CAUSE STATEMENT FAILURE ! 3458: * FOR SUBSEQUENT ATTEMPTS TO INVOKE INPUT/OUTPUT ACTIVITY ! 3459: * THROUGH THE ASSOCIATED VARIABLE (CF A READ MADE AFTER ! 3460: * PHYSICAL END OF FILE IS REACHED). THIS WILL BE DONE ! 3461: * WITHOUT ANY FURTHER INVOCATION OF SYS-- ROUTINES. ! 3462: * SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG. ! 3463: * ! 3464: * (XL) FILETAG (PTR TO SCBLK FOR 1ST ARG) ! 3465: * (XR) SCBLK PTR FOR 2ND ARG (0 IF NONE) ! 3466: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3467: * (WC) VALUE/0 FOR INTEGER/STRING FILETAG ! 3468: * JSR SYSEN CALL TO ENDFILE ! 3469: * PPM FLOSI STATEMENT FAILURE RETURN ! 3470: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3471: * (WA) CLOSURE FLAG (SEE ABOVE) ! 3472: * (XL,XR,WC) DESTROYED ! 3473: * ! 3474: * THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT ! 3475: * PERMIT ENDFILE (E.G. STANDARD INPUT AND OUTPUT FILES) ! 3476: * OR IF IT IS CLOSED ALREADY OR FOR APPROPRIATE CONDITIONS ! 3477: * WHERE A NON-NULL SECOND ARGUMENT WAS SUPPLIED. ! 3478: * THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED ! 3479: * FAILURE EVENTS. ! 3480: EJC ! 3481: * ! 3482: * SYSEP -- EJECT PRINTER PAGE ! 3483: * ! 3484: * SYSEP EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3485: * ! 3486: * SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD ! 3487: * PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT). ! 3488: * IF THE STANDARD PRINTER FILE DOES NOT SUPPORT PAGE EJECTS ! 3489: * THEN THIS ROUTINE SHOULD USE THE FAILURE RETURN. ! 3490: * IF SYSPP OPTIONS ARE SET TO MAKE THE TERMINAL THE ! 3491: * STANDARD OUTPUT FILE, EITHER ENSURE THAT PAGE SIZE IS ! 3492: * SET TO AVOID EJECTS OR CODE THIS ROUTINE TO HANDLE ! 3493: * POTENTIAL EJECTS TO TERMINAL. ! 3494: * ! 3495: * JSR SYSEP CALL TO EJECT PRINTER OUTPUT ! 3496: * PPM FLOSI STATEMENT FAILURE RETURN ! 3497: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3498: EJC ! 3499: * ! 3500: * SYSEX -- CALL EXTERNAL FUNCTION ! 3501: * ! 3502: * SYSEX EXP E,1 DEFINE EXTERNAL ENTRY POINT ! 3503: * ! 3504: * SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION ! 3505: * PREVIOUSLY LOADED WITH A CALL TO SYSLD. ! 3506: * ! 3507: * (XS) POINTER TO ARGUMENTS ON STACK ! 3508: * (XL) POINTER TO CONTROL BLOCK (EFBLK) ! 3509: * (WA) NUMBER OF ARGUMENTS ON STACK ! 3510: * JSR SYSEX CALL TO PASS CONTROL TO FUNCTION ! 3511: * PPM LOC RETURN HERE IF FUNCTION CALL FAILS ! 3512: * (XS) POPPED PAST ARGUMENTS ! 3513: * (XR) RESULT RETURNED ! 3514: * ! 3515: * THE ARGUMENTS ARE STORED ON THE STACK WITH ! 3516: * THE LAST ARGUMENT AT 0(XS). ON RETURN, XS ! 3517: * IS POPPED PAST THE ARGUMENTS. ! 3518: * ! 3519: * THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE ! 3520: * SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES ! 3521: * SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED ! 3522: * (UNDER EFBLK) IN THIS SECTION. ! 3523: * ! 3524: * THERE ARE TWO WAYS OF RETURNING A RESULT. ! 3525: * ! 3526: * 1) RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS ! 3527: * BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING ! 3528: * THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE ! 3529: * KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY. ! 3530: * ! 3531: * 2) STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY ! 3532: * POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY. ! 3533: * THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT ! 3534: * THAT THE FIRST WORD WILL BE OVERWRITTEN ! 3535: * BY A TYPE WORD ON RETURN AND SO NEED NOT ! 3536: * BE CORRECTLY SET. SUCH A RESULT IS ! 3537: * COPIED INTO MAIN STORAGE BEFORE PROCEEDING. ! 3538: * UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A ! 3539: * PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING ! 3540: * TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE ! 3541: * BLOCK IS COPIED INTO DYNAMIC MEMORY. ! 3542: EJC ! 3543: * ! 3544: * SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES ON ! 3545: * ! 3546: * SYSHS EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3547: * ! 3548: * PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES ! 3549: * DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRIES ARE ! 3550: * (1) ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS RETURNS ! 3551: * AN SCBLK CONTAINING NAME OF COMPUTER, NAME OF ! 3552: * OPERATING SYSTEM AND NAME OF SITE SEPARATED BY COLONS. ! 3553: * (2) FIRST ARGUMENT IS 1 (AS AN INTEGER OR STRING) TO GET, ! 3554: * AS A STRING, THE JCL COMMAND LINE FOR THE SPITBOL RUN. ! 3555: * ALL ENTRY PARAMETERS ARE CONVERTED TO STRINGS BEFORE THE ! 3556: * CALL IS MADE. ! 3557: * THE RESULT RETURNED FROM ANY CALL IS A STRING IN THE FORM ! 3558: * OF AN SCBLK WITH A POINTER TO IT IN XL. A NULL STRING ! 3559: * MAY BE RETURNED BY POINTING TO AN SCBLK WITH LENGTH ! 3560: * FIELD ZERO. ! 3561: * SPITBOL COPIES THE STRING ON RETURN AND SUPPLIES THE ! 3562: * CORRECT VALUE FOR THE FIRST WORD. ! 3563: * RETURNS ARE PROVIDED TO PERMIT STATEMENT FAILURE OR ! 3564: * THE REPORTING OF ERRORS. ! 3565: * ! 3566: * (WA) ARGUMENT 1 SCBLK ! 3567: * (XL) ARGUMENT 2 SCBLK ! 3568: * (XR) ARGUMENT 3 SCBLK ! 3569: * (WB) 0 IF ALL ARGS ARE NULL ELSE NONZERO ! 3570: * JSR SYSHS CALL TO GET HOST INFORMATION ! 3571: * PPM FLOSI STATEMENT FAILURE RETURN ! 3572: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3573: * (XL) PTR TO SCBLK RESULT OF CALL ! 3574: * (XR,WA,WB) DESTROYED ! 3575: * ! 3576: * SYSID -- RETURN SYSTEM IDENTIFICATION ! 3577: * ! 3578: * SYSID EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3579: * ! 3580: * THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD ! 3581: * PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO ! 3582: * A HEADING LINE OF THE FORM ! 3583: * MACRO SPITBOL VERSION V.V ! 3584: * SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE ! 3585: * MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR ! 3586: * VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO ! 3587: * GIVE SAY ! 3588: * MACRO SPITBOL VERSION V.V(M.M) ! 3589: * THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE ! 3590: * AND OPERATING SYSTEM. PREFERABLY IT SHOULD INCLUDE ! 3591: * THE DATE AND TIME OF THE RUN. ! 3592: * OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE ! 3593: * THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE, ! 3594: * UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS ! 3595: * APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A ! 3596: * NUISANCE TO USERS. ! 3597: * ! 3598: * JSR SYSID CALL FOR SYSTEM IDENTIFICATION ! 3599: * (XR) SCBLK PTR FOR ADDITION TO HEADER ! 3600: * (XL) SCBLK PTR FOR SECOND HEADER ! 3601: EJC ! 3602: * ! 3603: * SYSIL -- GET INPUT RECORD LENGTH ! 3604: * ! 3605: * SYSIL EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3606: * ! 3607: * SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD ! 3608: * FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO ! 3609: * CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER ! 3610: * FOR A SUBSEQUENT SYSIN CALL. ! 3611: * ! 3612: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3613: * JSR SYSIL CALL TO GET RECORD LENGTH ! 3614: * (WA) LENGTH ! 3615: * ! 3616: * NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE ! 3617: * UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL. ! 3618: * SYSIL MUST NEVER REQUEST A NULL (ZERO LENGTH) BUFFER. ! 3619: * ! 3620: * SYSIN -- READ INPUT RECORD ! 3621: * ! 3622: * SYSIN EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3623: * ! 3624: * SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS ! 3625: * REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS ! 3626: * ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN ! 3627: * SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL. ! 3628: * IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH ! 3629: * FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING ! 3630: * UNLESS BUFFER IS RIGHT PADDED WITH BLANKS. ! 3631: * IT IS ALSO PERMISSIBLE TO TAKE EITHER OF THE ALTERNATIVE ! 3632: * RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED. ! 3633: * THE FLOSI RETURN SHOULD BE TAKEN WHEN PHYSICAL END OF ! 3634: * FILE OCCURS. ! 3635: * SYSIN SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS ! 3636: * BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS ! 3637: * MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS. ! 3638: * SEE SYSIO FOR ACCOUNT OF IOTAG. ! 3639: * ! 3640: * (XR) POINTER TO BUFFER (SCBLK PTR) ! 3641: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3642: * (WC) LENGTH OF BUFFER IN CHARACTERS ! 3643: * JSR SYSIN CALL TO READ RECORD ! 3644: * PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE) ! 3645: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3646: * (WA,WC) DESTROYED ! 3647: EJC ! 3648: * ! 3649: * SYSIO -- INPUT/OUTPUT FILE ASSOCIATION ! 3650: * ! 3651: * SYSIO EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3652: * ! 3653: * SYSIO IS CALLED IN RESPONSE TO A SPITBOL INPUT() OR ! 3654: * OUTPUT() CALL. ! 3655: * THE FIRST ARGUMENT TO SUCH A CALL IS THE NAME OF A ! 3656: * SPITBOL VARIABLE WHICH IS NOT PASSED TO THIS ROUTINE. ! 3657: * THE SECOND ARGUMENT OF THE CALL WILL BE REFERRED TO FOR ! 3658: * CONVENIENCE AS THE FILETAG. IT IDENTIFIES IN SOME WAY ! 3659: * APPROPRIATE TO THE HOST, THE NAME OF THE FILE TO BE ! 3660: * OPENED. SPITBOL RECOGNISES THREE FORMS OF FILETAG, ! 3661: * (1) A NON-NUMERIC STRING IN WHICH CASE WC ON ENTRY WILL ! 3662: * CONTAIN ZERO ! 3663: * (2) AN INTEGER VALUE OR A STRING REPRESENTING AN INTEGER, ! 3664: * IN WHICH CASE WC ON ENTRY HOLDS THIS NUMERIC VALUE. ! 3665: * IN BOTH CASES, XL WILL CONTAIN A POINTER TO AN SCBLK ! 3666: * GIVING THE FILETAG AS A STRING ON ENTRY TO SYSIO. ! 3667: * (3) ONE OF THE NAMES, .INPUT, .OUTPUT, .TERMINAL ! 3668: * FOR ASSOCIATING THE FIRST ARGUMENT NAME TO THE ! 3669: * RELEVANT STANDARD FILE IN WHICH CASE SYSIO IS ! 3670: * NOT CALLED. ! 3671: * THE THIRD ARGUMENT OF THE CALL WILL BE CALLED THE ! 3672: * FILEPROPS. IT IS AN OPTIONAL STRING WHICH DETAILS FILE ! 3673: * PROPERTIES OR CHARACTERISTICS RELEVANT TO THE HOST ! 3674: * OPERATING SYSTEM. IT MAY INCLUDE INFORMATION ON RECORD ! 3675: * SIZE, RECORD TYPE, PAPER FEED CONTROL CHARACTERS, ACCESS ! 3676: * MODE, CHARACTER SET ETC. SUCH INFORMATION IS VERY HOST ! 3677: * DEPENDENT SO THE FORMAT IS NOT PRESCRIBED. ! 3678: * SYSIO MUST PARSE THE FILEPROPS ARGUMENT IF THE FEATURE ! 3679: * IS SUPPORTED. ! 3680: * ! 3681: * SYSIO SHOULD ATTEMPT TO OPEN THE FILE AS REQUESTED, AND ! 3682: * SHOULD MAKE THE NORMAL RETURN IF SUCCESSFUL. ! 3683: * THE FLOSI RETURN SHOULD BE TAKEN FOR FILE NOT FOUND ON ! 3684: * INPUT() CALL, OR FOR AN OUTPUT() CALL FAILURE ON ACCOUNT ! 3685: * OF WRITE PROTECTION VIOLATION OR SIMILAR EVENTS. ! 3686: * THIS ALLOWS THE USER TO ATTEMPT RECOVERY. ! 3687: * THIS RETURN MAY BE RELEVANT FOR VARIOUS HOST ! 3688: * SPECIFIC EVENTS AT THE DISCRETION OF THE IMPLEMENTOR. ! 3689: * THE EROSI RETURN SHOULD BE USED TO REPORT THE NATURE OF ! 3690: * OTHER ERRORS. ! 3691: * IT IS THE TASK OF SYSIO TO FIND AND ADMINISTER ANY ! 3692: * BUFFER SPACE, TABLE ENTRIES OR OTHER INFORMATION NEEDED ! 3693: * FOR FILE INPUT/OUTPUT. SUCH SPACE MUST BE FOUND OUTSIDE ! 3694: * THE AREA ALLOCATED TO SPITBOL FOR STATIC AND DYNAMIC ! 3695: * STORE (UNLESS THE IMPLEMENTOR HAS INTIMATE KNOWLEDGE OF ! 3696: * THE INNER WORKINGS OF SPITBOL). ! 3697: * CORRELATION BETWEEN THE SYSIO CALL WHICH OPENS A FILE AND ! 3698: * THE SYS-- CALLS USED TO READ, WRITE AND MANIPULATE IT IS ! 3699: * BASED ON A ONE WORD VALUE REFERRED TO AS THE IOTAG. ! 3700: * THIS MUST BE PUT IN WA BEFORE MAKING A SUCCESSFUL RETURN ! 3701: * FROM SYSIO. ITS FORMAT IS ENTIRELY AT THE DISCRETION OF ! 3702: * IMPLEMENTORS WITH THE RESTRICTIONS (A) THAT IT MUST NOT ! 3703: * BE POSSIBLE FOR IT TO BE INTERPRETED AS AN ADDRESS IN ! 3704: * DYNAMIC MEMORY, SINCE THIS WILL CAUSE GARBAGE COLLECTION ! 3705: * ERRORS AND (B) IT MUST BE NON-ZERO. ! 3706: EJC ! 3707: * ! 3708: * SYSIO (CONTINUED) ! 3709: * ! 3710: * DEPENDING ON THE HOST, IT MAY OR MAY NOT BE FEASIBLE ! 3711: * TO OPEN NEW FILES CONNECTED TO, AND OR CHANGE THE ! 3712: * PROPERTIES OF THE STANDARD INPUT AND OUTPUT FILES. ! 3713: * IOTAG IS PASSED AS A PARAMETER IN ALL SYS-- CALLS ! 3714: * RELATING TO ANY FILE EXCEPT THOSE FOR THE STANDARD ! 3715: * INPUT/OUTPUT FILES WHERE ANY REQUIRED IOTAG FIELD IS ! 3716: * ALWAYS PASSED AS ZERO. NOTE THAT SPITBOL ASSUMES SYSRD ! 3717: * AND SYSPR STANDARD FILES ARE ALREADY OPEN WHEN OSINT ! 3718: * FIRST PASSES CONTROL TO IT - NO CALLS OF SYSIO ARE MADE ! 3719: * FOR INITIAL OPENING OF THESE FILES. ! 3720: * THE FOLLOWING CONVENTIONS ARE ADOPTED. ! 3721: * (1) IN ANY CALL, FILETAG ARG IS ALWAYS PRESENT. ! 3722: * IN ANY CALL, FILEPROPS MAY OR MAY NOT BE PRESENT. ! 3723: * (2) IF ANY EARLIER SYSIO CALL HAS BEEN MADE WITH A ! 3724: * PARTICULAR FILETAG THEN THE RELEVANT IOTAG IS PASSED ! 3725: * IN AS A PARAMETER. ! 3726: * (3) SPITBOL DOES NOT PRECLUDE ATTEMPTS TO OPEN A ! 3727: * FILE IDENTIFIED BY A PARTICULAR FILETAG FOR BOTH ! 3728: * INPUT AND OUTPUT BY SUCCESSIVE SYSIO CALLS. IT IS ! 3729: * FOR SYSIO TO ACCEPT OR REJECT SUCH CALLS, ALL OF ! 3730: * WHICH, SUBSEQUENT TO THE FIRST, WILL PASS THE ! 3731: * IOTAG AS A PARAMETER. ! 3732: * (4) PARAMETER WB HOLDS VALUES AS FOLLOWS - ! 3733: * 0 INPUT CALL FOR STANDARD INPUT (SYSRD) FILE ! 3734: * 1 INPUT CALL FOR ANY OTHER FILE ! 3735: * 2 OUTPUT CALL FOR STANDARD OUTPUT (SYSPR) FILE ! 3736: * 3 OUTPUT CALL FOR ANY OTHER FILE. ! 3737: * ! 3738: * (XL) FILETAG SCBLK POINTER ! 3739: * (XR) FILEPROPS SCBLK POINTER OR ZERO ! 3740: * (WA) IOTAG FROM PRIOR CALL OR ZERO ! 3741: * (WB) 0,1,2,3 FOR ASSOCIATION TYPE ! 3742: * (WC) POSSIBLY INT VALUE OF FILETAG OR 0 ! 3743: * JSR SYSIO CALL TO ASSOCIATE FILE ! 3744: * PPM FLOSI STATEMENT FAILURE RETURN ! 3745: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3746: * (WA) IOTAG ! 3747: * (XL,XR,WB,WC) DESTROYED ! 3748: EJC ! 3749: * THIS INTERFACE MAY BE SUMMARIZED BY THE FOLLOWING TABLE. ! 3750: * IT IS ASSUMED THAT THERE IS EXPLICIT OR IMPLICIT ! 3751: * NUMBERING OF FILE PARAMETERS APPEARING IN THE COMMAND ! 3752: * LINE USED TO INITIATE A SPITBOL RUN. IF WC CONTAINS A ! 3753: * NUMERIC ARG, /JCL $WC/ IMPLIES THE MATCHING FILE ! 3754: * PARAMETER FROM THE COMMAND LINE. ! 3755: * ! 3756: * --------------------------------------------------------- ! 3757: * I WA == 0 (FIRST CALL) I ! 3758: * --------------------------------------------------------- ! 3759: * I WC == 0 (ALPHA FILETAG) I WC /= 0 (NUMERIC FILETAG) I ! 3760: * I---------------------------I---------------------------I ! 3761: * I XR == 0 I XR /= 0 I XR == 0 I XR /= 0 I ! 3762: * I-------------I-------------I-------------I-------------I ! 3763: * I I I I I ! 3764: * I OPEN FILE, I OPEN FILE I OPEN FILE I OPEN FILE I ! 3765: * I RETURN IOTAGI WITH PROPS, I JCL $WC, I JCL $WC I ! 3766: * I I RETURN IOTAGI RETURN IOTAGI WITH PROPS,I ! 3767: * I I I I RETURN IOTAGI ! 3768: * I I I I I ! 3769: * --------------------------------------------------------- ! 3770: * ! 3771: * --------------------------------------------------------- ! 3772: * I WA /= 0 (SUBSEQUENT CALL) I ! 3773: * --------------------------------------------------------- ! 3774: * I WC == 0 (ALPHA FILETAG) I WC /= 0 (NUMERIC FILETAG) I ! 3775: * I---------------------------I---------------------------I ! 3776: * I XR == 0 I XR /= 0 I XR == 0 I XR /= 0 I ! 3777: * I-------------I-------------I-------------I-------------I ! 3778: * I I I I I ! 3779: * I CLOSE FILE, I MODIFY FILE I CLOSE FILE I MODIFY FILE I ! 3780: * IRE-OPEN FILE,I PROPS, I JCL $WC, I JCL $WC I ! 3781: * IRETURN IOTAG I IRE-OPEN FILE,I PROPS, I ! 3782: * I I IRETURN IOTAG I I ! 3783: * I I (*)I I I ! 3784: * --------------------------------------------------------- ! 3785: * ! 3786: * INPUT ASSOCIATION FOR WB == 1 ! 3787: * OUTPUT ASSOCIATION FOR WB == 3 ! 3788: * ! 3789: * IF WB == 0 OR WB == 2, THEN THE FILETAG IS .INPUT OR ! 3790: * .OUTPUT RESPECTIVELY. ! 3791: * OPTION (*) IS THE ONLY VALID OPTION IN GENERAL FOR ! 3792: * THESE CASES BUT OTHERS ARE NOT EXCLUDED IF AN ! 3793: * IMPLEMENTOR SEES SOME USE FOR THEM. ! 3794: EJC ! 3795: * ! 3796: * SYSLD -- LOAD EXTERNAL FUNCTION ! 3797: * ! 3798: * SYSLD EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3799: * ! 3800: * SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4 ! 3801: * LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER ! 3802: * THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL ! 3803: * BE USED ON SUBSEQUENT CALLS TO THE FUNCTION SEE (SYSEX). ! 3804: * THE FLOSI RETURN MAY BE TAKEN ON FAILURE TO FIND THE ! 3805: * FUNCTION AND THE EROSI RETURN TO REPORT ERRORS. ! 3806: * ! 3807: * (XR) POINTER TO FUNCTION NAME (SCBLK) ! 3808: * (XL) POINTER TO LIBRARY NAME (SCBLK) ! 3809: * JSR SYSLD CALL TO LOAD FUNCTION ! 3810: * PPM FLOSI STATEMENT FAILURE RETURN ! 3811: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3812: * (XR) POINTER TO LOADED CODE ! 3813: * ! 3814: * THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE ! 3815: * SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT ! 3816: * IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE ! 3817: * A PROPER BLOCK POINTER. ! 3818: * ! 3819: * SYSMM -- GET MORE MEMORY ! 3820: * ! 3821: * SYSMM EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3822: * ! 3823: * SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC ! 3824: * MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH ! 3825: * THE CURRENT DYNAMIC DATA AREA. ! 3826: * ! 3827: * THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY ! 3828: * VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS ! 3829: * IMPOSSIBLE. ! 3830: * ! 3831: * JSR SYSMM CALL TO GET MORE MEMORY ! 3832: * (XR) NUMBER OF ADDITIONAL WORDS OBTAINED ! 3833: EJC ! 3834: * ! 3835: * SYSMX -- SUPPLY MXLEN ! 3836: * ! 3837: * SYSMX EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3838: * ! 3839: * BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL ! 3840: * OBJECT IS ALLOWED TO OCCUPY MORE BAUS OF MEMORY THAN ! 3841: * THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC ! 3842: * (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO ! 3843: * REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST ! 3844: * USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY ! 3845: * STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS, ! 3846: * THERE IS NO PROBLEM. ! 3847: * IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR ! 3848: * 20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A ! 3849: * USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER ! 3850: * OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF ! 3851: * ANY. THE VALUE RETURNED IS EITHER AN INTEGER ! 3852: * REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE ! 3853: * MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN ! 3854: * NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE ! 3855: * IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED ! 3856: * TO DYNAMIC STORE BEFORE COMPILATION STARTS. ! 3857: * IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD ! 3858: * MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC ! 3859: * MEMORY IS USED FOR THIS KEYWORD. ! 3860: * ! 3861: * JSR SYSMX CALL TO GET MXLEN ! 3862: * (WA) EITHER MXLEN OR 0 FOR DEFAULT ! 3863: EJC ! 3864: * ! 3865: * SYSOU -- OUTPUT RECORD ! 3866: * ! 3867: * SYSOU EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3868: * ! 3869: * SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY ! 3870: * ASSOCIATED WITH A SYSIO CALL. ! 3871: * THE FLOSI RETURN IS TAKEN IF ANY MAXIMUM CAPACITY OF THE ! 3872: * FILE IS EXCEEDED. ! 3873: * SYSOU SHOULD BE PREPARED TO MAKE REPEATED FLOSI RETURNS ! 3874: * BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS ! 3875: * MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS. ! 3876: * SEE SYSIO FOR ACCOUNT OF IOTAG. ! 3877: * ! 3878: * (XR) RECORD TO BE WRITTEN (SCBLK) ! 3879: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3880: * (WC) NUMBER OF CHARACTERS TO WRITE ! 3881: * JSR SYSOU CALL TO OUTPUT RECORD ! 3882: * PPM FLOSI STATEMENT FAILURE RETURN ! 3883: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3884: * (WA,WC) DESTROYED ! 3885: * ! 3886: * SYSPI -- PRINT ON INTERACTIVE TERMINAL ! 3887: * ! 3888: * SYSPI EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3889: * ! 3890: * IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN ! 3891: * REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION ! 3892: * ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT ! 3893: * REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH ! 3894: * MESSAGES TO THE TERMINAL. ! 3895: * SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL ! 3896: * THROUGH THE SPECIAL VARIABLE NAME, TERMINAL. ! 3897: * THE LINE LENGTH WILL NOT EXCEED THAT HELD IN XL ON ! 3898: * RETURN FROM SYSPP CALL AND MAY BE ZERO IN WHICH CASE A ! 3899: * BLANK LINE IS TO BE PRINTED. ! 3900: * IT IS POSSIBLE TO DIRECT STANDARD LISTING AND OTHER ! 3901: * OUTPUT TO THIS ROUTINE BY SELECTING OPTIONS IN SYSPP. ! 3902: * ! 3903: * (XR) PTR TO LINE BUFFER (SCBLK) ! 3904: * (WA) LINE LENGTH ! 3905: * (WC) NUMBER OF CHARACTERS TO WRITE ! 3906: * JSR SYSPI CALL TO PRINT LINE ! 3907: * PPM FLOSI STATEMENT FAILURE RETURN ! 3908: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3909: * (WA,WC) DESTROYED ! 3910: EJC ! 3911: * ! 3912: * SYSPP -- OBTAIN PRINT PARAMETERS ! 3913: * ! 3914: * SYSPP -- OBTAIN PRINT PARAMETERS ! 3915: * ! 3916: * SYSPP EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3917: * ! 3918: * SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN ! 3919: * PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT ! 3920: * AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN ! 3921: * AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS ! 3922: * CASE VALUES RETURNED IN XL, WA MAY BE LESS THAN OR EQUAL ! 3923: * TO THOSE RETURNED IN INITIAL CALL BUT MAY NOT BE ! 3924: * GREATER SINCE BUFFERS HAVE BEEN SET UP IN THE CORE IMAGE. ! 3925: * OSINT MUST ENSURE THAT NON-CONFLICTING OPTIONS ARE ! 3926: * SELECTED. ! 3927: * THE INFORMATION RETURNED IS - ! 3928: * 1. LINE LENGTH IN CHARS FOR OUTPUT TO TERMINAL. IF ZERO ! 3929: * IS RETURNED IT IS ASSUMED THERE IS NO ONLINE TERML. ! 3930: * IF A TERMINAL IS AVAILABLE ERROR MESSAGES WILL BE ! 3931: * SENT TO IT AS WELL AS TO THE LISTING FILE. ! 3932: * 2. LINE LENGTH IN CHARS FOR STANDARD PRINT FILE. ! 3933: * IF ZERO IS RETURNED IT IS ASSUMED THERE IS NO ! 3934: * STANDARD PRINT FILE. ! 3935: * IN THIS CASE SPITBOL MAY REDUCE LISTING OVERHEADS. ! 3936: * IF THIS OPTION IS SELECTED, SPECIFICATION OF OTHER ! 3937: * OPTIONS RELATING TO FILE CHARACTERISTICS IS ! 3938: * REDUNDANT (UNLESS THE OPTION TO SELECT TERMINAL ! 3939: * AS STANDARD OUTPUT FILE IS TAKEN). ! 3940: * IT IS NOT ADVISABLE TO RETURN BOTH XL AND WA AS ZERO ! 3941: * SINCE ERRORS CANNOT THEN BE REPORTED. ! 3942: * 3. NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED ! 3943: * DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING ! 3944: * PAGE THROWS ARE SUPPRESSED. ! 3945: * 4. STANDARD INPUT MAY BE READ FROM THE TERMINAL, ! 3946: * IN WHICH CASE SYSRI WILL BE CALLED INSTEAD OF SYSRD. ! 3947: * 5. STANDARD OUTPUT MAY BE SENT TO TERMINAL, IN WHICH ! 3948: * CASE SYSPI WILL BE CALLED INSTEAD OF SYSPR. ! 3949: * 6. AN INITIAL -NOLIST OPTION WHICH SUPPRESSES LISTING ! 3950: * UNLESS THE PROGRAM CONTAINS AN EXPLICIT -LIST. ! 3951: * 7. OPTION TO SUPPRESS LISTING OF COMPILATION STATS. ! 3952: * 8. OPTION TO SUPPRESS LISTING OF EXECUTION STATS. ! 3953: * THESE OPTIONS ARE USEFUL FOR ESTABLISHED PROGRAMS. ! 3954: * 9. OPTION TO SUPPRESS EXECUTION AS THOUGH A ! 3955: * -NOEXECUTE CARD WERE SUPPLIED. ! 3956: EJC ! 3957: * ! 3958: * SYSPP (CONTINUED) ! 3959: * ! 3960: * 10. BY DEFAULT, IF AN ONLINE TERMINAL IS AVAILABLE, ! 3961: * ERROR MESSAGE COPIES ARE SENT TO IT AS WELL AS TO ! 3962: * THE REGULAR OUTPUT FILE. THIS OPTION SUPPRESSES THE ! 3963: * DEFAULT. ! 3964: * 11. OPTION TO SUPPRESS SYSID LISTING HEADER. ! 3965: * 12. TWO BITS ARE ALLOCATED TO SELECT LISTING OPTION. ! 3966: * /00/ SIGNIFIES COMPACT LISTING SUITABLE FOR TERML. ! 3967: * A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH ! 3968: * OF -- LISTING, COMPILATION STATISTICS, EXECUTION ! 3969: * OUTPUT, EXECUTION STATISTICS, DUMP OUTPUT. ! 3970: * /01/ SIGNIFIES STANDARD LISTING OPTION IN WHICH ! 3971: * SOURCE LISTINGS INCLUDE SOME PAGE EJECTS BUT ! 3972: * NOT PRECEDING ALL ITEMS LISTED ABOVE. ! 3973: * /10/ MEANS AN EXTENDED LISTING WITH FULL SET OF ! 3974: * PAGE EJECTS. ! 3975: * /11/ IS REDUNDANT AND ACHIEVES SAME EFFECT AS /10/. ! 3976: * ! 3977: * JSR SYSPP CALL TO GET PRINT PARAMETERS ! 3978: * (XL) 1. TERMINAL LINE LENGTH ! 3979: * (WA) 2. PRINT LINE LENGTH IN CHARS ! 3980: * (WB) 3. NUMBER OF LINES/PAGE ! 3981: * (WC) BITS VALUE ...JIHGFEDCBA WHERE ! 3982: * 4. A = 1 STD INPUT FROM TERMINAL ! 3983: * 5. B = 1 STD OUTPUT TO TERMINAL ! 3984: * 6. C = 1 TO SUPPRESS LISTING ! 3985: * 7. D = 1 TO SUPPRESS COMPILN. STATS ! 3986: * 8. E = 1 TO SUPPRESS EXECN. STATS ! 3987: * 9. F = 1 TO SUPPRESS EXECUTION ! 3988: * 10. G = 1 TO SUPPRESS ERRORS TO TERML ! 3989: * 11. H = 1 TO SUPPRESS SYSID HEADER ! 3990: * 12. JI= 00, 01, 10 FOR LISTING OPTIONS ! 3991: EJC ! 3992: * ! 3993: * SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE ! 3994: * ! 3995: * SYSPR EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3996: * ! 3997: * SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD ! 3998: * OUTPUT FILE. ! 3999: * ! 4000: * (XR) POINTER TO LINE BUFFER (SCBLK) ! 4001: * (WA) LINE LENGTH ! 4002: * (WC) NUMBER OF CHARACTERS TO WRITE ! 4003: * JSR SYSPR CALL TO PRINT LINE ! 4004: * PPM FLOSI STATEMENT FAILURE RETURN ! 4005: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4006: * (WA,WC) DESTROYED ! 4007: * ! 4008: * THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE ! 4009: * SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE ! 4010: * VALUE IN WC IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS ! 4011: * THAN THE MAXIMUM LINE LENGTH POSSIBLE. ! 4012: * NULL LINES (WC = 0) ARE POSSIBLE IN WHICH CASE A BLANK ! 4013: * LINE IS TO BE PRINTED. ! 4014: * IT IS POSSIBLE TO OPT FOR HAVING STANDARD OUTPUT DIRECTED ! 4015: * TO USE SYSPI INSTEAD OF SYSPR BY MAKING A PARTICULAR ! 4016: * REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED. ! 4017: * ! 4018: * THE FLOSI RETURN IS USED WITH SYSTEMS WHICH LIMIT THE ! 4019: * AMOUNT OF PRINTED OUTPUT TO SIGNAL THAT THE LIMIT HAS ! 4020: * BEEN REACHED. IF POSSIBLE PRINTING SHOULD BE PERMITTED ! 4021: * AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO ! 4022: * ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION. ! 4023: * ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR ! 4024: * CALLS. IF SUCH CALLS ARE UNACCEPTABLE, SYSPR MUST TAKE ! 4025: * APPROPRIATE ACTION (E.G. IGNORE THE CALL, TAKE THE EROSI ! 4026: * RETURN, CLOSE THE OUTPUT FILE, TERMINATE EXECUTION WITH ! 4027: * A DIAGNOSTIC). ! 4028: EJC ! 4029: * ! 4030: * SYSRD -- READ RECORD FROM STANDARD INPUT FILE ! 4031: * ! 4032: * SYSRD EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4033: * ! 4034: * SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT ! 4035: * FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE ! 4036: * LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS ! 4037: * CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH ! 4038: * SPITBOL IS PREPARED TO RECEIVE. ! 4039: * IT CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD ! 4040: * (DEFAULT 160). ! 4041: * IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH ! 4042: * FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING ! 4043: * UNLESS THE BUFFER IS RIGHT PADDED WITH BLANKS. ! 4044: * IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURNS ! 4045: * AFTER SUCH AN ADJUSTMENT HAS BEEN MADE. ! 4046: * SYSRD SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS ! 4047: * BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS ! 4048: * MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS. ! 4049: * IT IS POSSIBLE TO OPT FOR READING STANDARD INPUT ! 4050: * FROM SYSRI INSTEAD OF SYSRD BY MAKING A PARTICULAR ! 4051: * REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED. ! 4052: * ! 4053: * (XR) POINTER TO BUFFER (SCBLK PTR) ! 4054: * (WC) LENGTH OF BUFFER IN CHARACTERS ! 4055: * JSR SYSRD CALL TO READ LINE ! 4056: * PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE) ! 4057: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4058: * (WC) DESTROYED ! 4059: * ! 4060: * SYSRI -- READ RECORD FROM INTERACTIVE TERMINAL ! 4061: * ! 4062: * SYSRI EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4063: * ! 4064: * READS A RECORD FROM AN ONLINE TERMINAL. ! 4065: * THE BUFFER PROVIDED IS OF LENGTH EQUAL TO THE VALUE ! 4066: * RETURNED IN XL BY SYSPP. SYSRI SHOULD REPLACE THE ! 4067: * COUNT IN THE SECOND WORD OF THE SCBLK BY THE ACTUAL ! 4068: * CHARACTER COUNT UNLESS THE BUFFER IS RIGHT ! 4069: * PADDED WITH BLANKS. ! 4070: * IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE ! 4071: * RETURNS AFTER ADJUSTING THE COUNT. ! 4072: * THE END OF FILE FLOSI RETURN MAY BE USED IF THIS MAKES ! 4073: * SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN ! 4074: * EOF CHARACTER.) ! 4075: * ! 4076: * (XR) PTR TO CHAR BUFFER (SCBLK PTR) ! 4077: * (WC) LENGTH OF BUFFER IN CHARACTERS ! 4078: * JSR SYSRI CALL TO READ LINE FROM TERMINAL ! 4079: * PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE) ! 4080: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4081: * (WC) DESTROYED ! 4082: EJC ! 4083: * ! 4084: * SYSST -- SET FILE POINTER ! 4085: * ! 4086: * SYSST EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4087: * ! 4088: * SYSST IS CALLED TO CHANGE THE POSITION OF A FILE ! 4089: * POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT ! 4090: * MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED ! 4091: * UNCONVERTED. ! 4092: * ! 4093: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 4094: * (WB) 2ND ARGUMENT ! 4095: * (WC) 3RD ARGUMENT ! 4096: * JSR SYSST CALL TO SET FILE POINTER ! 4097: * PPM FLOSI FAIL RETURN ! 4098: * PPM EROSI ERROR RETURN ! 4099: * (WA,WB,WC) DESTROYED ! 4100: EJC ! 4101: * ! 4102: * SYSTM -- GET EXECUTION TIME SO FAR ! 4103: * ! 4104: * SYSTM EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4105: * ! 4106: * SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME ! 4107: * USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS ! 4108: * ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT ! 4109: * THE EXACT MEANING IS SYSTEM DEPENDENT. ! 4110: * BY DEFINING .CTMD, THE DEFAULT UNITS CAN BE REPLACED BY ! 4111: * DECISECONDS. ! 4112: * WHERE POSSIBLE, THE VALUE SHOULD RELATE TO PROCESSOR ! 4113: * RATHER THAN CLOCK-ON-THE-WALL TIMING VALUES. ! 4114: * ! 4115: * JSR SYSTM CALL TO GET TIMER VALUE ! 4116: * (IA) TIME SO FAR IN MILLISECONDS ! 4117: * ! 4118: * SYSTT -- TRACE TOGGLE ! 4119: * ! 4120: * SYSTT EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4121: * ! 4122: * CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO ! 4123: * TOGGLE A SYSTEM TRACE SWITCH. THIS PERMITS TRACING OF ! 4124: * LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF AND IS ! 4125: * INTENDED AS AN AID TO IMPLEMENTORS, NOT REGULAR USERS. ! 4126: * ! 4127: * JSR SYSTT CALL TO TOGGLE TRACE SWITCH ! 4128: * ! 4129: * SYSUL -- UNLOAD EXTERNAL FUNCTION ! 4130: * ! 4131: * SYSUL EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4132: * ! 4133: * SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY ! 4134: * LOADED WITH A CALL TO SYSLD. ! 4135: * ! 4136: * (XR) PTR TO CONTROL BLOCK (EFBLK) ! 4137: * JSR SYSUL CALL TO UNLOAD FUNCTION ! 4138: * ! 4139: * THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL ! 4140: * UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION. ! 4141: * ! 4142: * THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A ! 4143: * POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE ! 4144: * DEFINITIONS AND DATA STRUCTURES SECTION). ! 4145: EJC ! 4146: * ! 4147: * SYSXI -- EXIT TO PRODUCE LOAD MODULE ! 4148: * ! 4149: * SYSXI EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4150: * ! 4151: * WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER ! 4152: * OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE ! 4153: * CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT ! 4154: * SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND ! 4155: * THE NAMED PROGRAM LOADED AND EXECUTED. NO RETURN FROM ! 4156: * SYSXI OCCURS IN THIS CASE. THIS TYPE OF CHAIN ! 4157: * EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY ! 4158: * CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE. ! 4159: * ! 4160: * IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS ! 4161: * ! 4162: * -1, -2, -3 ! 4163: * CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE ! 4164: * IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH ! 4165: * A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS. ! 4166: * VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE ! 4167: * KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING. ! 4168: * TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A ! 4169: * POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR ! 4170: * VERSION NUMBER V.V (SEE SYSID). ! 4171: * ! 4172: * 0 IF POSSIBLE, RETURN CONTROL TO JOB CONTROL ! 4173: * COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE ! 4174: * SYSTEM DEPENDENT. ! 4175: * ! 4176: * +1, +2, +3 ! 4177: * CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF ! 4178: * MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE ! 4179: * THIS MODULE DIRECTLY. ! 4180: * ! 4181: * IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN ! 4182: * FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO ! 4183: * OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD ! 4184: * MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE ! 4185: * SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM. ! 4186: * SYSXI SHOULD MAKE A NOTE THAT NO I/O FILES INCLUDING ! 4187: * THE STANDARD ONES ARE AVAILABLE SO THAT ! 4188: * CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS ! 4189: * NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE. ! 4190: * AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS ! 4191: * RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH ! 4192: * A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE ! 4193: * PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE ! 4194: * IS OTHERWISE SEVERE. ! 4195: EJC ! 4196: * ! 4197: * SYSXI (CONTINUED) ! 4198: * ! 4199: * IF THE REQUESTED SYSXI FEATURE IS NOT PROVIDED, THEN ! 4200: * THE FLOSI RETURN SHOULD BE TAKEN. ! 4201: * ! 4202: * (XL) ZERO OR SCBLK PTR ! 4203: * (XR) PTR TO V.V SCBLK ! 4204: * (IA) SIGNED INTEGER ARGUMENT ! 4205: * (WA) VALUE OF CODE KEYWORD ! 4206: * JSR SYSXI CALL TO EXIT ! 4207: * PPM FLOSI STATEMENT FAILURE RETURN ! 4208: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4209: * (REGISTERS) SHOULD BE PRESERVED OVER CALL ! 4210: * ! 4211: * LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM ! 4212: * JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AS THOUGH ! 4213: * THE NORMAL RETURN HAD BEEN TAKEN FROM THE CALL. ! 4214: * THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE ! 4215: * OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE. ! 4216: * +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE ! 4217: * CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE. ! 4218: * +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID ! 4219: * AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE. ! 4220: * ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A ! 4221: * STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE. ! 4222: * +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP ! 4223: * AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE. ! 4224: *
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.