perm filename LISPSU.FAI[LSP,BGB] blob sn#049120 filedate 1973-06-18 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00022 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00003 00002	LISP INTERPRETER SUBROUTINES   --- PAGE 10
 00005 00003	
 00006 00004	EQ:	CAMN A,B
 00007 00005	SASSOC:	PUSHJ P,SAS1
 00008 00006	GET:	CDR A,(A)
 00009 00007	PUTPROP:	LAC T,A
 00010 00008	EQUAL:	LAC C,P
 00011 00009	SUBS5:	CDR A,SUBAS
 00012 00010	NCONC:	TDZA R,R
 00013 00011	MEMBER:	DAC A,SUBAS
 00014 00012	GENSYM:	LAC B,[POINT 7,GNUM,34]
 00015 00013	LIST:	LAC B,A
 00017 00014	PA3:	0	lh=0=>rh =next prog statement		*
 00020 00015	ARITHMETIC SUBROUTINES --- PAGE 11
 00021 00016	
 00022 00017	MAKNUM:
 00023 00018	FLOAT:	IDIVI A,400000
 00024 00019	DIVIDE:	CAIN B,INUM0
 00025 00020	general arithmetic op code routine for mixed types
 00027 00021	EXPLODE, READLIST AND FRIENDS --- PAGE 12
 00028 00022	READLIST:	TDZA T,T
 00030 ENDMK
⊗;
SUBTTL LISP INTERPRETER SUBROUTINES   --- PAGE 10

CADADR:	SKIPA A,(A)
CADAAR:	CAR A,(A)↔JRST CADAR
CAAADR:	SKIPA A,(A)
CAAAAR:	CAR A,(A)↔JRST CAAAR
CAADDR:	SKIPA A,(A)
CAADAR:	CAR A,(A)
CAADR:	SKIPA A,(A)
CAAAR:	CAR A,(A)↔JRST CAAR

CADDDR:	SKIPA A,(A)
CADDAR:	CAR A,(A)
CADDR:	SKIPA A,(A)
CADAR:	CAR A,(A)
CADR:	SKIPA A,(A)
CAAR:	CAR A,(A)
CAR.:	CAR A,(A)↔POPJ P,

CDDADR:	SKIPA A,(A)
CDDAAR:	CAR A,(A)↔JRST CDDAR
CDAADR:	SKIPA A,(A)
CDAAAR:	CAR A,(A)↔JRST CDAAR
CDADDR:	SKIPA A,(A)
CDADAR:	CAR A,(A)
CDADR:	SKIPA A,(A)
CDAAR:	CAR A,(A)↔JRST CDAR

CDDDDR:	SKIPA A,(A)
CDDDAR:	CAR A,(A)
CDDDR:	SKIPA A,(A)
CDDAR:	CAR A,(A)
CDDR:	SKIPA A,(A)
CDAR:	CAR A,(A)
CDR.:	CDR A,(A)↔POPJ P,

QUOTE:	CAR A,(A)	;car and quote duplicated for backtrace
	POPJ P,

AASCII:	PUSHJ P,NUMVAL
	LSH A,=29
	PUSHJ P,FWCONS
	PUSHJ P,NCONS
PNGNK1:	PUSHJ P,NCONS
FOO	MOVEI B,PNAME
	PUSHJ P,XCONS
ACONS:	TROA B,-1
NCONS:	TRZA B,-1
XCONS:	EXCH B,A
CONS:	AOS CONSVAL
	HRL B,A
	SKIPN A,F
	JRST [	HLR A,B
		PUSHJ P,AGC
		JRST .-1]
	LAC F,(F)
	DAC B,(A)
	POPJ P,

PATOM:	CAML A,orgFWS
	JRST TRUE
	CAML A,orgHWS
ATOM:	CAILE A,INUMIN
	JRST TRUE
	HLLE A,(A)
	AOJE A,TRUE
	JRST FALSE
EQ:	CAMN A,B
	JRST TRUE
	JRST FALSE

LENGTH:	MOVEI B,0
LNGTH1:	CAILE A,INUMIN
	JRST FIX1
	HLLE C,(A)
	AOJE C,FIX1
	CDR A,(A)
	AOJA B,LNGTH1

LAST:	CDR B,(A)
	CAILE B,INUMIN
	POPJ P,
	HLLE B,(B)
	AOJE B,CPOPJ
	CDR A,(A)
	JRST LAST

