.TITLE SET ; JEFFREY KODOSKY ARL NOV75 ; ; SUBR ; ENTRY: 2 ARGS ; ; EXIT: 1 ARG ; ERRORS: A7, INVALID FIRST ARG ; CALLS: PRIN1 ; PRINT ; PRNT ; PUT ; SASSOC ; EVLIS ; CDR ; GET ; INDEX ; CONS .GLOBL SET,ZSET,QPRIN1,QPRINT,QPRNT,QSASSOC,QPUT .GLOBL ADPROG,TSRETN,$ALIST,APVAL,QA7ERR,YALIST .GLOBL YARRAY,QGET,QCONS,QEVLIS,QCDR,QINDEX SET: CMP -2(R4),#ADPROG ;ARE WE AT THE TOP LEVEL OF A PROG? BNE SET01 CMP -4(R4),#TSRETN ;YES: TRACESETTING? BNE SET01 QPRIN1 ;YES: PRINT ARG1=ARG2 MOV #BUFEQ,R3 QPRNT MOV 2(R5),-(R5) QPRINT TST (R5)+ SET01: ROOM 4 MOV @R5,R0 BIT #3,(R0)+ BNE SETERR BIT #2,@R0 BNE SETERR BIT #1,@R0 BNE SET02 TST @R0 ;(SETQ (ALIST) ) IS A SPECIAL BNE SET01A ;CONSTRUCTION CMP -(R0),YALIST BNE SETERR MOV @R5,$ALIST JMP @-(R4) SET01A: MOV @R5,-(R5) MOV YARRAY,-(R5) MOV -(R0),-(R5) QGET MOV (R5)+,2(R5) BEQ SETERR MOV @R5,-(R5) ;(SETQ (...) ) QCDR ;IS ALSO A SPECIAL CONSTRUCTION QEVLIS ;EVALUATE THE SUBSCRIPT LIST MOV 2(R5),R3 MOV (R5)+,@R5 MOV @R3,-(R5) QCONS QINDEX MOV @R5,@R0 ;SET INDEXED ARRAY ELEMENT JMP @-(R4) SETERR: QA7ERR SET02: CLR -(R5) ;SASSOC[;ALIST;NIL]---> MOV $ALIST,-(R5) MOV 4(R5),-(R5) QSASSOC TST @R5 BEQ SET03 MOV (R5)+,R0;RPLACD[SASSOC[...];] CMP (R5)+,(R0)+ MOV @R5,@R0 JMP @-(R4) SET03: TST (R5)+ ;T--->PUT[;APVAL;] MOV (R5)+,R0 MOV @R5,-(R5) MOV APVAL,-(R5) MOV R0,-(R5) QPUT TST (R5)+ JMP @-(R4) BUFEQ: .ASCIZ / = / .EVEN ZSET=.-SET .PAGE ; FSUBR ; ENTRY: 1 ARG ( ) ; EXIT: 1 ARG SET[CAR[];EVAL[CADR[]]] ; ERRORS: NONE ; CALLS: EVAL ; CAR ; CDR ; SET .GLOBL SETQ,ZSETQ,QCAR,QCDR,QEVAL SETQ: ROOM 3 MOV $ALIST,-(R5) ;SAVE PRESENT CONTEXT MOV 2(R5),-(R5) QCDR QCAR QEVAL ;EVAL[CADR[]] MOV (R5)+,R3 MOV (R5)+,$ALIST ;RESTORE CONTEXT QCAR MOV @R5,-(R5) MOV R3,2(R5) JMP SET ZSETQ=.-SETQ .END