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