DIP.:	EXCH A,B
RPLACA:	DIP B,(A)
	POPJ P,

DAP.:	EXCH A,B
RPLACD:	DAP B,(A)
	POPJ P,

ZEROP:	PUSHJ P,NUMVAL
NOT:
NULL:	JUMPN A,FALSE
TRUE:
FOO	MOVEI A,TRUTH
	POPJ P,

FW0CNS:	MOVEI A,0
FWCONS:	JUMPN FF,FWC1
	EXCH A,FWC0#
	PUSHJ P,AGC
	EXCH A,FWC0
FWC1:	EXCH A,(FF)
	EXCH A,FF
	POPJ P,

SASSOC:	PUSHJ P,SAS1
	JCALLF 0,(C)
	POPJ P,

SAS0:	CAR B,T
SAS1:	JUMPE B,CPOPJ
	MOVS T,(B)
	MOVS TT,(T)
	CAIE A,(TT)
	JRST SAS0
	CDR A,T
CPOPJ1:	AOS (P)
	POPJ P,

ASSOC:	PUSHJ P,SAS1
FALSE:	MOVEI A,NIL
CPOPJ:	POPJ P,

REVERSE:	LAC T,A
	MOVEI A,0
	JUMPE T,CPOPJ
	CAR B,(T)
	CDR T,(T)
	PUSHJ P,XCONS
	JUMPN T,.-3
	POPJ P,


REMPROP:	CDR T,(A)
	MOVS TT,(T)
	CAIN B,(TT)
	JRA TT,REMP1
	CAR A,TT
	CDR T,(A)
	JUMPN T,REMPROP+1
	JRST FALSE

REMP1:	DAP TT,(A)
	JRST TRUE
GET:	CDR A,(A)
	MOVS D,(A)
	CAIN B,(D)
	JRST CADR
	CAR A,D
	CDR A,(A)
	JUMPN A,GET+1
	POPJ P,

GETL:	CDR A,(A)
GETL0:	CAR T,(A)
	LAC C,B
GETL1:	MOVS TT,(C)
	CAIN T,(TT)
	POPJ P,
	CAR C,TT
	JUMPN C,GETL1
	CDR A,(A)
	CDR A,(A)
	JUMPN A,GETL0
	POPJ P,

NUMBERP:	CAILE A,INUMIN
	JRST TRUE
	HLLE T,(A)
	AOJN T,FALSE
	CDR A,(A)
	CAR A,(A)
FOO	CAIE A,FIXNUM
FOO	CAIN A,FLONUM
	JRST TRUE
NUMBP2:	JRST FALSE	;bignums change this to JRST BIGNP
PUTPROP:	LAC T,A
	CDR A,(A)
CSET3:	MOVS TT,(A)
	CAR A,TT
	CAIN C,(TT)
	JRST CSET2
	CDR A,(A)
	JUMPN A,CSET3
	CDR A,(T)
	PUSHJ P,XCONS
	CDR B,C
	PUSHJ P,XCONS
	DAP A,(T)
	JRST CADR

CSET2:
FOO	CAIE C,VALUE
	JRST CSET1
	CDR T,(B)
	CAR A,(A)
	DAP T,(A)
	JRST PROG2

CSET1:	DIP B,(A)
PROG2:	LAC A,B
	POPJ P,

DEFPROP:	
	CDR B,(A)
	CDR C,(B)
	CAR A,(A)
	CAR B,(B)
	CAR C,(C)
	PUSH P,A
	PUSHJ P,PUTPROP
	JRST POPAJ
EQUAL:	LAC C,P
EQUAL1:	CAMN A,B
	JRST TRUE
	LAC T,A
	LAC TT,B
	PUSHJ P,ATOM
	EXCH A,B
	PUSHJ P,ATOM
	CAMN A,B
	JRST EQUAL3
EQUAL4:	LAC P,C
	JRST FALSE

EQUAL3:	JUMPN A,EQ2
	PUSH P,T
	PUSH P,TT
	CAR A,(T)
	CAR B,(TT)
	PUSHJ P,EQUAL1
	JUMPE A,EQUAL4
	POP P,B
	POP P,A
	CDR A,(A)
	CDR B,(B)
	JRST EQUAL1

EQ2:	PUSH P,T
	LAC A,T
	PUSHJ P,NUMBERP
	JUMPE A,EQUAL4
	LAC A,TT
	PUSHJ P,NUMBERP
	JUMPE A,EQUAL4
	LAC A,(P)
	DAC C,(P)
	LAC B,TT
	JSP C,OP
	JUMPL COMP3
	JUMPL COMP3

