LISP TITLE 'LISP360' UOM
****** 00000010
MACRO 00000020
&NAME ERROR &MSG 00000030
LCLA &L 00000040
&L SETA K'&MSG
LISPMSG CSECT
MSG&SYSNDX DC Y(&L-3),C&MSG
&SYSECT CSECT
&NAME LA 14,MSG&SYSNDX-LISPMSG
B ERROR
MEND 00000090
****** 00000100
MACRO 00000110
&NAME SNAPS &IDENT,&FROM,&TO 00000120
CNOP 0,4 00000130
&NAME STM 13,3,SNPPSER 00000140
BAL 14,SNAPROUT 00000150
DC CL8'&IDENT',A(&FROM,&TO),PL2'0' 00000160
LM 13,3,SNPPSER 00000170
MEND 00000180
****** 00000190
MACRO 00000200
&NAME PUTMSG &DATA 00000210
LCLA &L 00000220
&NAME STM 13,1,WRSV 00000230
AIF (T'&DATA EQ 'U').A 00000240
LA 14,&DATA 00000250
BAL 2,PUTMSG 00000260
MEXIT 00000270
.A ANOP
&L SETA K'&DATA
LISPMSG CSECT
MSG&SYSNDX DC Y(&L-3),C&DATA
&SYSECT CSECT
LA 14,MSG&SYSNDX-LISPMSG
BAL 2,PUTMSG
MEND 00000330
****** 00000340
MACRO 00000350
&LABEL ECHO &NAME,&PROP,&RTN,&ACNT 00000360
LCLA &LNGTH,&K,&KK,&ARGS 00000370
LCLC &P,&PP,&N,&NN,&PPP,&NNN 00000380
&ARGS SETA 0 00000390
&LNGTH SETA K'&NAME 00000400
&K SETA 20 00000410
&KK SETA 12 00000420
&P SETC 'NIL' 00000430
&PP SETC 'NIL' 00000440
&PPP SETC 'NIL' 00000450
&N SETC '&NAME'(1,4).' ' 00000460
AIF (&LNGTH LT 5).A 00000470
&KK SETA &KK+8 00000480
&K SETA &K+8 00000490
&PP SETC '*+3' 00000500
&NN SETC '&NAME'(5,4).' ' 00000510
.A AIF (&LNGTH LT 9).G 00000520
&KK SETA &KK+8 00000530
&K SETA &K+8 00000540
&PPP SETC '*+3' 00000550
&NNN SETC '&NAME'(9,4).' ' 00000560
.G AIF (T'&PROP EQ 'O').B 00000570
AIF (T'&ACNT EQ 'O').F 00000580
&ARGS SETA &ARGS+&ACNT 00000590
.F ANOP 00000600
&P SETC '*+'.'&KK' 00000610
&K SETA &K+24 00000620
.B DC A(*+8,*+&K) 00000630
&LABEL DC XL1'80' 00000640
DC AL3(*+7) 00000650
DC A(&P) 00000660
DC CL4'&N' 00000670
DC XL1'60' 00000680
DC AL3(&PP) 00000690
AIF (&LNGTH LT 5).C 00000700
DC CL4'&NN' 00000710
DC XL1'60' 00000720
DC AL3(&PPP) 00000730
.C AIF (&LNGTH LT 9).E 00000740
DC CL4'&NNN',XL1'60',AL3(NIL) 00000750
.E AIF (T'&PROP EQ 'O').D 00000760
DC A(&PROP,*+4),A(*+8,NIL) 00000770
DC AL1(&ARGS),AL3(&RTN),XL1'40',AL3(NIL) 00000780
.D MEXIT 00000790
MEND 00000800
****** 00000810
MACRO 00000820
&NAME SAVE &R 00000830
&NAME ST &R,0(,PDS)
BXH PDS,K4,ERG2 00000850
MEND 00000860
****** 00000870
MACRO 00000880
&NAME UNSAVE &R 00000890
&NAME SR PDS,K4 00000900
L &R,0(,PDS)
MEND 00000920
MACRO UOM
&LABEL TTIMER &XXX UOM
&LABEL SVC 38 UOM
AR 0,1 UOM
LCR 0,0 UOM
MEND UOM
SPACE 1 UOM
MACRO UOM
&LABEL OPEN &XXX UOM
&LABEL L 15,=A(MAROPEN) UOM
BALR 14,15 UOM
MEND UOM
SPACE 1 UOM
MACRO UOM
&LABEL CLOSE &DCB UOM
AIF (T'&DCB EQ 'O').NOD UOM
&LABEL LA 1,&DCB UOM
.CON1 L 15,=A(MARCLOSE) UOM
BALR 14,15 UOM
MEXIT UOM
.NOD ANOP UOM
&LABEL L 15,=A(MARCLOSE) UOM
BALR 14,15 UOM
MEND UOM
SPACE 1 UOM
MACRO UOM
&NAME GET &DCB,&AREA UOM
AIF ('&DCB' EQ '').E1 UOM
&NAME IHBINNRA &DCB,&AREA UOM
L 15,=A(GETPRO) LOAD GET ROUTINE ADDR. UOM
BALR 14,15 LINK TO GET ROUTINE UOM
MEXIT UOM
.E1 IHBERMAC 06 UOM
MEND UOM
SPACE 2 UOM
MACRO UOM
&NAME PUT &DCB,&AREA UOM
AIF ('&DCB' EQ '').ERR UOM
&NAME IHBINNRA &DCB,&AREA UOM
USING DCBDS,1 UOM
ST 0,BFR$ UOM
L 15,IORTN$ UOM
DROP 1 UOM
BASR 14,15 UOM
MEXIT UOM
.ERR IHBERMAC 6 UOM
MEND
SPACE 1 UOM
MACRO UOM
&LABEL DCB &IOR,&BFR,&EOD,&IOCODE,&LEN,&MOD,&TXTLEN UOM
&LABEL DC A(&BFR) I/O BUFFER UOM
DS A LENGTH LOC UOM
DS A MODIFIERS LOC UOM
DS A LINE NUMBER LOC UOM
DS A FDUB PTR LOC UOM
AIF (T'&IOR EQ 'O').NOR UOM
DC V(&IOR) I/O ROUTINE UOM
AGO .CON1 UOM
.NOR DC A(0) I/O ROUTINE UOM
.CON1 ANOP UOM
DC Y(&LEN) LRECL UOM
DC Y(&LEN) TEXT LENGTH UOM
DS F LINE NUMBER UOM
AIF (T'&MOD EQ 'O').NOMOD UOM
DC XL4&MOD MODIFIERS UOM
AGO .CON2 UOM
.NOMOD DC XL4'0' MODIFIERS UOM
.CON2 DC A(0) FDUB PTR OR LOG. UNIT NO. UOM
DC A(&EOD) EOD ADDRESS UOM
DC A(&IOCODE) I/O CODE 0->INPUT 1->OUTPUT UOM
DS A FDUB PTR UOM
DS A GDINFO VECTOR UOM
DS F INPUT BUFFER SIZE UOM
AIF (T'&TXTLEN EQ 'O').NT UOM
DC A(&TXTLEN) TEXT LENGTH UOM
AGO .CON3 UOM
.NT DC A(0) TEXT LENGTH UOM
.CON3 DC A(0) NEXT-CHARACTER ADRS
MEND
EJECT 00000930
* INTERPRETER DESIGNED AND CODED BY- 00000940
* J.G.KENT, J.F.BOLCE & R.I.BERNS 00000950
*********************************************************************** 00000960
********* REGISTER ASSIGNMENTS ************** 00000970
*********************************************************** 00000980
********* 0 LOCAL WORK REGISTER 00000990
********* 1 LOCAL WORK REGISTER 00001000
********* 2 LINKAGE REGISTER 00001010
********* 3 BASE & WORK REGISTER - RESTORE PLEASE 00001020
********* DO NOT USE 3 INSIDE BASE 3 SECTION 00001030
********* 4 K4 CONSTANT F'4'-FOR UNSAVE ETC 00001040
********* 5 NILR ADDR OF NIL 00001050
********* 6 FREE FWS POINTER 00001060
********* 7 PDS STACK POINTER 00001070
********* 8 A FIRST ARGUMENT 00001080
********* 9 Q SECOND ARGUMENT 00001090
********* 10 M TEMP LIST SAVE- GARBAGE COLLECTED 00001100
********* 11 BASE REGISTER 00001110
********* 12 BASE REGISTER 00001120
********* 13 SAVE AREA AND BASE REGISTER 00001130
********* 14 LOCAL WORK REGISTER 00001140
********* 15 LOCAL WORK REGISTER 00001150
*********************************************************** 00001160
LISP START 00001170
******************* ASSEMBLY OPTIONS ***************** 00001180
STACKSIZ EQU 8000 WORDS FOR PUSHDOWN STACK UOM
BPSSIZE EQU 43550 BINARY PROGRAM SPACE UOM
STORESIZ EQU 24000 STATIC LISP CELLS
SBLKSIZ EQU 4*4096 DYNAMIC CELL BLOCK SIZE
ATMSZ EQU 80 SIZE OF PNAME MAX 00001220
CDEND EQU 72 MAX CD COL FOR S-EXPR 00001230
* 00001240
******************* REGISTER DEFINITIONS ************** 00001250
K4 EQU 4 00001260
FREE EQU 6 00001270
NILR EQU 5 00001280
PDS EQU 7 00001290
PDL EQU 15 00001300
A EQU 8 REGISTER DEFINITION 00001310
Q EQU 9 00001320
M EQU 10 00001330
F0 EQU 0 00001340
F2 EQU 2 00001350
F4 EQU 4 00001360
F6 EQU 6 00001370
R0 EQU 0 00001380
R1 EQU 1 00001390
R2 EQU 2 00001400
R3 EQU 3 00001410
R14 EQU 14 00001420
* 00001430
CAR EQU 0 00001440
CDR EQU 4 00001450
LOGIC EQU X'D0' NOTE.. FLOAT & BOOL ARE ALSO FIX 00001460
FLOAT EQU X'E0' 00001470
FIX EQU X'C0' 00001480
ATOM EQU X'80' 00001490
FWD EQU X'60' 00001500
EJECT 00001520
* ==================================================================== 00001530
* ====== THE BEGINNING OF THE INTERPRETER IS COVERED BY BASE- ======== 00001540
* ====== REGISTER 4 ============================================ 00001550
*********************************************************************** 00001560
******************* MAIN PROGRAM ********************************** 00001570
*********************************************************************** 00001580
MAIN STM 14,12,12(13) 00001590
LR K4,15 00001600
USING MAIN,K4 00001610
L 11,ADOFAGN 00001620
USING AGN,11 00001630
LA 12,BASE12 00001640
USING BASE12,12 00001650
LA 3,REMFLAG 00001660
USING REMFLAG,3 00001670
ST 13,SAVEBLK+4 00001680
LA 13,SAVEBLK 00001690
USING SAVEBLK,13 00001700
L NILR,NILA 00001710
USING NIL,NILR NOTE USE OF NILR AS A BASE 00001720
* REGISTER TO COVER OBJECT LIST 00001730
L 1,0(1) LOAD PARM POINTER 00001740
LH 2,0(1) COUNT 00001750
LTR 2,2 00001760
BZ NOPARM 00001770
CLC 2(3,1),=C'BCD' 00001780
BE RDBCD 00001790
PUTMSG ' *** INVALID PARM' 00001800
B NOPARM 00001810
RDBCD MVI NOTDOT+1,C'<' 00001820
MVI CKLP+1,C'%' 00001830
MVI NOTMIN+1,X'50' + 00001840
MVI TRYRPAR+1,C'<' 00001850
NOPARM EQU * 00001860
SPIE TRAPS,((1,13),15) 00001870
SR 0,0 INPUT CODE UOM
LA 1,=CL8'SCARDS' LISPIN UOM
LA 2,CARDIN INPUT DCB UOM
OPEN , UOM
LA 0,1 OUTPUT CODE UOM
LA 1,=CL8'SPRINT' LISPOUT UOM
LA 2,PRINTCB OUTPUT DCB UOM
OPEN , UOM
LA A,LISPIN RDS(LISPIN) UOM
BAL 2,RDSS UOM
LA A,LISPOUT WRS(LISPOUT) UOM
BAL 2,WRS UOM
L 15,=V(CANREPLY) BATCH MODE? UOM
BALR 14,15 UOM
B *+4(15) UOM
B BATCH2 NO UOM
OI BUFFPR,X'01' YES - ECHO INPUT UOM
MVI BATCHF,X'FF' SET "BATCH" FLAG UOM
BATCH2 LA 0,ATNPRO ATN INT PROCESSOR UOM
LA 1,ATNSA ATN SAVE AREA UOM
MVI 0(1),X'00' UOM
L 15,=V(ATTNTRP) UOM
BALR 14,15
L FREE,ADOFTOP INITIALIZE STATIC
LR 2,FREE LISP CELL STORAGE.
LA A,8
L Q,BOTTOM
SR 0,0
LA 1,8(,2)
INITL STM 0,1,0(2)
LR 2,1
BXLE 1,A,INITL
LA 1,1
STM 0,1,0(2)
L 0,=A(STORESIZ)
ST 0,CELLCNT
L PDS,PUSHA SET UP STACK POINTER.
LA K4,4 00002040
BR 11 00002050
ADOFAGN DC A(AGN) 00002060
ADOFTOP DC A(TOP1) 00002070
DROP K4 00002080
* ====== END OF THIS BASE 4 SECTION ================================ 00002090
* =================================================================== 00002100
EJECT 00002110
* =================================================================== 00002120
* ====== BEGINNING OF SPECIAL BASE 4 SECTION ======================= 00002130
* ====== ONLY OPEN IS IN THIS SECTION ============================== 00002140
USING BASE4,K4 00002150
*********************************************************************** 00002160
********* OPEN ****************************************************** 00002170
*********************************************************************** 00002180
OPEN BALR K4,0 00002190
BASE4 ST 2,OPENTEMP 00002200
ST A,OPENTEMP+4 00002210
* IS OPEN GIVEN ON SYSTEM DATASETS? 00002220
LA 0,LISPIN 00002230
CR A,0 00002240
BE USEREXIT YES, LISPIN 00002250
LA 0,LISPOUT 00002260
CR A,0 00002270
BE USEREXIT YES, LISPOUT 00002280
LA 0,LISPUNCH 00002290
CR A,0 00002300
BNE USERFILE 00002310
L 0,PUNCHOPN YES, LISPUNCH 00002320
LTR 0,0 00002330
BNZ USEREXIT LISPUNCH WAS ALREADY OPENED 00002340
BAL M,GETSTOR OPEN LISPUNCH. PUNCOPN WILL 00002350
ST 2,PUNCHOPN BE 0 IF LISPUNCH IS UNOPENED. 00002360
MVC 0(LDCB,R2),OTMDLDCB OUTPUT BCD UOM
MVC DDAREA(8),LUPCH MAKE IT USE SCARDS.
B USEREX1 00002390
USERFILE LR M,Q 00002400
LA Q,APVAL 00002410
BAL 2,GET 00002420
CR A,NILR 00002430
BNE USEREXIT 00002440
L A,OPENTEMP+4 00002450
LR Q,M 00002460
LA 0,SYSIN 00002470
CR Q,0 OWN DDNAME. IS THE DCB 00002480
BNE USERFIL2 DESCRIPTOR A SYSTEMDESCRIPTOR? 00002490
BAL M,GETSTOR YES, SYSIN 00002500
MVC 0(LDCB,R2),INMDLDCB INPUT DCB UOM
USING DCBDS,2 UOM
MVC LRECL#,LRECL2 UOM
B USEREX4 00002540
USERFIL2 LA 0,SYSOUT 00002550
CR Q,0 00002560
BNE USERFIL3 00002570
BAL M,GETSTOR YES, SYSOUT 00002580
MVC 0(LDCB,R2),OTMDLDCB OUTPUT DCB UOM
MVC LRECL#,LRECL3 UOM
B USEREX5 00002630
USERFIL3 LA 0,SYSPUNCH 00002640
CR Q,0 00002650
BNE USERFIL4 00002660
BAL M,GETSTOR YES, SYSPUNCH 00002670
MVC 0(LDCB,R2),OTMDLDCB OUTPUT DCB UOM
BAL 1,DDNAMSET 00002690
B USEREX1 00002700
USERFIL4 LA 0,SYSFILE 00002710
CR Q,0 00002720
BNE USERFIL6 00002730
BAL M,GETSTOR YES, SYSFILE WHICH IS 00002740
* USED FOR CHKPOINT OR 00002750
LA 0,OUTPUT RESTORE 00002760
C 0,ARGS REQUIRED FOR INPUT OR OUTPUT? 00002770
BNE USERFIL5 (DEFAULT: INPUT) 00002780
MVC 0(LDCB,R2),OTMDLDCB OUTPUT DCB UOM
MVC LRECL#,LRECL2 UOM
B USEREX5 00002820
USERFIL5 MVC 0(LDCB,R2),INMDLDCB INPUT DCB UOM
MVC LRECL#,LRECL2 UOM
B USEREX4 00002860
USERFIL6 LA 0,OUTPUT THE USER HAS SPECIFIED 00002870
C 0,ARGS HIS OWN DDNAME AND DCB 00002880
BNE USERFIL7 DESCRIPTOR LIST. 00002890
BAL M,GETSTOR DCB REQUIRED FOR OUTPUT OR 00002900
MVC 0(LDCB,R2),OTMDLDCB OUTPUT DCB UOM
TM CAR(Q),ATOM UOM
BNZ USEREX5 00002930
BAL 1,SETPARAM 00002940
B USEREX5 00002950
USERFIL7 BAL M,GETSTOR 00002960
MVC 0(LDCB,R2),INMDLDCB INPUT DCB UOM
TM CAR(Q),ATOM UOM
BNZ USEREX4 00002990
BAL 1,SETPARAM 00003000
B USEREX4 00003010
USEREX5 BAL 1,DDNAMSET 00003020
USEREX3 LA 0,1 OUTPUT CODE UOM
LA 1,DDAREA UNIT NAME UOM
OPEN , UOM
USEREXIT L 2,OPENTEMP 00003040
L A,OPENTEMP+4 00003050
LA K4,4 00003060
BR 2 00003070
USEREX4 BAL 1,DDNAMSET 00003080
USEREX2 SR 0,0 INPUT CODE UOM
LA 1,DDAREA UNIT NAME UOM
OPEN , UOM
B USEREXIT 00003100
USEREX1 MVC LRECL#,LRECL1 UOM
B USEREX3 00003130
GETSTOR GETSPACE LDCB,T=2 SPACE FOR A DCB UOM
LTR 15,15 00003150
BZ GETSTOR1 00003160
SR Q,Q 00003170
ERROR ' *** D2-FILE CANNOT BE OPENED - NO STORAGE AVLBL.' 00003180
GETSTOR1 LR 2,1 UOM
BR M 00003200
DDNAMSET LR 14,2 00003210
ST 2,SAVE2A SAVE R2 UOM
LR 15,A 00003220
LR A,2 00003230
LR Q,NILR 00003240
A Q,=X'60000000' 00003250
LA K4,4 00003260
BAL 2,CONS 00003270
LR Q,A 00003280
LR A,15 00003290
LR 0,1 00003300
BAL 2,CSET 00003310
LR 1,0 00003320
L K4,ADBASE4 00003330
MVC DDAREA,BLANKS BLANK UNIT NAME AREA.
L 15,CAR(15) 00003350
LM Q,M,0(15) 00003360
CLI 0(15),X'00' NAME OR INTEGER? UOM
BNE SHHV NAME UOM
ST Q,DDAREA NUMBER UOM
B DDNAMX2 UOM
SHHV SR 15,15 UOM
LA 14,DDAREA POINT TO UNIT NAME AREA UOM
NAMAGAIN SLDL A,8 00003380
STC A,0(15,14) UOM
LTR Q,Q 00003400
LA 15,1(0,15) 00003410
BZ NAMTEST 00003420
B NAMAGAIN 00003430
NAMTEST LA M,0(0,M) 00003440
CR M,NILR 00003450
BE DDNAMX2 UOM
L Q,CAR(M) 00003470
NAMAGN SLDL A,8 00003480
STC A,0(15,14) UOM
LTR Q,Q 00003500
LA 15,1(,15) UOM
BZ DDNAMX UOM
B NAMAGN 00003530
DDNAMX L M,CDR(M) NEXT BCD CELL UOM
B NAMTEST UOM
DDNAMX2 L 2,SAVE2A UOM
BR 1 00003550
SETPARAM ST 1,PARTEMP 00003560
PARMAGN LA M,LRECL 00003570
CR Q,NILR 00003580
BE PARMEXIT 00003590
LM A,Q,0(Q) 00003600
BAL 1,FINDPARM 00003610
STH 15,LRECL# BUFFER SIZE UOM
LA M,TXTLEN UOM
BAL 1,FINDPARM 00003640
ST 15,TXTLEN# UOM
LA M,AA 00003660
BAL 1,FINDPARM 00003670
NOP 0 UOM
B PARMAGN 00003690
FINDPARM LM 14,15,0(A) 00003700
CR 14,M 00003710
BNE 4(1) 00003720
L 15,CAR(15) 00003730
L 15,CAR(15) 00003740
BR 1 00003750
PARMEXIT L A,OPENTEMP+4 00003760
L 1,PARTEMP 00003770
BR 1 00003780
OPENTEMP DC 2F'0' 00003790
PARTEMP DC F'0' 00003800
STORADDR DC 2F'0' 00003810
PUNCHDDN DC CL8'LISPUNCH' 00003830
LRECL2 DC AL2(80) 00003840
LRECL1 EQU LRECL2 00003850
LRECL3 DC AL2(132) UOM
OTMDLDCB DCB ,0,0,1,0 OUTPUT DCB UOM
INMDLDCB DCB ,0,EOF,0,0,'80000000' UOM
SAVE2A DS A SAVE R2 UOM
DDAREA DS CL84 BUILD UNIT NAME UOM
DROP 2 UOM
DROP K4 00003920
* ====== END OF THIS SPECIAL BASE 4 SECTION ======================== 00003930
* =================================================================== 00003940
EJECT 00003950
* UOM
* ENTER WITH GR0 CONTAINING I/O CODE (0->INPUT, 1->OUTPUT) UOM
* GR1 POINTS TO LOGICAL UNIT NAME OR FDNAME UOM
* GR2 POINTS TO DCB UOM
* UOM
USING MAROPEN,15 UOM
MAROPEN STM 0,15,GETSA SHARE SAVE AREA WITH GETPRO UOM
LR 8,15 UOM
LR 10,0 I/O CODE UOM
LR 11,1 UNIT NAME UOM
LR 12,2 DCB LOC UOM
DROP 15 UOM
USING MAROPEN,8 UOM
USING DCBDS,12 UOM
CLI 0(11),X'00' A UNIT NUMBER? UOM
BNE LUNLU NO UOM
OI INOUT#,X'80' INDICATE LOGICAL UNIT UOM
MVC FDUB#,0(1) YES - MOVE TO PARM LIST UOM
MVC BCDUN(1),0(1) BUILD BCD UNIT NAME UOM
LM 0,1,BCDUN SET FOR CALL TO GDINFO UOM
B CGDIN UOM
SPACE 1 UOM
* UOM
* LOOK UP NAME IN LOGICAL UNIT TABLE UOM
* UOM
SPACE 1 UOM
LUNLU LA 5,LUNAM POINT TO UNIT TABLE UOM
LA 6,LUCNT NO. OF ENTRIES UOM
LULUL CLC 0(8,5),0(11) NAMES MATCH? UOM
BE GOTUN YES UOM
LA 5,12(,5) POINT TO NEXT ENTRY UOM
BCT 6,LULUL UOM
FDNAME L 15,=V(GETFD) MIGHT BE AN FDNAME UOM
BASR 14,15 UOM
ST 0,FDUB# SAVE FDUB UOM
SR 1,1 CALL GDINFO WITH FDUB UOM
CGDIN L 15,=V(GDINFO) UOM
BALR 14,15 UOM
ST 1,GDIV# SAVE PTR TO VECTOR UOM
MVC FDUB2#,0(1) SAVE FDUB UOM
LRHBS LTR 10,10 INPUT OR OUTPUT UOM
BZ INLGL INPUT UOM
OI INOUT#,X'01' SET "OUTPUT" BIT.
LH 0,LRECL# USER-LENGTH UOM
LTR 0,0 SPECIFIED? UOM
BZ LA120 NO - ASSUME 120 UOM
C 0,=F'120' UOM
BNH *+8 UOM
LA120 LA 0,120 UOM
LH 6,10(,1) GDINFO LENGTH UOM
CR 0,6 UOM
BNH *+6 UOM
LR 0,6 UOM
ST 0,TXTLEN# UOM
STH 0,LEN# UOM
CLC IORTN$,=F'0' IS THERE AN I/O ROUTINE? UOM
BNE RISU YES UOM
MVC IORTN$,=V(WRITE) NO - USE WRITE UOM
B RISU UOM
SPACE 1 UOM
* UOM
* PROCESS "INPUT" TYPE UOM
* UOM
SPACE 1 UOM
INLGL LH 6,8(,1) INPUT LENGTH UOM
LH 0,LRECL# USER-SPECIFIED REC LEN UOM
CR 0,6 CHOOSE MAX UOM
BNH *+6 UOM
LR 6,0 UOM
ST 6,BUFSIZ# THIS IS INPUT BUFFER SIZE UOM
LTR 0,0 DID USER GIVE LRECL?
BP *+10 YES -- SKIP.
STH 6,LRECL# NO; USE GDINFO LENGTH.
LR 0,6
L 6,TXTLEN# GET TXTLEN.
LTR 6,6 DID USER SPECIFY IT?
BNP OPENO NO -- USE LRECL.
CR 6,0 YES; LIMIT TXTLEN TO LRECL.
BNH *+6
OPENO LR 6,0
ST 6,TXTLEN#
LA 0,3 NOW GET BUFFER.
L 1,BUFSIZ# UOM
L 15,=V(GETSPACE) UOM
BALR 14,15 UOM
ST 1,BFR$ UOM
CLC IORTN$,=F'0' IS THERE AN I/O ROUTINE? UOM
BNE RISU YES UOM
MVC IORTN$,=V(READ) NO - USE READ UOM
* UOM
RISU LA 0,LEN# UOM
ST 0,LEN$ UOM
LA 0,LIN# UOM
ST 0,LIN$ UOM
LA 0,MOD# UOM
ST 0,MDF$ UOM
LA 0,FDUB# UOM
ST 0,FDUB$ UOM
LM 0,15,GETSA RESTORE EVERYBODY UOM
BR 14 UOM
* UOM
GOTUN MVC IORTN$,8(5) MOVE I/O ROUTINE UOM
OI INOUT#,X'80' UOM
LM 0,1,0(5) GET BCD UNIT NAME UOM
B CGDIN UOM
* UOM
DROP 8 UOM
USING BASE12,12 UOM
DS 0F UOM
BCDUN DC CL8' ' BUILD 8-BYTE UNIT NAME UOM
* UOM
* TABLE OF NON-NUMERIC LOGICAL UNIT NAMES UOM
* UOM
LUNAM DC CL8'SCARDS',V(SCARDS) UOM
DC CL8'SPRINT',V(SPRINT) UOM
LUPCH DC CL8'SPUNCH',V(SPUNCH)
DC CL8'GUSER',V(GUSER) UOM
DC CL8'SERCOM',V(SERCOM) UOM
LUCNT EQU (*-LUNAM)/12
EJECT UOM
* UOM
* SUPPORT FOR "CLOSE" MACRO UOM
* UOM
SPACE 1 UOM
USING MARCLOSE,15 UOM
MARCLOSE STM 0,15,GETSA UOM
LR Q,15 UOM
LR M,1 COPY DCB PTR UOM
USING MARCLOSE,Q UOM
USING DCBDS,M UOM
DROP 15 UOM
L 0,FDUB2# GET FDUB UOM
TM INOUT#,X'80' LOGICAL UNIT? UOM
BO NOFREEFD YES - DON'T FREE UOM
LTR 0,0 WAS THERE EVER AN FDUB? UOM
BZ NOFREEFD NO - DON'T FREE UOM
L 15,=V(FREEFD) FREE IT UOM
BALR 14,15 UOM
NOFREEFD TM INOUT#,X'01' INPUT DEVICE? UOM
BO NOFREEB NO - DON'T FREE BUFFER UOM
L 1,BFR$ POINT TO BUFFER UOM
LTR 1,1 A BUFFER TO FREE? UOM
BZ NOFREEB UOM
SR 0,0 FREE IT ALL UOM
L 15,=V(FREESPAC) UOM
BASR 14,15 UOM
NOFREEB L 1,GDIV# FREE THE FDINFO INFO
LTR 1,1 IF ANY
BZ NOFREEG
L 15,=V(FREESPAC)
SR 0,0
BASR 14,15
NOFREEG LR 1,M FREE THE DCB UOM
LA 0,CARDIN IGNORE LISPIN & LISPOUT UOM
CR 0,1 UOM
BE NOFREED UOM
LA 0,PRINTCB UOM
CR 0,1 UOM
BE NOFREED UOM
SR 0,0 UOM
L 15,=V(FREESPAC) UOM
BASR 14,15 UOM
NOFREED LM 0,15,GETSA UOM
BR 14 UOM
DROP M,Q UOM
EJECT UOM
* UOM
* PROCESS "ATTN" UOM
* UOM
SPACE 1 UOM
ATTN BALR 1,0 UOM
USING *,1 UOM
L 15,=V(ATTNTRP) UOM
LR 14,2 COPY RETURN ADDRESS UOM
SR 0,0 ASSUME ATN OFF UOM
CR A,NILR ATTN OFF? UOM
BE ATNOFF YES UOM
LA 0,ATNPRO ATN ON UOM
ATNOFF LA 1,ATNSA UOM
DROP 1 UOM
MVI 0(1),X'00' UOM
BR 15 UOM
SPACE 2 UOM
* UOM
* ATTENTION INTERRUPT PROCESSOR UOM
* UOM
SPACE 1 UOM
ATNPRO LR 10,15 UOM
USING ATNPRO,10 UOM
LM 11,13,=A(AGN,BASE12,SAVEBLK) UOM
LM 2,9,16(1) UOM
CR FREE,K4 IN GARBAGE COLLECTION?
BL ATNOTNOW YES.
L 2,INDCBADR LOOK AT INPUT DCB UOM
USING DCBDS,2 UOM
L 0,LASTCHAR SAVE CHARACTER PTR.
ST 0,NXTCHR#
L 1,GDIV# POINT TO GDINFO VECTOR UOM
CLI 12(1),X'01' *MSOURCE*? UOM
BE ATNP3 YES -- LOOK AT *SINK*.
TM MSFLOC,X'01' *MSOURCE* OPENED? UOM
BO MSNP YES UOM
OI MSFLOC,X'01' SET SWITCH UOM
LA 2,MSRCDCB POINT TO *MSOURCE* DCB UOM
LA 1,=C'*MSOURCE* ' UOM
SR 0,0 INPUT CODE UOM
OPEN , OPEN *MSOURCE* UOM
MSNP L 0,MSRCDCB+TXTLEN#-DCBDS FAKE RDS(*MSOURCE*).
ST 0,CARDLNTH UOM
LA 0,MSRCDCB UOM
ST 0,INDCBADR UOM
ATNP3 SR 0,0 FORCE NEW INPUT LINE.
ST 0,LASTCHAR UOM
L 2,OTDCBADR LOOK AT OUTPUT DCB.
L 1,GDIV# UOM
CLI 12(1),X'02' *MSINK*? UOM
BE NOMO *MSINK* OPEN? UOM
TM MSFLOC,X'02' *MSINK* OPEN? UOM
BO WHATTN YES UOM
OI MSFLOC,X'02' SET BIT UOM
LA 2,MSNKDCB POINT TO *MSINK* DCB UOM
LA 1,=C'*MSINK* ' UOM
LA 0,1 OUTPUT CODE UOM
OPEN , UOM
WHATTN LA 14,MSGBUFFR FAKE WRS(*MSINK*)
ST 14,MARGIN2 UOM
LA 0,MSNKDCB UOM
ST 0,OTDCBADR UOM
LA 14,LINE UOM
ST 14,MARGIN1 UOM
LA 14,100(,14) UOM
ST 14,LINEMAX UOM
LA 14,20(,14) UOM
ST 14,SUPMAX UOM
DROP 2 UOM
NOMO MVC MSGBUFFR,BLANKS CLEAR MESSAGE BUFFER.
PUTMSG ' LISP ATTN' UOM
SR 0,0
ATNCALL LA 1,ATNSA
STC 0,0(,1)
ST NILR,ERRARG
LR 0,10 ATN TRAP PROCESSOR UOM
L 15,=V(ATTNTRP)
BALR 14,15 UOM
B ERRPU UOM
ATNOTNOW LA 0,255
B ATNCALL
DROP 10 UOM
EJECT UOM
* UOM
* PROCESS "BATCH" UOM
* UOM
SPACE 1 UOM
BATCH BALR 1,0 UOM
USING *,1 UOM
LR A,NILR ASSUME CONVERSATIONAL UOM
CLI BATCHF,X'00' TRUE? UOM
BER 2 YES UOM
LA A,T NO - CONVERSATIONAL UOM
BR 2 UOM
SPACE 1 UOM
* UOM
* PROCESS "MTS" UOM
* UOM
SPACE 1 UOM
MTS BALR 1,0 UOM
USING *,1 UOM
STM 0,15,GETSA UOM
L 15,=V(MTS) UOM
BALR 14,15 UOM
USING *,14 UOM
LM 0,15,GETSA UOM
LR A,NILR UOM
BR 2 UOM
DROP 1,14 UOM
EJECT UOM
* UOM
* PROCESS "GET" MACRO UOM
* GR1 POINTS TO DCB UOM
* UOM
SPACE 1 UOM
USING GETPRO,15 UOM
USING DCBDS,8 UOM
GETPRO STM 0,15,GETSA UOM
LR 10,15 UOM
LR 8,1 UOM
DROP 15 UOM
USING GETPRO,10 UOM
CRING2 L 15,IORTN$ I/O ROUTINE ADDRESS UOM
BALR 14,15 UOM
LTR 15,15 EOF UOM
BNZ GETEOF YES UOM
LTR 0,0 READ OK? UOM
BZ LROK NO - NEW FDUB OPENED UOM
L 1,GDIV# FREE OLD GDINFO INFO
SR 0,0
L 15,=V(FREESPAC)
LTR 1,1 IF ANY
BZ *+6
BASR 14,15
L 0,FDUB2# POINT TO IT UOM
SR 1,1 UOM
L 15,=V(GDINFO) GET NEW INFO UOM
BALR 14,15 UOM
ST 1,GDIV# SAVE VECTOR PTR UOM
LTR 15,15 UOM
BNZ CRING UOM
CLC =C'NONE',4(1) UOM
BE CRING UOM
LH 6,8(,1) MAX. INPUT LENGTH
C 6,BUFSIZ# IS BUFFER BIG ENOUGH?
BNH CRING YES -- SKIP.
SR 0,0 NO - FREE OLD BUFFER UOM
L 1,BFR$ POINT TO BUFFER UOM
L 15,=V(FREESPAC) UOM
BALR 14,15 UOM
LR 1,6 GET NEW BUFFER UOM
LA 0,3 UOM
L 15,=V(GETSPACE) UOM
BALR 14,15 UOM
ST 1,BFR$ UOM
ST 6,BUFSIZ# STORE NEW BUFFER SIZE.
CRING LR 1,8 POINT TO DCB UOM
B CRING2 UOM
LROK L 1,BFR$ POINT TO INPUT BUFFER
LH 2,LEN# INPUT LENGTH UOM
L 3,BUFSIZ# BUFFER SIZE UOM
CR 2,3 OVERFLOW? UOM
BH GETABORT YES UOM
BE GETEQ ON THE NOSE UOM
LA 4,0(1,2) POINT TO END OF TEXT.
LA 5,X'07' MAKE 3-BIT MASK.
NR 5,4 GET POS'N IN DOUBLEWORD.
LA 5,BLANKS(5) ADD TO ADRS. OF BLANKS.
SR 3,2 COMPUTE NBR BLANKS NEEDED.
LA 0,128 MOVE UP TO 128 AT A TIME.
GETM CR 3,0
BNH GETN
MVC 0(128,4),0(5)
AR 4,0
SR 3,0
B GETM
GETN BCTR 3,0
EX 3,GETMVC
GETEQ LM 2,15,GETSA+8 UOM
BR 14 UOM
GETMVC MVC 0(0,4),0(5)
GETEOF L 15,EODAD# EOF EXIT UOM
LM 0,14,GETSA UOM
BR 15 UOM
GETABORT LM 0,15,GETSA UOM
DROP 8,10 UOM
MVI ERRORIND,X'03' ERROR ON UOM
ERROR ' *** RECORD LENGTH EXCEEDS BUFFER SIZE' UOM
GETSA DS 18F UOM
ATNSA DS 18F ATNTTRP SAVE AREA UOM
MSRCDCB DCB READ,0,LASTCARD,0,0,'80000000' *MSOURCE* DCB UOM
MSNKDCB DCB WRITE,0,0,1,132 *MSINK* DCB UOM
MSFLOC DC X'00' *MSOURCE*/*MSINK* OPEN UOM
LTORG UOM
EJECT
* SPECIAL BASE 4 SECTION TO INITIALIZE THE HASH TABEL FOR ATOMS
*
HASHINIT LR K4,15
USING HASHINIT,K4
GETSPACE 4*4096,T=3 GET A HASH TABLE
ST 1,HASHTBL SAVE IT
A 1,=A(4*4096-1) FIND END
ST 1,ENDHASH
L 1,HASHTBL BEGINNING AGAIN
SR 0,0 LEAR IT
ST 0,0(0,1)
LA 1,4(0,1)
C 1,ENDHASH
BL *-12
L 1,OBJECTA OBJECT LIST
HSHI1 L 14,CAR(0,1) POINT TO ATOM
L 14,CAR(0,14) POINT TO FULL WORD
LH 15,0(0,14) COMPUT HASH
AH 15,2(0,14)
MH 15,=X'7A3C'
N 15,=X'00003FE0'
A 15,HASHTBL
HSHI2 MVI LPSW,0 NO LOOP YET
C 0,0(0,15) EMPTY ENTRY?
BE HSHI3 YES
LA 15,4(0,15) NEXT
C 15,ENDHASH END?
BL HSHI2 NO
L 15,HASHTBL WRAP AROUND
XI LPSW,1 AVOID INFINITE LOOPS
BNZ HSHI2 NOPE
B TMNYATM TOO MANY ATOMES
HSHI3 L 14,CAR(0,1) POINT TO ATOM
ST 14,0(0,15) INTO HSH TBL
L 1,CDR(0,1) NEXT ATOM
CR 1,NILR END?
BNE HSHI1 NOPE
LA K4,4 RESTORE 4
DROP K4
B SCH1
LTORG
EJECT
* ===================================================================== 00003960
* ===== BEGINNING OF ANOTHER SPECIAL BASE 4 SECTION ================== 00003970
* ===== ONLY EXITERR IN THIS SECTION ================================ 00003980
USING BASE4A,K4 00003990
*********************************************************************** 00004000
***** EXITERR ***************************************************** 00004010
*********************************************************************** 00004020
EXITERR BALR K4,0 00004030
BASE4A CR A,NILR 00004040
BE EXOFF RESET TO NORMAL 00004050
MVI T1+1,X'F0' SET FOR EXITS 00004060
MVI T2+1,X'F0' 00004070
MVI T3+1,X'F0' 00004080
MVI T4+1,X'F0' 00004090
MVI T5+1,X'F0' 00004100
MVI T6+1,X'F0' 00004110
MVI T7+1,X'F0' 00004120
MVI T8+1,X'F0' 00004130
MVI T9+1,X'F0' 00004140
B EXOUT 00004160
EXOFF MVI T1+1,X'00' 00004170
MVI T2+1,X'00' 00004180
MVI T3+1,X'10' UOM
MVI T4+1,X'00' 00004200
MVI T5+1,X'00' 00004210
MVI T6+1,X'00' 00004220
MVI T7+1,X'00' 00004230
MVI T8+1,X'00' 00004240
MVI T9+1,X'00' 00004250
EXOUT LA K4,4 00004270
BR 2 00004280
DROP K4 00004290
* ===== END OF THIS SPECIAL BASE 4 SECTION ========================== 00004300
* ===================================================================== 00004310
BATCHF DC X'00' BATCH FLAG 00 -> CONV UOM
EJECT 00004320
* ==================================================================== 00004330
* ====== BEGINNING OF BASEREGISTER 11 SECTION. THIS SECTION IS FULL = 00004340
AGN DS 0H UOM
NI MAININD,X'00' 00004360
BAL 2,READ READ THE FUNCTION 00004370
ST A,GARBT HOLD IT 00004380
BAL 2,READ READ ARGUMENTS 00004390
ST A,GARBT+4 HOLD THEM 00004400
TM MAININD,X'05' 00004410
BZ NOBUG 00004420
PUTMSG READERR 00004430
L A,GARBT 00004440
BAL 2,PRINT 00004450
L A,GARBT+4 00004460
BAL 2,PRINT 00004470
NI MAININD,X'00' 00004480
B AGN 00004490
* TM DBIND,X'01' DEBUG MODE 00004500
* BZ NOBUG NO 00004510
NOBUG TM GARBSW,X'01' IGNORE TITLES? UOM
BZ SEQM1 YES UOM
PUTMSG MA UOM
L A,GARBT 00004530
BAL 2,PRINT 00004540
L A,GARBT+4 00004550
BAL 2,PRINT 00004560
SEQM1 L Q,GARBT+4 UOM
L A,GARBT 00004580
TTIMER 00004590
ST 0,STIM DONT COUNT READ TIME 00004600
BAL 2,EVALQUOT 00004610
TTIMER 00004620
L 1,STIM 00004630
ST 0,STIM 00004640
SR 1,0 00004650
M 0,=F'5' UOM
D 0,=F'384' UOM
CVD 1,TEA INTO DECIMAL 00004680
MVC MB+9(8),MASK 00004690
ED MB+9(8),TEA+4 00004700
TM GARBSW,X'01' UOM
BZ SEQM2 UOM
PUTMSG MB 00004710
SEQM2 BAL 2,PRINT UOM
B AGN 00004730
* SNAPS BPS,BPSST,BPSST+4*BPSSIZE 00004740
* SNAPS STACK,PUSH,PUSH+4*STACKSIZ 00004750
* SNAPS OBJLIST,OBJECT,OBJECT+8*STORESIZ 00004760
STOP EQU * 00004770
CLOSE (PRINTCB) 00004780
L 13,SAVEBLK+4 00004790
RETURN (14,12) 00004800
MA DC AL2(29),C'0 ARGUMENTS FOR EVALQUOTE ...' 00004810
STIM DC F'2000000000' 20 00004820
TEA DC D'0' DP WORK AREA 00004830
MASK DC X'40',5X'20',X'2120' 00004840
MB DC AL2(31),C'0 TIME MS, VALUE IS ...' 00004850
READERR DC AL2(66),C' *** ERRORS ENCOUNTERED WHILE READING.' 00004860
DC C' CONTINUING WITH NEXT DOUBLET' 00004870
MAININD DC X'00' 00004880
EJECT 00004890
*********************************************************************** 00004900
******************* TRAP SUPERVISOR ******************************* 00004910
*********************************************************************** 00004920
TRAPS CR FREE,K4 A GARBCOLL TRAP 00004930
BL GARBCOLL 00004940
CLI 7(1),X'08' 00004950
BL TRAPS1 00004960
MVC OFLOW(1),7(1) 00004970
UNPK OFLOWTP(3),OFLOW(2) 00004980
TR OFLOWTP(2),SNPTR-240 00004990
PUTMSG OFLOWMSG 00005000
T1 BC 0,STOP 00005010
BR 14 00005020
TRAPS1 MVC SAVEBLK+12(8),4(1) MOVE PSW 00005030
SNAPS TRAP_PSW,SAVEBLK+12,SAVEBLK+19 00005040
MVC SAVEBLK+12(12),20(1) 00005050
STM 3,7,SAVEBLK+24 00005060
SNAPS REGS0-7,SAVEBLK+12,SAVEBLK+43 00005070
STM 8,13,SAVEBLK+12 00005080
MVC SAVEBLK+36(8),12(1) 00005090
SNAPS REGS8-15,SAVEBLK+12,SAVEBLK+43 00005100
MVC 9(3,1),=AL3(SYSER) 00005110
T2 BC 0,STOP 00005120
BR 14 00005130
CONS1 ST A,CAR(FREE) 00005140
BR 14 00005150
SYSER ERROR '0*** ERROR: CAR TAKEN OF FULLCELL' 00005160
OFLOWMSG DC AL2(33),C' *** OVER-OR UNDERFLOW OF TYPE ' 00005170
OFLOWTP DC X'00000000' 00005180
OFLOW DC H'0' 00005190
EJECT 00005200
CARDIN DCB SCARDS,0,LASTCARD,0,0,'80000000' UOM
PRINTCB DCB SPRINT,0,0,1,132 UOM
SNAPROUT ST 14,SNPSV 00005250
L 2,8(14) LOWER BOUND 00005260
MVC SNPA(8),0(14) 00005270
AP 16(2,14),SNP1 00005280
UNPK SNPA+9(3),16(2,14) 00005290
OI SNPA+11,X'F0' 00005300
SNPLN ST 2,SNPA+31 00005310
UNPK SNPA+13(7),SNPA+31(5) 00005320
TR SNPA+13(6),SNPTR-240 00005330
MVC SNPA+19(100),BLANKS+4
LA 1,SNPA+22 00005360
LA 3,8 00005370
SNPAL C 2,12(14) 00005380
BH SNPOUT 00005390
UNPK 0(9,1),0(5,2) 00005400
TR 0(8,1),SNPTR-240 00005410
MVI 8(1),C' ' 00005420
LA 1,09(,1) 00005430
LA 2,4(,2) 00005440
BCT 3,SNPAL 00005450
SNPOUT L R1,OTDCBADR 00005460
L 0,MARGIN2 00005470
PUT (R1),(0) 00005480
L 14,SNPSV 00005490
C 2,12(14) UPPER 00005500
BNH SNPLN 00005510
MVC MSGBUFFR,BLANKS
BH 18(14) 00005540
SNP1 DC PL1'1' 00005550
SNPSV DC F'0' 00005560
SNPPSER DC 7F'0' 00005570
DS 0D
MSGBUFFR DC CL129' ' FOR MESSAGES AND DUMPS
SNPA EQU MSGBUFFR+1
SNPPP DC CL13' ' 00005600
SNPTR DC C'0123456789ABCDEF' 00005610
DTRAH DC H'-78,-68,-58,-49,-39,-29,-20,-10,0,9,19,28,38' 00005620
DC H'48,57,67' 00005630
DS 0D
BLANKS DC CL(128+8)' '
LINE DC CL124' ',CL14' '
EJECT 00005640
*********************************************************************** 00005650
******************* EVALQUOTE(FN,ARGS) NON REC ******************* 00005660
*********************************************************************** 00005670
EVS DC 3F'0' 00005680
EVALQUOT STM A,Q,EVS+4 00005690
ST 2,EVS 00005700
LA Q,FEXPR TRY FEXPR 00005710
BAL 2,GET 00005720
CR A,NILR IS IT 00005730
BNE EVL ITS EXPR 00005740
L A,EVS+4 00005750
LA Q,FSUBR TRY FSUBR 00005760
BAL 2,GET 00005770
CR A,NILR IS IT 00005780
BNE EVL IT IS FSUBR 00005790
* APPLY(FN,ARGS,NIL) 00005800
ST NILR,ARGS 00005810
LM A,Q,EVS+4 00005820
BAL 2,APPLY 00005830
B EVQS UOM
* EVAL(CONS(FN,ARGS),NIL) 00005860
EVL LM A,Q,EVS+4 00005870
BAL 2,CONS 00005880
LR Q,NILR 00005890
BAL 2,EVAL 00005900
EVQS ST A,ER## SAVE FOR RES# UOM
L 2,EVS 00005910
BR 2 00005920
EJECT 00005930
*********************************************************************** 00005940
******************* EVAL(FORM,A) RECURSIVE ********************* 00005950
*********************************************************************** 00005960
TRACEIND DC X'0000' 00005970
EVAL SAVE 2 SAVE RET 00005980
EVALL CR A,NILR 00005990
BE RETURN RET NIL 00006000
TM CAR(A),FIX A NUMBER 00006010
BO RETURN YES 00006020
STM A,Q,EVLSV SAVE PARAMS 00006030
TM CAR(A),ATOM 00006040
BZ EVALST NO 00006050
LA Q,APVAL IS IT APVAL 00006060
BAL 2,GET 00006070
CR A,NILR 00006080
BE EVNAP NO 00006090
L A,CAR(,A) YES -- RETURN VALUE.
B RETURN 00006110
EVNAP LM A,Q,EVLSV AN ATOM AND NOT APVAL 00006120
LA 1,ERRA8 00006130
BAL 2,SASSOC 00006140
L A,CDR(,A)
B RETURN 00006160
ERRA8 ERROR ' *** A8-UNDEFINED VARIABLE' 00006170
ERRA9 ERROR ' *** A9-FUNCTION NOT DEFINED' 00006180
EVALST EQU * 00006190
NTEV EQU * 00006200
L A,CAR(,A) FORM NOT AN ATOM; TRY QUOTE.
LA 1,QUOTE 00006220
CR A,1 00006230
BNE EVNQ NOT QUOTE 00006240
L A,EVLSV 00006250
L A,CDR(A) 00006260
L A,CAR(A) CADR(FORM) 00006270
B RETURN 00006280
EVNQ LA 1,COND TRY COND 00006290
CR A,1 00006300
BNE EVNC NOT COND 00006310
L A,EVLSV IT IS COND 00006320
L A,CDR(A) 00006330
BAL 2,EVCON 00006340
B RETURN 00006350
EVNC TM CAR(A),ATOM 00006360
BZ EVNA NO 00006370
ST A,EVLSV+8 00006380
LA Q,EXPR 00006390
BAL 2,GET 00006400
CR A,NILR 00006410
BE EVNXP NOT EXPR 00006420
* APPLY(---,EVLIS(CDR(FORM),A),A 00006430
TM TRACEIND,X'01' TEST FOR TRACING 00006440
BNO NOTRACE NO TRACE 00006450
SAVE A SAVE EXPR DEFN. 00006460
L A,EVLSV+8 RESTORE FUNCTION 00006470
SAVE A SAVE IT 00006480
LM A,Q,EVLSV RESTORE EVALARGS 00006490
SAVE Q SAVE ASSOC.LIST 00006500
L A,CDR(A) FIND ARGS. 00006510
BAL 2,EVLIS 00006520
ST A,EVLSV STORE RESULTS IN 00006530
ST A,PVARG LOCAL & I/O STORE. 00006540
UNSAVE Q UNSAVE ASSOC. LIST 00006550
ST Q,ARGS STORE IT 00006560
UNSAVE A UNSAVE AND STORE 00006570
ST A,EVLSV+8 THE FUNCTION 00006580
TM 0(A),X'01' SHOULD IT BE TRACED 00006590
BNO NOTRA NO 00006600
BAL 2,PRARG YES, PRINT FUNCTION + ARGS. 00006610
NOTRA L Q,EVLSV RESTORE ARGS TO Q 00006620
UNSAVE A UNSAVE EXPR POINTER 00006630
L 2,EVLSV+8 RESTORE FUNCTION 00006640
SAVE 2 SAVE IT 00006650
BAL 2,APPLY APPLY FUNCTION 00006660
ST A,EVLSV STORE VALUE IN 00006670
ST A,PVARG LOCAL + I/O STORE 00006680
UNSAVE A UNSAVE FUNCTION 00006690
TM 0(A),X'01' SHOULD IT BE TRACED 00006700
BNO NOTRB NO 00006710
BAL 2,PRVAL PRINT FUNTION + VALUE 00006720
NOTRB L A,EVLSV RESTORE VALUE 00006730
B RETURN RETURN 00006740
NOTRACE SAVE A 00006750
LM A,Q,EVLSV 00006760
SAVE Q 00006770
L A,CDR(A) 00006780
BAL 2,EVLIS 00006790
UNSAVE Q 00006800
ST Q,ARGS ASSOC LIST 00006810
LR Q,A 00006820
UNSAVE A 00006830
BAL 2,APPLY 00006840
B RETURN 00006850
EVNXP L A,EVLSV+8 CAR(FORM) 00006860
LA Q,FEXPR 00006870
BAL 2,GET IS IT FEXPR 00006880
CR A,NILR 00006890
BE EVNFXP 00006900
* APPLY(---,LIST(CDR(FORM)A)A) 00006910
LR M,A 00006920
L A,EVLSV+4 ALIST 00006930
ST A,ARGS 00006940
LR Q,NILR 00006950
BAL 2,CONS 00006960
LR Q,A 00006970
L A,EVLSV 00006980
L A,CDR(A) 00006990
BAL 2,CONS 00007000
TM TRACEIND,X'01' TEST FOR TRACING 00007010
BNO NOTRACE2 NO 00007020
LR Q,A PUT ARGS IN Q 00007030
L A,EVLSV+8 GET FUNCTION 00007040
SAVE A SAVE FUNCTION 00007050
TM 0(A),X'01' SHOULD IT BE TRACED 00007060
BNO NOTR2A NO 00007070
ST M,EVLSV+4 STORE ADDR OF FEXPR 00007080
ST Q,EVLSV STORE ARGS 00007090
ST Q,PVARG ALSO IN I/O ROUTINE 00007100
BAL 2,PRARG PRINT FUNCTION AND ARGS. 00007110
LM Q,M,EVLSV PUT ARGS IN Q, ADDR OF FEXPR IN M 00007120
NOTR2A LR A,M PUT ADDR. OF FEXPR IN A 00007130
BAL 2,APPLY CALL APPLY 00007140
UNSAVE M GET THE FUNCTION 00007150
TM 0(M),X'01' SHOULD IT BE TRACED 00007160
BNO RETURN NO, RETURN 00007170
ST A,EVLSV STORE VALUE 00007180
ST A,PVARG ALSO IN I/O ROUTINE 00007190
LR A,M PUT FUNCTION IN A 00007200
BAL 2,PRVAL PRINT FUNCTION AND VALUE 00007210
L A,EVLSV RESTORE VALUE 00007220
B RETURN RETURN 00007230
NOTRACE2 LR Q,A 00007240
LR A,M 00007250
B APPLYY 00007260
EVNFXP L A,EVLSV+8 00007270
LA Q,SUBR TRY SUBR 00007280
BAL 2,GET 00007290
CR A,NILR 00007300
BE EVNS NOT SUBR 00007310
L Q,ALIST 00007320
SAVE Q 00007330
SAVE A SUBR ADDR. 00007340
LM A,M,EVLSV 00007350
SAVE Q ALIST 00007360
SAVE M FUNCTION 00007370
L A,CDR(A) 00007380
BAL 2,EVLIS 00007390
UNSAVE Q UNSAVE FUNCTION 00007400
TM TRACEIND,X'01' TEST FOR TRACING 00007410
BNO NOTRACE3 NO 00007420
ST Q,EVLSV+8 STORE FUNCTION 00007430
TM 0(Q),X'01' SHOULD FUNCTION BE TRACED 00007440
BNO NOTR3A NO 00007450
ST A,EVLSV SAVE ARGS 00007460
ST A,PVARG ALSO IN I/O ROUTINE 00007470
LR A,Q PUT FUNCTION IN A 00007480
BAL 2,PRARG PRINT FUNCTION AND ARGS. 00007490
L A,EVLSV RESTORE ARGS. 00007500
L Q,EVLSV+8 RESTORE FUNCTION 00007510
NOTR3A STM A,Q,TAPPL IN CASE OF ARG. CT. ERROR 00007520
UNSAVE Q GET ASSOC LIST 00007530
ST Q,ALIST PUT IN ALIST 00007540
BAL 2,SPREAD RETURNS ARG CT. IN REG 1 00007550
UNSAVE 14 SUBR ADDR. 00007560
L M,EVLSV+8 RESTORE FUNCTION 00007570
SAVE M SAVE IT 00007580
STC 1,*+5 CHECK ARG CT. 00007590
CLI 0(14),X'00' 00007600
BE EVNOERR 00007610
LM A,Q,TAPPL 00007620
BL SUBRER TO MANY ARGS. 00007630
B SUBRERO TO FEW 00007640
EVNOERR L 14,0(14) SUBR ADR. 00007650
BALR 2,14 CALL SUBR 00007660
UNSAVE M RESTORE FUNCTION 00007670
UNSAVE Q 00007680
ST Q,ALIST 00007690
TM 0(M),X'01' SHOULD IT BE TRACED 00007700
BNO RETURN NO, RETURN 00007710
ST A,EVLSV STORE VALUE 00007720
ST A,PVARG ALSO IN I/O ROUTINE 00007730
LR A,M PUT FUNCTION IN A 00007740
BAL 2,PRVAL PRINT FUNCTION AND VALUE 00007750
L A,EVLSV RESTORE VALUE 00007760
B RETURN RETURN 00007770
NOTRACE3 STM A,Q,TAPPL 00007780
UNSAVE Q ALIST 00007790
ST Q,ALIST 00007800
BAL 2,SPREAD 00007810
UNSAVE 14 SUBR ADR. 00007820
B EXSUBR EXECUTE SUBR. COUNT ARGS 00007830
EVNS L A,EVLSV+8 00007840
LA Q,FSUBR 00007850
BAL 2,GET 00007860
CR A,NILR 00007870
BE EVNFS 00007880
LR 14,A ADR OF FSUBR IN 14 00007890
L Q,ALIST 00007900
SAVE Q 00007910
LM A,Q,EVLSV PICK UP EVALARGS 00007920
ST Q,ALIST SET UP ALIST 00007930
L A,CDR(A) RESULT 00007940
TM TRACEIND,X'01' TEST FOR TRACING 00007950
BNO EXSUBRB NO, EXECUTE FSUBR 00007960
L M,EVLSV+8 RESTORE FUNCTION 00007970
SAVE M SAVE IT 00007980
TM 0(M),X'01' SHOULD IT BE TRACED 00007990
BNO NOTR4A NO 00008000
ST 14,EVLSV+8 STORE FSUBR ADR. 00008010
ST A,EVLSV STORE RESULT 00008020
ST A,PVARG ALSO IN I/O ROUTINE 00008030
LR A,M PUT FUNCTION IN A 00008040
BAL 2,PRARG PRINT FUNCTION AND ARGS. 00008050
LM A,M,EVLSV RESTORE RESULT,ALIST,FSUBR ADR. 00008060
LR 14,M FSUBR ADR. IN 14 00008070
NOTR4A L 14,CAR(14) FSUBR ADR. 00008080
BALR 2,14 CALL FSUBR 00008090
UNSAVE M UNSAVE FUNCTION 00008100
UNSAVE Q 00008120
ST Q,ALIST 00008130
TM 0(M),X'01' SHOULD IT BE TRACED
BNO RETURN NO, RETURN 00008140
ST A,EVLSV SAVE VALUE 00008150
ST A,PVARG ALSO IN I/O ROUTINE 00008160
LR A,M PUT FUNCTION IN A 00008170
BAL 2,PRVAL PRINT FUNCTION AND VALUE 00008180
L A,EVLSV RESTORE VALUE 00008190
B RETURN RETURN 00008200
* EVAL(CONS(CDR(SASSOC(CAR(FORM),A,U)),CDR(FORM)),A) 00008210
EVNFS L A,EVLSV+8 CAR(FORM) 00008220
L Q,EVLSV+4 00008230
LA 1,ERRA9 00008240
BAL 2,SASSOC 00008250
L A,CDR(A) 00008260
L Q,EVLSV 00008270
L Q,CDR(Q) 00008280
BAL 2,CONS 00008290
L Q,EVLSV+4 00008300
B EVALL 00008310
* APPLY(CAR(FORM),EVLIS(CDR(FORM),A),A) 00008320
EVNA SAVE A CAR(FORM) 00008330
L Q,EVLSV+4 00008340
SAVE Q ALIST 00008350
L A,EVLSV 00008360
L A,CDR(A) 00008370
BAL 2,EVLIS 00008380
UNSAVE Q 00008390
ST Q,ARGS 00008400
LR Q,A 00008410
UNSAVE A 00008420
BAL 2,APPLY 00008430
B RETURN 00008440
EJECT 00008450
*********************************************************************** 00008460
******************* APPLY(FN,ARGS,A) RECURSIVE ******************* 00008470
*********************************************************************** 00008480
APPLY SAVE 2 00008490
APPLYY CR A,NILR 00008500
BE RETURN IF FN=NIL RETURN NIL 00008510
NTAP EQU * 00008520
TM CAR(A),ATOM IS FN ATOM 00008530
BZ APPNATM NO 00008540
STM A,Q,TAPPL SAVE ARGS 00008550
LA Q,EXPR 00008560
BAL 2,GET 00008570
CR A,NILR 00008580
BE APNEXPR LIST WASNT AN EXPR 00008590
* APPLY(---,ARGS) 00008600
L Q,TAPPL+4 PUT ARGS IN Q 00008610
TM TRACEIND,X'01' TEST FOR TRACING 00008620
BNO APPLYY NO, CALL APPLY 00008630
ST A,EVLSV SAVE EXPR ADR. 00008640
L A,TAPPL GET FUNCTION 00008650
SAVE A SAVE IT 00008660
TM 0(A),X'01' SHOULD IT BE TRACED 00008670
BNO NOTR5A NO 00008680
ST Q,PVARG SAVE ARGS IN I/O ROUTINE 00008690
BAL 2,PRARG WRITE FUNCTIONS AND ARGS. 00008700
L Q,TAPPL+4 RESTORE ARGS. 00008710
NOTR5A L A,EVLSV RESTORE EXPR ADR 00008720
BAL 2,APPLY CALL APPLY 00008730
UNSAVE M UNSAVE FUNCTION 00008740
TM 0(M),X'01' SHOULD IT BE TRACED 00008750
BNO RETURN NO 00008760
ST A,TAPPL SAVE VALUE 00008770
ST A,PVARG ALSO IN I/O ROUTINES 00008780
LR A,M PUT FUNCTION IN A 00008790
BAL 2,PRVAL WRITE FUNCTION AND VALUES 00008800
L A,TAPPL RESTORE VALUE RETURN 00008810
B RETURN 00008820
APNEXPR LA Q,SUBR TRY SUBR 00008830
L A,TAPPL 00008840
BAL 2,GET 00008850
CR A,NILR 00008860
BE APNSUBR NOT A SUBR 00008870
L Q,ALIST 00008880
SAVE Q 00008890
L Q,ARGS ITS A SUBR 00008900
ST Q,ALIST SET UP ALIST 00008910
LR 14,A ADDR OF SUBR 00008920
L A,TAPPL+4 00008930
BAL 2,SPREAD RETURNS ARG CNT IN REG 1 00008940
TM TRACEIND,X'01' TEST FOR TRACING 00008950
BNO EXSUBR NO 00008960
L M,TAPPL GET FUNCTION 00008970
SAVE M SAVE IT 00008980
TM 0(M),X'01' SHOULD IT BE TRACED 00008990
BNO NOTR6A NO 00009000
ST 14,EVLSV SAVE SUBR. ADR. 00009010
ST 1,EVLSV+4 SAVE ARG. CT. 00009020
STM A,Q,GARBT 00009030
L A,TAPPL+4 00009040
ST A,TAPPL SAVE ARGS 00009050
ST A,PVARG ALSO IN I/O ROUTINE 00009060
LR A,M PUT FUNCTION IN A 00009070
BAL 2,PRARG WRITE FUNCTION AND ARGS. 00009080
L 14,EVLSV RESTORE SUBR ADR. 00009090
L 1,EVLSV+4 RESTORE ARG CNT. 00009100
LM A,Q,GARBT 00009110
NOTR6A STC 1,*+5 00009120
CLI 0(14),X'00' 00009130
BE APNOERR 00009140
LM A,Q,TAPPL 00009150
BL SUBRER 00009160
B SUBRERO 00009170
APNOERR L 14,0(14) ROUTINE ADR. 00009180
BALR 2,14 00009190
UNSAVE M UNSAVE FUNCTION 00009200
UNSAVE Q 00009210
ST Q,ALIST 00009220
TM 0(M),X'01' SHOULD IT BE TRACED 00009230
BNO RETURN NO 00009240
ST A,TAPPL STORE VALUE 00009250
ST A,PVARG ALSO IN I/O ROUTINE 00009260
LR A,M PUT FUNCTION IN A 00009270
BAL 2,PRVAL WRITE FUNCTION AND VALUE 00009280
L A,TAPPL RESTORE VALUE 00009290
B RETURN 00009300
EXSUBR STC 1,*+5 00009310
CLI 0(14),X'00' 00009320
BE EXSUBRB 00009330
LM A,Q,TAPPL 00009340
BL SUBRER 00009350
SUBRERO ERROR ' *** F3-TOO FEW ARGUMENTS-SUBR' 00009360
SUBRER ERROR ' *** F2-TOO MANY ARGUMENTS-SUBR' 00009370
EXSUBRB L 14,0(14) ROUTINE ADR. 00009380
BALR 2,14 00009390
UNSAVE Q 00009400
ST Q,ALIST 00009410
B RETURN 00009420
* APPLY(CDR(SASSOC(FN,A,U)),ARGS,A) 00009430
APNSUBR L Q,ARGS 00009440
L A,TAPPL 00009450
LA 1,ERRA2 00009460
BAL 2,SASSOC 00009470
L A,CDR(A) 00009480
L Q,TAPPL+4 00009490
B APPLYY 00009500
APPNATM L 14,CAR(A) 00009510
LA 15,LABEL TRY LABEL 00009520
CR 14,15 00009530
BE APLBL A LABEL 00009540
LA 15,FUNARG TRY FUNARG 00009550
CR 14,15 00009560
BE APFUN YES 00009570
LA 15,LAMBDA TRY LAMBDA 00009580
CR 14,15 00009590
BE APLAM ITS LAMBDA 00009600
* APPLY(EVAL(FN,A),ARGS,A) 00009610
SAVE Q 00009620
L Q,ARGS ASSOC LIST 00009630
SAVE Q 00009640
BAL 2,EVAL 00009650
UNSAVE Q 00009660
ST Q,ARGS 00009670
UNSAVE Q 00009680
B APPLYY 00009690
* APPLY(CADDR(FN),ARGS,CONS(CONS(CADR(FN),CADDR(FN)),A)) 00009700
APLBL SAVE Q PROCESS LABEL 00009710
L Q,CDR(A) 00009720
L A,CAR(Q) CADR 00009730
L Q,CDR(Q) CDDR 00009740
L Q,CAR(Q) CADDR 00009750
SAVE Q 00009760
BAL 2,CONS 00009770
L Q,ARGS 00009780
BAL 2,CONS 00009790
ST A,ARGS 00009800
UNSAVE A CADDR 00009810
UNSAVE Q ARGS 00009820
B APPLYY 00009830
* APPLY(CADR(FN),ARGS,CADDR(FN)) 00009840
APFUN L A,CDR(A) 00009850
L 14,CDR(A) CDDR 00009860
L 14,CAR(14) CADDR 00009870
ST 14,ARGS 00009880
L A,CAR(A) CADR 00009890
B APPLYY 00009900
* EVAL(CADDR(FN),NCONC(PAIR(CADR(FN),ARGS),A)) 00009910
APLAM L A,CDR(A) LAMBDA 00009920
ST A,TAPPL 00009930
L A,CAR(A) CADR 00009940
BAL 2,PAIR 00009950
L Q,ARGS 00009960
BAL 2,NCONC 00009970
LR Q,A 00009980
L A,TAPPL 00009990
L A,CDR(A) 00010000
L A,CAR(A) 00010010
MVI PROGIND,0 SET OFF FOR LAMBDA EXPR 00010020
BAL 2,EVAL 00010030
B RETURN 00010040
ERRA2 ERROR ' *** A2-FUNCTION NOT DEFINED' 00010050
EJECT 00010060
*********************************************************************** 00010070
******************* EVCON(C,A) RECURSIVE ************************ 00010080
*********************************************************************** 00010090
EVCON SAVE 2 00010100
SAVE A EXTRA SAVE IN CASE OF COND ERROR 00010110
EVCONN CR A,NILR 00010120
BE EVERA3 00010130
C NILR,CAR(,A)
BE EVNIL SKIP NIL
* EVAL(CAAR(C),A) 00010140
O A,PROGIND SAVE PROGIND ALSO 00010150
SAVE A 00010160
SAVE Q 00010170
L A,CAR(,A)
L A,CAR(,A) CAAR
BAL 2,EVAL 00010200
LR M,A 00010210
UNSAVE Q 00010220
UNSAVE A 00010230
LR 1,A 00010240
SRL 1,24 00010250
STC 1,PROGIND 00010260
CR M,NILR 00010270
BNE EVCE 00010280
* EVCON(CDR(C),A) 00010290
EVNIL L A,CDR(,A)
B EVCONN 00010310
* EVAL(CADAR(C),A) 00010320
EVCE L A,CAR(A) 00010330
L A,CDR(A) CADR 00010340
L A,CAR(A) CADAR 00010350
BAL 2,EVAL 00010360
UNSAVE 1 EXTRA SAVE WASNT NEEDED 00010370
B RETURN 00010380
EVERA3 UNSAVE A PRINT ORIGINAL LIST 00010390
TM PROGIND,X'01' IF PROG ITS OK 00010400
BO RETURN 00010410
CONDER ERROR ' *** A3-NO ARGS OF COND TRUE' 00010420
EJECT 00010430
*********************************************************************** 00010440
******************* EVLIS(M,A) RECURSIVE *********************** 00010450
*********************************************************************** 00010460
EVLIS CR A,NILR NIL LIST 00010470
BE 0(2) 00010480
SAVE 2 00010490
LR 1,NILR 00010500
EVLISS SAVE A 00010510
SAVE Q 00010520
SAVE 1 00010530
L A,CAR(A) 00010540
BAL 2,EVAL 00010550
LR Q,NILR 00010560
BAL 2,CONS 00010570
LR Q,A 00010580
UNSAVE A 00010590
BAL 2,NCONC 00010600
LR 1,A 00010610
UNSAVE Q 00010620
UNSAVE A 00010630
L A,CDR(A) 00010640
CR A,NILR 00010650
BNE EVLISS 00010660
LR A,1 00010670
B RETURN 00010680
EJECT 00010690
*********************************************************************** 00010700
******************* GET(X,Y) NON REC ************************ 00010710
********************************************************************** 00010720
* SEARCH LIST X FOR ITEM Y, RETURN CAR OF REST OF LIST, ELSE NIL 00010730
GET CR A,NILR IS X NIL 00010740
BCR 8,2 YES, EXIT 00010750
C Q,CAR(,A) COMPARE Y TO CAR(X).
L A,CDR(,A)
BNE GET
L A,CAR(,A)
BR 2 00010800
EJECT 00010810
*********************************************************************** 00010820
******************* SASSOC(X,Y,U) NON REC ************************ 00010830
*********************************************************************** 00010840
* SEARCHES LIST Y OF DOTTED PAIRS FOR X IN CAR, RET PTR TO PAIR 00010850
* INTERNAL ENTRY POINT SASSOC - R1 IS ERROR MACRO ADDRESS 00010860
* LISP ENTRY POINT SASSOCC - U IS ERROR FUNCTION 00010870
INER DC X'00' INTERNAL CALL TO SASSOC 00010880
DBIND DC X'00' ON IF DEBUG TRACING 00010890
SASSOC MVI INER,X'01' 00010900
STM A,Q,ERSV IN CASE OF SASSOC ERROR 00010910
B SASSOCC+4 00010920
SASSOCC MVI INER,X'00' 00010930
LR M,Q 00010940
SASSOCS CR M,NILR 00010950
BE SASSER 00010960
LM Q,M,CAR(M) 00010970
C A,CAR(,Q)
BNE SASSOCS 00010990
LR A,Q 00011000
BR 2 00011010
SASSER TM INER,X'01' 00011020
BO SINER INTRNAL CALL 00011030
L A,ARGS 00011040
L Q,ALIST 00011050
ST Q,ARGS 00011060
LR Q,NILR 00011070
B APPLY 00011080
SINER LM A,Q,ERSV 00011090
BR 1 00011100
EJECT 00011110
*********************************************************************** 00011120
******************* PAIR(X,Y) NON REC ************************ 00011130
*********************************************************************** 00011140
* PAIR FORMS LIST ((XN YN)...(X1 Y1)) FROM LISTS X AND Y 00011150
TA EQU 14 POINTS AT X LIST 00011160
TQ EQU 15 POINTS AT Y LIST 00011170
PAIR STM A,Q,GARBT+4 IN CASE OF GARB COLLN 00011180
ST 2,PSV 00011190
LR TA,A 00011200
LR TQ,Q 00011210
LR M,NILR LINK OF NEW LIST 00011220
PAIRR CR TA,NILR 00011230
BE PANIL END OF X LIST 00011240
CR TQ,NILR 00011250
BE PQNIL END OF Y LIST 00011260
L A,CAR(TA) 00011270
L Q,CAR(TQ) 00011280
BAL 2,CONS (XN.YN) 00011290
LR Q,M LAST LINK IN LIST 00011300
BAL 2,CONS ADD TO LIST 00011310
LR M,A 00011320
L TA,CDR(TA) 00011330
L TQ,CDR(TQ) 00011340
B PAIRR 00011350
PANIL L 2,PSV 00011360
CR TQ,NILR 00011370
BE 0(2) BOTH A AND Q NIL 00011380
LM A,Q,GARBT+4 00011390
ERROR ' *** F2-TOO MANY ARGUMENTS-EXPR' 00011400
PQNIL LM A,Q,GARBT+4 00011410
ERROR ' *** F3-TOO FEW ARGUMENTS-EXPR' 00011420
EJECT 00011430
*********************************************************************** 00011440
******************* APPEND(X,Y) NON REC ******************$$$ 00011450
********************************************************************** 00011460
* FORM LIST (X Y) FROM LISTS X AND Y 00011470
* NCONC(COPY(X),Y) 00011480
APT DC F'0' 00011490
APPEND ST 2,APT 00011500
APPEND2 EQU * 00011510
CR A,NILR A NIL 00011520
BE APXNIL YES 00011530
ST Q,GARBT HOLD Q 00011540
LM A,Q,CAR(A) MAKE NEW X LIST 00011550
BAL 2,CONS 00011560
LR M,A SAVE NEW LIST 00011570
APAGN CR Q,NILR AT END 00011580
BE APDN YES 00011590
LR 1,A HOLD A A SEC 00011600
LM A,Q,CAR(Q) NEXT CELL 00011610
BAL 2,CONS 00011620
ST A,CDR(1) LINK IT 00011630
B APAGN 00011640
APDN L Q,GARBT 00011650
ST Q,CDR(A) LINK ON Y 00011660
LR A,M 00011670
B EPX 00011680
APXNIL LR A,Q RETURN Y 00011690
EPX L 2,APT 00011700
BR 2 00011710
******************* APPEND1(X,Y) ** SUBR ************************* 00011720
* NCONC(X,CONS(Y,NIL)) 00011730
APPEND1 LR 1,2 00011740
LR M,A 00011750
LR A,Q 00011760
LR Q,NILR 00011770
BAL 2,CONS 00011780
LR Q,A 00011790
LR A,M 00011800
LR 2,1 00011810
B NCONC 00011820
EJECT 00011830
*********************************************************************** 00011840
******************* SPREAD(X) NON REC ***************** 00011850
********************************************************************** 00011860
* PUTS ELEMENTS OF LIST X INTO ARG CELLS. 00011870
* REG1 RETURNS NUMBER OF ARGUMENTS FOUND, MAX IS 22. 00011880
SPREAD SR 1,1 ZERO THE ARGUMENT COUNT.
CR A,NILR IS LIST EMPTY?
BER 2 YES -- RETURN NIL.
LR 0,A SAVE X, IN CASE OF ERROR.
LM A,Q,CAR(A) GET 1ST ARG.
LA 1,1(,1) COUNT IT.
CR Q,NILR JUST ONE ARG?
BER 2 YES -- RETURN.
LM Q,M,CAR(Q) NO; GET 2ND ARG.
LA 1,1(,1) COUNT IT.
CR M,NILR ANY MORE ARGS?
BER 2 NO -- RETURN.
SLA 1,2
SPRNXT C 1,=F'88' MORE THAN 22 ARGS?
BNL SPERR YES -- ERROR.
L 15,CAR(,M) GET NEXT ARG.
ST 15,ARGS-8(1) STORE IT.
L M,CDR(,M)
AR 1,K4 INCREMENT INDEX.
CR M,NILR ANY MORE ON LIST?
BNE SPRNXT YES.
SRA 1,2 NO; CONVERT INDEX TO COUNT.
BR 2 RETURN.
SPERR LR A,0 RESTORE X.
ERROR ' *** A7-MORE THAN 22 ARGS' 00012140
EJECT 00012150
*********************************************************************** 00012160
******************* NCONC(X,Y) NON REC ************************** 00012170
*********************************************************************** 00012180
* JOINS LIST X TO LIST Y 00012190
NCONC LR 1,A 00012200
CR A,NILR 00012210
BNE NCA 00012220
LR A,Q 00012230
BR 2 00012240
NCC L 1,CDR(,1)
NCA C NILR,CDR(,1)
BNE NCC 00012270
ST Q,CDR(1) 00012280
BR 2 00012290
*********************************************************************** 00012300
******************* ATTRIB(X,E) NON REC ************************* 00012310
*********************************************************************** 00012320
* PUTS LIST E ON END OF LIST X, RETURNS E 00012330
ATTRIB ST Q,GARBT 00012340
LR 15,2 00012350
BAL 2,NCONC 00012360
L A,GARBT 00012370
BR 15 00012380
EJECT 00012390
*********************************************************************** 00012400
******************* PROG((X1,X2,...),A) REC ********************* 00012410
*********************************************************************** 00012420
PROGIND DC F'0' PROG SWITCH 00012430
PROG SAVE 2 00012440
ST A,PROGT HOLD PRGM 00012450
SAVE A SAVE IT WHILE WE EVALUATE IT 00012460
ST NILR,GOLIST 00012470
* PUT PROG VARIABLES ON ALIST 00012480
ST Q,ALIST 00012490
L A,CAR(A) 00012500
PROGV CR A,NILR AT NIL 00012510
BE PROGA YES 00012520
LR M,A SAVE A 00012530
L A,CAR(A) VARIABLE 00012540
LR Q,NILR 00012550
BAL 2,CONS PAIR IT TO NIL 00012560
L Q,ALIST 00012570
BAL 2,CONS ADD TO ALIST 00012580
ST A,ALIST 00012590
L A,CDR(M) NEXT VAR 00012600
B PROGV 00012610
PROGA L A,PROGT 00012620
* BUILD GOLIST 00012630
PROGL L M,CDR(A) 00012640
CR M,NILR END OF PROG 00012650
BE PROGE YES 00012660
L A,CAR(M) TRY FOR LABEL 00012670
TM CAR(A),ATOM LABEL 00012680
BO PROGY YES 00012690
LR A,M RESET A 00012700
B PROGL TRY AGAIN 00012710
PROGY L Q,CDR(M) ADDR OF PGM STMT 00012720
BAL 2,CONS 00012730
L Q,GOLIST 00012740
BAL 2,CONS LINK INTO GOLIST 00012750
ST A,GOLIST 00012760
LR A,M RESET A 00012770
B PROGL FIND NEXT LABEL 00012780
* BEGIN EXECUTION OF PROG 00012790
PROGE L Q,PROGT START OF PROGM 00012800
PROGEX L Q,CDR(Q) FIRST STMT 00012810
CR Q,NILR AT END 00012820
LR A,NILR 00012830
BE PEX END OF PROG LIST 00012840
L A,CAR(Q) -A- HAS PTR TO STMT 00012850
TM CAR(A),ATOM IS NEXT PGM STMT A LABEL 00012860
BO PROGEX YES SKIP OVER IT 00012870
MVI PROGIND,X'01' SET IND ON 00012880
SAVE Q SAVE PTR TO REST OF PGM 00012890
L Q,GOLIST 00012900
SAVE Q SAVE GOLIST 00012910
L Q,ALIST 00012920
SAVE Q SAVE ALIST 00012930
BAL 2,EVAL EVAL STMT 00012940
* NOTE AT THIS POINT (PROGR) IS ADDR IN STACK- USED IN GO & RET 00012950
PROGR UNSAVE Q 00012960
ST Q,ALIST 00012970
UNSAVE Q 00012980
ST Q,GOLIST 00012990
UNSAVE Q REST OF PGM 00013000
B PROGEX NEXT STMT 00013010
EJECT 00013020
SPECBIND ST 3,PVARG 00013030
DROP 3 00013040
LA 3,BASE3 00013050
USING BASE3,3 00013060
B SPECBIN1 00013070
SPECRSTR ST 3,PVARG 00013080
DROP 3 00013090
LA 3,BASE3 00013100
USING BASE3,3 00013110
B SPECRST1 00013120
* ==================================================================== 00013130
* ====== END OF BASE 11 SECTION ==================================== 00013140
EJECT 00013150
* ==================================================================== 00013160
* ====== BEGINNING OF BASE 12 SECTION ============================== 00013170
* ====== THE INSTRUCTIONS AND CONSTANTS IN THE BEGINNING =========== 00013180
* ====== OF THIS SECTION ARE USED BY LAPASSEMBLED PROGRAMS ===== 00013190
* ====== THEIR POSITION RELATIVE TO THE BEGGINNING OF THIS ===== 00013200
* ====== SECTION IS FIXED AND MUST NOT BE CHANGED ============== 00013210
CNOP 0,4 00013220
BASE12 EQU * 00013230
B ERG2 0(12) 00013240
B CALL 4(12) 00013250
DC A(ARGS) 8(12) 00013260
DC A(BOTTOM) 12(12) 00013270
B LSTCMP 16(12) 00013280
B SPECBIND 20(12) 00013290
B SPECRSTR 24(12) 00013300
B CONDER 28(12) 00013310
B FUNCTIO2 32(12) 00013320
B EVAL 36(12) 00013330
B COMBIND 40(12) 00013340
B COMRSTR 44(12) 00013350
B RTRN 48(12) 00013360
B MOVIT 52(12) 00013370
B LINK 56(12) 00013380
EJECT 00013390
*********************************************************************** 00013400
********* CALL ******************************************************** 00013410
*********************************************************************** 00013420
CALL SAVE 3 00013430
DROP 3 00013440
LA 3,BASE3 RESET BASE 3 00013450
USING BASE3,3 00013460
SAVE 15 00013470
SAVE 2 00013480
L 1,0(0,2) 00013490
BAL 2,0(NILR,1) 00013500
CALLEXIT UNSAVE 2 00013510
UNSAVE 15 00013520
UNSAVE 3 00013530
B 8(2) 00013540
LINK SAVE 3 00013550
SAVE 15 00013560
SAVE 2 00013570
DROP 3 00013580
LA 3,BASE3 00013590
USING BASE3,3 00013600
B LINK1 00013610
MOVIT ST 3,PVARG 00013620
DROP 3 00013630
LA 3,BASE3 00013640
USING BASE3,3 00013650
B MOVIT1 00013660
FUNCTIO2 STM 2,3,PVARG 00013670
DROP 3 00013680
LA 3,BASE3 00013690
USING BASE3,3 00013700
BAL 2,FUNCTIO1 00013710
LM 2,3,PVARG 00013720
BR 2 00013730
COMBIND ST 3,PVARG 00013740
DROP 3 00013750
LA 3,BASE3 00013760
USING BASE3,3 00013770
B COMBIND1 00013780
COMRSTR ST 3,PVARG 00013790
DROP 3 00013800
LA 3,BASE3 00013810
USING BASE3,3 00013820
B COMRSTR1 00013830
LSTCMP ST 3,PVARG 00013840
DROP 3 00013850
LA 3,BASE3 00013860
USING BASE3,3 00013870
B LSTCMP1 00013880
EJECT 00013890
*********************************************************************** 00013900
******************* GO(X) FSUBR ******************************* 00013910
*********************************************************************** 00013920
ERA6 ERROR ' ***A6-UNDEF LABEL IN GO' 00013930
GO LA 1,PROGR 00013940
GOL UNSAVE 15 SCAN DOWN STACK FOR EVAL 00013950
LA 15,0(,15) STRIP OFF BITS FOR COMPARE 00013960
CR 15,1 00013970
BNE GOL R14 HAS RET ADDR -DONT LOSE IT 00013980
UNSAVE Q ALIST 00013990
ST Q,ALIST 00014000
UNSAVE Q 00014010
ST Q,GOLIST 00014020
UNSAVE M REST OF PGM, NOT NEEDED 00014030
L A,CAR(A) CAR(X) 00014040
LA 1,ERA6 00014050
BAL 2,SASSOC FIND ON ASSOC LIST 00014060
LR Q,A
B PROGEX
*********************************************************************** 00014200
******************* RETURN(X) ** SUBR ********************* 00014210
*********************************************************************** 00014220
GORET LA 1,PROGR 00014230
GORR UNSAVE Q 00014240
LA Q,0(,Q) STRIP BITS 00014250
CR 1,Q 00014260
BNE GORR 00014270
UNSAVE Q ALIST 00014280
UNSAVE Q GOLIST 00014290
UNSAVE Q PGM 00014300
PEX UNSAVE Q PROG 00014310
MVI PROGIND,0 00014320
B RETURN EXIT FROM PROG 00014330
EJECT 00014340
*********************************************************************** 00014350
********* READCH(X) SUBR ******************************************* 00014360
*********************************************************************** 00014370
* READCH GIVES CHROBJ READ IF ARGUMENT IS NIL, OTHERWISE 00014380
* READCH WILL BACKSPACE: BACKSPACE MUST BE DONE ONLY ONCE AT 00014390
* A TIME, AND ONLY AFTER READCH HAVE BEEN EXECUTED 00014400
BACKSPAC DC X'00' 00014410
READCHTP DC 2F'0' 00014420
LASTREAD DC A(BLANK,BLANK) 00014430
READCH CR A,NILR IF ARG IS TRUE READCH SHOULD 00014440
* BACKSPACE 00014450
BE READCH1 OTHERWISE PICK NEXT CAR 00014460
OI BACKSPAC,X'01' SET BACKSPACE MARKER 00014470
L A,LASTREAD VALUE IS CHR JUST IN FRONT 00014480
* OF CHAR JUST READ 00014490
BR 2 00014500
READCH1 L A,LASTREAD+4 PICK UP CHROBJ JUST READ 00014510
TM BACKSPAC,X'01' IS BACKSPACE MARKER SET 00014520
BO READCH2 YES 00014530
ST A,LASTREAD OTHERWISE REMEMBER CHROBJ 00014540
* JUST READ 00014550
TM EOFIND,X'FF' END-OF-FILE FLAG ON?
BZ *+14 NO.
LA A,ATEOF YES; GIVE EOF ATOM.
ST A,LASTREAD+4
BR 2
STM 2,3,READCHTP STORE R2 AND R3 = CHAR 00014560
L CHAR,LASTCHAR 00014570
OI READCHID,X'01' SAY IS READCH FOR EOF PROCESSOR
LTR CHAR,CHAR IS THERE A CHARACTER YET?
BNZ *+8 YES.
BAL 2,GETCD NO; START AN INPUT RECORD.
IC Q,0(CHAR) 00014580
N Q,=X'0000003F' 00014590
M A,=F'24' 00014600
LA A,CHROBJ(Q) 00014610
ST A,LASTREAD+4 00014620
BAL 2,GETCHAR PICK UP NEXT CHAR 00014640
READCH3 NI READCHID,X'00'
ST CHAR,LASTCHAR 00014660
LM 2,3,READCHTP 00014670
BR 2 00014680
READCH2 NI BACKSPAC,X'00' 00014690
BR 2 00014700
EJECT 00014710
*********************************************************************** 00014720
********* FIX SUBR NON RECURS ************************************* 00014730
*********************************************************************** 00014740
* FIX MAKES AN INTEGER OUT OF A FLOATING POINT NUMBER 00014750
* RETURNS INTEGER 0 IF ALL SIGNIFICANCE IS LOST 00014760
FIXIT SWR 0,0
L A,CAR(,A)
LE 0,CAR(,A) GET FLOATING-POINT VALUE.
AW 0,NZERO TAKE THE INTEGER PART.
STD 0,STORE STORE IT.
L A,STORE+4 TAKE THE LOW-ORDER PART.
BNM *+6 SKIP IF NOT NEGATIVE.
LCR A,A COMPLEMENT NEGATIVE VALUES.
LR 14,2
B MKFXAT MAKE A FIXED ATOM.
STORE DC D'0' 00015030
*********************************************************************** 00015040
********* EXPLODE SUBR NON RECURS ******************************* 00015050
*********************************************************************** 00015060
* EXPLODE MAKES A LIST OF CHAR IN ATOM'S PRINTNAME 00015070
EXPLODE ST 2,PVARG 00015080
ST NILR,GARBT 00015090
L 15,CAR(A) 00015100
EXPL2 SR 14,14 00015110
EXPL1 SR Q,Q 00015120
SR M,M 00015130
IC Q,CAR(14,15) 00015140
CR Q,M 00015150
BE EXPLEXIT 00015160
N Q,=X'0000003F' 00015170
M A,=F'24' 00015180
LA Q,CHROBJ(Q) 00015190
L A,GARBT 00015200
BAL 2,APPEND1 00015210
ST A,GARBT 00015220
LA 14,1(0,14) 00015230
CR 14,K4 00015240
BL EXPL1 00015250
EXPLODE1 L 15,CDR(15) 00015260
LA 15,0(0,15) 00015270
CR 15,NILR 00015280
BNE EXPL2 00015290
EXPLEXIT L 2,PVARG 00015300
L A,GARBT 00015310
BR 2 00015320
*********************************************************************** 00015330
********* GENSYM SUBR NON RECURS ********************************* 00015340
*********************************************************************** 00015350
GENSYMBL DC C'0000' 00015360
GENSYMSK DC XL6'21202020202020' 00015370
GENSYMNR DC F'0' 00015380
GENSYM ST 2,PVARG 00015390
L Q,GENSYMNR 00015400
AH Q,=H'1' 00015410
ST Q,GENSYMNR 00015420
CVD Q,GARBTM2 00015430
MVC NEWGENSM(8),GENSYMSK-3 00015440
ED NEWGENSM(8),GARBTM2+5 00015450
SR 1,1 00015460
SR M,M 00015470
SR Q,Q 00015480
MVC NEWGENSM(4),GENSYMBL 00015490
L A,CAR(A) 00015500
GENSYM2 IC Q,CAR(1,A) PICK UP CHAR 00015510
CR Q,M IS IT BLANK 00015520
BE GENSYM1 00015530
STC Q,NEWGENSM(1) 00015540
LA 1,1(0,1) 00015550
CR 1,K4 00015560
BL GENSYM2 00015570
GENSYM1 L A,NEWGENSM+4 00015580
LR Q,NILR 00015590
BAL 2,CONS 00015600
LR Q,A 00015610
MVI CDR(A),FWD 00015620
L A,NEWGENSM 00015630
BAL 2,CONS 00015640
MVI CDR(A),FWD 00015650
LR Q,NILR 00015660
BAL 2,CONS 00015670
MVI CAR(A),ATOM 00015680
L 2,PVARG 00015690
BR 2 00015700
EJECT 00015710
********************************************************************** 00015720
********* PRARG *** PRVAL ******************************************* 00015730
*********************************************************************** 00015740
PRARG STM 2,3,PVARG+4 STORE 2 AND 3 00015750
MVC LINE(18),TROUT1 SET UP TO WRITE FUNCTION 00015760
LA P,LINE+18 00015770
BAL 2,PUTATOM 00015780
BAL 2,WRLINE WRITE FUNCTION 00015790
L A,PVARG SET UP TO WRITE ARGUMENTS 00015800
BAL 2,PRINT WRITE ARGUMENTS 00015810
LM 2,3,PVARG+4 00015820
BR 2 RETURN 00015830
TROUT1 DC C'0*** ARGUMENTS OF ' 00015840
TROUT2 DC C'0*** VALUE OF ' 00015850
PVARG DC 3F'0' 00015860
PRVAL STM 2,3,PVARG+4 00015870
MVC LINE(14),TROUT2 00015880
LA P,LINE+14 00015890
BAL 2,PUTATOM 00015900
BAL 2,WRLINE 00015910
L A,PVARG 00015920
BAL 2,PRINT 00015930
LM 2,3,PVARG+4 RESTORE 2 AND 3 00015940
BR 2 00015950
*********************************************************************** 00015960
********** ORDERP ************************************************** 00015970
*********************************************************************** 00015980
ORDERP CR A,Q COMPARE ARG1 TO ARG2 00015990
BNH ORDERT 00016000
LR A,NILR ARG1 CHKPOINT UNDEFINED.
LA Q,APVAL 00030720
BAL 2,GET 00030730
CR A,NILR 00030740
BNE RELOCATE 00030750
L A,PUNCHOPN+4 00030760
SR Q,Q 00030770
ERROR ' *** D5-CHKPOINT FILE NOT OPENED' 00030780
RELOCATE L A,CAR(A) 00030790
L M,CAR(A) M NOW CONTAINS DCB ADDRESS 00030800
L A,PUNCHOPN+4 00030810
BAL 2,REMPROP REMOVE APVAL FROM CHKPOINTDDNAME 00030820
LR A,M 00030830
L M,BPSSTART 00030840
SR M,NILR 00030850
ST M,CHKREG+4 00030860
LR M,FREE 00030870
SR M,NILR 00030880
ST M,CHKREG 00030890
PUT (A),CHKPCHK 00030900
STM 14,12,12(13)
BAL 15,MARK MARK A-L UNUSED CELLS
LM 14,12,12(13)
* NOW ALL THE USED CELLS WILL HAVE BIT 32 TURNED ON
LA Q,CARDOUT Q POINTS TO LOCATION ON THE CARD
LR M,NILR M POINTS TO LOCATION IN LISTS
CHOVER DS 0H
TM 4(M),X'80' IS THE ELEMENT MARKED
BO CHOK YES THEN HANDLE IT NORMALLY
LA 1,1 IF NOT THEN WE COUNT THE NUMBER
* OF CONTINGUOUS FREE ELEMENTS, SO
* THAT WE MAY COMPRESS THEN INTO ONE
CHINK C M,BOTTOM END OF THE LISTS?
BNL CHSTORE YES, THAT'S ALL
TM 12(M),X'80' IS THE NEXT ONE MARKES
BO CHSTORE IF SO, END IT
LA 1,1(,1) IF NOT, COUNT
LA M,8(,M) NEXT
B CHINK
CHSTORE SR 2,2
BCTR 2,0 PUT ALL 'F'S IN CDR
STM 1,2,0(Q) STORE THE COUNT
B CHQ
*
CHOK LM 14,15,0(M) GET CAR AND CDR
CLI 4(M),FWD+X'80' IS THE CSR RELOCATABLE
BE CHNOREL NO
SR 14,NILR RELOCATE CAR
CHNOREL SR 15,NILR RELOCATE CDR
STM 14,15,0(Q) STORE IN CARD
CHQ LA Q,8(,Q) INCREMENT CARD
C Q,=A(CARDOUT+80)
BL CHM
PUT (A),CARDOUT
LA Q,CARDOUT RESET Q
CHM LA M,8(,M) INCREMENT M
C M,BOTTOM
BNH CHOVER LOOP IF LOW
LA M,CARDOUT * WE WANT TO SEE IF WE NEED TO
CR Q,M * FLUSH THE BUFFER
BE CHOUT NO
PUT (A),CARDOUT YES
*
* NOW WE DUMP BPS
CHBL EQU 80
CHOUT L M,=A(BPSST)
C M,BPSSTART THIS HAS THE UPPER LIMIT OF BPS USED
BH CHALL
PUT (A),(M)
LA M,CHBL(,M)
B CHOUT+4
CHALL LA FREE,1 PRETEND WE HIT THE END
BAL 14,GARBCOLL COLLECT THE GARBAGE AND TURN BITS OF
LR M,A
B CLOSE2 DROP THE FILE
*********************************************************************** 00031190
********* RESTORE ************************************************** 00031200
*********************************************************************** 00031210
RESTORE ST 2,PUNCHOPN+8 00031220
ST A,PUNCHOPN+4 00031230
LA Q,APVAL 00031240
BAL 2,GET 00031250
CR A,NILR 00031260
BNE RELOC 00031270
L A,PUNCHOPN+4 00031280
SR Q,Q 00031290
ERROR ' *** D6-RESTORE FILE NOT OPENED' 00031300
RELOC L A,CAR(A) 00031310
L A,CAR(A) A NOW CONTAINS DCB ADDRESS 00031320
GET (A) 00031330
CLC CHKPCHK(8),0(1) 00031340
BE RELOCOK 00031350
L A,PUNCHOPN+4 00031360
SR Q,Q 00031370
ERROR ' *** D7-RESTORE GIVEN FILE INCOMPATIBLE WITH SYSTEMC00031380
SPECIFIED' 00031390
RELOCOK LR Q,1
L 1,STORBLKS RELEASE DYNAMIC BLOCKS.
L M,CELLCNT
RELST1 LTR 1,1 ANY MORE BLOCKS?
BZ RELST2 NO.
L 2,0(,1) YES; GET NEXT NOW.
SR 0,0 FREE ALL THIS ONE.
L 15,=V(FREESPAC)
BASR 14,15
S M,=A((SBLKSIZ-8)/8) REDUCE CELL COUNT.
LR 1,2 TRY THE NEXT.
B RELST1
RELST2 ST 1,STORBLKS RESET BLOCKS POINTER.
ST M,CELLCNT RESET CELL COUNT.
L 1,HASHTBL RELEASE THE HASH TBL
LTR 1,1 IF ANY
BZ RELST3 NONE
SR 0,0
ST 0,HASHTBL NONE NOW
L 15,=V(FREESPAC)
BASR 14,15
RELST3 LR 1,Q
L M,12(,1)
AR M,NILR 00031410
ST M,BPSSTART 00031420
LR M,NILR 00031430
L FREE,8(1) 00031440
AR FREE,NILR 00031450
LR Q,NILR POINT TO START OF LISTA
L M,=F'-1' -1 MEANS FREE STUFF
REGET GET (A) RETURNS ADDR IN REG 1
LA 2,80(0,1) POINTS TO END OF CARD
RELOOK LM 14,15,0(1) GET CAR AND CDR
CR 15,M IS IT FREE LIST
BNE REREL NO, GO RELOCATE IT
SLA 14,3 LEAVE THE SPACE (ELS X 8)
AR Q,14 ADD IT TO THE CORE POINTER
B RELOOP
REREL CLI 4(1),FWD+X'80' IS IT RELOCATABLE
BE RENOREL NO, GO
AR 14,NILR RELOCATE THE CAR
RENOREL AR 15,NILR REL. CDR
STM 14,15,0(Q) STORE INTO CORE
LA Q,8(,Q) NEXT PLEASE
RELOOP C Q,BOTTOM TEST FOR END
BH REOUT
LA 1,8(,1) INCREMENT POINTER TO THE CARD
CR 1,2 OFF THE END?
BL RELOOK
B REGET
*
REOUT L M,=A(BPSST) START OF BPS
RENEXT GET (A)
MVC 0(CHBL,M),0(1) MOVE PROGRAM INTO CORE
LA M,CHBL(,M) INCREMENT
C M,BPSSTART
BL RENEXT IF LOW DO IT AGAIN
*
RESTORX SR M,M 00031700
LA 2,GARBT
L 1,PUSHA
BCTR 1,0
LR 0,K4 00031730
ZEROTEMP ST M,0(2) 00031740
BXLE 2,0,ZEROTEMP 00031750
LA FREE,1 TURN OFF THE FUNNY BITS
BAL 14,GARBCOLL AND BUILD A FREE LIST
LR M,A 00031760
ST NILR,PUNCHOPN+4 00031770
B CLOSE2 00031780
*********************************************************************** 00031790
********* CLOSE ***************************************************** 00031800
*********************************************************************** 00031810
PUNCHOPN DC 3F'0' 00031820
CLOSE LA 0,LISPIN 00031830
CR A,0 00031840
BCR 8,2 00031850
LA 0,LISPOUT 00031860
CR A,0 00031870
BCR 8,2 00031880
ST A,PUNCHOPN+4 00031890
ST 2,PUNCHOPN+8 00031900
LA 0,LISPUNCH 00031910
CR A,0 00031920
BNE CLOSUSFL 00031930
L M,PUNCHOPN 00031940
LTR M,M 00031950
BZ CLOSEERR 00031960
SR 0,0 00031970
ST 0,PUNCHOPN 00031980
B CLOSE2 00031990
CLOSUSFL LA Q,APVAL 00032000
BAL 2,GET 00032010
CR A,NILR 00032020
BE CLOSEERR 00032030
CLOSE1 L M,CAR(A) 00032040
L M,CAR(M) 00032050
L A,PUNCHOPN+4 00032060
BAL 2,REMPROP 00032070
CLOSE2 LR 1,M UOM
CLOSE , CLOSE PRINTCB UOM
CLOSEERR LM A,Q,PUNCHOPN+4 00032160
BR Q 00032170
*********************************************************************** 00032180
********* VERBOS *************************************************** 00032190
*********************************************************************** 00032200
**** ARG=T PRINTS IN GARB. COL....ARG=NIL NO PRINT ON GARB. COL. 00032210
PRBUFFER LA 1,BUFFPR 00032220
B COMSECT 00032230
VERBOS LA 1,GARBSW 00032240
COMSECT NI 0(1),X'00' 00032250
CR A,NILR 00032260
BCR 8,2 00032270
OI 0(1),X'01' 00032280
BR 2 00032290
*********************************************************************** 00032300
********* FLOAT SUBR NON REC ************************************** 00032310
*********************************************************************** 00032320
* FLOAT CONVERTS INTEGER INTO FLOATING POINT *********************** 00032330
FLOATIT LR 14,2 00032340
L A,CAR(A) 00032350
L 1,CAR(A) NUMBER INTO R1 00032360
BAL 2,FLOAT1 FLOAT IT 00032370
B MKFLAT MAKE ATOM 00032380
*********************************************************************** 00032390
******************* EQ(X,Y) NON REC ************************ 00032400
********************************************************************** 00032410
* RETURN TRUE IF X=Y 00032420
EQ CR A,Q ARE THEY EQUAL 00032430
LR A,NILR NO MAYBE 00032440
BNE 0(2) THEY ARENT 00032450
LA A,T TRUE 00032460
BR 2 00032470
*********************************************************************** 00032480
******************* REPLACA(X,Y) NON REC *********************** 00032490
********************************************************************** 00032500
* REPLACE CAR OF X BY Y 00032510
RPLACA IC 1,CAR(A) 00032520
ST Q,CAR(A) 00032530
STC 1,CAR(A) 00032540
BR 2 00032550
*********************************************************************** 00032560
******************* REPLACD(X,Y) NON REC *********************** 00032570
********************************************************************** 00032580
* REPLACE CDR OF X BY Y 00032590
RPLACD IC 1,CDR(A) 00032600
ST Q,CDR(A) 00032610
STC 1,CDR(A) 00032620
BR 2 00032630
*********************************************************************** 00032640
******************* NULL(X) NON REC ************************* 00032650
********************************************************************** 00032660
* RETURN TRUE IF X IS NIL 00032670
NULL CR A,NILR IS IT NIL 00032680
LR A,NILR IS NOW 00032690
BNE 0(2) IT WASNT, FALSE RETURN 00032700
LA A,T IT WAS 00032710
BR 2 00032720
*********************************************************************** 00032730
******************* FUNCTION(X) NON REC FSUBR ****************** 00032740
*********************************************************************** 00032750
FUNCTIO1 ST A,RESAV 00032760
LA A,RESAV 00032770
FUNCTION LR 14,2 SAVE RET 00032780
LR M,A SAVE A 00032790
LR A,Q ALIST 00032800
LR Q,NILR 00032810
BAL 2,CONS 00032820
LR Q,A 00032830
L A,CAR(M) 00032840
BAL 2,CONS 00032850
LR Q,A 00032860
LA A,FUNARG 00032870
BAL 2,CONS 00032880
BR 14 EXIT 00032890
EJECT 00032900
*********************************************************************** 00032910
********* SPECBIND ENTRY FROM COMPILER *************************** 00032920
*********************************************************************** 00032930
SPECBIN1 L A,0(2) 00032940
AR A,NILR 00032950
L 14,CAR(A) 00032960
L M,4(2) 00032970
L Q,0(M,PDL) 00032980
ST 14,0(M,PDL) 00032990
ST Q,0(A) 00033000
LA 2,8(0,2) 00033010
BCT 1,SPECBIN1 00033020
L 3,PVARG 00033030
BR 2 00033040
*********************************************************************** 00033050
********* SPECRSTR ENTRY FROM COMPILER *************************** 00033060
*********************************************************************** 00033070
SPECRST1 L A,0(2) 00033080
AR A,NILR 00033090
L M,4(2) 00033100
L 14,0(M,PDL) 00033110
ST 14,0(A) 00033120
LA 2,8(0,2) 00033130
BCT 1,SPECRST1 00033140
L 3,PVARG 00033150
BR 2 00033160
*********************************************************************** 00033170
********* COMBIND ENTRY FROM COMPILER *************************** 00033180
*********************************************************************** 00033190
COMBIND1 ST 2,RESAV 00033200
LR 0,15 00033210
BAL 2,PAIR 00033220
LR 15,0 00033230
L Q,ALIST 00033240
BAL 2,NCONC 00033250
ST A,ALIST 00033260
L 2,RESAV 00033270
L 3,PVARG 00033280
BR 2 00033290
*********************************************************************** 00033300
********* COMBRSTR ENTRY FROM COMPILER *************************** 00033310
*********************************************************************** 00033320
COMRSTR1 L A,CAR(A) 00033330
L Q,CAR(A) 00033340
L A,ALIST 00033350
COMLOP L A,CDR(A) 00033360
BCT Q,COMLOP 00033370
ST A,ALIST 00033380
L 3,PVARG 00033390
BR 2 00033400
*********************************************************************** 00033410
*********MOVIT ENTERED FROM COMPILER ******************************* 00033420
*********************************************************************** 00033430
MOVIT1 CR PDS,NILR 00033440
BH ERG2 00033450
ST NILR,0(0,PDL) 00033460
ST A,4(0,PDL) 00033470
ST Q,8(0,PDL) 00033480
SR M,K4 00033490
CR M,K4 00033500
BNH MOVOUT 00033510
SR M,K4 00033520
BCTR M,0 00033530
STC M,MOVINST+1 00033540
MOVINST MVC 12(1,PDL),ARGS 00033550
MOVOUT L 3,PVARG 00033560
BR 2 00033570
*********************************************************************** 00033580
*********LSTCMP ENTERED FROM COMPILER ******************************* 00033590
*********************************************************************** 00033600
LSTCMP1 LR 14,0 00033610
BCTR 14,0 00033620
SLL 14,2 00033630
AR 14,2 00033640
LA 1,4(0,14) 00033650
LR Q,NILR 00033660
SR 2,2 00033670
LSTLOP SR A,A 00033680
SR M,M 00033690
L 3,PVARG 00033700
EX 0,0(14) 00033710
DROP 3 00033720
LA 3,BASE3 00033730
USING BASE3,3 00033740
LTR A,A 00033750
BNE LSTA 00033760
LTR M,M 00033770
BNE LSTASPEC 00033780
AR 2,NILR 00033790
LR A,2 00033800
B LSTA 00033810
LSTASPEC L A,0(M,NILR) 00033820
LSTA BAL 2,CONS 00033830
LR Q,A 00033840
SR 14,K4 00033850
BCT 0,LSTLOP 00033860
L 3,PVARG 00033870
BR 1 00033880
*********************************************************************** 00033890
********* LINK ****************************************************** 00033900
********* LINK ESTABLISHES LINKAGES FOR THE COMPILER **************** 00033910
********* LINK WILL ALSO MAKE A FAST CALL WHENEVER POSSIBLE ******** 00033920
********* BY CHANGING THE CODE IN THE FUNCTION THAT LINKED ***** 00033930
*********************************************************************** 00033940
LINKSAVE DC 2F'0' 00033950
ASUBR DC A(SUBR) 00033960
AFSUBR DC A(FSUBR) 00033970
AEXPR DC A(EXPR) 00033980
AFEXPR DC A(FEXPR) 00033990
LINK1 L 1,0(0,2) PICK UP FN NAME IN A 00034000
AR 1,NILR 00034010
LR 15,1 SET UP TO SEARCH PROPERTYLIST 00034020
LINKGET L 15,CDR(15) 00034030
CR 15,NILR 00034040
BE NOPROPRT FN IS NOT DEFINED BY PROPERTY 00034050
L 0,CAR(15) 00034060
C 0,ASUBR 00034070
BE SUBRLINK 00034080
C 0,AFSUBR 00034090
BE SUBRLINK 00034100
C 0,AEXPR 00034110
BE EXPRLINK 00034120
C 0,AFEXPR 00034130
BNE LINKGET 00034140
EXPRLINK L 15,CDR(15) PICK UP LAMBDA DEF. 00034150
L 15,CAR(15) OF EXPR OR FEXPR 00034160
FNALIST L 0,4(0,2) PICK UP NO. OF ARGS IN R0 00034170
BAL 2,LISTARG LIST ARGS 00034180
TM 0(1),X'01' SHOULD FN BE TRACED? 00034190
BO TRACEXPR YES, GO TRACE IT 00034200
L Q,ALIST NO, SET UP FOR APPLY 00034210
ST Q,ARGS 00034220
LR Q,A 00034230
LR A,15 00034240
BAL 2,APPLY CALL APPLY AND EXIT 00034250
B CALLEXIT 00034260
TRACEXPR ST A,PVARG 00034270
LR A,1 00034280
SAVE A 00034290
BAL 2,PRARG TRACE ARGS 00034300
LR Q,A ARGS TO Q 00034310
L A,ALIST 00034320
ST A,ARGS SET UP FOR APPLY 00034330
LR A,15 00034340
BAL 2,APPLY CALL APPLY 00034350
TRRET ST A,PVARG
UNSAVE 2
TM 0(2),X'01' SHOULD IT BE TRACED
BZ CALLEXIT NOPE
LR A,2 MOVE FOR PRVAL
BAL 2,PRVAL TRACE VALUE 00034380
B CALLEXIT 00034390
NOPROPRT LR 15,1 FUNCTION IS DEFINED ON ALIST 00034400
B FNALIST SO CALL APPLY 00034410
SUBRLINK L 15,CDR(15) PICK UP ADDR. OF FSUBR 00034420
L 15,CAR(15) OR SUBR 00034430
L 15,CAR(15) 00034440
TM TRACEIND,X'01' IS ANYTHING BEING TRACED
BO TRACSUBR YES - DON'T MAKE ANY FAST LINKS THEN
SR 2,K4 NO, SET UP TO MAKE FAST CALL 00034470
LR 1,15 00034480
SR 1,NILR MAKE SUBR ADDR. RELOCATABLE 00034490
STC K4,3(0,2) MODIFY BAL INST. 00034500
ST 1,4(0,2) STORE RELOC. SUBR ADDR. 00034510
BALR 2,15 GO TO FN 00034520
B CALLEXIT 00034530
TRACSUBR STM A,Q,GARBT+4 PROTECT ARG1 AND ARG2 00034540
L 0,4(0,2) PICK UP NO. OF ARGS IN R0 00034550
BAL 2,LISTARG LIST ARGS FOR TRACING 00034560
ST A,PVARG 00034570
LR A,1 00034580
SAVE A 00034590
TM 0(A),X'01' IS FN BEING TRACED
BZ *+8 NO
BAL 2,PRARG TRACE ARGS 00034600
LM A,Q,GARBT+4 00034610
BALR 2,15 CALL FN 00034620
B TRRET TRACE RETURNED VALUE
LISTARG LTR 0,0 00034670
BNE LISTARG1 00034680
LR A,NILR 00034690
BR 2 00034700
LISTARG1 ST 2,LINKSAVE+4 00034710
SR 0,K4 00034720
BNE LISTARG2 00034740
LR Q,NILR 00034750
BAL 2,CONS 00034760
L 2,LINKSAVE+4 00034770
BR 2 00034780
LISTARG2 ST A,GARBT 00034790
LR A,Q 00034800
LR Q,NILR 00034810
BAL 2,CONS 00034820
LR Q,A 00034830
L A,GARBT 00034840
BAL 2,CONS 00034850
SR 0,K4 00034860
BNE LISTARG3 00034880
L 2,LINKSAVE+4 00034890
BR 2 00034900
LISTARG3 ST 1,LINKSAVE 00034910
SR 14,14 00034920
LISTARG4 L Q,ARGS(14) 00034930
BAL 2,APPEND1 00034940
AR 14,K4 00034950
CR 14,0 00034960
BL LISTARG4 00034970
LM 1,2,LINKSAVE 00034980
BR 2 00034990
EJECT 00035000
*********************************************************************** 00035010
******************* CAR * CDR * CADR * ETC ***SUBRS ********** 00035020
********************************************************************** 00035030
CAAAR L A,CAR(,A)
CAAR L A,CAR(,A)
CARR L A,CAR(,A)
BR 2
CAADR L A,CDR(,A)
L A,CAR(,A)
L A,CAR(,A)
BR 2
CADAR L A,CAR(,A)
CADR L A,CDR(,A)
L A,CAR(,A)
BR 2
CADDR L A,CDR(,A)
L A,CDR(,A)
L A,CAR(,A)
BR 2
CDAAR L A,CAR(,A)
CDAR L A,CAR(,A)
CDRR L A,CDR(,A)
BR 2
CDADR L A,CDR(,A)
L A,CAR(,A)
L A,CDR(,A)
BR 2
CDDAR L A,CAR(,A)
CDDR L A,CDR(,A)
L A,CDR(,A)
BR 2
CDDDR L A,CDR(,A)
L A,CDR(,A)
L A,CDR(,A)
BR 2 00035350
PROG2 LR A,Q 00035360
BR 2 00035370
* ====== END OF BASE 3 SECTION ===================================== 00035380
* ==================================================================== 00035390
EJECT 00035400
* ==================================================================== 00035410
* ====== BEGINNING OF BASEREGISTER 13 SECTION. PLEASE NOTE THAT ==== 00035420
* ====== REGISTER 13 IS ALSO POINTING TO THE INTERPRETERS ====== 00035430
* ====== SAVEAREA ============================================== 00035440
SAVEBLK DC 18F'0' 00035450
*********************************************************************** 00035460
********* READ ROUTINE ******************** 00035470
*********************************************************** 00035480
* SYNTAX ERRORS 00035490
* ERRB A . AFTER A ( 00035500
* DOTERR1 THE SECOND S-EXPRESSION IN DOTTED PAIR IS NOT 00035510
* FOLLOWED BY ) 00035520
* DOTERR2 A , . OR ) FOLLOWS A . 00035530
* REG -CHAR- HAS POINTER TO CURRENT CHARACTER 00035540
CHAR EQU 3 POINTER TO CURRENT CHARACTER 00035550
WKU EQU 1 WORK REGISTER 00035560
ERRIND DC X'00' X'01' INDICATES SYNTAX ERROR 00035570
* X'04' LABEL OR NUMB TRUNC 00035580
LASTCHAR DC A(0)
RDSV2 DC 2F'0' NOT RECURSIVE 00035600
READ EQU * 00035610
STM 2,3,RDSV2 SAVE EM 00035620
L CHAR,LASTCHAR 00035630
MVI ERRIND,X'00' SET ERRIND OFF 00035640
LR A,NILR SET TO NIL LIST 00035650
LR Q,NILR 00035660
BAL 2,CONS START NEW LIST 00035670
MVI LINKS+3,X'00' SET FOR CAR ATOM 00035680
MVI ATOMEQ+3,X'00' SET FOR CAR ATOM 00035690
LTR CHAR,CHAR IS THERE A CHARACTER YET?
BNZ *+8 YES.
BAL 2,GETCD NO; START AN INPUT RECORD.
RDIG BAL 2,TRYATOM -A- IS ADDR OF CELL 00035700
B RDOUT GOT ATOM 00035710
B RDIG DOT OR RT PAR 00035720
OI ERRIND,X'10' STARTING READ 00035730
BAL 2,TRYRPAR 00035740
B RDOUT ATOM IS NIL 00035750
ST A,EVLSV 00035760
BAL 2,UPPER 00035770
RDOUT ST CHAR,LASTCHAR -A- HAS POINTER TO TOP OF LI 00035780
L A,CAR(A) 00035790
TM ERRIND,X'01' 00035800
BZ RT2 00035810
PUTMSG SYNTAXMS 00035820
T8 BC 0,STOP 00035830
RT2 TM ERRIND,X'04' 00035840
BZ RTOK 00035850
PUTMSG TRUNCMSG 00035860
T9 BC 0,STOP 00035870
RTOK LM 2,3,RDSV2 00035880
NI ATOMIND,X'00' 00035890
OC MAININD(1),ERRIND INDICATE ERROR TO MAIN PROGRAM 00035900
NI ERRIND,X'00' 00035910
BR 2 00035920
* 00035930
********* RECURSIVE ENTRY FOR UPPER BRANCH ********* 00035940
* 00035950
UPPER SAVE 2 00035960
SAVE A 00035970
LR WKU,A HOLD -A- 00035980
BAL 2,CONS GET A CELL 00035990
ST A,CAR(WKU) SET PTR DOWN 00036000
B RDS READ S EXPRESSION 00036010
* 00036020
********* RECURSIVE ENTRY FOR LOWER BRANCH ************ 00036030
* 00036040
LOWER SAVE 2 00036050
SAVE A 00036060
RDCNO LR WKU,A 00036070
LR A,NILR PREVENT A LOOP IN PRINT IF ABEND 00036080
BAL 2,CONS GET A CELL 00036090
ST A,CDR(WKU) SET PTR DOWN 00036100
RDS MVI LINKS+3,CAR SET FOR CAR ATOM 00036110
MVI ATOMEQ+3,CAR SET FOR CAR ATOM 00036120
BAL 2,TRYATOM 00036130
B RDBATM GOT ONE 00036140
B RDBERB 00036150
BAL 2,TRYRPAR 00036160
B RDBRP 00036170
BAL 2,UPPER 00036180
RDBATM BAL 2,TRYRPAR 00036190
B RDRET 00036200
B RDCDOT 00036210
RDRET UNSAVE A 00036220
B RETURN 00036230
RDBERB LA 1,ERRB LOAD ADDR OF ERRB 00036240
ST 1,CAR(A) 00036250
OI ERRIND,X'01' 00036260
B RDBATM 00036270
RDBRP ST NILR,CAR(A) SET CAR TO NIL 00036280
B RDBATM 00036290
RDCDOT BAL 2,TRYDOT 00036300
B RDCDOTT 00036310
B RDCNO 00036320
RDCDOTT MVI LINKS+3,CDR SET FOR CDR ATOM 00036330
MVI ATOMEQ+3,CDR SET FOR CDR ATOM 00036340
BAL 2,TRYATOM 00036350
B RDCATM 00036360
B RDCDTER 00036370
BAL 2,TRYRPAR 00036380
B RDRET 00036390
BAL 2,LOWER 00036400
RDCATM BAL 2,TRYRPAR 00036410
B RDRET 00036420
LA 1,DOTERR1 00036430
ST 1,CDR(A) SET CDR TO DOTERR1 00036440
OI ERRIND,X'01' 00036450
B RDRET 00036460
RDCDTER LA 1,DOTERR2 00036470
ST 1,CDR(A) SET CDR TO DOTERR2 00036480
OI ERRIND,X'01' 00036490
B RDCATM 00036500
EJECT 00036510
*********************************************************************** 00036520
********* TRYATOM ************************** 00036530
***************************************************************** 00036540
ATOMIND DC X'00' BIT SWITCHES 00036550
* BIT 8 ATOMIND 00036560
* 7 NUMIND 00036570
* 6 FLOATIND 00036580
* 5 EXPIND 00036590
* 4 NEGEXP 00036600
* 3 NEGINT 00036610
* 2 LOGICAL 00036620
ATMSV2 DC 1F'0' SAVE RETURN, NON RECURSIVE 00036630
NEWGENSM EQU CHARATA+4 00036660
CNOP 4,8 00036670
DIGATA DC H'0',H'10',4F'0' 00036680
EXPA DC H'0',H'2',F'0' EXP SCAN AREA 00036690
EXP DC H'0' 00036700
* SCAN AREA= CURR LENGTH,MAX LENGTH,DATA 00036710
* REG -A- CONTAINS CURRENT CELL IN LIST 00036720
TRYATOM EQU * 00036730
ST 2,ATMSV2 SAVE RETURN 00036740
NI ATOMIND,X'00' CLEAR BITS 00036750
CLI 0(CHAR),C' ' BLANK 00036760
BNE NOTBL 00036770
NEXTCHAR BAL 2,GETCHAR 00036780
ATLOK CLI 0(CHAR),C' ' BLANK 00036790
BNE NOTBL 00036800
TM ATOMIND,X'80' 00036810
BZ NEXTCHAR 00036820
B ALLATOM 00036830
NOTBL CLI 0(CHAR),C',' 00036840
BNE NOTCOM 00036850
TM ATOMIND,X'80' 00036860
BO ALLATOM 00036870
B NEXTCHAR IGNORE COMMA 00036880
NOTCOM CLI 0(CHAR),C'.' 00036890
BNE NOTDOT 00036900
TM ATOMIND,X'40' WAS IT A NUMBER COLLECTION 00036910
BZ CKATM NO 00036920
OI ATOMIND,X'20' SET FLOAT IND ON 00036930
B NEXTCHAR 00036940
CKATM TM ATOMIND,X'80' 00036950
BO ALLATOM 00036960
BAL 2,GETCHAR 00036970
L 2,ATMSV2 00036980
B 4(2) DOT & RT PAR RETURN 00036990
NOTDOT CLI 0(CHAR),C')' 00037000
BE CKATM 00037010
CKLP CLI 0(CHAR),C'(' 00037020
BNE NOTLP 00037030
TM ATOMIND,X'80' 00037040
BO ALLATOM 00037050
BAL 2,GETCHAR 00037060
L 2,ATMSV2 00037070
B 8(2) LEFT PAR RETURN 00037080
NOTLP CLI 0(CHAR),C'-' 00037090
BNE NOTMIN 00037100
LA 1,CHARATA 00037110
BAL 2,STOCHAR 00037120
BAL 2,GETCHAR 00037130
BAL 2,CKDIG IS IT DIGIT 00037140
B RDDASH NO 00037150
TM ATOMIND,X'10' IN EXPONENT 00037160
BZ NOEXP 00037170
OI ATOMIND,X'08' SET NEG EXPONENT 00037180
B NOTBL 00037190
NOEXP OI ATOMIND,X'04' SET NEG INTEGER 00037200
B NOTBL 00037210
NOTMIN CLI 0(CHAR),C'+' 00037220
BNE NOTPLUS 00037230
LA 1,CHARATA 00037240
BAL 2,STOCHAR 00037250
BAL 2,GETCHAR 00037260
BAL 2,CKDIG IS IT DIGIT 00037270
B RDPLUSS NO 00037280
B NOTBL YES 00037290
NOTPLUS BAL 2,CKDIG IS IT DIGIT 00037300
B NOTDIGIT NO 00037310
TM ATOMIND,X'40' 00037320
BO STNAT 00037330
TM ATOMIND,X'80' 00037340
BO CHARATM 00037350
OI ATOMIND,X'C0' ATOMIND & NUMBIND 00037360
LA 1,0 00037370
MVC DIGATA+4(16),CHZERO INITIALIZATION 00037380
STH 1,DIGATA ZEROING THE DIGIT AREAS 00037390
STH 1,EXPA 00037400
ST 1,EXPA+4 00037410
STH 1,EXP 00037420
STNAT TM ATOMIND,X'10' IN EXPONENT 00037430
BO ACEXP YES 00037440
STNATT LA 1,DIGATA SET PTR 00037450
BAL 2,STOCHAR 00037460
TM ATOMIND,X'20' FLOAT NUMBER 00037470
BNO NEXTCHAR 00037480
LH 1,EXP 00037490
BCTR 1,0 00037500
STH 1,EXP 00037510
B NEXTCHAR 00037520
ACEXP LA 1,EXPA EXPONENT AREA 00037530
BAL 2,STOCHAR STORE IT 00037540
B NEXTCHAR CONT 00037550
CKDIG CLI 0(CHAR),C'0' 00037560
BL 0(2) NOT DIGIT 00037570
CLI 0(CHAR),C'9' 00037580
BH 0(2) NOT DIGIT 00037590
B 4(2) DIGIT 00037600
NOTDIGIT TM ATOMIND,X'40' A NUMBER 00037610
BO CKEXP YES 00037620
CLI 0(CHAR),C'$' LITERAL 00037630
BE LITERAL 00037640
CHARATM TM ATOMIND,X'80' ATOM 00037650
BO ATOK YES 00037660
MVC CHARATA+4(16),ZERO 00037670
MVC CHARATA+20(ATMSZ-12),CHARATA+4
LA 1,0 00037690
STH 1,CHARATA 00037700
OI ATOMIND,X'80' ATOM & LETTER 00037710
ATOK LA 1,CHARATA SET PTR 00037720
BAL 2,STOCHAR 00037730
B NEXTCHAR 00037740
CKEXP TM ATOMIND,X'20' IS IT FLOATNUMBER ? 00037750
BO CKEXP1 YES SEE IF THIS IS EXPMARKER 00037760
CLI 0(CHAR),C'A' IS CHAR LESS THAN 'A' 00037770
BL NOTLOG NO 00037780
CLI 0(CHAR),C'F' IS CHAR GREATER THAN 'F' 00037790
BH NOTEXP YES 00037800
OI ATOMIND,X'02' 00037810
TR 0(1,CHAR),TABL1-193 00037820
B STNATT 00037830
CKEXP1 CLI 0(CHAR),C'E' IS CHAR EXP MARK ? 00037840
BNE NOTEXP 00037850
OI ATOMIND,X'10' SET EXP ON 00037860
B NEXTCHAR 00037870
NOTEXP CLI 0(CHAR),C'X' LOGICAL 00037880
BNE NOTLOG 00037890
OI ATOMIND,X'12' SET EXP, LOG ON 00037900
B NEXTCHAR 00037910
NOTLOG OI ERRIND,X'01' INVALID SYNTAX 00037920
NI ATOMIND,X'00' 00037930
B NEXTCHAR 00037940
RDDASH EQU * 00037950
TM ATOMIND,X'80' 00037960
BO ATLOK 00037970
LA 14,DASH 00037980
B ATOMEQ 00037990
RDPLUSS EQU * 00038000
TM ATOMIND,X'80' 00038010
BO ATLOK 00038020
LA 14,PLUSS 00038030
B ATOMEQ 00038040
STOCHAR LH 15,0(1) CURR LENGTH 00038050
CH 15,2(1) AT MAX 00038060
BL STOIT NO 00038070
OI ERRIND,X'04' LABEL OR NUMBER TRUNCATED 00038080
BR 2 DROP CHAR 00038090
STOIT IC 0,0(CHAR) PICK IT UP 00038100
STC 0,4(1,15) 00038110
LA 0,1(,15) ADD 1 00038120
STH 0,0(1) 00038130
BR 2 00038140
LITERAL TM ATOMIND,X'80' LITERAL=>$$D.. ...D 00038150
BO ATOK BUILDING ATOM 00038160
MVC CHARATA+4(16),ZERO 00038170
MVC CHARATA+20(ATMSZ-12),CHARATA+4
LA 0,0 00038190
STH 0,CHARATA 00038200
OI ATOMIND,X'80' ATOM & LETTER 00038210
LA 1,CHARATA 00038220
BAL 2,STOCHAR STO IT FOR NOW 00038230
BAL 2,GETCHAR GET NEXT CHAR 00038240
CLI 0(CHAR),C'$' 00038250
BNE ATLOK NOT A LITERAL 00038260
LH 15,CHARATA 00038270
BCTR 15,0 BACK UP ONE, IE TO $ 00038280
STH 15,CHARATA 00038290
LITOK BAL 2,GETCHAR GET DELIMETER 00038300
IC 0,0(CHAR) PICK IT UP 00038310
STC 0,DELM+1 STO IT 00038320
LITON BAL 2,GETCHAR NEXT CHAR 00038330
DELM CLI 0(CHAR),C'9' SCAN FOR DELIMETER 00038340
BE LITDN 00038350
LA 1,CHARATA SET PTR 00038360
BAL 2,STOCHAR 00038370
B LITON 00038380
LITDN BAL 2,GETCHAR 00038390
EJECT 00038410
* ALL REQUIRED CHARACTERS HAVE BEEN PICKED OFF THE CARD. 00038420
* AN ALPHABETIC OR NUMERIC ATOM MAY NOW BE CONSTRUCTED. 00038430
* REGISTERS 0,1,14,15 USED HERE- CONS MUST NOT ALTER THEM. 00038440
ALLATOM TM ATOMIND,X'40' NUMB ATOM 00038450
BO NUMAT YES 00038460
MVI ATMTYP+1,ATOM SET ATOM TYPE 00038470
STSCH L 1,HASHTBL LOOK IN HASH TABLE
LTR 1,1 NONE
BNZ SCH1 NOPE
L 15,=A(HASHINIT) BUILD ONE
BR 15
SCH1 LH 15,CHARATA+4 GET THE HASH KEY
AH 15,CHARATA+6
MH 15,=X'7A3C'
N 15,=X'00003FE0'
A 15,HASHTBL
MVI LPSW,0 USED TO LOOK FOR LOOPS
SCH2 L 14,0(0,15) FIND NEXT ATOM
LR 1,15 SAVE LOCN IN HASH TBL
LTR 14,14 HOLE?
BZ BUILDATM YES - NEW ATOM
L 1,CAR(0,14) FIND FULL WORD
L 0,CHARATA+4 NEW ATOM FULL WORD
C 0,CAR(0,1) COMPARE
BNE SCHAGN NOT IT
LR 2,1 SET UP FOR REST OF COMPARE
SR 1,1
B SCHEQ
SCHAGN LA 15,4(0,15) NEXT ATOM
C 15,ENDHASH END?
BL SCH2 NOPE
L 15,HASHTBL WRAP AROUND
XI LPSW,1 BUT ONLY ONCE
BNZ SCH2 OK
TMNYATM ERROR ' *** TOO MANY ATOMS (>4096)'
LPSW DC X'0'
*** FOUND ONE, SO COMPARE REST OF NAME 00038520
SCHEQ L 2,CDR(2) 00038550
LA 2,0(,2) ZERO EXTRA BITS 00038560
CR 2,NILR NIL YET 00038570
BE CKATEND CHECK END OF AREA 00038580
L 0,CAR(2) NEXT PART OF NAME 00038590
C 0,CHARATA+8(1) 00038600
BNE SCHAGN SEARCH REST OF OBJLIST 00038610
AR 1,K4 00038620
B SCHEQ TRY NEXT 4 BYTES 00038630
CKATEND SR 2,2
C 2,CHARATA+8(1) SHOULD BE ZERO 00038650
BNE SCHAGN CHECK REST OF LIST 00038660
ATOMEQ ST 14,CAR(A) SET PTR TO ATOM 00038670
ATEXIT L 2,ATMSV2 RESTORE 2 00038680
BR 2 FOUND ATOM 00038690
*** ATOM NOT ON OBJLIST SO WE ADD IT TO FRONT 00038810
BUILDATM LR 15,A SAVE-A- PNTS TO CURR CELL ABUILDING 00038820
LR Q,NILR Q=NIL 00038830
BAL 2,CONS ATOM HEAD 00038840
ST A,0(0,1) STORE INTO HASH TABLE
LINKS ST A,CAR(15) LINK CELL TO LIST 00038850
LR 14,A SAVE-A- PNTS TO ATOM HEAD 00038860
L 1,OBJECTA ADD ATOM TO FRONT OF OBJLIST 00038870
L Q,CDR(1) 00038880
BAL 2,CONS ADD TO OBJECT LIST 00038890
ST A,CDR(1) LINK IT 00038900
LR Q,NILR 00038910
BAL 2,CONS FIRST DATA CELL 00038920
ST A,CAR(14) LINK TO ATOM HEAD 00038930
ATMTYP MVI CAR(14),ATOM MARK ATOM HEAD 00038940
LA 1,0 00038950
MVI CDR(A),FWD MARK ALPHA CELL 00038960
L 0,CHARATA+4 PNAME 00038970
STNEXT ST 0,CAR(A) STORE NAME 00038980
L 0,CHARATA+8(1) GET NEXT PART OF NAM E 00038990
C 0,ZERO END OF ST R ING 00039000
BE BTEXIT YES 00039010
LR 14,A SAVE-A- 00039020
BAL 2,CONS ANOTHER CELL 00039030
MVI CDR(A),FWD MARK AS ALPHA 00039040
ST A,CDR(14) LINK INTO LIST 00039050
MVI CDR(14),FWD MARK AS ALPHA 00039060
AR 1,K4 00039070
B STNEXT 00039080
BTEXIT LR A,15 RESET A 00039090
B ATEXIT 00039100
*** DATA SCANNED WAS A NUMERIC ATOM -- CONVERT TO FIX OR FLOAT 00039110
NUMAT TM ATOMIND,X'20' FLOATIND 00039120
BO FLOATINP 00039130
TM ATOMIND,X'02' LOGICAL 00039140
BO LOGINP 00039150
LH 1,DIGATA CONST LENGTH 00039160
BCTR 1,0 LESS ONE 00039170
EX 1,PCK PACK IT 00039180
CVB 1,DIGATA+12 TO BIN 00039190
TM ATOMIND,X'04' NUMB NEG 00039200
BZ *+6 00039210
LCR 1,1 YES, COMPLEMENT IT 00039220
MVI ATMTYP+1,FIX SET CORRECT TYPE 00039230
NUMIT ST 1,CHARATA+4 00039240
MVC CHARATA+8(4),ZERO 00039250
B STSCH MAKE AN ATOM 00039260
LOGINP LH 2,DIGATA GET NUMBER OF LOGICAL DIGITS 00039270
LA 14,DIGATA+4 R14 = LOWER BOUNDARY OF FIELD 00039280
SR 0,0 STE R0 TO 0 00039290
LOGLOP IC 1,0(14) FIND FIRST DIGIT 00039300
SLL 1,28 AND PUT IT IN R0 00039310
SLDL 0,4 00039320
LA 14,1(0,14) HAVE ALL DIGITS BEEN PROCESSED 00039330
BCT 2,LOGLOP IF SO BRANCH TO LOGLOP 00039340
LH 2,EXPA GET NUMBER OF DIGITS IN EXPONENT 00039350
LTR 2,2 TEST FOR ZERO 00039360
BZ NUMITT NO EXPONENT 00039370
BCTR 2,0 00039380
EX 2,PCK1 CONVERT EXPONENT TO BINARY 00039390
CVB 2,CHARATA+4 00039400
SLL 2,2 MULTIPLY EXPONENT BY 4 00039410
SLL 0,0(2) SHIFT LOGICAL NUMBER 00039420
* CONSTRUCT A NONUNIQUE ATOM OUT OF THE LOGICAL NUMBER IN R0 00039430
NUMITT LR 15,A 00039440
LR Q,NILR 00039450
LR A,0 00039460
BAL 2,CONS 00039470
MVI CDR(A),FWD 00039480
BAL 2,CONS 00039490
MVI CAR(A),LOGIC 00039500
LR 14,A 00039510
LR A,15 00039520
B ATOMEQ 00039530
FLOATINP LH 0,EXP EXP HAD MINUS NO. OF FRAC. DIG.S 00039540
SR 2,2 UOM
TM ATOMIND,X'10' IS THERE AN EXP. FIELD ? 00039550
LH 1,DIGATA GET NO. OF NOS. 00039570
BZ NONEGXP NO EXP. 00039580
LH 2,EXPA GET EXP. DIG. COUNT 00039590
BCTR 2,0 SUBTRACT 1 FOR PACK 00039600
EX 2,PCK1 PACK 00039610
CVB 2,CHARATA+4 CONV. TO BIN. 00039620
TM ATOMIND,X'08' WAS EXP. NEG. 00039630
BZ NONEGXP NO 00039640
LCR 2,2 YES, COMPLIMENT 00039650
NONEGXP AR 0,2 REG 0 NOW CONTAINS NO. OF FRAC. DIGIT 00039660
* IN THE NUMBER RELATIVE TO THE END OF 00039670
* THE FIELD (ADJUSTED FOR EXPA) 00039680
AR 1,0 REG 1 NOW CONTAINS NO. OF WHOLE NO. 00039690
* DIGITS IN THE NUMBER RELATIVE TO THE 00039700
* START OF THE FIELD 00039710
LR 15,0 00039720
LA 14,DIGATA+4 00039730
LR 2,14 00039740
AR 14,1 GET ADDR. OF POS. OF D.P. 00039750
SR 2,14 TO SEE IF D.P. BELOW START OF FIELD 00039760
BC 11,LOWEQXP BRANCH ZERO OR POS. NOT INSIDE FIELD 00039770
LA 2,DIGATA+12 ADDR. OF END OF FIELD 00039780
SR 2,14 TO SEE IF ADDR. ABOVE END OF FIELD 00039790
BC 13,UPEQXP BRANCH IF ZER OR NEG. NOT IN FD 00039800
SR 2,2 UOM
LTR 15,15 CHECK FOR NO EXP. BUT IN FIELD 00039810
BC 11,NOXPATAL ZERO OR POS. THEN BRANCH 00039830
BCTR 1,0 REDUCE NO. COUNT FOR PACK 00039840
EX 1,PCK2 PACK 00039850
LCR 1,0 GET NO. OF FRAC. DIGITS 00039860
BCTR 1,0 SUBTRACT 1 FOR PACK 00039870
EX 1,PCK3 PACK FRAC. -THAT RHYMES- 00039880
CVB 2,CHARATA+4 CONV. NO. AND FRAC. TO FLT. PT. 00039890
MVI DPA,X'4E' 00039900
ST 2,DPA+4 00039910
LD 0,DPA 00039920
AD 0,ZERO NO. IN FLT. PT. REG. 0 00039930
CVB 2,CHARATA+12 00039940
MVI DPA,X'4E' 00039950
ST 2,DPA+4 00039960
LD 2,DPA 00039970
AD 2,ZERO FRAC. IN FLT. PT. REG. 2 00039980
SLL 1,3 ADJUST TO FIND N IN 10**N 00039990
MD 2,CTBL+8(1) COMPUTE FRAC.*10**(-N) 00040000
ADR 0,2 NO. + FRAC.*10**(-N) 00040010
B COMNPART 00040020
LOWEQXP LH 1,DIGATA GET LENGTH OF NO. 00040030
BCTR 1,0 SUBTRACT 1 FOR PACK 00040040
EX 1,PCK2 PACK 00040050
CVB 14,CHARATA+4 CONVERT TO BIN. 00040060
LA 0,1(1,2) 00040070
COMPNO MVI DPA,X'4E' CONVERT NO. TO FLT. PT. 00040080
ST 14,DPA+4 00040090
LD 0,DPA 00040100
AD 0,ZERO 00040110
SR 1,1 COMPUTE NO. 00040120
LCR 0,0 00040130
BZ COMNPART DONE IF NO EXP. 00040140
AH 0,=H'64' 00040150
BP PLEXP 00040160
DD 0,DTBL+16 REDUCE NO. 00040170
AH 0,=H'32' RAISE EXP 00040180
PLEXP SRDL 0,4 4 BITS 00040190
SRL 1,25 00040200
DD 0,CTBL(1) FIRST 4 BITS OF EXP 00040210
SRDL 0,3 NEXT 3 BITS 00040220
SRL 1,26 00040230
DD 0,DTBL(1) 00040240
B COMNPART 00040250
UPEQXP AH 2,=H'1' 00040260
LA 1,9 00040270
NOXPATAL BCTR 1,0 SUBTRACT 1 FOR PACK 00040280
EX 1,PCK2 PACK 00040290
CVB 14,CHARATA+4 CONVERT TO BIN. 00040300
LR 0,2 0 NOW CONTAINS POWER OF 10 00040310
B COMPNO 00040320
COMNPART LTER 0,0 IS THE NUMBER 0.0 ? 00040330
BZ BERNS YES 00040340
STE 0,PVARG ROUND RESULT IF NOT 00040350
L 14,PVARG 00040360
SRL 14,24 00040370
STC 14,DOUBLCST 00040380
AD 0,DOUBLCST 00040390
BERNS LR 15,A SAVE A 00040400
LR Q,NILR CREATE ATOM 00040410
BAL 2,CONS 00040420
STE 0,0(A) 00040430
TM ATOMIND,X'04' CHECK FOR NEG. NO. 00040440
BZ NUMBPOS NO. 00040450
OI 0(A),X'80' 00040460
NUMBPOS MVI CDR(A),FWD 00040470
BAL 2,CONS 00040480
MVI CAR(A),FLOAT 00040490
LR 14,A 00040500
LR A,15 00040510
B ATOMEQ 00040520
EJECT 00040530
*********************************************************************** 00040540
********* TRYDOT *** TRYRPAR ******************* 00040550
***************************************************************** 00040560
TRSV2 DC F'0' SAVE RETURN, NOT RECURSIVE 00040570
TRYDOT MVI TC+1,C'.' SET TEST CHAR TO . 00040580
B TRYBL 00040590
TRYRPAR MVI TC+1,C')' SET TEST CHAR TO ) 00040600
TRYBL CLI 0(CHAR),C' ' SCAN OUT BLANKS 00040610
BNE TC 00040620
ST 2,TRSV2 00040630
NXTBL BAL 2,GETCHAR 00040640
CLI 0(CHAR),C' ' 00040650
BE NXTBL 00040660
L 2,TRSV2 00040670
TC CLI 0(CHAR),C'.' 00040680
BNE 4(2) NOT . OR ) 00040690
ST 2,TRSV2 00040700
BAL 2,GETCHAR 00040710
L 2,TRSV2 00040720
BR 2 00040730
EJECT 00040740
*********************************************************************** 00040750
******************* PRINT *************************************** 00040760
*********************************************************************** 00040770
P EQU 3 POINTER TO LINE POSITION 00040780
PRARGMNT DC F'0' 00040790
PRSV DC 2F'0' SAVE 2,3 00040800
PSV DC F'0' 00040810
LINEMAX DC A(LINE+100) LIMIT WHEN OUTPUTING CHARS 00040820
SUPMAX DC A(LINE+120) LIMIT FOR ATOMS 00040830
PRINT STM 2,3,PRSV 00040840
ST A,PRARGMNT 00040850
L P,PRTAB 00040860
TM CDR(A),X'40' 00040870
BZ PGOES NO 00040880
PEXIT LM 2,3,PRSV 00040890
L A,PRARGMNT 00040900
BR 2 00040910
PGOES TM CAR(A),ATOM 00040920
BZ PUTLIST ITS A LIST 00040930
BAL 2,PUTATOM 00040940
PWRT BAL 2,WRLINE 00040950
B PEXIT 00040960
PUTLIST LR Q,A 00040970
LA A,0 00040980
********* Q POINTS TO LIST BEING CURRENTLY OUTPUT 00040990
********* A IS A SCRATCH REG USED FOR SAVING PTRS 00041000
SAVE A 00041010
PLFTP MVI 0(P),C'(' LEFT PAREN 00041020
BAL 2,PCKOVR CHECK BUFFER AREA 00041030
PRNXT L A,CAR(Q) 00041040
LR 0,A CHECK CAR.
BAL 14,CKADDR
BZ PRCDR INVALID -- SKIP.
TM CAR(A),ATOM 00041050
BO PATM YES 00041060
LM Q,M,CAR(Q) 00041070
SAVE M 00041080
B PLFTP 00041090
PATM BAL 2,PUTATOM 00041100
PRCDR L Q,CDR(,Q)
CR Q,NILR 00041120
BE FNDNIL 00041130
PRLIST LR 0,Q CHECK CDR.
BAL 14,CKADDR
BZ FNDNIL INVALID -- SKIP.
TM CAR(Q),ATOM
BO PRDOT YES 00041150
BAL 2,PCKOVR 00041160
B PRNXT 00041170
PRDOT MVC 0(3,P),SNPPP+1 00041180
MVI 1(P),C'.' 00041190
LA P,2(0,P) 00041200
BAL 2,PCKOVR 00041210
LR A,Q 00041220
BAL 2,PUTATOM 00041230
FNDNIL MVI 0(P),C')' 00041240
BAL 2,PCKOVR 00041250
UNSAVE Q 00041260
LTR Q,Q 00041270
BZ PWRT 00041280
CR Q,NILR 00041290
BE FNDNIL 00041300
B PRLIST 00041310
PCKOVR LA P,1(,P) UP BY ONE 00041320
C P,LINEMAX 00041330
BL 0(2) OK YET 00041340
ST 2,PSV BETTER PRINT 00041350
BAL 2,WRLINE 00041360
L 2,PSV RESTORE 2 00041370
BR 2 00041380
*** PUT ATOM -A- TO BUFFER, PRINT IF OVER, -P- POINTS TO BUFF 00041390
PUTATOM ST 2,PSV SAVE IT 00041400
TM CAR(A),FIX 00041410
BO PRNUMB 00041420
L A,CAR(A) 00041430
PUTNXT LR 0,Q 00041440
LR 1,P
LR 14,A
PUTOFLO LR M,14
NEXTFWD LM Q,M,CAR(M) 00041460
NEXTCHR SLDL A,8 00041470
STC A,0(P) 00041480
LA P,1(0,P) 00041490
C P,SUPMAX 00041500
BL COMPRQ 00041510
LTR 1,1
BZ *+10
SR P,1
EX P,SPLAT
BAL 2,WRLINE
LTR 1,1
BZ COMPRQ
SR 1,1
B PUTOFLO
SPLAT MVC 0(0,1),BLANKS
COMPRQ LTR Q,Q 00041530
BNZ NEXTCHR 00041540
LA M,0(0,M) 00041550
CR M,NILR 00041560
BNE NEXTFWD 00041570
LR Q,0 00041580
B PUTAX 00041590
PRNUMB TM CAR(A),FLOAT 00041600
BO PRFLT YES 00041610
TM CAR(A),LOGIC IS IT A LOGICAL NUMBER ? 00041620
BO PRLOGIC YES 00041630
L A,CAR(A) 00041640
L A,CAR(A) NUMBER 00041650
CVD A,TEA TO PACKED 00041660
MVC WKA(12),MSK EDIT MASK 00041670
LA 1,WKA+11 00041680
EDMK WKA(12),TEA+2 00041690
BNM PRNO NOT NEG 00041700
BCTR 1,0 ROOM FOR SIGN 00041710
MVI 0(1),C'-' SET SIGN 00041720
PRNO LA 2,WKA+11 END OF AREA 00041730
SR 2,1 LENGTH OF NUMB-1 00041740
LA 0,1(P,2)
C 0,SUPMAX
BNH *+12
BAL 2,WRLINE
B PRNO
STC 2,*+5 SET LENGTH 00041750
MVC 0(1,P),0(1) TO PRINT AREA 00041760
LA P,1(P,2) UP P 00041770
TSTOVR C P,LINEMAX 00041780
BL PUTAX 00041790
BAL 2,WRLINE 00041800
PUTAX L 2,PSV 00041810
LR A,NILR 00041820
BR 2 00041830
PRLOGIC L A,CAR(A) GET ADDRESS OF PRINTNAME 00041840
LA 0,10(,P)
C 0,SUPMAX
BNH *+8
BAL 2,WRLINE
MVC TEA(4),CAR(A) MOVE LOGICAL NUMBER TO PACK AREA 00041850
MVC TEA+4(1),ZERO 00041860
MVI 0(P),C'0' 00041870
UNPK 1(9,P),TEA(5) 00041880
TR 1(8,P),SNPTR-240 TRANSLATE THE LOGICAL NO. 00041890
MVI 9(P),C'X' 00041900
LA P,10(0,P) 00041910
B TSTOVR 00041920
PRFLT EQU * 00041930
L A,CAR(A) 00041940
L 0,CAR(A) 00041950
LTR 0,0 00041960
BZ FPA0 00041970
LA 2,13(,P)
C 2,SUPMAX
BNH *+8
BAL 2,WRLINE
MVC TEA(4),CAR(A) MOVE NUMBER 00041980
MVI TEA,X'40' SET EXP 00041990
LE 0,TEA LOAD FP REG 00042000
IC 1,CAR(A) EXPONENT 00042010
SLDL 0,29 ALL BUT 3 BITS 00042020
SRL 1,26 BACK TO ADDRESS DBL WORDS 00042030
LR 2,1 SAVE IT 00042040
SRDL 0,4 NEXT 4 00042050
SRL 1,25 TO ADDR DBL WD 00042060
DD 0,DTRA(1) 00042070
SRL 1,2 TO HALF 00042080
LH M,DTRAH(1) 00042090
CE 0,DPNCON 00042100
BL *+20 00042110
LA 2,8(,2) UP BY ONE DBL WD 00042120
STE 0,TEA 00042130
MVI TEA,X'40' 00042140
LE 0,TEA 00042150
DD 0,DTRB(2) 00042160
SRL 2,2 TO HALF 00042170
AH M,DTRBH(2) 00042180
STD 0,TEA 00042190
TM TEA,X'01' 00042200
MVI TEA,X'00' 00042210
LM 0,1,TEA 00042220
BZ *+8 00042230
SLDA 0,4 00042240
* AT THIS POINT 0 AND 1 CONTAIN A 14 DIGIT BINARY INTEGER 00042250
* M HAS DECIMAL EXPONENT 00042260
FPA EQU CHARATA+4 00042270
D 0,=F'1000000000' 10**9 00042280
CVD 0,TEA LT 10**9 00042290
UNPK FPA+10(9),TEA+3(5) 00042300
OI FPA+18,X'F0' SET ZONE 00042310
CVD 1,TEA 00042320
UNPK FPA(10),TEA+2(6) NOW A 19 DIGIT NUMBER AT FPA 00042330
OI FPA+9,X'F0' DECIMAL POINT AT RIGHT OF FPA+18 00042340
LA 1,FPA+3 SET UP TRT 00042350
TRT FPA(3),TRTBL-240 FIND FIRST NON ZERO 00042360
LA 2,FPA+18 00042370
SR 2,1 COMPUTE DECIMAL POINT 00042380
AR M,2 EXPONENT 00042390
TM CAR(A),X'80' WAS NUMB NEG 00042400
BZ *+12 00042410
MVI 0(P),C'-' YES 00042420
LA P,1(,P) 00042430
MVC 0(1,P),0(1) MOVE ONE DIGIT 00042440
MVI 1(P),C'.' 00042450
MVC 2(6,P),1(1) 6 MORE DIGITS 00042460
MVC 8(4,P),DMSK 00042470
CVD M,TEA 00042480
ED 8(4,P),TEA+6 EDIT EXP 00042490
MVI 9(P),C'+' SET PLUS 00042500
BP *+8 SHOULD IT BE 00042510
MVI 9(P),C'-' NO 00042520
LA P,13(,P) -N.NNNNNNE-NN 00042530
B TSTOVR 00042540
FPA0 LA 0,3(,P)
C 0,SUPMAX
BNH *+8
BAL 2,WRLINE
MVC 0(3,P),CHZERO
MVI 1(P),C'.' 00042560
LA P,3(0,P) 00042570
B TSTOVR 00042580
*** 00042590
PRTAB DC A(LINE+5) START VALUE 00042600
PRIN1 STM 2,3,PRSV 00042610
TM CAR(A),ATOM MUST BE AN ATOM
BZR 2 IGNORE IF NOT
L P,PRTAB LEFT OFF HERE
BAL 2,PUTATOM 00042650
BCTR P,0 00042660
BAL 2,PCKOVR 00042670
ST P,PRTAB 00042680
LM 2,3,PRSV 00042690
BR 2 00042700
*** 00042710
* MOVE OVER N POSNS 00042720
XTAB L Q,CAR(A) 00042730
L Q,CAR(Q) 00042740
LPR Q,Q MUST BE POSITIVE 00042750
A Q,PRTAB 00042760
LR A,NILR 00042770
C Q,LINEMAX 00042780
BH TERPRI PRINT IT 00042790
ST Q,PRTAB 00042800
BR 2 00042810
* MOVE TO N'TH POSITION 00042820
TTAB L Q,CAR(A) 00042830
L Q,CAR(Q) 00042840
LPR Q,Q MUST BE POS 00042850
LA M,LINE 00042860
AR Q,M 00042870
LR A,NILR 00042880
C Q,SUPMAX 00042890
BH 0(2) 00042900
ST Q,PRTAB 00042910
BR 2 00042920
*** 00042930
TERPRI STM 2,3,PRSV 00042940
BAL 2,WRLINE 00042950
LM 2,3,PRSV 00042960
BR 2 00042970
DMSK DC X'C5212020' 00042980
TRTBL DC X'00' MUST HAVE 8 NON ZERO DIGITS AFT 00042990
MSK DC X'402020202020202020202120' BDD,DDD,DDD,DSD 00043000
WKA DC 4F'0' 00043010
TEN8 DC F'100000000' 00043020
DPNCON DC X'41100000' 00043030
EJECT 00043040
*********************************************************************** 00043050
********* RTRN ENTERED FROM COMPILER ******************************* 00043060
*********************************************************************** 00043070
RTRN UNSAVE 3 00043080
*********************************************************************** 00043090
******* RETURN *************************************************** 00043100
********************************************************************** 00043110
RETURN UNSAVE 2 GET LINK ADDR 00043120
BR 2 00043130
*********************************************************************** 00043140
******* SAVE *************************************************** 00043150
********************************************************************** 00043160
CNOP 0,4 00043170
NILG DC X'80',AL3(NILF) 00043180
ERG2 L A,NILG 00043190
ST A,NIL 00043200
PUTMSG ' *** G2-PUSHDOWN STACK OVERFLOW' 00043210
CR FREE,K4 STACK OFLOW IN GARBAGECOLL? 00043220
BNL ERDAN NO.
MVI ERRORIND,X'03' YES, FATAL ERROR 00043240
ERROR ' WHILE GARBAGECOLLECTING' 00043250
EJECT 00043340
*********************************************************************** 00043350
******* CONS *************************************************** 00043360
********************************************************************** 00043370
* MUST NOT DESTROY ANY REGISTERS 00043380
* END OF FREE LIST IS MARKED BY FREE EQUAL TO 1. THIS GIVES A 00043390
* SPECIFICATION EXCEPTION TO CAUSE A GARBAGE COLLECTION 00043400
CONS ST A,CAR(,FREE)
LR A,FREE
L FREE,CDR(,FREE)
ST Q,CDR(,A)
BR 2 00043450
EJECT 00043460
*********************************************************************** 00043470
******* GETCHAR *************************************************** 00043480
********************************************************************** 00043490
CARDEND DC A(0)
CARDLNTH DC A(CDEND)
INDCBADR DC A(0)
GETCHAR LA CHAR,1(,CHAR) NEXT CHAR 00043540
C CHAR,CARDEND 00043550
BLR 2 UOM
GETCD EQU * 00043570
L R1,INDCBADR 00043580
GET (R1) 00043590
LR CHAR,1 LOCN OF CARD 00043600
ST CHAR,LASTCHAR
A 1,CARDLNTH 00043610
ST 1,CARDEND 00043620
TM BUFFPR,X'01' 00043630
BZR 2 UOM
LA 0,120 COMPUTE MIN(LRECL,120).
L 1,INDCBADR
USING DCBDS,1
LH 1,LRECL#
DROP 1
CR 1,0
BNH *+6
LR 1,0
BCTR 1,0
MVC MSGBUFFR(8),=C' => ' PUT IN PREFIX.
STC 1,*+5 NOT RE-ENTRANT !!
MVC MSGBUFFR+8(0),0(CHAR) COPY LINE FOR PRINTING.
L R1,OTDCBADR USE OUTPUT DCB.
STM 13,1,WRSV
B PUTMSG2 PRINT THE INPUT LINE.
LASTCARD TM ERRIND,X'10' WERE WE READING A LIST 00043700
BZ OKEOF NO 00043710
MVI ERRORIND,X'03' TERMINAL ERROR 00043720
L A,EVLSV 00043730
L A,CAR(A) 00043740
SR Q,Q 00043750
ERROR ' *** R2-BAD BRACKET COUNT' 00043760
OKEOF PUTMSG ' *** END OF DATA' 00043770
B STOP 00043780
EJECT 00043790
*********************************************************************** 00043800
******* WRLINE *************************************************** 00043810
********************************************************************** 00043820
MARGIN1 DC A(LINE) 00043830
MARGIN2 DC A(MSGBUFFR) 00043840
OTDCBADR DC A(PRINTCB) 00043850
WRSV DC 6F'0' 00043860
*** WRLINE IS USED TO OUTPUT DATA AREA 'LINE' AND RESET IT 00043870
* TO BLANKS 00043880
WRLINE STM 13,1,WRSV 00043910
L 0,MARGIN1 00043920
L R1,OTDCBADR 00043930
PUT (R1),(0) 00043940
MVC LINE,BLANKS
LA P,LINE+5 00043970
ST P,PRTAB 00043980
LM 13,1,WRSV 00043990
BR 2 00044000
*** PUTMSG IS USED TO OUTPUT A MESSAGE, A VARIABLE LENGTH RECO€: 00044010
PUTMSG L R1,OTDCBADR 00044020
CL 14,=F'4095' TEST MESSAGE LOCATION.
BH *+8 ADDRESS -- SKIP.
AL 14,=A(LISPMSG) DISPLACEMENT; CONVERT TO ADDRESS.
LH 15,0(,14) GET MESSAGE LENGTH-1.
STC 15,MSGMOVE+1 00044040
MSGMOVE MVC MSGBUFFR(1),2(14) 00044050
PUTMSG2 L 0,MARGIN2
PUT (R1),(0) 00044070
MVC MSGBUFFR,BLANKS
LM 13,1,WRSV 00044100
BR 2 00044110
EJECT ST 2,RESAV 00044120
PUTMSG SKIP 00044130
L 2,RESAV 00044140
LR A,NILR 00044150
BR 2 00044160
SKIP DC AL2(2),C'1 ' 00044170
EJECT 00044180
*********************************************************************** 00044190
******************* GARBAGE COLLECTOR ***************************** 00044200
********************************************************************** 00044210
LISPMSG CSECT
CNOP 6,8
GARBMS DC AL2(73)
GARBMS1 DC C'XXXXXXXX CELLS TOTAL; '
GARBMS2 DC C'XXXXXXXX CELLS ACTIVE; '
GARBMS3 DC C'XXXXXXXX STACK UNITS LEFT.'
LISP CSECT
CELLCNT DC F'0' NUMBER OF LISP CELLS.
GARBTM2 DC D'0' SAVE COUNTS AND CONVERT.
GARBTEMP DC 6F'0' SAVE ALL NEEDED REGISTERS
GARBCOLL STM 14,3,GARBTEMP
SAVE A 00044290
SAVE Q 00044300
SAVE M 00044310
LA 15,GARBCNT5
MARK DS 0H ENTRY TO MARK CELLS AND NOT COLLECT
LR Q,NILR COMPUTE PDS LEFT 00044320
SR Q,PDS 00044330
SRL Q,2(0) 00044340
ST Q,GARBTM2+4 00044350
LR A,K4 00044360
LR Q,PDS TOP OF STACK 00044370
** TRACE ALL ACTIVE LISTS AND MARK CELLS.
LA M,TEMPORAR USE STACK AND MISC. POINTERS.
NXTPUSH L 2,0(,M) GET NEXT ADDRESS ON STACK.
LR 0,2
BAL 14,CKADDR IS IT A VALID CELL ADDRESS?
BZ GARBCONT NO -- SKIP.
SR 3,3 YES; STACK ZERO.
SAVE 3
GARB2 TM CDR(2),X'80' IS CELL (R2) ALREADY MARKED?
BO GARB4 YES.
TM CDR(2),X'40' NO; IS IT A FULLCELL?
BO GARB3 YES.
OI CDR(2),X'80' NO; SET ACTIVE MARK.
LM 2,3,CAR(2) GET ITS CAR AND CDR.
TM CDR(3),X'80' IS CDR CELL MARKED?
BO GARB2 YES -- TRACE CAR.
SAVE 3 NO; STACK ADDRESS.
B GARB2
GARB3 OI CDR(2),X'80' MARK FULLCELL ACTIVE.
L 2,CDR(,2) GO DOWN FULLCELL LIST.
TM CDR(2),X'80' MARKED?
BZ GARB3 NO.
GARB4 UNSAVE 2 UNSTACK AN ADDRESS.
LTR 2,2 MORE ON THIS LIST?
BNZ GARB2 YES.
GARBCONT BXLE M,A,NXTPUSH ADVANCE STACK POINTER.
BR 15 RETURN IF ENTERED AT MARK
** NOW SCAN STORAGE FOR INACTIVE CELLS, AND COLLECT THEM.
GARBCNT5 DS 0H
AR A,A CELL LENGTH.
LR 3,NILR START WITH STATIC BLOCK.
L Q,BOTTOM
SR M,M ZERO THE INACTIVE COUNT.
LA 1,1
GARB51 TM CDR(3),X'80' IS CELL ACTIVE?
BNZ GARB6 YES -- SKIP.
ST FREE,CDR(,3) NO; PUT IT ON FREE LIST.
LR FREE,3
AR M,1 KEEP COUNT OF INACTIVE CELLS.
GARB6 NI CDR(3),X'7F' SET COLLECTION BIT OFF.
BXLE 3,A,GARB51 REPEAT FOR WHOLE BLOCK.
CL Q,BOTTOM WAS THIS THE STATIC BLOCK?
BNE *+8 NO.
LA 2,STORBLKS YES -- START DYNAMIC BLOCKS.
L 2,0(,2) GET NEXT BLOCK.
LTR 2,2 ALL BLOCKS SCANNED?
BZ GARB7 YES.
LA 3,8(,2) NO; POINT TO 1ST CELL.
L Q,4(,2) POINT TO END OF BLOCK.
B GARB51 GO SCAN IT.
GARB7 C M,=F'400' DID WE COLLECT ENOUGH?
BNL GARB10 YES -- SKIP.
LA 0,2 NO; GET ANOTHER BLOCK.
L 1,=A(SBLKSIZ)
L 15,=V(GETSPACE)
BASR 14,15
LTR 15,15 DID WE GET IT?
BNZ GARB10 NO -- SETTLE FOR WHAT WE HAVE.
LR 3,1 YES; COPY BLOCK ADDRESS.
LR Q,1 COMPUTE END OF BLOCK.
AL Q,=A(SBLKSIZ)
BCTR Q,0
ST Q,4(,3) SAVE END IN BLOCK HEADER.
SR 0,0
LA 2,8(,3) POINT TO 1ST CELL.
LA 1,8(,2) INITIALIZE THE BLOCK.
GARB8 STM 0,1,0(2)
LR 2,1
BXLE 1,A,GARB8
LR 1,FREE LINK AT HEAD OF FREE LIST.
STM 0,1,0(2)
LA FREE,8(,3)
L 1,STORBLKS ADD BLOCK TO BLOCK LIST.
ST 1,0(,3)
ST 3,STORBLKS
L 3,=A((SBLKSIZ-8)/8) GET NBR CELLS IN BLOCK.
AR M,3 ADD TO INACTIVE COUNT.
A 3,CELLCNT ADD TO TOTAL COUNT.
ST 3,CELLCNT
GARB10 TM GARBSW,X'01' IS VERBOS SWITCH ON?
BZ GARBSWT NO -- SKIP PRINTOUT.
L 3,GARBTM2+4 YES; GET PDS SPACE.
L 2,CELLCNT GET NBR OF LISP CELLS.
CVD 2,GARBTM2 PLUG INTO MESSAGE.
L 1,=A(GARBMS) BASE FOR MESSAGE
USING GARBMS,1
MVC GARBMS1(8),MASK
ED GARBMS1(8),GARBTM2+4
SR 2,M COMPUTE NBR ACTIVE CELLS.
CVD 2,GARBTM2 PLUG IN.
MVC GARBMS2(8),MASK
ED GARBMS2(8),GARBTM2+4
CVD 3,GARBTM2 STACK UNITS LEFT.
MVC GARBMS3(8),MASK 00044800
ED GARBMS3(8),GARBTM2+4 00044810
PUTMSG GARBMS 00044820
DROP 1
GARBSWT UNSAVE M 00044830
UNSAVE Q 00044840
UNSAVE A 00044850
LM 14,3,GARBTEMP
CR FREE,K4 COLLECT ANY 00044870
BNL CONS1 00044880
OI ERRORIND,X'03' TERMINAL ERROR AND NO PDL PRINT 00044890
ERROR ' *** GC2-STORAGE EXHAUSTED' 00044900
EJECT
* CHECK CELL ADDRESS IN GR0.
*
CKADDR LR 1,0 CLEAR ANY FLAG BITS.
LA 0,0(,1)
N 1,=X'00000007' MUST BE DOUBLEWORD.
BNZ CKADNO
CLR 0,NILR IS IT IN THE STATIC BLOCK?
BL CKADB
CL 0,BOTTOM
BNH CKADOK YES.
CKADB LA 1,STORBLKS NO; SEARCH DYNAMIC BLOCKS.
CKADNXT L 1,0(,1)
LTR 1,1 END OF LIST?
BZ CKADNO YES.
CLR 0,1 CHECK BEGINNING.
BNH CKADNXT NOT HERE.
CL 0,4(,1) CHECK END.
BH CKADNXT NOT HERE.
CKADOK LTR 0,0 OK; SET CC ~= 0.
BR 14
CKADNO SR 1,1 NO GOOD; SET CC=0.
BR 14
EJECT 00044950
LTORG 00044960
PUSHA DC A(PUSH) 00044970
NILA DC A(NIL) 00044980
BOTTOM DC A(TOP1+8*STORESIZ-8) POINTER TO END OF FWS 00044990
STORBLKS DC A(0) HEAD OF STORAGE BLOCK LIST
BPSSTART DC A(BPSST) 00045010
DC A(BPSST+4*BPSSIZE) 00045020
HASHTBL DC A(0) HASH TABLE POINTER
ENDHASH DC A(0) END OF HASH TALE
TEMPORAR EQU * THIS IS THE START OF A 25 00045030
* WORD AREA FOR THE STORAGE OF PTRS THAT MAY BE NEEDED AT 00045040
* GARBAGE COLLECTION. 00045050
OBJECTA DC A(OBJECT) POINTER TO START OF OBJECTLIST 00045060
GARBT DC 3F'0' 00045080
PROGT EQU GARBT TEMP IN CASE OF GARB COLLN 00045090
GOLIST EQU GARBT+4 TEMP IN CASE OF GARB COLLN 00045100
EVLSV DC 3F'0' 00045110
TAPPL DC 2F'0' 00045120
ARGS DC 20A(0) FOR ARGS 3 TO 22
* ====== END OF BASE 13 SECTION ==================================== 00045130
* ==================================================================== 00045140
* ==================================================================== 00045150
* ====== REGISTER 7 IS ALWAYS POINTING TO THE LAST SAVED =========== 00045160
* ====== ELEMENT IN THE STACK. REGISTER 7 MUST THEREFORE NEVER BE 00045170
* ====== USED IN THE ASSEMBLER OR IN THE INTERPRETER =========== 00045180
PUSH DS (STACKSIZ)F 00045190
CNOP 0,8 00045200
EJECT 00045210
*********************************************************************** 00045220
****************** OBJECT LIST ********************************** 00045230
*********************************************************************** 00045240
* THE MACRO 'ECHO' IS USED TO DEFINE THE OBJECT LIST. 00045250
* THE MACRO IS LABELLED IF THE GENERATED ATOM IS TO BE 00045260
* REFERRED TO BY ANOTHER ATOM. 00045270
* THE PARAMETERS ARE AS FOLLOWS. 00045280
* 1 - PRINT NAME (1 TO 8 CHARS) REQD 00045290
* 2 - PROPERTY OPTIONAL 00045300
* 3 - INTERNAL SUBRTN NAME REQD WITH 2 00045310
* 4 - NUMBER OF ARGS FOR 3 ZERO ASSUMED 00045320
* 00045330
* ******************************************* 00045340
* ATOMHEAD *X'MM' A(P1)* A(P2)* 00045350
* ******************************************* 00045360
* 00045370
* ******************************************* 00045380
* P1 *'ABCD' *X'40' A(P3)* 00045390
* ******************************************* 00045400
* 00045410
* ******************************************* 00045420
* P3 *'EF00' *X'40' A(NIL)* 00045430
* ******************************************* 00045440
* 00045450
* ******************************************* 00045460
* P2 * A(PROPERTY)* A(P4)* 00045470
* ******************************************* 00045480
* 00045490
* ******************************************* 00045500
* P4 * A(P5)* A(NIL)* 00045510
* ******************************************* 00045520
* 00045530
* ******************************************* 00045540
* P5 *X'NN' A(SUBRTN)*X'40' A(NIL)* 00045550
* ******************************************* 00045560
* 00045570
* 00045580
* MM X'80' ALPHABETIC ATOM 00045590
* X'C0' FIXED POINT ATOM 00045600
* X'E0' FLOATING POINT ATOM 00045610
* X'D0' LOGICAL ATOM 00045620
* 00045630
* NN IS THE NUMBER OF ARGUMENTS REQUIRED BY SUBRTN 00045640
* P2 AND P3 MAY BE NIL 00045650
* ==================================================================== 00045660
* ====== REGISTER 5 WHICH IS ALWAYS POINTING TO THE ATOM NIL ======= 00045670
* ====== IS ALSO USED AS A BASEREGISTER FOR THE BEGINNING OF === 00045680
* ====== THE OBJECT LIST ======================================= 00045690
* ====== REGISTER 5 IS ALSO USED AS A POINTER TO THE END OF THE ==== 00045700
* ====== STACK. BECAUSE THE ATOMHEAD OF NIL OCCUPIES THE FIRST = 00045710
* ====== WORD BEHIND THE STACK ================================= 00045720
PRINT NOGEN UOM
NIL DC X'80',AL3(NILF),A(NILB) 00045730
OBJECT DC A(NIL,NILF+8) START OF OBJECT LIST 00045740
NILB DC A(APVAL,NILC) 00045750
NILC DC A(NILE,NIL) 00045760
NILE DC A(NIL,NIL) 00045770
NILF DC CL4'NIL ',XL1'60',AL3(NIL) 00045780
ECHO CAR,SUBR,CARR,1 00045790
ECHO CDR,SUBR,CDRR,1 00045800
QUOTE ECHO QUOTE 00045810
ECHO CONS,SUBR,CONS,2 00045820
ECHO EVAL,SUBR,EVAL,2 00045830
ECHO DEFINE,SUBR,DEFINE,1 00045840
ECHO EQ,SUBR,EQ,2 00045850
ECHO EQUAL,SUBR,EQUAL,2 00045860
ECHO ATOM,SUBR,ATOMP,1 00045870
APVAL ECHO APVAL 00045880
EXPR ECHO EXPR 00045890
SUBR ECHO SUBR 00045900
COND ECHO COND 00045910
LAMBDA ECHO LAMBDA 00045920
DC A(*+8,*+20) 00045930
CHROBJ EQU * 00045940
BLANK DC XL1'80' 00045950
DC AL3(*+7) 00045960
DC A(NIL) 00045970
DC CL4' ',XL1'60',AL3(NIL) 00045980
AA ECHO A 00045990
ECHO B 00046000
ECHO C 00046010
ECHO D 00046020
ECHO E 00046030
DC A(F,G-8) 00046040
F DC XL1'80',AL3(PRINF),A(PROPF) 00046050
PRINF DC CL4'F ',XL1'60',AL3(NIL) 00046060
G ECHO G 00046070
ECHO H 00046080
ECHO I 00046090
ECHO € 00046100
PERIOD ECHO . 00046110
ECHO < 00046120
DC A(*+8,*+20) 00046130
LPAR DC XL1'80' 00046140
DC AL3(*+7) 00046150
DC A(NIL) 00046160
DC CL4'( ',XL1'60',AL3(NIL) 00046170
PLUSS ECHO + 00046180
ECHO | 00046190
DC A(*+8,*+20) 00046200
DC XL1'80' 00046210
DC AL3(*+7) 00046220
DC A(NIL) 00046230
DC CL4'&&