|
|
1.1 root 1: TTL S P I T B O L - REVISION HISTORY
2: EJC
3: * R E V I S I O N H I S T O R Y
4: * -------------------------------
5: *
6: *
7: * VERSION 3.5B (FEB 81... - SGD PATCHES)
8: * -----------------------------------
9: *
10: * SGD03 - ADDITION OF .CNCI AND SYSCI (INT->STRING
11: * SYSTEM ROUTINE OPTION)
12: * SGD04 - (06-MAY-1981) MODIFIED INILN TO 132
13: * SGD05 - (13-MAY-1981) INSERTED MISSING WTB AFTER SYSMM
14: * CALLS
15: * SGD06 - (25-MAY-1981) MERGED IN PROFILER PATCHES
16: * (NOT MARKED)
17: * SGD07 - (25-MAY-1981) MUCHO PATCHES TO PROFILER (MARKED,
18: * BUT BEST JUST TO EXTRACT ENMASSE)
19: * SGD08 - (25-MAY-1981) USE STRING LENGTH IN HASHS
20: * SGD09 - (25-MAY-1981) FIXED SERIOUS PARSER PROBLEM
21: * RELATING TO (X Y) ON LINE BEING VIEWED AS PATTERN
22: * MATCH. FIXED BY ADDITION OF NEW CMTYP VALUE
23: * C$CNP (CONCATENATION - NOT PATTERN MATCH)
24: * SGD10 - (01-AUG-1981) FIXED EXIT(N) RESPECIFICATION CODE
25: * TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN.
26: * SGD11 - (07-AUG-1981) BYPASS PRTPG CALL AT INITIALIZATION
27: * FOLLOWING COMPILATION IF NO OUTPUT GENERATED.
28: * THIS PREVENTS OUTPUT FILES CONSISTING OF THE
29: * HEADERS AND A FEW BLANK LINES WHEN THERE IS NO
30: * SOURCE LISTING AND NO COMPILATION STATS.
31: * ALSO FIX TIMSX INITIALIZATION IN SAME CODE.
32: * SGD12 - (17-AUG-1981) B$EFC CODE DID NOT CHECK FOR
33: * UNCONVERTED RESULT RETURNING NULL STRING. FIXED.
34: * SGDBF - ( NOV-1981) ADDED BUFFER TYPE AND SYMBOL CNBF
35: * SGD13 - (03-MAR-1982) LOAD PFVBL FIELD IN RETRN FOR
36: * RETURN TRACING. THIS WAS CAUSING BUG ON RETURN
37: * TRACES THAT TRIED TO ACCESS THE VARIABLE NAME
38: * SGD14 - ADDED CHAR FUNCTION. CHAR(N) RETURNS NTH
39: * CHARACTER OF HOST MACHINE CHARACTER SET.
40: * NOT CONDITIONALIZED OR MARKED.
41: * SGD15 - FIXED PROBLEM RELATING TO COMPILATION OF GOTO
42: * FIELDS CONTAINING SMALL INTEGERS (IN CONST SEC).
43: *
44: * REG01 - (XX-AUG-82)
45: * ADDED CFP$U TO EASE TRANSLATION ON SMALLER
46: * SYSTEMS - CONDITIONAL .CUCF
47: * ADDED LOWER CASE SUPPORT - CONDITIONAL .CULC
48: * ADDED SET I/O FUNCTION - CONDITIONAL .CUST
49: *
50: * REG02 - (XX-SEP-82)
51: * CHANGED INILN AND AND INILS TO 258
52: *
53: * REG03 - (XX-OCT-82)
54: * CONDITIONALIZED THE PAGE EJECT AFTER CALL TO SYSBX
55: * AND ADDED ANOTHER BEFORE CALL TO SYSBX, SO THAT,
56: * IF DESIRED BY THE IMPLEMENTOR, STANDARD OUTPUT
57: * WILL REFLECT ASSIGNMENTS MADE BY EXECUTING PROGRAM
58: * ONLY. CONDITIONAL .CUEJ CONTROLS - IF DEFINED
59: * EJECT IS BEFORE CALL TO SYSBX.
60: *
61: * REG04 - (XX-NOV-82)
62: * FIXED DIFFICULTIES WITH LISTINGS DURING EXECUTION
63: * WHEN NO LISTING GENERATED DURING COMPILATION.
64: *
65: * -LIST TO CODE() CAUSED BOMB. FIX IS TO RESET
66: * R$TTL AND R$STL TO NULLS NOT 0 AFTER COMPILATION.
67: * (LISTR AND LISTT EXPECT NULLS)
68: *
69: * WHEN LISTING AND STATISTICS ROUTED TO DIFFERENT
70: * FILE THAN EXECUTION OUTPUT, ERROR MESSAGE IS SENT
71: * TO EXECUTION OUTPUT (AND GETS SEPARATED FROM
72: * ... IN STATEMENT ... MSG). LABO1 CALLS SYSAX AND
73: * STOPR DOES NOT CALL SYSAX IF ENTERED FROM LABO1.
74: *
75: * REG05 - (XX-NOV-82)
76: * PREVENT CLEAR() FROM CLOBBERING PROTECTED VARIABLES
77: * AT LABEL SCLR5.
78: *
79: * REG06 - (XX-NOV-82)
80: * FIXED GTEXP FROM ACCEPTING TRAILING SEMICOLON OR
81: * COLON. NOT LEGAL WAY TO END AN EXPRESSION.
82: *
83: * VERSION 3.5A (OCT 79 - SGD PATCHES)
84: * -----------------------------------
85: *
86: * SGD01 - PATCH IN ASIGN TO FIX MULTIPLE TRAP BLOCK PROBLEM
87: * (ASG10+2)
88: * SGD02 - PATCH IN GTARR TO FIX NULL CONVERT (GTAR9+0)
89: *
90: TTL S P I T B O L -- BASIC INFORMATION
91: EJC
92: *
93: * GENERAL STRUCTURE
94: * -----------------
95: *
96: * THIS PROGRAM IS A TRANSLATOR FOR A VERSION OF THE SNOBOL4
97: * PROGRAMMING LANGUAGE. LANGUAGE DETAILS ARE CONTAINED IN
98: * THE MANUAL MACRO SPITBOL BY DEWAR AND MCCANN, TECHNICAL
99: * REPORT 90, UNIVERSITY OF LEEDS 1976. THE LANGUAGE
100: * IS IDENTICAL TO THAT IMPLEMENTED BY THE BTL TRANSLATOR
101: * (R. E. GRISWOLD ET AL.) WITH THE FOLLOWING EXCEPTIONS.
102: *
103: * 1) REDEFINITION OF STANDARD SYSTEM FUNCTIONS AND
104: * OPERATORS IS NOT PERMITTED.
105: *
106: * 2) THE VALUE FUNCTION IS NOT PROVIDED.
107: *
108: * 3) ACCESS TRACING IS PROVIDED IN ADDITION TO THE
109: * OTHER STANDARD TRACE MODES.
110: *
111: * 4) THE KEYWORD STFCOUNT IS NOT PROVIDED.
112: *
113: * 5) THE KEYWORD FULLSCAN IS NOT PROVIDED AND ALL PATTERN
114: * MATCHING TAKES PLACE IN FULLSCAN MODE (I.E. WITH NO
115: * HEURISTICS APPLIED).
116: *
117: * 6) A SERIES OF EXPRESSIONS SEPARATED BY COMMAS MAY
118: * BE GROUPED WITHIN PARENTHESES TO PROVIDE A SELECTION
119: * CAPABILITY. THE SEMANTICS ARE THAT THE SELECTION
120: * ASSUMES THE VALUE OF THE FIRST EXPRESSION WITHIN IT
121: * WHICH SUCCEEDS AS THEY ARE EVALUATED FROM THE LEFT.
122: * IF NO EXPRESSION SUCCEEDS THE ENTIRE STATEMENT FAILS
123: *
124: * 7) AN EXPLICIT PATTERN MATCHING OPERATOR IS PROVIDED.
125: * THIS IS THE BINARY QUERY (SEE GIMPEL SIGPLAN OCT 74)
126: *
127: * 8) THE ASSIGNMENT OPERATOR IS INTRODUCED AS IN THE
128: * GIMPEL REFERENCE.
129: *
130: * 9) THE EXIT FUNCTION IS PROVIDED FOR GENERATING LOAD
131: * MODULES - CF. GIMPELS SITBOL.
132: *
133: *
134: * THE METHOD USED IN THIS PROGRAM IS TO TRANSLATE THE
135: * SOURCE CODE INTO AN INTERNAL PSEUDO-CODE (SEE FOLLOWING
136: * SECTION). AN INTERPRETOR IS THEN USED TO EXECUTE THIS
137: * GENERATED PSEUDO-CODE. THE NATURE OF THE SNOBOL4 LANGUAGE
138: * IS SUCH THAT THE LATTER TASK IS MUCH MORE COMPLEX THAN
139: * THE ACTUAL TRANSLATION PHASE. ACCORDINGLY, NEARLY ALL THE
140: * CODE IN THE PROGRAM SECTION IS CONCERNED WITH THE ACTUAL
141: * EXECUTION OF THE SNOBOL4 PROGRAM.
142: EJC
143: *
144: * INTERPRETIVE CODE FORMAT
145: * ------------------------
146: *
147: * THE INTERPRETIVE PSEUDO-CODE CONSISTS OF A SERIES OF
148: * ADDRESS POINTERS. THE EXACT FORMAT OF THE CODE IS
149: * DESCRIBED IN CONNECTION WITH THE CDBLK FORMAT. THE
150: * PURPOSE OF THIS SECTION IS TO GIVE GENERAL INSIGHT INTO
151: * THE INTERPRETIVE APPROACH INVOLVED.
152: *
153: * THE BASIC FORM OF THE CODE IS RELATED TO REVERSE POLISH.
154: * IN OTHER WORDS, THE OPERANDS PRECEDE THE OPERATORS WHICH
155: * ARE ZERO ADDRESS OPERATORS. THERE ARE SOME EXCEPTIONS TO
156: * THESE RULES, NOTABLY THE UNARY NOT OPERATOR AND THE
157: * SELECTION CONSTRUCTION WHICH CLEARLY REQUIRE ADVANCE
158: * KNOWLEDGE OF THE OPERATOR INVOLVED.
159: *
160: * THE OPERANDS ARE MOVED TO THE TOP OF THE MAIN STACK AND
161: * THE OPERATORS ARE APPLIED TO THE TOP STACK ENTRIES. LIKE
162: * OTHER VERSIONS OF SPITBOL, THIS PROCESSOR DEPENDS ON
163: * KNOWING WHETHER OPERANDS ARE REQUIRED BY NAME OR BY VALUE
164: * AND MOVES THE APPROPRIATE OBJECT TO THE STACK. THUS NO
165: * NAME/VALUE CHECKS ARE INCLUDED IN THE OPERATOR CIRCUITS.
166: *
167: * THE ACTUAL POINTERS IN THE CODE POINT TO A BLOCK WHOSE
168: * FIRST WORD IS THE ADDRESS OF THE INTERPRETOR ROUTINE
169: * TO BE EXECUTED FOR THE CODE WORD.
170: *
171: * IN THE CASE OF OPERATORS, THE POINTER IS TO A WORD WHICH
172: * CONTAINS THE ADDRESS OF THE OPERATOR TO BE EXECUTED. IN
173: * THE CASE OF OPERANDS SUCH AS CONSTANTS, THE POINTER IS TO
174: * THE OPERAND ITSELF. ACCORDINGLY, ALL OPERANDS CONTAIN
175: * A FIELD WHICH POINTS TO THE ROUTINE TO LOAD THE VALUE OF
176: * THE OPERAND ONTO THE STACK. IN THE CASE OF A VARIABLE,
177: * THERE ARE THREE SUCH POINTERS. ONE TO LOAD THE VALUE,
178: * ONE TO STORE THE VALUE AND A THIRD TO JUMP TO THE LABEL.
179: *
180: * THE HANDLING OF FAILURE RETURNS DESERVES SPECIAL COMMENT.
181: * THE LOCATION FLPTR CONTAINS THE POINTER TO THE LOCATION
182: * ON THE MAIN STACK WHICH CONTAINS THE FAILURE RETURN
183: * WHICH IS IN THE FORM OF A BYTE OFFSET IN THE CURRENT
184: * CODE BLOCK (CDBLK OR EXBLK). WHEN A FAILURE OCCURS, THE
185: * STACK IS POPPED AS INDICATED BY THE SETTING OF FLPTR AND
186: * CONTROL IS PASSED TO THE APPROPRIATE LOCATION IN THE
187: * CURRENT CODE BLOCK WITH THE STACK POINTER POINTING TO THE
188: * FAILURE OFFSET ON THE STACK AND FLPTR UNCHANGED.
189: EJC
190: *
191: * INTERNAL DATA REPRESENTATIONS
192: * -----------------------------
193: *
194: * REPRESENTATION OF VALUES
195: *
196: * A VALUE IS REPRESENTED BY A POINTER TO A BLOCK WHICH
197: * DESCRIBES THE TYPE AND PARTICULARS OF THE DATA VALUE.
198: * IN GENERAL, A VARIABLE IS A LOCATION CONTAINING SUCH A
199: * POINTER (ALTHOUGH IN THE CASE OF TRACE ASSOCIATIONS THIS
200: * IS MODIFIED, SEE DESCRIPTION OF TRBLK).
201: *
202: * THE FOLLOWING IS A LIST OF POSSIBLE DATATYPES SHOWING THE
203: * TYPE OF BLOCK USED TO HOLD THE VALUE. THE DETAILS OF
204: * EACH BLOCK FORMAT ARE GIVEN LATER.
205: *
206: * DATATYPE BLOCK TYPE
207: * -------- ----------
208: *
209: *
210: * ARRAY ARBLK OR VCBLK
211: *
212: * CODE CDBLK
213: *
214: * EXPRESSION EXBLK OR SEBLK
215: *
216: * INTEGER ICBLK
217: *
218: * NAME NMBLK
219: *
220: * PATTERN P0BLK OR P1BLK OR P2BLK
221: *
222: * REAL RCBLK
223: *
224: * STRING SCBLK
225: *
226: * TABLE TBBLK
227: *
228: * PROGRAM DATATYPE PDBLK
229: EJC
230: *
231: * REPRESENTATION OF VARIABLES
232: * ---------------------------
233: *
234: * DURING THE COURSE OF EVALUATING EXPRESSIONS, IT IS
235: * NECESSARY TO GENERATE NAMES OF VARIABLES (FOR EXAMPLE
236: * ON THE LEFT SIDE OF A BINARY EQUALS OPERATOR). THESE ARE
237: * NOT TO BE CONFUSED WITH OBJECTS OF DATATYPE NAME WHICH
238: * ARE IN FACT VALUES.
239: *
240: * FROM A LOGICAL POINT OF VIEW, SUCH NAMES COULD BE SIMPLY
241: * REPRESENTED BY A POINTER TO THE APPROPRIATE VALUE CELL.
242: * HOWEVER IN THE CASE OF ARRAYS AND PROGRAM DEFINED
243: * DATATYPES, THIS WOULD VIOLATE THE RULE THAT THERE MUST BE
244: * NO POINTERS INTO THE MIDDLE OF A BLOCK IN DYNAMIC STORE.
245: * ACCORDINGLY, A NAME IS ALWAYS REPRESENTED BY A BASE AND
246: * OFFSET. THE BASE POINTS TO THE START OF THE BLOCK
247: * CONTAINING THE VARIABLE VALUE AND THE OFFSET IS THE
248: * OFFSET WITHIN THIS BLOCK IN BYTES. THUS THE ADDRESS
249: * OF THE ACTUAL VARIABLE IS DETERMINED BY ADDING THE BASE
250: * AND OFFSET VALUES.
251: *
252: * THE FOLLOWING ARE THE INSTANCES OF VARIABLES REPRESENTED
253: * IN THIS MANNER.
254: *
255: * 1) NATURAL VARIABLE BASE IS PTR TO VRBLK
256: * OFFSET IS *VRVAL
257: *
258: * 2) TABLE ELEMENT BASE IS PTR TO TEBLK
259: * OFFSET IS *TEVAL
260: *
261: * 3) ARRAY ELEMENT BASE IS PTR TO ARBLK
262: * OFFSET IS OFFSET TO ELEMENT
263: *
264: * 4) VECTOR ELEMENT BASE IS PTR TO VCBLK
265: * OFFSET IS OFFSET TO ELEMENT
266: *
267: * 5) PROG DEF DTP BASE IS PTR TO PDBLK
268: * OFFSET IS OFFSET TO FIELD VALUE
269: *
270: * IN ADDITION THERE ARE TWO CASES OF OBJECTS WHICH ARE
271: * LIKE VARIABLES BUT CANNOT BE HANDLED IN THIS MANNER.
272: * THESE ARE CALLED PSEUDO-VARIABLES AND ARE REPRESENTED
273: * WITH A SPECIAL BASE POINTER AS FOLLOWS=
274: *
275: * EXPRESSION VARIABLE PTR TO EVBLK (SEE EVBLK)
276: *
277: * KEYWORD VARIABLE PTR TO KVBLK (SEE KVBLK)
278: *
279: * PSEUDO-VARIABLES ARE HANDLED AS SPECIAL CASES BY THE
280: * ACCESS PROCEDURE (ACESS) AND THE ASSIGNMENT PROCEDURE
281: * (ASIGN). SEE THESE TWO PROCEDURES FOR DETAILS.
282: EJC
283: *
284: * ORGANIZATION OF DATA AREA
285: * -------------------------
286: *
287: *
288: * THE DATA AREA IS DIVIDED INTO TWO REGIONS.
289: *
290: * STATIC AREA
291: *
292: * THE STATIC AREA BUILDS UP FROM THE BOTTOM AND CONTAINS
293: * DATA AREAS WHICH ARE ALLOCATED DYNAMICALLY BUT ARE NEVER
294: * DELETED OR MOVED AROUND. THE MACRO-PROGRAM ITSELF
295: * USES THE STATIC AREA FOR THE FOLLOWING.
296: *
297: * 1) ALL VARIABLE BLOCKS (VRBLK).
298: *
299: * 2) THE HASH TABLE FOR VARIABLE BLOCKS.
300: *
301: * 3) MISCELLANEOUS BUFFERS AND WORK AREAS (SEE PROGRAM
302: * INITIALIZATION SECTION).
303: *
304: * IN ADDITION, THE SYSTEM PROCEDURES MAY USE THIS AREA FOR
305: * INPUT/OUTPUT BUFFERS, EXTERNAL FUNCTIONS ETC. SPACE IN
306: * THE STATIC REGION IS ALLOCATED BY CALLING PROCEDURE ALOST
307: *
308: * THE FOLLOWING GLOBAL VARIABLES DEFINE THE CURRENT
309: * LOCATION AND SIZE OF THE STATIC AREA.
310: *
311: * STATB ADDRESS OF START OF STATIC AREA
312: * STATE ADDRESS+1 OF LAST WORD IN AREA.
313: *
314: * THE MINIMUM SIZE OF STATIC IS GIVEN APPROXIMATELY BY
315: * 12 + *E$HNB + *E$STS + SPACE FOR ALPHABET STRING
316: * AND STANDARD PRINT BUFFER.
317: EJC
318: *
319: * DYNAMIC AREA
320: *
321: * THE DYNAMIC AREA IS BUILT UPWARDS IN MEMORY AFTER THE
322: * STATIC REGION. DATA IN THIS AREA MUST ALL BE IN STANDARD
323: * BLOCK FORMATS SO THAT IT CAN BE PROCESSED BY THE GARBAGE
324: * COLLECTOR (PROCEDURE GBCOL). GBCOL COMPACTS BLOCKS DOWN
325: * IN THIS REGION AS REQUIRED BY SPACE EXHAUSTION AND CAN
326: * ALSO MOVE ALL BLOCKS UP TO ALLOW FOR EXPANSION OF THE
327: * STATIC REGION.
328: * WITH THE EXCEPTION OF TABLES AND ARRAYS, NO SPITBOL
329: * OBJECT ONCE BUILT IN DYNAMIC MEMORY IS EVER SUBSEQUENTLY
330: * MODIFIED. OBSERVING THIS RULE NECESSITATES A COPYING
331: * ACTION DURING STRING AND PATTERN CONCATENATION.
332: *
333: * GARBAGE COLLECTION IS FUNDAMENTAL TO THE ALLOCATION OF
334: * SPACE FOR VALUES. SPITBOL USES A VERY EFFICIENT GARBAGE
335: * COLLECTOR WHICH INSISTS THAT POINTERS INTO DYNAMIC STORE
336: * SHOULD BE IDENTIFIABLE WITHOUT USE OF BIT TABLES,
337: * MARKER BITS ETC. TO SATISFY THIS REQUIREMENT, DYNAMIC
338: * MEMORY MUST NOT START AT TOO LOW AN ADDRESS AND LENGTHS
339: * OF ARRAYS, TABLES, STRINGS, CODE AND EXPRESSION BLOCKS
340: * MAY NOT EXCEED THE NUMERICAL VALUE OF THE LOWEST DYNAMIC
341: * ADDRESS. TO AVOID EITHER PENALIZING USERS WITH MODEST
342: * REQUIREMENTS OR RESTRICTING THOSE WITH GREATER NEEDS ON
343: * HOST SYSTEMS WHERE DYNAMIC MEMORY IS ALLOCATED IN LOW
344: * ADDRESSES, THE MINIMUM DYNAMIC ADDRESS MAY BE SPECIFIED
345: * SUFFICIENTLY HIGH TO PERMIT ARBITRARILY LARGE SPITBOL
346: * OBJECTS TO BE CREATED ( WITH THE POSSIBILITY IN EXTREME
347: * CASES OF WASTING LARGE AMOUNTS OF MEMORY BELOW THE
348: * START ADDRESS). THIS MINIMUM VALUE IS MADE AVAILABLE
349: * IN VARIABLE MXLEN BY A SYSTEM ROUTINE, SYSMX.
350: * ALTERNATIVELY SYSMX MAY INDICATE THAT A
351: * DEFAULT MAY BE USED IN WHICH DYNAMIC IS PLACED
352: * AT THE LOWEST POSSIBLE ADDRESS FOLLOWING STATIC.
353: *
354: * THE FOLLOWING GLOBAL WORK CELLS DEFINE THE LOCATION AND
355: * LENGTH OF THE DYNAMIC AREA.
356: *
357: * DNAMB START OF DYNAMIC AREA
358: * DNAMP NEXT AVAILABLE LOCATION
359: * DNAME LAST AVAILABLE LOCATION + 1
360: *
361: * DNAMB IS ALWAYS HIGHER THAN STATE SINCE THE ALOST
362: * PROCEDURE MAINTAINS SOME EXPANSION SPACE ABOVE STATE.
363: * *** DNAMB MUST NEVER BE PERMITTED TO HAVE A VALUE LESS
364: * THAN THAT IN MXLEN ***
365: *
366: * SPACE IN THE DYNAMIC REGION IS ALLOCATED BY THE ALLOC
367: * PROCEDURE. THE DYNAMIC REGION MAY BE USED BY SYSTEM
368: * PROCEDURES PROVIDED THAT ALL THE RULES ARE OBEYED.
369: EJC
370: *
371: * REGISTER USAGE
372: * --------------
373: *
374: * (CP) CODE POINTER REGISTER. USED TO
375: * HOLD A POINTER TO THE CURRENT
376: * LOCATION IN THE INTERPRETIVE PSEUDO
377: * CODE (I.E. PTR INTO A CDBLK).
378: *
379: * (XL,XR) GENERAL INDEX REGISTERS. USUALLY
380: * USED TO HOLD POINTERS TO BLOCKS IN
381: * DYNAMIC STORAGE. AN IMPORTANT
382: * RESTRICTION IS THAT THE VALUE IN
383: * XL MUST BE COLLECTABLE FOR
384: * A GARBAGE COLLECT CALL. A VALUE
385: * IS COLLECTABLE IF IT EITHER POINTS
386: * OUTSIDE THE DYNAMIC AREA, OR IF IT
387: * POINTS TO THE START OF A BLOCK IN
388: * THE DYNAMIC AREA.
389: *
390: * (XS) STACK POINTER. USED TO POINT TO
391: * THE STACK FRONT. THE STACK MAY
392: * BUILD UP OR DOWN AND IS USED
393: * TO STACK SUBROUTINE RETURN POINTS
394: * AND OTHER RECURSIVELY SAVED DATA.
395: *
396: * (XT) AN ALTERNATIVE NAME FOR XL DURING
397: * ITS USE IN ACCESSING STACKED ITEMS.
398: *
399: * (WA,WB,WC) GENERAL WORK REGISTERS. CANNOT BE
400: * USED FOR INDEXING, BUT MAY HOLD
401: * VARIOUS TYPES OF DATA.
402: *
403: * (IA) USED FOR ALL SIGNED INTEGER
404: * ARITHMETIC, BOTH THAT USED BY THE
405: * TRANSLATOR AND THAT ARISING FROM
406: * USE OF SNOBOL4 ARITHMETIC OPERATORS
407: *
408: * (RA) REAL ACCUMULATOR. USED FOR ALL
409: * FLOATING POINT ARITHMETIC.
410: EJC
411: *
412: * SPITBOL CONDITIONAL ASSEMBLY SYMBOLS
413: * ------------------------------------
414: *
415: * IN THE SPITBOL TRANSLATOR, THE FOLLOWING CONDITIONAL
416: * ASSEMBLY SYMBOLS ARE REFERRED TO. TO INCORPORATE THE
417: * FEATURES REFERRED TO, THE MINIMAL SOURCE SHOULD BE
418: * PREFACED BY SUITABLE CONDITIONAL ASSEMBLY SYMBOL
419: * DEFINITIONS.
420: * IN ALL CASES IT IS PERMISSIBLE TO DEFAULT THE DEFINITIONS
421: * IN WHICH CASE THE ADDITIONAL FEATURES WILL BE OMITTED
422: * FROM THE TARGET CODE.
423: *
424: * .CASL DEFINE TO INCLUDE 26 SHIFTED LETTRS
425: * .CAHT DEFINE TO INCLUDE HORIZONTAL TAB
426: * .CAVT DEFINE TO INCLUDE VERTICAL TAB
427: * .CIOD IF DEFINED, DEFAULT DELIMITER IS
428: * NOT USED IN PROCESSING 3RD ARG OF
429: * INPUT() AND OUTPUT()
430: * .CNBT DEFINE TO OMIT BATCH INITIALISATION
431: * .CNCI DEFINE TO ENABLE SYSCI ROUTINE
432: * .CNEX DEFINE TO OMIT EXIT() CODE.
433: * .CNLD DEFINE TO OMIT LOAD() CODE.
434: * .CNPF DEFINE TO OMIT PROFILE STUFF
435: * .CNRA DEFINE TO OMIT ALL REAL ARITHMETIC
436: * .CNSR DEFINE TO OMIT SORT, RSORT
437: * .CSAX DEFINE IF SYSAX IS TO BE CALLED
438: * .CSN6 DEFINE TO PAD STMT NOS TO 6 CHARS
439: * .CSN8 DEFINE TO PAD STMT NOS TO 8 CHARS
440: * .CUCF DEFINE TO INCLUDE CFP$U
441: * .CULC DEFINE TO INCLUDE &CASE (LC NAMES)
442: * .CUST DEFINE TO INCLUDE SET() CODE
443: .DEF .CASL
444: .DEF .CAHT
445: .DEF .CIOD
446: .DEF .CSAX
447: .DEF .CSN8
448: .DEF .CUCF
449: .DEF .CUEJ
450: .DEF .CULC
451: .DEF .CUST
452: TTL S P I T B O L -- PROCEDURES SECTION
453: *
454: * THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING
455: * SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL
456: * TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES
457: * BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL
458: * ORDER.
459: * ALL PROCEDURES HAVE A SPECIFICATION CONSISTING OF A
460: * MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER
461: * CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND
462: * FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS
463: * REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD
464: * THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY
465: * MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR
466: * VALUES CHANGED.
467: * THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS
468: * CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM
469: * INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE
470: * FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN
471: * ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES,
472: * IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH
473: * DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS
474: * OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT.
475: * E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB,
476: * JSR SYSTC IN SOME IMPLEMENTATIONS.
477: *
478: * IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK
479: * FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL
480: * DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF ALL
481: * SUCH BLOCK FORMATS EXCEPT FCBLK FOR WHICH SYSFC SHOULD
482: * BE CONSULTED.
483: *
484: * SECTION 0 CONTAINS INP,INR SPECIFICATIONS OF INTERNAL
485: * PROCEDURES,ROUTINES. THIS GIVES A SINGLE PASS TRANSLATOR
486: * INFORMATION MAKING IT EASY TO GENERATE ALTERNATIVE CALLS
487: * IN THE TRANSLATION OF JSR-S FOR PROCEDURES OF DIFFERENT
488: * TYPES IF THIS PROVES NECESSARY.
489: *
490: SEC START OF PROCEDURES SECTION
491: .IF .CSAX
492: EJC
493: *
494: * SYSAX -- AFTER EXECUTION
495: *
496: SYSAX EXP DEFINE EXTERNAL ENTRY POINT
497: *
498: * IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED,
499: * THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND
500: * BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT.
501: * PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND
502: * IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX
503: * IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED.
504: *
505: * JSR SYSAX CALL AFTER EXECUTION
506: .ELSE
507: .FI
508: EJC
509: *
510: * SYSBX -- BEFORE EXECUTION
511: *
512: SYSBX EXP DEFINE EXTERNAL ENTRY POINT
513: *
514: * CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE
515: * COMMENCING EXECUTION IN CASE OSINT NEEDS
516: * TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES.
517: * OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE
518: * TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING.
519: *
520: * JSR SYSBX CALL BEFORE EXECUTION STARTS
521: EJC
522: .IF .CNCI
523: *
524: * SYSCI -- CONVERT INTEGER
525: *
526: SYSCI EXP
527: *
528: * SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO
529: * CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER
530: * THAN USING SPITBOL'S OWN INTERNAL CONVERSION CODE. THIS
531: * CODE MAY BE LESS EFFICIENT ON MACHINES WITH HARDWARE
532: * CONVERSION INSTRUCTIONS AND IN SUCH CASES, IT MAY BE AN
533: * ADVANTAGE TO INCLUDE SYSCI. THE SYMBOL .CNCI MUST BE
534: * DEFINED IF THIS ROUTINE IS TO BE USED.
535: *
536: * THE RULES FOR CONVERTING INTEGERS TO STRINGS ARE THAT
537: * POSITIVE VALUES ARE REPRESENTED WITHOUT ANY SIGN, AND
538: * THERE ARE NEVER ANY LEADING BLANKS OR ZEROS, EXCEPT IN
539: * THE CASE OF ZERO ITSELF WHICH IS REPRESENTED AS A SINGLE
540: * ZERO DIGIT. NEGATIVE NUMBERS ARE REPRESENTED WITH A
541: * PRECEEDING MINUS SIGN. THERE ARE NEVER ANY TRAILING
542: * BLANKS, AND CONVERSION CANNOT FAIL.
543: *
544: * (IA) VALUE TO BE CONVERTED
545: * JSR SYSCI CALL TO CONVERT INTEGER VALUE
546: * (XL) POINTER TO PSEUDO-SCBLK WITH STRING
547: EJC
548: .FI
549: *
550: * SYSDC -- DATE CHECK
551: *
552: SYSDC EXP DEFINE EXTERNAL ENTRY POINT
553: *
554: * SYSDC IS CALLED TO CHECK THAT THE EXPIRY DATE FOR A TRIAL
555: * VERSION OF SPITBOL IS UNEXPIRED.
556: *
557: * JSR SYSDC CALL TO CHECK DATE
558: * RETURN ONLY IF DATE IS OK
559: EJC
560: *
561: * SYSDM -- DUMP CORE
562: *
563: SYSDM EXP DEFINE EXTERNAL ENTRY POINT
564: *
565: * SYSDM IS CALLED BY A SPITBOL PROGRAM CALL OF DUMP(N) WITH
566: * N GE 3. ITS PURPOSE IS TO PROVIDE A CORE DUMP.
567: * N COULD HOLD AN ENCODING OF THE START ADRS FOR DUMP AND
568: * AMOUNT TO BE DUMPED E.G. N = 256*A + S , S = START ADRS
569: * IN KILOWORDS, A = KILOWORDS TO DUMP
570: *
571: * (XR) PARAMETER N OF CALL DUMP(N)
572: * JSR SYSDM CALL TO ENTER ROUTINE
573: EJC
574: *
575: * SYSDT -- GET CURRENT DATE
576: *
577: SYSDT EXP DEFINE EXTERNAL ENTRY POINT
578: *
579: * SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS
580: * RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE
581: * TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE
582: * CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE
583: * SNOBOL4 FUNCTION DATE.
584: *
585: * JSR SYSDT CALL TO GET DATE
586: * (XL) POINTER TO BLOCK CONTAINING DATE
587: *
588: * THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT
589: * THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED
590: * INTO SPITBOL DYNAMIC MEMORY ON RETURN.
591: EJC
592: *
593: * SYSEF -- EJECT FILE
594: *
595: SYSEF EXP DEFINE EXTERNAL ENTRY POINT
596: *
597: * SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT
598: * MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES
599: * SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE
600: * STANDARD OUTPUT FILE (SEE SYSEP).
601: *
602: * (WA) PTR TO FCBLK OR ZERO
603: * (XR) EJECT ARGUMENT (SCBLK PTR)
604: * JSR SYSEF CALL TO EJECT FILE
605: * PPM LOC RETURN HERE IF FILE DOES NOT EXIST
606: * PPM LOC RETURN HERE IF INAPPROPRIATE FILE
607: * PPM LOC RETURN HERE IF I/O ERROR
608: EJC
609: *
610: * SYSEJ -- END OF JOB
611: *
612: SYSEJ EXP DEFINE EXTERNAL ENTRY POINT
613: *
614: * SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO
615: * TERMINATE THE RUN. THE SIGNIFICANCE OF THE ABEND AND
616: * CODE VALUES IS SYSTEM DEPENDENT. IN GENERAL, THE CODE
617: * VALUE SHOULD BE MADE AVAILABLE FOR TESTING, AND THE
618: * ABEND VALUE SHOULD CAUSE SOME POST-MORTEM ACTION SUCH AS
619: * A DUMP. NOTE THAT SYSEJ DOES NOT RETURN TO ITS CALLER.
620: * SEE SYSXI FOR DETAILS OF FCBLK CHAIN
621: *
622: * (WA) VALUE OF ABEND KEYWORD
623: * (WB) VALUE OF CODE KEYWORD
624: * (XL) O OR PTR TO HEAD OF FCBLK CHAIN
625: * JSR SYSEJ CALL TO END JOB
626: *
627: * THE FOLLOWING SPECIAL VALUES ARE USED AS CODES IN (WB)
628: * 999 EXECUTION SUPPRESSED
629: * 998 STANDARD OUTPUT FILE FULL OR UNAVAILABLE IN A SYSXI
630: * LOAD MODULE. IN THESE CASES (WA) CONTAINS THE NUMBER
631: * OF THE STATEMENT CAUSING PREMATURE TERMINATION.
632: EJC
633: *
634: * SYSEM -- GET ERROR MESSAGE TEXT
635: *
636: SYSEM EXP DEFINE EXTERNAL ENTRY POINT
637: *
638: * SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE
639: * SOURCE PROGRAM GIVEN THE ERROR CODE NUMBER. IT IS ALLOWED
640: * TO RETURN A NULL STRING IF THIS FACILITY IS UNAVAILABLE.
641: *
642: * (WA) ERROR CODE NUMBER
643: * JSR SYSEM CALL TO GET TEXT
644: * (XR) TEXT OF MESSAGE
645: *
646: * THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK
647: * FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE
648: * STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN.
649: * IF THE NULL STRING IS RETURNED EITHER BECAUSE SYSEM DOES
650: * NOT PROVIDE ERROR MESSAGE TEXTS OR BECAUSE WA IS OUT OF
651: * RANGE, SPITBOL WILL PRINT THE STRING STORED IN ERRTEXT
652: * KEYWORD.
653: EJC
654: *
655: * SYSEN -- ENDFILE
656: *
657: SYSEN EXP DEFINE EXTERNAL ENTRY POINT
658: *
659: * SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE.
660: * THE MEANING IS SYSTEM DEPENDENT. IN GENERAL, ENDFILE
661: * IMPLIES THAT NO FURTHER I/O OPERATIONS WILL BE PERFORMED,
662: * BUT DOES NOT GUARANTEE THIS TO BE THE CASE. THE FILE
663: * SHOULD BE CLOSED AFTER THE CALL, A SUBSEQUENT READ
664: * OR WRITE MAY REOPEN THE FILE AT THE START OR IT MAY BE
665: * NECESSARY TO REOPEN THE FILE VIA SYSIO.
666: *
667: * (WA) PTR TO FCBLK OR ZERO
668: * (XR) ENDFILE ARGUMENT (SCBLK PTR)
669: * JSR SYSEN CALL TO ENDFILE
670: * PPM LOC RETURN HERE IF FILE DOES NOT EXIST
671: * PPM LOC RETURN HERE IF ENDFILE NOT ALLOWED
672: * PPM LOC RETURN HERE IF I/O ERROR
673: * (WA,WB) DESTROYED
674: *
675: * THE SECOND ERROR RETURN IS USED FOR FILES FOR WHICH
676: * ENDFILE IS NOT PERMITTED. FOR EXAMPLE, IT MAY BE EXPECTED
677: * THAT THE STANDARD INPUT AND OUTPUT FILES ARE IN THIS
678: * CATEGORY.
679: EJC
680: *
681: * SYSEP -- EJECT PRINTER PAGE
682: *
683: SYSEP EXP DEFINE EXTERNAL ENTRY POINT
684: *
685: * SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD
686: * PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT).
687: *
688: * JSR SYSEP CALL TO EJECT PRINTER OUTPUT
689: EJC
690: *
691: * SYSEX -- CALL EXTERNAL FUNCTION
692: *
693: SYSEX EXP DEFINE EXTERNAL ENTRY POINT
694: *
695: * SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION
696: * PREVIOUSLY LOADED WITH A CALL TO SYSLD.
697: *
698: * (XS) POINTER TO ARGUMENTS ON STACK
699: * (XL) POINTER TO CONTROL BLOCK (EFBLK)
700: * (WA) NUMBER OF ARGUMENTS ON STACK
701: * JSR SYSEX CALL TO PASS CONTROL TO FUNCTION
702: * PPM LOC RETURN HERE IF FUNCTION CALL FAILS
703: * (XS) POPPED PAST ARGUMENTS
704: * (XR) RESULT RETURNED
705: *
706: * THE ARGUMENTS ARE STORED ON THE STACK WITH
707: * THE LAST ARGUMENT AT 0(XS). ON RETURN, XS
708: * IS POPPED PAST THE ARGUMENTS.
709: *
710: * THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE
711: * SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES
712: * SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED
713: * (UNDER EFBLK) IN THIS SECTION.
714: *
715: * THERE ARE TWO WAYS OF RETURNING A RESULT.
716: *
717: * 1) RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS
718: * BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING
719: * THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE
720: * KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY.
721: *
722: * 2) STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY
723: * POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY.
724: * THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT
725: * THAT THE FIRST WORD WILL BE OVERWRITTEN
726: * BY A TYPE WORD ON RETURN AND SO NEED NOT
727: * BE CORRECTLY SET. SUCH A RESULT IS
728: * COPIED INTO MAIN STORAGE BEFORE PROCEEDING.
729: * UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A
730: * PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING
731: * TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE
732: * BLOCK IS COPIED INTO DYNAMIC MEMORY.
733: EJC
734: *
735: * SYSFC -- FILE CONTROL BLOCK ROUTINE
736: *
737: SYSFC EXP DEFINE EXTERNAL ENTRY POINT
738: *
739: * SEE ALSO SYSIO
740: * INPUT AND OUTPUT HAVE 3 ARGUMENTS REFERRED TO AS SHOWN
741: * INPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
742: * OUTPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
743: * FILE ARG1 MAY BE AN INTEGER OR STRING USED TO IDENTIFY
744: * AN I/O CHANNEL. IT IS CONVERTED TO A STRING FOR CHECKING.
745: * THE EXACT SIGNIFICANCE OF FILE ARG2
746: * IS NOT RIGOROUSLY PRESCRIBED BUT TO IMPROVE PORTABILITY,
747: * THE SCHEME DESCRIBED IN THE SPITBOL USER MANUAL
748: * SHOULD BE ADOPTED WHEN POSSIBLE. THE PREFERRED FORM IS
749: * A STRING $F$,R$R$,C$C$,I$I$,...,Z$Z$ WHERE
750: * $F$ IS AN OPTIONAL FILE NAME WHICH IS PLACED FIRST.
751: * REMAINING ITEMS MAY BE OMITTED OR INCLUDED IN ANY ORDER.
752: * $R$ IS MAXIMUM RECORD LENGTH
753: * $C$ IS A CARRIAGE CONTROL CHARACTER OR CHARACTER STRING
754: * $I$ IS SOME FORM OF CHANNEL IDENTIFICATION USED IN THE
755: * ABSENCE OF $F$ TO ASSOCIATE THE VARIABLE
756: * WITH A FILE ALLOCATED DYNAMICALLY BY JCL COMMANDS AT
757: * SPITBOL LOAD TIME.
758: * ,...,Z$Z$ ARE ADDITIONAL FIELDS.
759: * IF , (COMMA) CANNOT BE USED AS A DELIMITER, .CIOD
760: * SHOULD BE DEFINED TO INTRODUCE BY CONDITIONAL ASSEMBLY
761: * ANOTHER DELIMITER (SEE
762: * IODEL EQU *
763: * EARLY IN DEFINITIONS SECTION).
764: * SYSFC IS CALLED WHEN A VARIABLE IS INPUT OR OUTPUT
765: * ASSOCIATED TO CHECK FILE ARG1 AND FILE ARG2 AND
766: * TO REPORT WHETHER AN FCBLK (FILE CONTROL
767: * BLOCK) IS NECESSARY AND IF SO WHAT SIZE IT SHOULD BE.
768: * THIS MAKES IT POSSIBLE FOR SPITBOL RATHER THAN OSINT TO
769: * ALLOCATE SUCH A BLOCK IN DYNAMIC MEMORY IF REQUIRED
770: * OR ALTERNATIVELY IN STATIC MEMORY.
771: * THE SIGNIFICANCE OF AN FCBLK , IF ONE IS REQUESTED, IS
772: * ENTIRELY UP TO THE SYSTEM INTERFACE. THE ONLY RESTRICTION
773: * IS THAT IF THE FCBLK SHOULD APPEAR TO LIE IN DYNAMIC
774: * MEMORY , POINTERS TO IT SHOULD BE PROPER POINTERS TO
775: * THE START OF A RECOGNISABLE AND GARBAGE COLLECTABLE
776: * BLOCK (THIS CONDITION WILL BE MET IF SYSFC REQUESTS
777: * SPITBOL TO PROVIDE AN FCBLK).
778: * AN OPTION IS PROVIDED FOR OSINT TO RETURN A POINTER IN
779: * XL TO AN FCBLK WHICH IT PRIVATELY ALLOCATED. THIS PTR
780: * WILL BE MADE AVAILABLE WHEN I/O OCCURS LATER.
781: * PRIVATE FCBLKS MAY HAVE ARBITRARY CONTENTS AND SPITBOL
782: * STORES NOTHING IN THEM.
783: EJC
784: * THE REQUESTED SIZE FOR AN FCBLK IN DYNAMIC MEMORY
785: * SHOULD ALLOW A 2 WORD OVERHEAD FOR BLOCK TYPE AND
786: * LENGTH FIELDS. INFORMATION SUBSEQUENTLY STORED IN THE
787: * REMAINING WORDS MAY BE ARBITRARY IF AN XNBLK (EXTERNAL
788: * NON-RELOCATABLE BLOCK) IS REQUESTED. IF THE REQUEST IS
789: * FOR AN XRBLK (EXTERNAL RELOCATABLE BLOCK) THE
790: * CONTENTS OF WORDS SHOULD BE COLLECTABLE (I.E. ANY
791: * APPARENT POINTERS INTO DYNAMIC SHOULD BE GENUINE BLOCK
792: * POINTERS). THESE RESTRICTIONS DO NOT APPLY IF AN FCBLK
793: * IS ALLOCATED OUTSIDE DYNAMIC OR IS NOT ALLOCATED AT ALL.
794: * IF AN FCBLK IS REQUESTED, ITS FIELDS WILL BE INITIALISED
795: * TO ZERO BEFORE ENTRY TO SYSIO WITH THE EXCEPTION OF
796: * WORDS 0 AND 1 IN WHICH THE BLOCK TYPE AND LENGTH
797: * FIELDS ARE PLACED FOR FCBLKS IN DYNAMIC MEMORY ONLY.
798: * FOR THE POSSIBLE USE OF SYSEJ AND SYSXI, IF FCBLKS
799: * ARE USED, A CHAIN IS BUILT SO THAT THEY MAY ALL BE
800: * FOUND - SEE SYSXI FOR DETAILS.
801: * IF BOTH FILE ARG1 AND FILE ARG2 ARE NULL, CALLS OF SYSFC
802: * AND SYSIO ARE OMITTED.
803: * IF FILE ARG1 IS NULL (STANDARD INPUT/OUTPUT FILE), SYSFC
804: * IS CALLED TO CHECK NON-NULL FILE ARG2 BUT ANY REQUEST
805: * FOR AN FCBLK WILL BE IGNORED, SINCE SPITBOL HANDLES THE
806: * STANDARD FILES SPECIALLY AND CANNOT READILY KEEP FCBLK
807: * POINTERS FOR THEM.
808: * FILEARG1 IS TYPE CHECKED BY SPITBOL SO FURTHER CHECKING
809: * MAY BE UNNECCESSARY IN MANY IMPLEMENTATIONS.
810: * FILE ARG2 IS PASSED SO THAT SYSFC MAY ANALYSE AND
811: * CHECK IT. HOWEVER TO ASSIST IN THIS, SPITBOL ALSO PASSES
812: * ON THE STACK THE COMPONENTS OF THIS ARGUMENT WITH
813: * FILE NAME, $F$ (OTHERWISE NULL) EXTRACTED AND STACKED
814: * FIRST.
815: * THE OTHER FIELDS, IF ANY, ARE EXTRACTED AS SUBSTRINGS,
816: * POINTERS TO THEM ARE STACKED AND A COUNT OF ALL ITEMS
817: * STACKED IS PLACED IN WC. IF AN FCBLK WAS EARLIER
818: * ALLOCATED AND POINTED TO VIA FILE ARG1, SYSFC IS ALSO
819: * PASSED A POINTER TO THIS FCBLK.
820: *
821: * (XL) FILE ARG1 SCBLK PTR (2ND ARG)
822: * (XR) FILEARG2 (3RD ARG) OR NULL
823: * -(XS)...-(XS) SCBLKS FOR $F$,$R$,$C$,...
824: * (WC) NO. OF STACKED SCBLKS ABOVE
825: * (WA) EXISTING FILE ARG1 FCBLK PTR OR 0
826: * (WB) 0/3 FOR INPUT/OUTPUT ASSOCN
827: * JSR SYSFC CALL TO CHECK NEED FOR FCBLK
828: * PPM LOC INVALID FILE ARGUMENT
829: * (XS) POPPED (WC) TIMES
830: * (WA NON ZERO) BYTE SIZE OF REQUESTED FCBLK
831: * (WA=0,XL NON ZERO) PRIVATE FCBLK PTR IN XL
832: * (WA=XL=0) NO FCBLK WANTED, NO PRIVATE FCBLK
833: * (WC) 0/1/2 REQUEST ALLOC OF XRBLK/XNBLK
834: * /STATIC BLOCK FOR USE AS FCBLK
835: * (WB) DESTROYED
836: EJC
837: *
838: * SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES
839: *
840: SYSHS EXP DEFINE EXTERNAL ENTRY POINT
841: *
842: * PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES
843: * ON DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRY IS
844: * THAT WHERE ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS
845: * RETURNS AN SCBLK CONTAINING NAME OF COMPUTER,
846: * NAME OF OPERATING SYSTEM AND NAME OF SITE SEPARATED BY
847: * COLONS. THE SCBLK NEED NOT HAVE A CORRECT FIRST FIELD
848: * AS THIS IS SUPPLIED ON COPYING STRING TO DYNAMIC MEMORY.
849: * SPITBOL DOES NO ARGUMENT CHECKING BUT DOES PROVIDE A
850: * SINGLE ERROR RETURN FOR ARGUMENTS CHECKED AS ERRONEOUS
851: * BY OSINT. IT ALSO PROVIDES A SINGLE EXECUTION ERROR
852: * RETURN. IF THESE ARE INADEQUATE, USE MAY BE MADE OF THE
853: * MINIMAL ERROR SECTION DIRECT AS DESCRIBED IN MINIMAL
854: * DOCUMENTATION, SECTION 10.
855: * SEVERAL NON-ERROR RETURNS ARE PROVIDED. THE FIRST
856: * CORRESPONDS TO THE DEFINED ENTRY OR, FOR IMPLEMENTATION
857: * DEFINED ENTRIES, ANY STRING MAY BE RETURNED. THE OTHERS
858: * PERMIT RESPECTIVELY, RETURN A NULL RESULT, RETURN WITH A
859: * RESULT TO BE STACKED WHICH IS POINTED AT BY XR, AND A
860: * RETURN CAUSING SPITBOL STATEMENT FAILURE. IF A RETURNED
861: * RESULT IS IN DYNAMIC MEMORY IT MUST OBEY GARBAGE
862: * COLLECTOR RULES. THE ONLY RESULTS COPIED ON RETURN
863: * ARE STRINGS RETURNED VIA PPM LOC3 RETURN.
864: *
865: * (WA) ARGUMENT 1
866: * (XL) ARGUMENT 2
867: * (XR) ARGUMENT 3
868: * JSR SYSHS CALL TO GET HOST INFORMATION
869: * PPM LOC1 ERRONEOUS ARG
870: * PPM LOC2 EXECUTION ERROR
871: * PPM LOC3 SCBLK PTR IN XL OR 0 IF UNAVAILABLE
872: * PPM LOC4 RETURN A NULL RESULT
873: * PPM LOC5 RETURN RESULT IN XR
874: * PPM LOC6 CAUSE STATEMENT FAILURE
875: EJC
876: *
877: * SYSID -- RETURN SYSTEM IDENTIFICATION
878: *
879: SYSID EXP DEFINE EXTERNAL ENTRY POINT
880: *
881: * THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD
882: * PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO
883: * A HEADING LINE OF THE FORM
884: * MACRO SPITBOL VERSION V.V
885: * SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE
886: * MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR
887: * VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO
888: * GIVE SAY
889: * MACRO SPITBOL VERSION V.V(M.M)
890: * THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE
891: * AND OPERATING SYSTEM. PREFERABLY IT SHOULD INCLUDE
892: * THE DATE AND TIME OF THE RUN.
893: * OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE
894: * THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE,
895: * UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS
896: * APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A
897: * NUISANCE TO USERS.
898: * THE FIRST WORDS OF THE SCBLKS POINTED AT NEED NOT BE
899: * CORRECTLY SET.
900: *
901: * JSR SYSID CALL FOR SYSTEM IDENTIFICATION
902: * (XR) SCBLK PTR FOR ADDITION TO HEADER
903: * (XL) PTR TO SECOND HEADER SCBLK
904: EJC
905: *
906: * SYSIL -- GET INPUT RECORD LENGTH
907: *
908: SYSIL EXP DEFINE EXTERNAL ENTRY POINT
909: *
910: * SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD
911: * FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO
912: * CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER
913: * FOR A SUBSEQUENT SYSIN CALL.
914: *
915: * (WA) PTR TO FCBLK OR ZERO
916: * JSR SYSIL CALL TO GET RECORD LENGTH
917: * (WA) LENGTH OR ZERO IF FILE CLOSED
918: *
919: * NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE
920: * UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL.
921: *
922: * NOTE THAT IT IS THE SYSIL CALL (NOT THE SYSIO CALL) WHICH
923: * CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
924: * RECORD INPUT FROM THE FILE.
925: EJC
926: *
927: * SYSIN -- READ INPUT RECORD
928: *
929: SYSIN EXP DEFINE EXTERNAL ENTRY POINT
930: *
931: * SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS
932: * REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS
933: * ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN
934: * SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL.
935: * IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH
936: * FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING
937: * UNLESS BUFFER IS RIGHT PADDED WITH ZEROES.
938: * IT IS ALSO PERMISSIBLE TO TAKE ANY OF THE ALTERNATIVE
939: * RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED.
940: *
941: * (WA) PTR TO FCBLK OR ZERO
942: * (XR) POINTER TO BUFFER (SCBLK PTR)
943: * JSR SYSIN CALL TO READ RECORD
944: * PPM LOC ENDFILE OR NO I/P FILE AFTER SYSXI
945: * PPM LOC RETURN HERE IF I/O ERROR
946: * PPM LOC RETURN HERE IF RECORD FORMAT ERROR
947: * (WA,WB,WC) DESTROYED
948: EJC
949: *
950: * SYSIO -- INPUT/OUTPUT FILE ASSOCIATION
951: *
952: SYSIO EXP DEFINE EXTERNAL ENTRY POINT
953: *
954: * SEE ALSO SYSFC.
955: * SYSIO IS CALLED IN RESPONSE TO A SNOBOL4 INPUT OR OUTPUT
956: * FUNCTION CALL EXCEPT WHEN FILE ARG1 AND FILE ARG2
957: * ARE BOTH NULL.
958: * ITS CALL ALWAYS FOLLOWS IMMEDIATELY AFTER A CALL
959: * OF SYSFC. IF SYSFC REQUESTED ALLOCATION
960: * OF AN FCBLK, ITS ADDRESS WILL BE IN WA.
961: * FOR INPUT FILES, NON-ZERO VALUES OF $R$ SHOULD BE
962: * COPIED TO WC FOR USE IN ALLOCATING INPUT BUFFERS. IF $R$
963: * IS DEFAULTED OR NOT IMPLEMENTED, WC SHOULD BE ZEROISED.
964: * ONCE A FILE HAS BEEN OPENED, SUBSEQUENT INPUT(),OUTPUT()
965: * CALLS IN WHICH THE SECOND ARGUMENT IS IDENTICAL WITH THAT
966: * IN A PREVIOUS CALL, MERELY ASSOCIATE THE ADDITIONAL
967: * VARIABLE NAME (FIRST ARGUMENT) TO THE FILE AND DO NOT
968: * RESULT IN RE-OPENING THE FILE.
969: * IN SUBSEQUENT ASSOCIATED ACCESSES TO THE FILE A POINTER
970: * TO ANY FCBLK ALLOCATED WILL BE MADE AVAILABLE.
971: *
972: * (XL) FILE ARG1 SCBLK PTR (2ND ARG)
973: * (XR) FILE ARG2 SCBLK PTR (3RD ARG)
974: * (WA) FCBLK PTR (0 IF NONE)
975: * (WB) 0 FOR INPUT, 3 FOR OUTPUT
976: * JSR SYSIO CALL TO ASSOCIATE FILE
977: * PPM LOC RETURN HERE IF FILE DOES NOT EXIST
978: * PPM LOC RETURN IF INPUT/OUTPUT NOT ALLOWED
979: * (XL) FCBLK POINTER (0 IF NONE)
980: * (WC) 0 (FOR DEFAULT) OR MAX RECORD LNGTH
981: * (WA,WB) DESTROYED
982: *
983: * THE SECOND ERROR RETURN IS USED IF THE FILE NAMED EXISTS
984: * BUT INPUT/OUTPUT FROM THE FILE IS NOT ALLOWED. FOR
985: * EXAMPLE, THE STANDARD OUTPUT FILE MAY BE IN THIS CATEGORY
986: * AS REGARDS INPUT ASSOCIATION.
987: EJC
988: *
989: * SYSLD -- LOAD EXTERNAL FUNCTION
990: *
991: SYSLD EXP DEFINE EXTERNAL ENTRY POINT
992: *
993: * SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4
994: * LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER
995: * THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL
996: * BE USED ON SUBSEQUENT CALLS TO THE FUNCTION (SEE SYSEX).
997: *
998: * (XR) POINTER TO FUNCTION NAME (SCBLK)
999: * (XL) POINTER TO LIBRARY NAME (SCBLK)
1000: * JSR SYSLD CALL TO LOAD FUNCTION
1001: * PPM LOC RETURN HERE IF FUNC DOES NOT EXIST
1002: * PPM LOC RETURN HERE IF I/O ERROR
1003: * (XR) POINTER TO LOADED CODE
1004: *
1005: * THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE
1006: * SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT
1007: * IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE
1008: * A PROPER BLOCK POINTER.
1009: EJC
1010: *
1011: * SYSMM -- GET MORE MEMORY
1012: *
1013: SYSMM EXP DEFINE EXTERNAL ENTRY POINT
1014: *
1015: * SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC
1016: * MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH
1017: * THE CURRENT DYNAMIC DATA AREA.
1018: *
1019: * THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY
1020: * VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS
1021: * IMPOSSIBLE.
1022: *
1023: * JSR SYSMM CALL TO GET MORE MEMORY
1024: * (XR) NUMBER OF ADDITIONAL WORDS OBTAINED
1025: EJC
1026: *
1027: * SYSMX -- SUPPLY MXLEN
1028: *
1029: SYSMX EXP DEFINE EXTERNAL ENTRY POINT
1030: *
1031: * BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL
1032: * OBJECT IS ALLOWED TO OCCUPY MORE BYTES OF MEMORY THAN
1033: * THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC
1034: * (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO
1035: * REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST
1036: * USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY
1037: * STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS,
1038: * THERE IS NO PROBLEM.
1039: * IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR
1040: * 20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A
1041: * USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER
1042: * OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF
1043: * ANY. THE VALUE RETURNED IS EITHER AN INTEGER
1044: * REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE
1045: * MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN
1046: * NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE
1047: * IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED
1048: * TO DYNAMIC STORE BEFORE COMPILATION STARTS.
1049: * IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD
1050: * MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC
1051: * MEMORY IS USED FOR THIS KEYWORD.
1052: *
1053: * JSR SYSMX CALL TO GET MXLEN
1054: * (WA) EITHER MXLEN OR 0 FOR DEFAULT
1055: EJC
1056: *
1057: * SYSOU -- OUTPUT RECORD
1058: *
1059: SYSOU EXP DEFINE EXTERNAL ENTRY POINT
1060: *
1061: * SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY
1062: * ASSOCIATED WITH A SYSIO CALL.
1063: *
1064: * (WA) PTR TO FCBLK OR ZERO
1065: * (XR) RECORD TO BE WRITTEN (SCBLK)
1066: * JSR SYSOU CALL TO OUTPUT RECORD
1067: * PPM LOC FILE FULL OR NO FILE AFTER SYSXI
1068: * PPM LOC RETURN HERE IF I/O ERROR
1069: * (WA,WB,WC) DESTROYED
1070: *
1071: * NOTE THAT IT IS THE SYSOU CALL (NOT THE SYSIO CALL) WHICH
1072: * CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
1073: * RECORD OUTPUT TO THE FILE.
1074: EJC
1075: *
1076: * SYSPI -- PRINT ON INTERACTIVE CHANNEL
1077: *
1078: SYSPI EXP DEFINE EXTERNAL ENTRY POINT
1079: *
1080: * IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN
1081: * REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION
1082: * ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT
1083: * REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH
1084: * MESSAGES TO THE INTERACTIVE CHANNEL.
1085: * SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL
1086: * THROUGH THE SPECIAL VARIABLE NAME, TERMINAL.
1087: *
1088: * (XR) PTR TO LINE BUFFER (SCBLK)
1089: * (WA) LINE LENGTH
1090: * JSR SYSPI CALL TO PRINT LINE
1091: * PPM LOC FAILURE RETURN
1092: * (WA,WB) DESTROYED
1093: EJC
1094: *
1095: * SYSPP -- OBTAIN PRINT PARAMETERS
1096: *
1097: SYSPP EXP DEFINE EXTERNAL ENTRY POINT
1098: *
1099: * SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN
1100: * PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT
1101: * AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN
1102: * AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS
1103: * CASE THE VALUE RETURNED IN WA MAY BE LESS THAN OR EQUAL
1104: * TO THAT RETURNED IN INITIAL CALL BUT MAY NOT BE
1105: * GREATER.
1106: * THE INFORMATION RETURNED IS -
1107: * 1. LINE LENGTH IN CHARS FOR STANDARD PRINT FILE
1108: * 2. NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED
1109: * DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING
1110: * PAGE THROWS ARE SUPPRESSED AND PAGE HEADERS
1111: * RESULTING FROM -TITLE,-STITL LINES ARE KEPT SHORT.
1112: * 3. AN INITIAL -NOLIST OPTION TO SUPPRESS LISTING UNLESS
1113: * THE PROGRAM CONTAINS AN EXPLICIT -LIST.
1114: * 4. OPTIONS TO SUPPRESS LISTING OF COMPILATION AND/OR
1115: * EXECUTION STATS (USEFUL FOR ESTABLISHED PROGRAMS) -
1116: * COMBINED WITH 3. GIVES POSSIBILITY OF LISTING
1117: * FILE NEVER BEING OPENED.
1118: * 5. OPTION TO HAVE COPIES OF ERRORS SENT TO AN
1119: * INTERACTIVE CHANNEL IN ADDITION TO STANDARD PRINTER.
1120: * 6. OPTION TO KEEP PAGE HEADERS SHORT (E.G. IF LISTING
1121: * TO AN ONLINE TERMINAL).
1122: * 7. AN OPTION TO CHOOSE EXTENDED OR COMPACT LISTING
1123: * FORMAT. IN THE FORMER A PAGE EJECT AND IN THE LATTER
1124: * A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH
1125: * OF-- LISTING, COMPILATION STATISTICS, EXECUTION
1126: * OUTPUT AND EXECUTION STATISTICS.
1127: * 8. AN OPTION TO SUPPRESS EXECUTION AS THOUGH A
1128: * -NOEXECUTE CARD WERE SUPPLIED.
1129: * 9. AN OPTION TO REQUEST THAT NAME /TERMINAL/ BE PRE-
1130: * ASSOCIATED TO AN ONLINE TERMINAL VIA SYSPI AND SYSRI
1131: * 10. AN INTERMEDIATE (STANDARD) LISTING OPTION REQUIRING
1132: * THAT PAGE EJECTS OCCUR IN SOURCE LISTINGS. REDUNDANT
1133: * IF EXTENDED OPTION CHOSEN BUT PARTIALLY EXTENDS
1134: * COMPACT OPTION.
1135: * 11. OPTION TO SUPPRESS SYSID IDENTIFICATION.
1136: *
1137: * JSR SYSPP CALL TO GET PRINT PARAMETERS
1138: * (WA) PRINT LINE LENGTH IN CHARS
1139: * (WB) NUMBER OF LINES/PAGE
1140: * (WC) BITS VALUE ...JIHGFEDCBA WHERE
1141: * A = 1 TO SEND ERROR COPY TO INT.CH.
1142: * B = 1 MEANS STD PRINTER IS INT. CH.
1143: * C = 1 FOR -NOLIST OPTION
1144: * D = 1 TO SUPPRESS COMPILN. STATS
1145: * E = 1 TO SUPPRESS EXECN. STATS
1146: * F = 1/0 FOR EXTNDED/COMPACT LISTING
1147: * G = 1 FOR -NOEXECUTE
1148: * H = 1 PRE-ASSOCIATE /TERMINAL/
1149: * I = 1 FOR STANDARD LISTING OPTION.
1150: * J = 1 SUPPRESSES LISTING HEADER
1151: EJC
1152: *
1153: * SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE
1154: *
1155: SYSPR EXP DEFINE EXTERNAL ENTRY POINT
1156: *
1157: * SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD
1158: * OUTPUT FILE.
1159: *
1160: * (XR) POINTER TO LINE BUFFER (SCBLK)
1161: * (WA) LINE LENGTH
1162: * JSR SYSPR CALL TO PRINT LINE
1163: * PPM LOC TOO MUCH O/P OR NO FILE AFTER SYSXI
1164: * (WA,WB) DESTROYED
1165: *
1166: * THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE
1167: * SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE
1168: * VALUE IN WA IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS
1169: * THAN THE MAXIMUM LINE LENGTH POSSIBLE. THERE IS NO SPACE
1170: * CONTROL ASSOCIATED WITH THE LINE, ALL LINES ARE PRINTED
1171: * SINGLE SPACED. NOTE THAT NULL LINES (WA=0) ARE POSSIBLE
1172: * IN WHICH CASE A BLANK LINE IS TO BE PRINTED.
1173: *
1174: * THE ERROR EXIT IS USED FOR SYSTEMS WHICH LIMIT THE AMOUNT
1175: * OF PRINTED OUTPUT. IF POSSIBLE, PRINTING SHOULD BE
1176: * PERMITTED AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO
1177: * ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION.
1178: * ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR
1179: * CALLS. IF THE ERROR RETURN OCCURS ANOTHER TIME, EXECUTION
1180: * IS TERMINATED BY A CALL OF SYSEJ WITH ENDING CODE 998.
1181: EJC
1182: *
1183: * SYSRD -- READ RECORD FROM STANDARD INPUT FILE
1184: *
1185: SYSRD EXP DEFINE EXTERNAL ENTRY POINT
1186: *
1187: * SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT
1188: * FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE
1189: * LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS
1190: * CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH
1191: * SPITBOL IS PREPARED TO RECEIVE. AT COMPILE TIME IT
1192: * CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD
1193: * (DEFAULT 72) AND AT EXECUTION TIME TO THE MOST RECENT
1194: * ,R$R$ (RECORD LENGTH) IN THE THIRD ARG OF AN INPUT()
1195: * STATEMENT FOR THE STANDARD INPUT FILE (DEFAULT 80).
1196: * IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH
1197: * FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING
1198: * UNLESS THE BUFFER IS RIGHT PADDED WITH ZEROES.
1199: * IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURN
1200: * AFTER SUCH AN ADJUSTMENT HAS BEEN MADE.
1201: * SPITBOL MAY CONTINUE TO MAKE CALLS AFTER AN ENDFILE
1202: * RETURN SO THIS ROUTINE SHOULD BE PREPARED TO MAKE
1203: * REPEATED ENDFILE RETURNS.
1204: *
1205: * (XR) POINTER TO BUFFER (SCBLK PTR)
1206: * (WC) LENGTH OF BUFFER IN CHARACTERS
1207: * JSR SYSRD CALL TO READ LINE
1208: * PPM LOC ENDFILE OR NO I/P FILE AFTER SYSXI
1209: * (WA,WB,WC) DESTROYED
1210: EJC
1211: *
1212: * SYSRI -- READ RECORD FROM INTERACTIVE CHANNEL
1213: *
1214: SYSRI EXP DEFINE EXTERNAL ENTRY POINT
1215: *
1216: * READS A RECORD FROM ONLINE TERMINAL FOR SPITBOL VARIABLE,
1217: * TERMINAL. IF ONLINE TERMINAL IS UNAVAILABLE THEN CODE THE
1218: * ENDFILE RETURN ONLY.
1219: * THE BUFFER PROVIDED IS OF LENGTH 120 CHARACTERS. SYSRI
1220: * SHOULD REPLACE THE COUNT IN THE SECOND WORD OF THE SCBLK
1221: * BY THE ACTUAL CHARACTER COUNT UNLESS BUFFER IS RIGHT
1222: * PADDED WITH ZEROES.
1223: * IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE
1224: * RETURN AFTER ADJUSTING THE COUNT.
1225: * THE END OF FILE RETURN MAY BE USED IF THIS MAKES
1226: * SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN
1227: * EOF CHARACTER.)
1228: *
1229: * (XR) PTR TO 120 CHAR BUFFER (SCBLK PTR)
1230: * JSR SYSRI CALL TO READ LINE FROM TERMINAL
1231: * PPM LOC END OF FILE RETURN
1232: * (WA,WB,WC) MAY BE DESTROYED
1233: EJC
1234: *
1235: * SYSRW -- REWIND FILE
1236: *
1237: SYSRW EXP DEFINE EXTERNAL ENTRY POINT
1238: *
1239: * SYSRW IS USED TO REWIND A FILE I.E. REPOSITION THE FILE
1240: * AT THE START BEFORE THE FIRST RECORD. THE FILE SHOULD BE
1241: * CLOSED AND THE NEXT READ OR WRITE CALL WILL OPEN THE
1242: * FILE AT THE START.
1243: *
1244: * (WA) PTR TO FCBLK OR ZERO
1245: * (XR) REWIND ARG (SCBLK PTR)
1246: * JSR SYSRW CALL TO REWIND FILE
1247: * PPM LOC RETURN HERE IF FILE DOES NOT EXIST
1248: * PPM LOC RETURN HERE IF REWIND NOT ALLOWED
1249: * PPM LOC RETURN HERE IF I/O ERROR
1250: EJC
1251: .IF .CUST
1252: *
1253: * SYSST -- SET FILE POINTER
1254: *
1255: SYSST EXP DEFINE EXTERNAL ENTRY POINT
1256: *
1257: * SYSST IS CALLED TO CHANGE THE POSITION OF A FILE
1258: * POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT
1259: * MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED
1260: * UNCONVERTED.
1261: *
1262: * (WA) FCBLK POINTER
1263: * (WB) 2ND ARGUMENT
1264: * (WC) 3RD ARGUMENT
1265: * JSR SYSST CALL TO SET FILE POINTER
1266: * PPM LOC RETURN HERE IF INVALID 2ND ARG
1267: * PPM LOC RETURN HERE IF INVALID 3RD ARG
1268: * PPM LOC RETURN HERE IF FILE DOES NOT EXIST
1269: * PPM LOC RETURN HERE IF SET NOT ALLOWED
1270: * PPM LOC RETURN HERE IF I/O ERROR
1271: *
1272: EJC
1273: .FI
1274: *
1275: * SYSTM -- GET EXECUTION TIME SO FAR
1276: *
1277: SYSTM EXP DEFINE EXTERNAL ENTRY POINT
1278: *
1279: * SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME
1280: * USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS
1281: * ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT
1282: * THE EXACT MEANING IS SYSTEM DEPENDENT. WHERE APPROPRIATE,
1283: * THIS VALUE SHOULD RELATE TO PROCESSOR RATHER THAN CLOCK
1284: * TIMING VALUES.
1285: *
1286: * JSR SYSTM CALL TO GET TIMER VALUE
1287: * (IA) TIME SO FAR IN MILLISECONDS
1288: EJC
1289: *
1290: * SYSTT -- TRACE TOGGLE
1291: *
1292: SYSTT EXP DEFINE EXTERNAL ENTRY POINT
1293: *
1294: * CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO
1295: * TOGGLE THE SYSTEM TRACE SWITCH. THIS PERMITS TRACING OF
1296: * LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF.
1297: *
1298: * JSR SYSTT CALL TO TOGGLE TRACE SWITCH
1299: EJC
1300: *
1301: * SYSUL -- UNLOAD EXTERNAL FUNCTION
1302: *
1303: SYSUL EXP DEFINE EXTERNAL ENTRY POINT
1304: *
1305: * SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY
1306: * LOADED WITH A CALL TO SYSLD.
1307: *
1308: * (XR) PTR TO CONTROL BLOCK (EFBLK)
1309: * JSR SYSUL CALL TO UNLOAD FUNCTION
1310: *
1311: * THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL
1312: * UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION.
1313: *
1314: * THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A
1315: * POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE
1316: * DEFINITIONS AND DATA STRUCTURES SECTION).
1317: .IF .CNEX
1318: .ELSE
1319: EJC
1320: *
1321: * SYSXI -- EXIT TO PRODUCE LOAD MODULE
1322: *
1323: SYSXI EXP DEFINE EXTERNAL ENTRY POINT
1324: *
1325: * WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER
1326: * OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE
1327: * CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT
1328: * SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND
1329: * THE NAMED PROGRAM LOADED AND EXECUTED. THIS TYPE OF CHAIN
1330: * EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY
1331: * CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE.
1332: * IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS
1333: *
1334: * -1, -2, -3
1335: * CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE
1336: * IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH
1337: * A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS.
1338: * VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE
1339: * KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING.
1340: * TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A
1341: * POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR
1342: * VERSION NUMBER V.V (SEE SYSID).
1343: *
1344: * 0 IF POSSIBLE, RETURN CONTROL TO JOB CONTROL
1345: * COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE
1346: * SYSTEM DEPENDENT.
1347: *
1348: * +1, +2, +3
1349: * CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF
1350: * MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE
1351: * THIS MODULE DIRECTLY.
1352: *
1353: * IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN
1354: * FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO
1355: * OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD
1356: * MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE
1357: * SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM.
1358: * SYSXI SHOULD MAKE A NOTE THAT NO I/O CHANNELS,
1359: * INCLUDING STANDARD FILES, HAVE FILES ATTACHED SO THAT
1360: * CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS
1361: * NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE.
1362: * AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS
1363: * RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH
1364: * A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE
1365: * PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE
1366: * IS OTHERWISE SEVERE. AS A LAST RESORT, IF SPITBOL
1367: * ATTEMPTS TO WRITE TO THE STANDARD OUTPUT FILE AND GETS A
1368: * REPLY INDICATING THAT SUCH OUPUT IS UNACCEPTABLE IT STOPS
1369: * BY USING AN ENTRY TO SYSEJ WITH ENDING CODE 998.
1370: * AS DESCRIBED BELOW, PASSING OF SOME ARGUMENTS MAKES IT
1371: * CLEAR THAT LOAD MODULE WILL USE A STANDARD OUTPUT FILE.
1372: *
1373: * IF USE IS MADE OF FCBLKS FOR I/O ASSOCIATION, SPITBOL
1374: * BUILDS A CHAIN SO THAT THOSE IN USE MAY BE FOUND IN SYSXI
1375: * AND SYSEJ. THE NODES ARE 4 WORDS LONG. THIRD WORD
1376: * CONTAINS LINK TO NEXT NODE OR 0, FOURTH WORD CONTAINS
1377: * FCBLK POINTER.
1378: EJC
1379: *
1380: * SYSXI (CONTINUED)
1381: *
1382: * (XL) ZERO OR SCBLK PTR
1383: * (XR) PTR TO V.V SCBLK
1384: * (IA) SIGNED INTEGER ARGUMENT
1385: * (WB) 0 OR PTR TO HEAD OF FCBLK CHAIN
1386: * JSR SYSXI CALL TO EXIT
1387: * PPM LOC REQUESTED ACTION NOT POSSIBLE
1388: * PPM LOC ACTION CAUSED IRRECOVERABLE ERROR
1389: * (REGISTERS) SHOULD BE PRESERVED OVER CALL
1390: *
1391: * LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM
1392: * JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AT THE POINT
1393: * AFTER THE ERROR RETURNS WHICH FOLLOW THE CALL OF SYSXI.
1394: * THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE
1395: * OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE.
1396: * +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE
1397: * CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE.
1398: * +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID
1399: * AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE.
1400: * ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A
1401: * STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE.
1402: * +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP
1403: * AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE.
1404: * NO RETURN FROM SYSXI IS POSSIBLE IF ANOTHER PROGRAM
1405: * IS LOADED AND ENTERED.
1406: .FI
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.