COMP3:	POP P,C
	CAME A,TT
	JRST EQUAL4
	JRST TRUE
SUBS5:	CDR A,SUBAS
	POPJ P,

SUBST:	DAC A,SUBAS#
	DAC B,SUBBS#
SUBS0A:	LAC A,SUBAS
	LAC B,SUBBS
	PUSH P,C
	LAC A,C
	PUSHJ P,EQUAL
	POP P,C
	JUMPN A,SUBS5
	CAILE C,INUMIN
	JRST EV6A
	HLLE T,(C)
	AOJN T,SUBS2
EV6A:	LAC A,C
	POPJ P,

SUBS2:	PUSH P,C
	CAR C,(C)
	PUSHJ P,SUBS0A
	EXCH A,(P)
	CDR C,(A)
	PUSHJ P,SUBS0A
	POP P,B
	JRST XCONS
NCONC:	TDZA R,R
APPEND:	MOVEI R,.APPEND-.NCONC
	JUMPE T,FALSE
	POP P,B
APP2:	AOJE T,PROG2
	POP P,A
	PUSHJ P,.NCONC(R)
	LAC B,A
	JRST APP2

.NCONC:	JUMPE A,PROG2
	LAC TT,A
	LAC C,TT
	CDR TT,(C)
	JUMPN TT,.-2
	DAP B,(C)
	POPJ P,

.APPEND:	JUMPE A,PROG2
	MOVEI C,AR1
	LAC TT,A
APP1:	CAR A,(TT)
	PUSH P,B
	PUSHJ P,CONS	;saves b
	POP P,B
	DAP A,(C)
	LAC C,A
	CDR TT,(TT)
	JUMPN TT,APP1
	JRST SUBS4
MEMBER:	DAC A,SUBAS
MEMB1:	JUMPE B,FALSE
	DAC B,SUBBS
	LAC A,SUBAS
	CAR B,(B)
	PUSHJ P,EQUAL
	JUMPN A,CPOPJ
	LAC B,SUBBS
	CDR B,(B)
	JRST MEMB1

MEMQ:	JUMPE B,FALSE
	MOVS C,(B)
	CAIN A,(C)
	JRST TRUE
	CAR B,C
	JUMPN B,MEMQ+1
	JRST FALSE

AND:
FOO	HRLI A,TRUTH
OR:	CAR C,A
	PUSH P,C
ANDOR:	CDR C,A
	JUMPE C,AOEND
	MOVSI C,(<SKIPE (P)>)
	TLNE A,-1
	MOVSI C,(<SKIPN (P)>)
	XCT C
	JRST AOEND
	DAC A,(P)
	CAR A,(A)
	PUSHJ P,EVAL
	EXCH A,(P)
	HRR A,(A)
	JRST ANDOR

AOEND:	POP P,A
	SKIPE A
FOO	MOVEI A,TRUTH
	POPJ P,
GENSYM:	LAC B,[POINT 7,GNUM,34]
	MOVNI C,4
	MOVEI TT,"0"

GENSY2:	LDB T,B
	AOS T
	DPB T,B
	CAIG T,"9"
	JRST GENSY1
	DPB TT,B
	ADD B,[XWD 70000,0]
	AOJN C,GENSY2

GENSY1:	LAC A,GNUM
	PUSHJ P,FWCONS
	PUSHJ P,NCONS
	JRST PNGNK1

GNUM:	ASCII /G0000/			;*

CSYM:	CAR A,(A)
	PUSH P,A
FOO	MOVEI B,PNAME
	PUSHJ P,GET
	JUMPE A,NOPNAM
	CAR A,(A)
	LAC A,(A)
	DAC A,GNUM
	JRST POPAJ
LIST:	LAC B,A
FOO	MOVEI A,CEVAL
	JRST MAPCAR

EELS:	CAR TT,(T)	;interpret lsubr call
	CDR A,(AR1)
ILIST:	MOVEI T,0
	JUMPE A,ILIST2
ILIST1:	PUSH P,A
	CAR A,(A)
	PUSH P,TT
	DIP T,(P)
	PUSHJ P,EVAL
ILIST3:	POP P,TT
	HLRE T,TT
	EXCH A,(P)
	CDR A,(A)
	SOS T
	JUMPN A,ILIST1
ILIST2:	JRST (TT)

MAPC:	TLO A,400000
MAP:	TLOA A,200000
MAPCAR:	TLO A,400000
MAPLIST:	JUMPE B,FALSE
	PUSH P,A
	PUSH P,B
	PUSH P,B
	DIPZ P,(P)
MAPL2:	LAC A,-1(P)
	SKIPGE -2(P)
	CAR A,(A)
	CALLF 1,@-2(P)
	LDB C,[POINT 1,-2(P),1]
	JUMPN C,MAP1
	PUSHJ P,NCONS
	HLR B,(P)
	DAP A,(B)
	DIP A,(P)
MAP1:	CDR B,@-1(P)
	DAC B,-1(P)
	JUMPN B,MAPL2
	POP P,AR1
	SUB P,[XWD 2,2]
SUBS4:	CDR A,AR1
	POPJ P,0
PA3:	0	;lh=0=>rh =next prog statement		*
	;lh - =>rh = tag to go to
PA4:	0	;lh=-1,rh=pntr to prog less bound var list	*
	;lh=+,rh return value
	;2.1=>dont do unbnd

PROG:	PUSH P,PA3
	PUSH P,PA4
	CAR TT,(A)
	CDR A,(A)
	HRROM A,PA4
	DAC A,PA3
	JUMPE TT,PG0
	MOVSI C,1
FOO	MOVEI B,VALUE
	DAC SP,SPSV#
	ANDCAM C,PA4

PG7A:	CAR A,(TT)
	MOVEI AR1,0
	PUSHJ P,BIND
	CDR TT,(TT)
	JUMPN TT,PG7A
	PUSH SP,SPSV

PG0:	SKIPA T,PA3
PG5A:	LAC T,A
PG1:	JUMPE T,PG2
	CAR A,(T)
	CDR T,(T)
	HLLE B,(A)
	AOJE B,PG1
	DAC T,PA3
	PUSHJ P,EVAL
	SKIPL A,PA4
	JRST PG4	;return
	SKIPL T,PA3
	JRST PG1
PG5:	JUMPE A,EG1
	CAR TT,(A)
	CDR A,(A)
	CAIN TT,(T)
	JRST PG5A	;found tag
	JRST PG5

PG2:	TDZA A,A
PG4:	HRRZS A
	MOVSI B,1
	TDNN B,PA4
	PUSHJ P,UNBIND
ERRP4:	POP P,PA4
	POP P,PA3
	POPJ P,


GO:	CAR A,(A)
	HRROM A,PA3
	HLLE B,(A)
	AOJE B,FALSE
	PUSHJ P,EVAL
	JRST GO+1


RETURN:	HLL A,PA4
	TLZ A,-2
	DAC A,PA4
	POPJ P,

SETQ:	CAR B,(A)
	PUSH P,B
	PUSHJ P,CADR
	PUSHJ P,EVAL
	LAC B,A
	POP P,A
SET:	LAC AR1,B
	PUSHJ P,BIND
	SUB SP,[XWD 1,1]
	LAC A,AR1
	POPJ P,

CON2:	CDR A,(T)
COND:	JUMPE A,CPOPJ	;entry
	PUSH P,A
	CAR A,(A)
	CAR A,(A)
	PUSHJ P,EVAL
	POP P,T
	JUMPE A,CON2
	CAR T,(T)
COND2:	CDR T,(T)
	JUMPE T,CPOPJ
	PUSH P,T
	CAR A,(T)
	PUSHJ P,EVAL
	POP P,T
	JRST COND2
SUBTTL ARITHMETIC SUBROUTINES --- PAGE 11

;macro expander -- (foo a b c) => (*foo (*foo a b) c)
EXPAND:	LAC C,B
	CDR A,(A)
	PUSHJ P,REVERSE
	JRST EXPA1

EXPN1:	LAC C,B
EXPA1:	CDR T,(A)
	CAR A,(A)
	JUMPE T,CPOPJ
	PUSH P,A
	LAC A,T
	PUSHJ P,EXPA1
	EXCH A,(P)
	PUSHJ P,NCONS
	POP P,B
	PUSHJ P,XCONS
	LAC B,C
	JRST XCONS


ADD1:	CAILE A,INUMIN
	CAIL A,-2
	SKIPA B,[INUM0+1]
	AOJA A,CPOPJ
.PLUS:	JSP C,OP
	ADD A,TT
	FADR A,TT

SUB1:	CAILE A,INUMIN+1
	SOJA A,CPOPJ
	MOVEI B,INUM0+1
.DIF:	JSP C,OP
	SUB A,TT
	FSBR A,TT

.TIMES:	JSP C,OP
	IMUL A,TT
	FMPR A,TT

.QUO:	CAIN B,INUM0
	JRST ZERODIV
	JSP C,OP
	IDIV A,TT
	FDVR A,TT

.GREAT:	EXCH A,B
	JUMPE B,FALSE
.LESS:	JUMPE A,CPOPJ
	JSP C,OP
	JRST COMP2	;bignums know about me
	JRST COMP2

COMP2:	CAML A,TT
	JRST FALSE
	JRST TRUE
MAKNUM:
FOO	CAIN B,FIXNUM
	JRST FIX1A
FLO1A:
FOO	MOVEI B,FLONUM
	PUSHJ P,FWCONS
	JRST ACONS-1

FIX1B:	SUBI A,INUM0
FOO	MOVEI B,FIXNUM
	PUSHJ P,FWCONS
	JRST ACONS-1

NUMVLX:	JFCL 17,.+1
NUMVAL:	CAIG A,INUMIN
	JRST NUMAG1
	SUBI A,INUM0
FOO	MOVEI B,FIXNUM
	POPJ P,

NUMAG1:	DAC A,AR1
	CDR A,(A)
	CAR B,(A)
	CDR A,(A)
FOO	CAIE B,FIXNUM
FOO	CAIN B,FLONUM
	SKIPA A,(A)
NUMV4:	SKIPA A,AR1
	POPJ P,
NUMV2:	PUSHJ P,EPRINT	;bignums know about me
	JRST NONNUM

NUMV3:	JRST NONNUM		;bignums change me to JRST BIGDIS
FLOAT:	IDIVI A,400000
	SKIPE A
	TLC A,254000
	TLC B,233000
	FADR A,B
	POPJ P,

FIX:	PUSH P,A
	PUSHJ P,NUMVAL
FOO	CAIE B,FLONUM
	JRST POPAJ
	MULI A,400
	TSC A,A
	JFCL 17,.+1
	ASH B,-243(A)
FIX2:	JFCL 10,FIXOV	;bignums change me to jfcl 10,bfix
	POP P,A
FIX1:	LAC A,B
	JRST FIX1A

MINUSP:	PUSHJ P,NUMVAL
	JUMPGE A,FALSE
	JRST TRUE

MINUS:	PUSHJ P,NUMVLX
	MOVNS A
	JFCL 10,@OPOV
	JRST MAKNUM

ABS:	PUSHJ P,NUMVLX
	MOVMS A
	JRST MINUS+2
DIVIDE:	CAIN B,INUM0
	JRST ZERODIV
	JSP C,OP
	JUMPN RDIV		;bignums know about me
	JRST ILLNUM
RDIV:	IDIV A,TT
	PUSH P,B
	PUSHJ P,FIX1A
	EXCH A,(P)
	PUSHJ P,FIX1A
	POP P,B
	JRST XCONS

REMAINDER:
	PUSHJ P,DIVIDE
	JRST CDR.

FIXOV:	ERR1 [SIXBIT /INTEGER OVERFLOW!/]
ZERODIV:ERR1 [SIXBIT /ZERO DIVISOR!/]
FLOOV:	ERR1 [SIXBIT /FLOATING OVERFLOW!/]
ILLNUM:	ERR1 [SIXBIT /NON-INTEGRAL OPERAND!/]

GCD:	JSP C,OP
	JUMPA GCD2	;bignums know about me
	JRST ILLNUM
GCD2:	MOVMS A
	MOVMS TT
;euclid's algorithm
GCD3:	CAMG A,TT
	EXCH A,TT
	JUMPE TT,FIX1A
	IDIV A,TT
	LAC A,B
	JRST GCD3
;general arithmetic op code routine for mixed types

OP:	CAIG A,INUMIN
	JRST OPA1
	SUBI A,INUM0
	CAIG B,INUMIN
	JRST OPA2
	HRREI TT,-INUM0(B)
	XCT (C)	;inum op  (cannot cause overflow)
FIX1A:	ADDI A,INUM0
	CAILE A,INUMIN
	CAIL A,-1
	JRST FIX1B
	POPJ P,

OPA1:	CDR A,(A)
	CAR T,(A)
	CDR A,(A)
FOO	CAIE T,FIXNUM
	JRST OPA6
	SKIPA A,(A)
OPA2:
FOO	MOVEI T,FIXNUM
	CAILE B,INUMIN
	JRST OPB2
	CDR B,(B)
	CDR TT,(B)
	CAR B,(B)
FOO	CAIE B,FIXNUM
	JRST OPA5
	SKIPA TT,(TT)
OPB2:	HRREI TT,-INUM0(B)
	LAC AR1,A
	JFCL 17,.+1
	XCT (C)	;fixed pt op
OPOV:	JFCL 10,FIXOV	;bignums change this to jfcl 10,fixovl
	JRST FIX1A

OPA6:	CAILE B,INUMIN
	JRST OPB7
	CDR B,(B)
	CDR TT,(B)
	CAR B,(B)
FOO	CAIE B,FLONUM
	JRST OPB3
FOO	CAIE T,FLONUM
	JRST NUMV3
	LAC A,(A)
	LAC TT,(TT)
OPR:	JFCL 17,.+1
	XCT 1(C)	;flt pt op
	JFCL 10,FLOOV
	JRST FLO1A

OPA5:
FOO	CAIE B,FLONUM
	JRST NUMV3
	PUSHJ P,FLOAT
	JRST OPR-1

OPB3:
FOO	CAIE B,FIXNUM
	JRST NUMV3
	SKIPA TT,(TT)
OPB7:	HRREI TT,-INUM0(B)
FOO	MOVEI B,FIXNUM
FOO	CAIE T,FLONUM
	JRST NUMV3
	LAC A,(A)
	EXCH A,TT
	PUSHJ P,FLOAT
	EXCH A,TT
	JRST OPR
SUBTTL EXPLODE, READLIST AND FRIENDS --- PAGE 12

FLATSIZE:	HLLZS FLAT1
	MOVEI R,FLAT2
	PUSHJ P,PRINTA
FLAT1:	MOVEI A,X			;*
	JRST FIX1A
FLAT2:	AOS FLAT1
	POPJ P,


%EXPLODE:	SKIPA R,.+1
EXPLODE:	HRRZI R,EXPL1
	MOVSI AR1,AR1
	PUSHJ P,PRINTA
	JRST SUBS4

EXPL1:	PUSH P,B
	PUSH P,C
	ANDI A,177
	CAIL A,"0"
	CAILE A,"9"
	JRST EXPL2
	ADDI A,INUM0-"0"
	JRST EXPL4

EXPL2:	PUSH P,AR1
	PUSH P,TT
	PUSH P,T
	LSH A,35
	LAC C,SP
	PUSH C,A
	MOVEI AR1,1
	PUSHJ P,INTER0
	POP P,T
	POP P,TT
	POP P,AR1
EXPL4:	PUSHJ P,NCONS
	HLR B,AR1
	DAP A,(B)
	DIP A,AR1
	POP P,C
	JRST POPBJ
READLIST:	TDZA T,T
MAKNAM:	MOVNI T,1
	DAC T,NOINFG
	PUSH P,OLDCH
	SETZM OLDCH
	JUMPE A,NOLIST
	DAP A,MKNAM3
	MOVEI A,MKNAM2
	PUSHJ P,READ0
	CDR T,MKNAM3
	CAIE T,-1
	JUMPN T,[ERR1 [SIXBIT /MORE THAN ONE S-EXPRESSION-MKNAM!/]]
	POP P,OLDCH
	POPJ P,

MKNAM2:	PUSH P,B
	PUSH P,T
	PUSH P,TT
MKNAM3:	MOVEI TT,X
	JUMPE TT,MKNAM6
	CAIN TT,-1
	ERR1 [SIXBIT /READ UNHAPPY-MAKNAM!/]
	CDR B,(TT)
	DAP B,MKNAM3
	CAR A,(TT)
	CAIGE A,INUMIN
	JRST MKNAM5
	SUBI A,INUM0-"0"
MKNAM4:	POP P,TT
	POP P,T
	JRST POPBJ

MKNAM5:	CAR A,(TT)
FOO	MOVEI B,PNAME
	PUSHJ P,GET
	CAR A,(A)
	LDB A,[POINT 7,(A),6]
	JRST MKNAM4

MKNAM6:	MOVEI A," "
	HLLOS MKNAM3
	JRST MKNAM4