perm filename ARC[3,PMP] blob sn#012955 filedate 1972-11-16 generic text, type T, neo UTF8
00100	TITLE ARC
00200	
00300		↓A←1
00400		↓B←2 ↓C←3 ↓D←4 ↓E←5 ↓F←6 ↓G←7 ↓H←10 ↓J←11
00500		↓P←17 ↓T←15 ↓T1←16 ↓X←13 ↓Y←14 ↓Z←12
00600	
00700		FSIZE←←=10
00800		PDLEN←←200
00900	PDL:	BLOCK PDLEN
01000	ZLIST:	.+2
01100	ZPNT:	XWD -=400,.
01200		BLOCK =400
01300	FSTPNT:	0
01400	STRTDS:
01500	DZL:	0
01600	CURZL:	0
01700	DZU:	10.0
01800	DSCL:	4.0
01850	DOSCAL:	300.0
01900	XOFF:	0
02000	YOFF:	0
02020	CLPNT1:	0
02040	CLPNT2:	0
02100	CURX:	0
02200	CURY:	0
02210	CCENTX:	0
02220	CCENTY:	0
02225	MANX:	0
02230	MANY:	-70.0
02232	MANZ:	0
02235	COS:	1.0
02240	SIN:	0
02245	TPNT:	0
02250	TBUF:	BLOCK 400
02300		DBLEN←←400
02400	DSP:	DBUF-1
02500		0
02600		0
02700	DBUF:	BLOCK DBLEN+2
02800	CURB:	.+2
02900		22
03000		0
03100	CURV:	0
03200		BYTE (11)10,10(3)5,0(8)46
03300		BYTE (11)0-20,-20(14)6
03400		BYTE (11)0,20(14)46
03500		BYTE (11) 20,-20(14)6
03600		BYTE (11)0,0(3)3,0(8)46
03700	CURG:	0
03800		0
03900		BLOCK 12
04000	
04100	
04200	STRT:	CALLI
04300		MOVE P,[XWD -PDLEN,PDL-1]
04400		EXTERN JOBREL,JOBSYM
04500		DPYPOS -400
04600		DPYSIZ 4002
04700		MOVE A,JOBSYM
04800		HLRE B,A
04900		SUB A,B
05000		ADDI A,2
05100		HRRZM A,NXTF#
05200		PUSHJ P,CORGET
05300		SETZM WCUR#
05350		SETZM FCLS#
05400		JRST MAIN
05500	
     

00100		DEFINE  TONEXT (A)
00200	{	ADDI A,1
00300		MOVE X,(A)
00400		TLNE X,-1
00500		JRST .+6
00550		JUMPE X,.+5
00600		CAIN X,-1
00700		JRST .+4
00800		HRRZ A,X
00900		JRST .-7}
01000	;→→ NEXT OK
01100	;→→ NO NEXT
01200	
01300	  DEFINE GETFST (A,B)
01400	{	SKIPN A,FSTPNT
01500		JSR NOFST
01600		MOVE B,(A)
01700		MOVEM B,FSTPNT}
01800	
01900	   DEFINE MM (AC,OFF1,I1,OFF2,I2)
02000	{	MOVE AC,OFF1(I1)
02100		MOVEM AC,OFF2,(I2)}
02200	
     

00100	CORGET:	HRRZ T,JOBREL
00200		ADDI T,2000
00300		CALLI T,11
00400		JRST 4,.
00500		HRRZ T,NXTF
00600		MOVEM T,FSTPNT
00700	CG1:	ADDI T,FSIZE
00800		HRRZM T,-FSIZE(T)
00900		CAMG T,JOBREL
01000		JRST CG1
01100		SUBI T,FSIZE
01200		SETZM -FSIZE(T)
01300		MOVEM T,NXTF
01400		POPJ P,
01403	NOFST:	0
01404		PUSH P,T
01406		PUSHJ P,CORGET
01407		POP P,T
01409		SOS NOFST
01412		SOS NOFST
01415		JRST @NOFST
01500	
01600	DISP:	MOVE A,ZLIST
01700		HRRZ B,ZPNT
01800		CAMLE A,B
01900		POPJ P,
02000		MOVE E,[XWD -DBLEN,DBUF+1]
02060		MOVEI C,14146
02080		MOVEM C,DBUF
02100	DN1:	MOVE C,(A)
02200		MOVE D,(C)	;GET OBJECT TYPE
02220		SETZM 11(C)
02300		JRST @DTAB1(D)	;GO TO ROUTINE FOR OBJECT
02400	DTAB1:	.-1
02500		DWALL
02600		DFLOOR
02700		DDOOR
02800		DWIND
02900		DSTAIR
03000	
03100	
03200	DFLOOR:	MOVE D,1(C)	;GET Z LEVEL
03300		CAMGE D,DZL	;IS THIS FLOOR IN THE RANGE?
03400		JRST DNXT	;NO
03500		CAMLE D,DZU	;?
03600		JRST DNXT	;NO
03700		MOVE D,10(C)	;GET POINTER TO CORNER LIST
03800		JUMPE D,DNXT	;NONE?
03820		SETOM 11(C)
03900		MOVEM D,SAVEXY#	;SAVE POINTER TO FIRST X,Y
04000		MOVE X,(D)	;GET X
04100		MOVE Y,1(D)	;GET Y
04200		PUSHJ P,IVECT	;PUT VECTOR THERE
04300	DFL2:	ADDI D,1
04400		TONEXT(D)
04500		SKIPA Y,1(D)	;GET NEXT Y
04600		JRST DFL1	;NO NEXT
04700		PUSHJ P,VECT	;PUT VISIBLE VECTOR THERE
04800		JRST DFL2
04900	DFL1:	MOVE D,SAVEXY	;GET STARTING X,Y
05000		MOVE X,(D)
05100		MOVE Y,1(D)
05200		PUSHJ P,VECT
05300	DNXT:	ADDI A,1
05400		CAMG A,B
05500		JRST DN1
05600		SETZM (E)
05700		SUBI E,DBUF-2
05800		HRRZM E,DSP+1
05900		UPGIOT 5,DSP
06000		POPJ P,
06100	
06200	XYVECT:	FAD X,XOFF
06300		FAD Y,YOFF
06400		FMP X,DSCL
06500		FMP Y,DSCL
06600		FIX X,233000
06700		FIX Y,233000
06800		ASH X,=25
06900		DPB Y,[POINT 11,X,21]
07000		POPJ P,
07100	IVECT:	PUSHJ P,XYVECT
07200		TROA X,40
07300	VECT:	PUSHJ P,XYVECT
07400		TRO X,106
07500		MOVEM X,(E)
07600		AOBJN E,.+2
07700		SUBI E,1
07800		POPJ P,
07900	
08000	DWALL:	MOVE D,1(C)	;GET Z LEVEL
08100		CAMLE D,DZU	;WALL TOO HIGH?
08200		JRST DNXT	;YES
08300		CAMGE D,DZL	;WALL TOO LOW?
08400		JRST DNXT	;YES
08500		MOVEI F,3(C)	;POINT TO X,Y,X,Y
08600		MOVE G,2(C)	;GET THICKNESS
08650		SETOM 11(C)
08700		PUSHJ P,WALDIS	;DISPLAY THE WALL
08800		JRST DNXT
08900	WALDIS:	MOVE X,(F)
09000		MOVE Y,1(F)
09100		FSB X,2(F)
09200		FSB Y,3(F)
09300		MOVEM Y,DY#
09400		MOVEM X,DX#
09500		MOVMS X
09600		MOVMS Y
09700		CAMGE X,Y
09800		EXCH X,Y
09900		FMPR Y,[0.5]
10000		FAD X,Y
10100		MOVEM X,LEN#
10200		MOVE Y,DY
10300		MOVE X,DX
10400		FMPR X,G
10500		FMPR Y,G
10600		FDVR X,LEN
10700		FDVR Y,LEN
10800		MOVEM X,DY
10900		MOVEM Y,DX
11000	   DEFINE TEMP $(T1,T2,OFF,TYP)
11100	{	MOVE X,OFF(F)
11200		MOVE Y,OFF+1(F)
11300		F$T1 X,DX
11400		F$T2 Y,DY
11500		PUSHJ P,TYP$VECT}
11600	
11700		TEMP (AD,SB,0,I)
11800		TEMP (SB,AD,0)
11900		TEMP (SB,AD,2)
12000		TEMP (AD,SB,2)
12100		TEMP (AD,SB,0)
12200		TEMP (SB,AD,2)
12300		TEMP (AD,SB,2,I)
12400		TEMP (SB,AD,0)
12500		POPJ P,
12600	
12700	CURDIS:	MOVE X,CURX
12800		MOVE Y,CURY
12820		SKIPN A,CMOVE
12840		JRST .+3
12860		MOVEM X,(A)
12880		MOVEM Y,1(A)
12900		MOVEI E,CURV
13000		PUSHJ P,IVECT
13100		SETZM CURG
13200		SKIPE E,WCUR
13300		PUSHJ P,@(E)[0
13400			WCWAL
13500			WCFLR]
13600		UPGIOT 4,CURB
13700		POPJ P,
13800	WCFLR:	MOVEI E,CURG
13900		MOVE B,SAVB#
14000		HLRZ C,B
14100		ADD C,B
14200		MOVE X,-2(C)
14300		MOVE Y,-1(C)
14400		PUSHJ P,IVECT
14500		MOVE B,CURV
14600		TRZ B,40
14700		MOVEM B,CURG+1
14800		MOVEI E,CURG+2
14900		MOVE B,WCUR1#
15000		MOVE X,(B)
15100		MOVE Y,1(B)
15200		PUSHJ P,VECT
15300		SETZM CURG+3
15400		POPJ P,
15500	WCWAL:	MOVEI E,CURG
15600		HRLI E,400000
15700		MOVE F,WCUR1
15800		ADDI F,3
15900		MOVEI G,2(F)
16000		HRLI G,CURX
16100		BLT G,3(F)
16200		MOVE G,-1(F)
16300		PUSHJ P,WALDIS
16400		SETZM (E)
16500		POPJ P,
16600	
16700	NUMDIS:	SETZM DBUF
16800		AOS DBUF
16900		MOVE T,[XWD DBUF,DBUF+1]
17000		BLT T,DBUF+100
17100		MOVEI T,DBUF
17200		MOVE X,[BYTE(11)100,-700(3)4,3(8)146]
17300		MOVEI Y,STRTDS
17400		MOVEI C,3
17500	NDS1:	MOVE A,(Y)
17600		FIX A,233000
17700		MOVEM X,(T)
17800		ADDI T,1
17900		HRLI T,440700
18000		PUSHJ P,NUMC
18100		ADDI T,1
18200		ADDI Y,1
18300		ADD X,[BYTE(11)200]
18400		SOJG C,NDS1
18500		SETZM (T)
18600		SUBI T,DBUF-2
18700		HRRZM T,DSP+1
18800		UPGIOT 6,DSP
18900		POPJ P,
19000	NUMC:	IDIVI A,12
19100		JUMPE A,.+4
19200		HRLM B,(P)
19300		PUSHJ P,NUMC
19400		HLRZ B,(P)
19500		ADDI B,60
19600		IDPB B,T
19700		POPJ P,
19800	
19900	INSCUR:	MOVE X,CURX
20000		MOVE Y,CURY
20100	INSXY:	HLRZ E,B
20200		ADDI E,2
20300		CAIL E,FSIZE
20400		JRST INSXN
20500		HRL B,E
20600		ADD E,B
20700		MOVEM X,-2(E)
20800		MOVEM Y,-1(E)
20900		SETZM (E)
21000		HLLOS (E)
21100		POPJ P,
21200	INSXN:	PUSH P,D
21300		GETFST T,D
21400		POP P,D
21500		ADD E,B
21600		HRRZM T,-2(E)
21700		HRRZ B,T
21800		JRST INSXY
21900	
22000	INTERS:	MOVE T,(B)
22100		FSB T,(A)	;DX1
22200		MOVEM T,DX1#
22300		MOVE X,1(B)
22400		FSB X,1(A)	;DY1
22500		MOVEM X,DY1#
22600		FDVR T,X	;M1
22700		MOVE T1,(D)
22800		FSB T1,(C)	;DX2
22900		MOVE Y,1(D)
23000		FSB Y,1(C)	;DY2
23100		MOVEM T1,DX2#
23200		MOVEM Y,DY2#
23300		FDVR T1,Y	;M2
23400		JUMPE X,DY1ZER
23500		JUMPE Y,DY2ZER
23600		MOVE X,T
23700		FSB X,T1
23800		JUMPE X,NOI1
23900		MOVE Y,1(A)
24000		FMPR Y,T
24100		FMPR T1,1(C)
24200		FSB Y,T1
24300		FSB Y,(A)
24400		FAD Y,(C)
24500		FDVRB Y,X
24600		FSB X,1(A)
24700		FMPR X,T
24800		MOVEM X,DX
24900		FAD X,(A)
25000	  DEFINE TEMP (Q,QQ)
25050	{	CAMN X,(Q)
25100		CAME Y,1(Q)
25150		SKIPA
25200		JRST QQ}
25250	GOTXY:	TEMP (A,EP3)
25300		TEMP (B,EP3)
25350		TEMP (C,EP4)
25400		TEMP (D,EP4)
25450		SKIPN DX1
25500		JRST IN1
25550	    DEFINE TEMP (A,B,XY,XYN)
25600	{	MOVE T,XYN(A)
25650		MOVE T1,XYN(B)
25700		CAML T,T1
25750		EXCH T,T1
25800		CAMGE XY,T
25850		JRST NOI1
25900		CAMLE XY,T1
25950		JRST NOI1}
26000		TEMP (A,B,X)
26050		JRST IN2
26100	IN1:	TEMP (A,B,Y,1)
26150	IN2:	SKIPN DX2
26200		JRST IN3
26250		TEMP (C,D,X)
26300		JRST INT1
26350	IN3:	TEMP (C,D,Y,1)
27050	INT1:	AOS (P)
27100	EP2:	AOS (P)
27200	EP1:	AOS (P)
27300	NOI1:	POPJ P,
27305	EP3:	SKIPN DX2
27310		JRST EPP1
27315		TEMP (C,D,X)
27320		JRST EP1
27325	EPP1:	TEMP(C,D,Y,1)
27330		JRST EP1
27335	EP4:	SKIPN DX1
27340		JRST EPP2
27345		TEMP (A,B,X)
27346		JRST EP2
27347	EPP2:	TEMP (A,B,Y,1)
27348		JRST EP2
27350	DY1ZER:	JUMPE Y,NOI1
27400		MOVE Y,1(A)
27450		MOVE X,Y
27500		FSB X,1(C)
27550		FMPR X,DX2
27600		FDVR X,DY2
27650		FAD X,(C)
27700		JRST GOTXY
27750	DY2ZER:	MOVE Y,1(C)
27800		MOVE X,Y
27850		FSB X,1(A)
27900		FMPR X,DX1
27950		FDVR X,DY1
28000		FAD X,(A)
28050		JRST GOTXY
29500	
29600	SQRTX:	LDB T,[POINT 5,X,7]
29700		MOVNS T
29800		MOVE Y,X
29850		TLNE X,200000
29900		FSC X,(T)
30000		MOVEI T,10
30100		MOVE T1,Y
30200		FDVR T1,X
30300		FAD T1,X
30400		FDVR T1,[2.0]
30500		MOVE X,T1
30600		SOJG T,.-5
30700		POPJ P,
30800	
30900	CORNL:	BLOCK 10
31000	WCORN:	MOVE X,3(C)
31100		MOVE Y,4(C)
31200		FSB X,5(C)
31300		FSB Y,6(C)
31400		MOVEM Y,DY
31500		MOVEM X,DX
31600		FMPR X,X
31700		FMPR Y,Y
31800		FAD X,Y
31900		PUSHJ P,SQRTX
32000		MOVEM X,LEN
32100		MOVE X,DX
32200		MOVE Y,DY
32300		FMPR X,2(C)
32400		FMPR Y,2(C)
32500		FDVR X,LEN
32600		FDVR Y,LEN
32700	    DEFINE TEMP $(A,B,C)
32800	{	MOV$A$M B,CORNL+C
32900		MOV$A$M B,CORNL+C+4}
33000		TEMP (E,Y,0)
33100		TEMP (N,X,1)
33200		TEMP (N,Y,2)
33300		TEMP (E,X,3)
33400		MOVE X,3(C)
33500		MOVE Y,4(C)
33600		FADM X,CORNL
33700		FADM Y,CORNL+1
33800		FADM X,CORNL+2
33900		FADM Y,CORNL+3
34000		MOVE X,5(C)
34100		MOVE Y,6(C)
34200		FADM X,CORNL+4
34300		FADM Y,CORNL+5
34400		FADM X,CORNL+6
34500		FADM Y,CORNL+7
34600		POPJ P,
34700	
34800	CLDISP:	SKIPN A,FCLS
34900		JRST CLDON
35000		TRZN A,10
35100		JRST @(A)[0
35200			CLDW
35300			CLDF]
35400		JRST @(A)[CLDP
35500			CLDL]
35600	CLDON:	UPGIOT 7,.+3
35650		SETZM CLPNTR
35700	CPOPJ:	POPJ P,
35800	PGC:	.+1
35900		0
36000		0
36100	CLBP:	CLBUF
36200		10
36300	CLBUF:	0
36400		0
36500		BYTE (11)0-11,-11(3)7,0(8)46
36600		BYTE (11)  22,  0(14) 6
36700		BYTE (11)   0, 22(14) 6
36800		BYTE (11)0-22,  0(14) 6
36900		BYTE (11)0   ,-22(14) 6
37000		0
37100	
37200	CLDW:	JSR CLCOM
37300		MOVEI D,1
37400	CLP1:	MOVE C,(A)
37500		CAME D,(C)
37600		JRST CLWD
37700		SKIPN 11(C)	;DOES IT DISPLAY?
37800		JRST CLWD
37900		MOVEI E,3(C)
38000		MOVEI F,5(C)
38100		PUSHJ P,CLINE
38200	CLWD:	ADDI A,1
38300		SOJG B,CLP1
38400		MOVE E,CLPNT1
38500		SKIPN CLPNTR
38600		JRST CLDON
38700		MOVE X,2(E)
38800		MOVE Y,3(E)
38900	FINLN:	FAD X,(E)
39000		FAD Y,1(E)
39100		FSC X,-1
39200		FSC Y,-1
39300	CLEND:	MOVEI E,CLBUF+1
39340		MOVEM X,CLSX#
39380		MOVEM Y,CLSY#
39400		PUSHJ P,IVECT
39500		UPGIOT 7,CLBP
39600		POPJ P,
39700	CLCOM:	0
39800		HRRZ A,ZLIST
39900		MOVE B,ZPNT
40000		SUBI B,-1(A)
40100		HRRZS B
40200		SETZM CLPNTR#
40300		MOVSI D,277700
40400		MOVEM D,CLDIS#
40500		JUMPE B,CLDON
40600		JRST @CLCOM
40700	CLDF:	JSR CLCOM
40800		MOVEI D,2
40900	CLP2:	MOVE C,(A)
41000		CAME D,(C)
41100		JRST CLFD
41200		SKIPN 11(C)
41300		JRST CLFD
41400		MOVE E,10(C)	;GET CORNER POINTER
41420	CLP3:	MOVE G,E
41500		PUSHJ P,CLPNT
41550		ADDI E,1
41600		TONEXT(E)
41700		JRST CLP3
41800	CLFD:	ADDI A,1
41900		SOJG B,CLP2
42000	FINPN:	SKIPN CLPNTR
42100		JRST CLDON
42300		MOVE X,CLPNT1
42400		MOVE Y,CLPNT2
42500		JRST CLEND
42600	CLDP:	JSR CLCOM
42700		MOVEI D,1
42800	CLP4:	MOVE C,(A)
42900		CAME D,(C)
43000		JRST CLPD
43100		SKIPN 11(C)
43200		JRST CLPD
43300		PUSHJ P,WCORN
43340		MOVEI G,3(C)
43380		MOVEI H,
43400		MOVEI F,4
43500		MOVEI E,CORNL
43600		PUSHJ P,CLPNT
43700		ADDI E,2
43740		ADD G,H
43780		TRC H,2
43800		SOJG F,.-4
43900	CLPD:	ADDI A,1
44000		SOJG B,CLP4
44100		JRST FINPN
44200	CLDL:	JSR CLCOM
44300		MOVEI D,2
44400	CLP5:	MOVE C,(A)
44500		CAME D,(C)
44600		JRST CLLD
44700		SKIPN 11(C)
44800		JRST CLLD
44900		MOVE E,10(C)
45000		MOVE G,E
45100		MOVEI F,1(E)
45200		TONEXT (F)
45300		SKIPA
45400		JRST CLLD
45500	CLP6:	PUSHJ P,CLINE
45600		MOVE E,F
45650		ADDI F,1
45700		TONEXT (F)
45800		JRST CLP6
45900		MOVE F,G
46000		PUSHJ P,CLINE
46100	CLLD:	ADDI A,1
46200		SOJG B,CLP5
46300		SKIPN CLPNTR
46400		JRST CLDON
46500		MOVE E,CLPNT1
46600		MOVE F,CLPNT2
46700		MOVE X,(F)
46800		MOVE Y,1(F)
46900		JRST FINLN
47000	CLPNT:	MOVE X,(E)
47100		MOVE Y,1(E)
47200		FSB X,CURX
47300		FSB Y,CURY
47400		MOVMS X
47500		MOVMS Y
47600		CAMG X,Y
47700		EXCH X,Y
47800		FMPR Y,[0.5]
47900		FAD X,Y
48000		CAML X,CLDIS
48100		POPJ P,
48200		MOVEM C,CLPNTR
48300		MOVEM X,CLDIS
48350		MOVEM G,CLSPNT#
48400		HRL X,E
48420		HRRI X,CLPNT1
48440		BLT X,CLPNT2
48500		POPJ P,
48600	
48700	CLINE:	MOVE X,(E)
48800		MOVE Y,1(E)
48900		FSB X,(F)
49000		FSB Y,1(F)
49100		JUMPE  Y,CLYZER
49200		FDVR X,Y
49300		MOVEM X,DX
49400		FMPR X,X
49500		FAD X,[1.0]
49600		PUSHJ P,SQRTX
49700		MOVEM X,LEN
49800		MOVN Y,CURY
49900		FMPR Y,DX
50000		FAD Y,CURX
50100		MOVE X,1(E)
50200		FMPR X,DX
50300		FAD X,Y
50400		FSB X,(E)
50500		FDVR X,LEN
50550	GOTLEN:	MOVMS X
50600		CAML X,CLDIS
50700		POPJ P,
50800		MOVEM C,CLPNTR
50900		MOVEM X,CLDIS
51000		MOVEM E,CLPNT1
51100		MOVEM F,CLPNT2
51200		POPJ P,
51300	CLYZER:	MOVE X,CURY
51400		FSB X,1(E)
51500		JRST GOTLEN
     

00100	
00200	;CALL WITH J POINTS TO POLYGON CORNER LIST
00300	;   G,H IS X,Y OF POINT
00400	;  USES A,B,C,D,T,T1,X,Y
00500	INSIDE:	DEFINE INSID $(XYLEN,NAME)
00600	{	MOVE T,(J)
00700		MOVEI A,XYLEN(J)
00800	INS$NAME$1:	TONEXT(A)
00900		SKIPA
01000		JRST .+5
01100		CAMG T,(A)
01200		MOVE T,(A)
01300		ADDI A,XYLEN
01400		JRST INS$NAME$1
01500		FAD T,[2.0]
01600		MOVEM T,SAV2
01700		MOVEM H,SAV2+1
01800		MOVEI B,SAV2
01900		MOVEI A,G
02000	INS$NAME$3:	MOVE D,J
02100		SETZM INTCNT#
02200	INS$NAME$2:	MOVE C,D
02300		ADDI D,XYLEN
02400		TONEXT(D)
02500		SKIPA
02600		JRST TRYNX$NAME
02700		PUSHJ P,INTERS
02800		JRST INS$NAME$2
02900		JRST NOGO
03000		JRST TRYAG$NAME
03100		AOS INTCNT
03200		JRST INS$NAME$2
03300	TRYAG$NAME:	MOVE T,[2.0]
03400		FADM T,SAV2+1
03500		JRST INS$NAME$3
03700	TRYNX$NAME:	MOVE D,J
03800		PUSHJ P,INTERS
03900		JRST .+4
04000		JRST NOGO
04100		JRST TRYAG$NAME
04200		AOS INTCNT
04300		MOVE A,INTCNT
04400		TRNN A,1
04500		POPJ P,
04600		AOS (P)
04630		AOS (P)
04660		POPJ P,}
04690		INSID (1,A)
04700	NOGO:	AOS (P)
04800		POPJ P,
04900	SAV2:	BLOCK 2
05000	INSIDS:	INSID(2,B)
05100	
05200	;ZORD: ORDER ZLIST BY Z LEVEL
05300	ZORD:	MOVE A,ZLIST
05400		MOVE B,ZPNT
05500		SUBI B,-1(A)
05600		HRRZS B
05700	ZR2:	MOVEI C,-1(B)
05800	ZR1:	MOVE X,(A)
05900		MOVE Y,1(X)
06000		MOVEI D,1(A)
06100		MOVE E,C
06200		MOVE F,(D)
06300		CAMLE Y,1(F)
06400		JRST DOEX
06500		ADDI D,1
06600		SOJG E,.-4
06700		ADDI A,1
06800		SOJG C,ZR1
06900		POPJ P,
07000	DOEX:	MOVE E,(A)
07100		EXCH E,(D)
07200		MOVEM E,(A)
07300		MOVE A,ZLIST
07400		JRST ZR2
07500	FRETW:	JUMPE E,CPOPJ
07600		MOVE F,FSTPNT
07700		MOVEM F,(E)
07800		MOVEM E,FSTPNT
07900		HRRZ E,7(E)
08000		JUMPN E,FRETW+1
08100		POPJ P,
08200	;WALFIX -- CALL ZORD FIRST
08300	;  CALL WITH ZLIST PNTR TO WALL IN C
08400	WALFIX:	MOVE D,(C)
08500		HRRZ E,7(D)
08600		PUSHJ P,FRETW
08700		HLRZ E,7(D)
08800		PUSHJ P,FRETW
08900		SETZM LPNT#
09000		MOVE G,3(D)
09100		MOVE H,4(D)
09200	WALF6:	MOVEI A,-1(C)
09300	WALF1:	CAMGE A,ZLIST
09400		JRST NOAL
09500		MOVE B,(A)
09600		PUSHJ P,WALF
09700		SOJA A,WALF1
09800		GETFST (T,T1)
09900		SETZM (T)
10000		MOVE T1,1(B)
10100		MOVEM T1,1(T)
10200		MOVEM B,2(T)
10300		MOVEM G,3(T)
10400		MOVEM H,4(T)
10500		MOVEM X,5(T)
10600		MOVEM Y,6(T)
10700		MOVE G,X
10800		MOVE H,Y
10900		MOVE T1,LPNT
11000		MOVEM T1,7(T)
11100		MOVEM T,LPNT
11200		CAMN G,5(D)
11300		CAME H,6(D)
11400		JRST WALF6
11500	WALF7:	MOVEM T,7(D)
11600		POPJ P,
11700	
11800	NOAL:	MOVE T,LPNT
11900		JRST WALF7
12000	
12100	WALF:	MOVE T,(B)
12200		CAIE T,2
12300		POPJ P,
12400		HRRZ J,10(B)
12500		MOVE T,[A,,SAVA]
12600		BLT T,SAVA+3
12700		PUSHJ P,INSIDE
12800		JRST WALF4
12900		JFCL
13000		MOVE D,SAVA+3
13100		MOVEI B,5(D)
13200		MOVEI A,G
13300		MOVE X,(B)
13400		MOVEM X,SV1
13500		MOVE Y,1(B)
13600		MOVEM Y,SV2
13700		FSB X,G
13800		FSB Y,H
13900		FMPR X,X
14000		FMPR Y,Y
14100		PUSHJ P,SQRTX
14200		MOVEM X,SV3
14300		MOVE D,J
14400	WALF3:	MOVE C,D
14500		ADDI D,1
14600		TONEXT (D)
14700		SKIPA
14800		JRST WALF2
14900		PUSHJ P,WALINT
15000		JRST WALF3
15100	WALF2:	MOVE D,J
15200		PUSHJ P,WALINT
15300		MOVEM G,SAVE
15400		MOVEM H,SAVE+1
15500		FAD G,SV1
15600		FAD H,SV2
15700		FSC G,-1
15800		FSC H,-1
15900		PUSHJ P,INSIDE
16000		JRST [MOVE G,SAVE
16100			MOVE H,SAVE+1
16200			JRST WALF4]
16300		JRST 4,.
16400		MOVE G,SAVE
16500		MOVE H,SAVE+1
16600	WASIN:	MOVE X,SV1
16700		MOVE Y,SV2
16800		AOS (P)
16900	WALF4:	MOVE D,[SAVA,,A]
17000		BLT D,D
17100		POPJ P,
17200	
17300	SAVE:	BLOCK 10
17400	
17500	SAVA:	BLOCK 4
17600	SV1:	0
17700	SV2:	0
17800	SV3:	0
17900	
18000	WALINT:	PUSHJ P,INTERS
18100		POPJ P,
18200		JRST .+2
18300		JFCL
18400		PUSH P,X
18500		PUSH P,Y
18600		FSB X,G
18700		FSB Y,H
18800		FMPR X,X
18900		FMPR Y,Y
19000		PUSHJ P,SQRTX
19100		JUMPE X,POOP
19200		CAML X,SV3
19300		JRST POOP
19400		MOVEM X,SV3
19500		POP P,SV2
19600		POP P,SV1
19700		POPJ P,
19800	POOP:	POP P,X
19900		POP P,X
20000		POPJ P,
20100	
20200	DO:	MOVEI T,TBUF
20300		MOVEM T,TPNT#
20400		MOVE J,ZLIST
20500		MOVE A,ZPNT
20600		SUBI A,-1(J)
20700		HRRZM A,DCNT#
20800		SKIPN DCNT
20900		POPJ P,
21000	DOL1:	MOVE C,(J)
21100		MOVE B,(C)
21200		CAIE B,1
21300		JRST DONEXT
21400		PUSHJ P,PWALL
21500	DONEXT:	SOSLE DCNT
21600		AOJA J,DOL1
21700		MOVE A,TPNT
21800		CAIG A,TBUF
21900		POPJ P,
21950		PUSHJ P,HL
22000		MOVE E,[XWD -DBLEN,DBUF]
22100		MOVE C,Z
22200	DOL3:	MOVE X,2(C)
22300		MOVE Y,3(C)
22400		PUSHJ P,DIVCT
22500		MOVE X,5(C)
22600		MOVE Y,6(C)
22700		PUSHJ P,DVCT
22800		MOVE A,FSTPNT
22900		MOVEM A,(C)
23000		MOVEM C,FSTPNT
23100		HRRZ C,1(C)
23200		JUMPN C,DOL3
23300		SETZM (E)
23400		SUBI E,DBUF-2
23500		HRRZM E,DSP+1
23600		UPGIOT 5,DSP
23700		POPJ P,
23800	DXYV:	FMP X,DOSCAL
23900		FMP Y,DOSCAL
24000		FIX X,233000
24100		FIX Y,233000
24200		ASH X,=25
24300		DPB Y,[POINT 11,X,21]
24400		POPJ P,
24500	DIVCT:	PUSHJ P,DXYV
24600		TROA X,40
24700	DVCT:	PUSHJ P,DXYV
24800		TRO X,106
24900		MOVEM X,(E)
25000		AOBJN E,.+2
25100		SUBI E,1
25200		POPJ P,
25300	
25400	;PNTR TO WALL IN C
25500	PWALL:	MOVN X,MANX
25600		MOVN Y,MANY
25700		MOVE G,5(C)
25800		MOVE H,6(C)
25900		FAD G,X
26000		FAD H,Y
26100		FAD X,3(C)
26200		FAD Y,4(C)
26300		MOVE A,G
26400		MOVE B,H
26500		MOVE E,X
26600		MOVE F,Y
26700		FMPR H,COS
26800		FMPR F,COS
26900		FMPR A,SIN
27000		FMPR X,SIN
27100		FAD H,A
27200		FAD F,X
27300		JUMPG H,.+2
27400		JUMPLE F,BEHIND
27500		FMPR G,COS
27600		FMPR E,COS
27700		FMPR Y,SIN
27800		FMPR B,SIN
27900		FSB G,B
28000		FSB E,Y		;NOW X,Y,X,Y IN E,F,G,H
28100		MOVE X,E
28200		MOVE Y,F
28300		FSB X,G
28400		FSB Y,H
28500		MOVM A,X
28600		MOVM B,Y
28700		CAMG A,B
28800		EXCH A,B
28900		FSC B,-1
29000		FAD A,B
29100		FDVR X,A
29200		FDVR Y,A
29300		JUMPL X,.+3
29400		MOVNS X
29500		MOVNS Y
29600		HRRZ D,7(C)
29700		JUMPE D,CPOPJ
29800		GETFST (Z,T1)
29900		MOVEM Z,@TPNT
30000		AOS TPNT
30100	PWA1:	MOVE E,3(D)
30200		MOVE F,4(D)
30300		PUSHJ P,OFR
30400		MOVE G,E
30500		MOVE H,F
30600		MOVE E,5(D)
30700		MOVE F,6(D)
30800		PUSHJ P,OFR
30900		FAD E,Y
31000		FSB F,X
31100		FAD G,Y
31200		FSB H,X
31300		FDVR E,F
31400		FDVR G,H
31500		MOVE A,1(D)
31600		FSB A,MANZ
31700		MOVE B,A
31800		FDVR A,F
31900		FDVR B,H
31910		MOVE F
31920		MOVE F,[1.0]
31930		FDVR F,
31940		MOVE H
31950		MOVE H,[1.0]
31960		FDVR H,
32000		PUSHJ P,INSXYZ
32100		HRRZ D,7(D)
32200		JUMPN D,PWA1
32300		HLRZ D,7(C)
32400		JUMPN D,PWA2
32500		MOVE A,[100.0]
32600		FSB A,MANZ
32700		MOVE B,A
32800		MOVE E,5(C)
32900		MOVE F,6(C)
33000		PUSHJ P,OFR
33100		MOVE G,E
33200		MOVE H,F
33300		MOVE E,3(C)
33400		MOVE F,4(C)
33500		PUSHJ P,OFR
33600		FAD E,Y
33700		FSB F,X
33800		FAD G,Y
33900		FSB H,X
34000		FDVR E,F
34100		FDVR G,H
34200		FDVR A,F
34300		FDVR B,H
34310		MOVE F
34320		MOVE F,[1.0]
34330		FDVR F,
34340		MOVE H
34350		MOVE H,[1.0]
34360		FDVR H,
34400		PUSHJ P,INSXYZ
34500		POPJ P,
34600	OFR:	FSB E,MANX
34700		FSB F,MANY
34800		MOVE T,E
34900		MOVE T1,F
35000		FMPR E,COS
35100		FMPR F,COS
35200		FMPR T,SIN
35300		FMPR T1,SIN
35400		FAD F,T
35500		FSB E,T1
35600		POPJ P,
35700	INSXYZ:	HLRZ T,Z
35800		ADDI T,6
35900		CAIL T,FSIZE
36000		JRST INZ1
36100		HRL Z,T
36200		ADD T,Z
36300		MOVEM E,-6(T)
36400		MOVEM F,-4(T)
36500		MOVEM A,-5(T)
36600		MOVEM G,-3(T)
36700		MOVEM H,-1(T)
36800		MOVEM B,-2(T)
36900		SETZM (T)
37000		HLLOS (T)
37100		POPJ P,
37200	INZ1:	PUSH P,D
37300		GETFST (T1,D)
37400		POP P,D
37500		ADD T,Z
37600		HRRZM T1,-6(T)
37700		HRRZ Z,T1
37800		JRST INSXYZ
37900	
38000	BEH:	FMPR G,AAA
38100		FMPR H,BBB
38200		FAD G,H
38300		FAD G,CCC
38400		POPJ P,
38500	ZCALC:	MOVE T,2(F)
38600		FSB T,5(F)
38700		JUMPE T,ZC1
38800		MOVE T1,4(F)
38900		FSB T1,7(F)
39000		FDVR T1,T
39100		FSB X,2(F)
39200		FMPR X,T1
39300		FAD X,4(F)
39400		POPJ P,
39500	ZC1:	MOVE T,3(F)
39600		FSB T,6(F)
39700		MOVE T1,4(F)
39800		FSB T1,7(F)
39900		FDVR T1,T
40000		FSB Y,3(F)
40100		FMPR Y,T1
40200		FAD Y,4(F)
40300		MOVE X,Y
40400		POPJ P,
40500	ABCCAL:	MOVE F,J
40600		MOVE G,F
40650		ADDI G,2
40700		TONEXT (G)
40800		SKIPA H,G
40900		JRST WHAT
40950	DEZER:	ADDI H,2
41000		TONEXT (H)
41100		SKIPA
41200		JRST WHAT
41300		MOVE X,(H)
41400		FSB X,(F)
41500		MOVE Y,1(H)
41600		FSB Y,1(F)
41700		MOVE A,(G)
41800		FSB A,(F)
41900		MOVE B,1(G)
42000		FSB B,1(F)
42100		MOVE C,B
42200		FMPR C,X
42300		MOVE D,A
42400		FMPR D,Y
42500		FSB C,D
42600		JUMPE C,DEZER
42700		MOVEM C,LEN
42800		MOVE C,2(G)
42900		FSB C,2(F)
43000		MOVE D,2(H)
43100		FSB D,2(F)
43200		FMPR X,C
43300		FMPR A,D
43400		FMPR Y,C
43500		FMPR B,D
43600		FSB X,A
43700		FSB Y,B
43800		FDVR X,LEN
43900		FDVR Y,LEN
43950		MOVNS Y
44000		MOVEM X,BBB#
44100		MOVEM Y,AAA#
44200		FMPR Y,(F)
44300		FMPR X,1(F)
44400		FAD X,Y
44500		FSB X,2(F)
44600		MOVNM X,CCC#
44650		AOS (P)
44700	WHAT:	POPJ P,
44900	
45000	HL:	MOVEI A,TBUF
45100		MOVEI B,
45200	HL3:	MOVE C,(A)
45300		MOVE D,C
45400	HL1:	MOVE E,C
45450		ADDI C,2
45500		TONEXT (C)
45600		SKIPA
45700		JRST HL2
45800		PUSHJ P,PUTIN
45900		JRST HL1
46000	PUTIN:	MOVE X,(C)
46100		FSB X,(E)
46200		JUMPE X,[MOVE X,1(C)
46300			FSB X,1(E)
46400			JUMPE X,CPOPJ
46500			JRST .+1]
46600		MOVE X,(C)
46700		GETFST (T,T1)
46800		SETZM (T)
46900		MOVEM B,1(T)
47000		HRRZ B,T
47100		MOVEM X,2(T)
47200		MOVE X,1(C)
47300		MOVEM X,3(T)
47400		MOVE X,2(C)
47500		MOVEM X,4(T)
47600		MOVE X,(E)
47700		MOVEM X,5(T)
47800		MOVE X,1(E)
47900		MOVEM X,6(T)
48000		MOVE X,2(E)
48100		MOVEM X,7(T)
48200		MOVEM A,10(T)
48300		POPJ P,
48400	HL2:	MOVE C,D
48500		PUSHJ P,PUTIN
48600		ADDI A,1
48700		CAMGE A,TPNT
48800		JRST HL3
48900		MOVEI E,TBUF
49000		MOVEM B,LSPNT#
49100	HL24:	MOVE J,(E)
49200		PUSHJ P,ABCCAL
49250		JRST HL30
49300		MOVE F,LSPNT
49400		MOVEI Z,
49500	HL19:	SETZM BEHFLG#
49600		MOVE A,Z
49700		CAMN E,10(F)
49800		JRST HL26
49900		MOVE G,2(F)
50000		MOVE H,3(F)
50100		PUSHJ P,BEH
50200		FSB G,4(F)
50300		JUMPL G,INF1
50400		JUMPE G,ON1
50500		MOVE G,5(F)
50600		MOVE H,6(F)
50700		PUSHJ P,BEH
50800		FSB G,7(F)
50900		JUMPL G,HL4
51000		SETOM BEHFLG
51100		JRST HL4
51200	ON1:	MOVE G,5(F)
51300		MOVE H,6(F)
51400		PUSHJ P,BEH
51500		FSB G,7(F)
51600		JUMPLE G,LVIN
51700		SETOM BEHFLG
51800		JRST HL4
51900	INF1:	MOVE G,5(F)
52000		MOVE H,6(F)
52100		PUSHJ P,BEH
52200		FSB G,7(F)
52300		JUMPLE G,LVIN
52400	HL4:	MOVEI A,2(F)
52500		MOVEI B,5(F)
52600		MOVEM Z,ZSAV#
52700		MOVEI Z,PTAB
52800		MOVE C,J
52900	HL5:	MOVE D,C
53000		ADDI C,2
53100		TONEXT (C)
53200		SKIPA
53300		JRST HL6
53400		PUSHJ P,INTERS
53500		JRST HL5
53600		JRST HL5
53700		JFCL
53800		MOVEM X,(Z)
53900		MOVEM Y,1(Z)
54000		PUSHJ P,ZCALC
54100		MOVEM X,2(Z)
54200		ADDI Z,3
54300		JRST HL5
54400	HL6:	MOVE C,J
54500		PUSHJ P,INTERS
54600		JRST .+10
54700		JRST .+7
54800		JFCL
54900		MOVEM X,(Z)
55000		MOVEM Y,1(Z)
55100		PUSHJ P,ZCALC
55200		MOVEM X,2(Z)
55300		ADDI Z,3
55400		CAIN Z,PTAB
55500		JRST NOINTH
55600		MOVE A,2(F)
55700		MOVEM A,(Z)
55800		MOVE B,3(F)
55900		MOVEM B,1(Z)
56000		MOVE B,4(F)
56100		MOVEM B,2(Z)
56200		MOVE C,5(F)
56300		MOVEM C,3(Z)
56400		MOVE B,6(F)
56500		MOVEM B,4(Z)
56600		MOVE B,7(F)
56700		MOVEM B,5(Z)
56800		ADDI Z,6
56900		MOVEI B,PTAB
57000		CAME A,C
57100		JRST .+3
57200		MOVEI A,1
57300		AOJA B,.+2
57400		MOVEI A,
57500	HL11:	MOVEI C,3(B)
57600	HL9:	MOVE D,(B)
57700	HL7:	CAMLE D,(C)
57800		JRST HL8
57900		ADDI C,3
58000		CAMGE C,Z
58100		JRST HL7
58200		ADDI B,3
58300		MOVEI C,3(B)
58400		CAMGE C,Z
58500		JRST HL9
58600		JRST HL10
58700	HL8:	SUB B,A
58800		SUB C,A
58900		MOVE D,(C)
59000		EXCH D,(B)
59100		MOVEM D,(C)
59200		MOVE D,1(C)
59300		EXCH D,1(B)
59400		MOVEM D,1(C)
59500		MOVE D,2(C)
59600		EXCH D,2(B)
59700		MOVEM D,2(C)
59800		MOVEI B,PTAB
59900		ADD B,A
60000		JRST HL11
60100	HL10:	MOVEI B,PTAB
60200		MOVE D,(B)
60300		CAMN D,3(B)
60400		JRST HL12
60500	HL13:	ADDI B,3
60600		CAMGE B,Z
60700		JRST .-5
60750		SUBI Z,3
60800		MOVEM Z,PEND#
60900		MOVEI Z,PTAB
61000	HL17:	SKIPN BEHFLG
61100		JRST HL15
61200	HL16:	MOVE G,(Z)
61300		MOVE H,1(Z)
61400		FAD G,3(Z)
61500		FAD H,4(Z)
61600		FSC G,-1
61700		FSC H,-1
61800		PUSHJ P,INSIDS
61900		JRST .+3
62000		JFCL
62100		JRST LVOUT
62200	LVINSK:	MOVE A,ZSAV
62300		GETFST (B,0)
62400		MOVEM A,1(B)
62500		MOVEM B,ZSAV
62600		MOVEI A,2(B)
62700		HRLI A,(Z)
62800		BLT A,7(B)
62840		MOVE A,10(F)
62880		MOVEM A,10(B)
62900	LVOUT:	ADDI Z,3
63000		CAMGE Z,PEND
63100		JRST HL17
63200	HL21:	MOVE A,FSTPNT
63300		MOVEM A,(F)
63400		MOVEM F,FSTPNT
63500		HRRZ F,1(F)
63600		MOVE Z,ZSAV
63700		JUMPN F,HL19
63800		JRST HL23
63900	HL12:	MOVE D,1(B)
64000		CAME D,4(B)
64100		JRST HL13
64200		MOVE C,B
64300		HRLI C,2(B)
64400		BLT C,(Z)
64500		SUBI Z,2
64600		JRST HL13+1
64700	PTAB:	BLOCK =200
64800	HL15:	MOVE A,2(Z)
64900		MOVE G,(Z)
65000		MOVE H,1(Z)
65100		FAD A,5(Z)
65200		FAD G,3(Z)
65300		FAD H,4(Z)
65400		FSC A,-1
65500		FSC G,-1
65600		FSC H,-1
65700		PUSHJ P,BEH
65800		FSB G,A
65900		JUMPG G,HL16
66000		JRST LVINSK
66100	NOINTH:	SKIPN BEHFLG
66200		JRST HL20
66300		MOVE G,2(F)
66400		FAD G,5(F)
66500		FSC G,-1
66600		MOVE H,3(F)
66700		FAD H,6(F)
66800		FSC H,-1
66900		PUSHJ P,INSIDS
67000		JRST HL20
67100		JFCL
67200		JRST HL21
67300	LVIN:	SKIPA A,Z
67400	HL20:	MOVE A,ZSAV
67500	HL26:	EXCH A,1(F)
67600		MOVE Z,F
67700		MOVE F,A
67800		JUMPN F,HL19
67900	HL23:	MOVEM Z,LSPNT
68000	HL30:	ADDI E,1
68100		CAMGE E,TPNT
68200		JRST HL24
68300		POPJ P,
68400	
     

00100		FOR @$ I←0,177
00200	{	DEFINE FOO$I{JFCL}
00300	}
00400	   DEFINE FO (A,B)
00500	{FO2(→"A",B)}
00600	   DEFINE FO2 $(A,B)
00700	{DEFINE FOO$A{JRST B}}
00800	   DEFINE CBBIT $(A,B,C,Q,E)
00900	{	JRST @(D).+1
00950		IFE B,<MERR;>A$0
01000		IFE C,<MERR;>A$1
01100		IFE Q,<MERR;>A$2
01200		IFE E,<MERR;>A$3
01300	}
01350	   DEFINE MOVDEF $(M)
01400	{FO(<(>,M$CL1)
01500	FO(<[>,M$CL2)
01600	FO(<)>,M$CR1)
01700	FO(<]>,M$CR2)
01800	FO(</>,M$CU1)
01900	FO(<∂>,M$CU2)
02000	FO(<\>,M$CD1)
02100	FO(<∞>,MC$D2)}
02150	MOVDEF(M)
02200	FO(<*>,MAKS)
02300	FO(<⊗>,MAKL)
02400	FO(F,CF)
02500	FO(+,CPLS)
02600	FO2(175,CALT)
02700	FO(W,CW)
02800	FO(∩,CMUB)
02900	FO(∪,CMLB)
03000	FO(↑,CUPA)
03100	FO(↓,CDNA)
03200	FO(<≡>,CMBB)
03300	FO(P,CP)
03400	FO(M,CM)
03500	FO(D,CD)
03600	FO(C,CC)
03700	FO(R,CR)
03710	FO(L,CL)
03715	FO(U,CU)
03720	FO(< >,CSPC)
03725	FO(S,CS)
03800	
03900	
04000	CMUB:	CBBIT(CMUB,0,1,1,0)
04100	CMLB:	CBBIT(CMLB,0,1,1,0)
04200	CMBB:	CBBIT(CMBB,0,1,1,1)
04210	CC:	CBBIT(CC,0,1,1,1)
04220	CR:	CBBIT(CR,0,1,1,0)
04230	CF:	CBBIT(CF,0,1,1,0)
04240	CW:	CBBIT(CW,0,1,1,0)
04250	CP:	CBBIT(CP,0,0,1,0)
04260	CM:	CBBIT(CM,0,1,1,0)
04270	CD:	CBBIT(CD,0,1,0,0)
04280	CL:	CBBIT(CL,0,0,1,0)
04285	CU:	CBBIT(CU,0,0,1,0)
04287	CS:	CBBIT(CS,0,1,1,0)
04290	
04300	
04400	
04500	DTAB2:
04600	   FOR @$ I←0,177
04700	{  FOO$I
04800	}
04900	  FOR @$ I←0,177
05000	{DEFINE FOO$I {JFCL}
05100	}
05200	FO(S,DOS)
05300	MOVDEF(D)
05400	DOS:	CBBIT(DOS,0,1,1,0)
05500	
05600	
05700	DTAB3:	FOR @$ I←0,177
05800	{FOO$I
05900	}
06000	
     

00100	GETCOM:	INCHRW C
00200		POPJ P,
00300	DISTAB:	DTAB2(C)
00400	
00500	MAIN:	PUSHJ P,CURDIS
00600		PUSHJ P,NUMDIS
00700		PUSHJ P,DISP
00750		PUSHJ P,CLDISP
00800		PUSHJ P,GETCOM
00900		LDB D,[POINT 2,C,28]
01000		ANDI C,177
01100		XCT @DISTAB
01200	MERR:	OUTSTR [ASCIZ /???/]
01300		JRST MAIN
01400	
01500	   DEFINE TEMP (A,B,C,Q)
01600	{	MOVE X,MCSA(D)
01700		IFN A,<MOVNS X>
01800		IFN B,<FMPR X,[16.0]>
01900		FADM X,C
02000		SKIPE CIRMOD
02100		JRST Q
02200		JRST MAIN}
02300	MCSA:	1.000
02400		2.00
02500		4.0
02600		8.0
02700	
02750	  DEFINE MOVER A(M,CUR,Y)
02800	{MACL1:	TEMP(1,0,CURAX,CIRX)
02900	MACL2:	TEMP(1,1,CURAX,CIRX)
03000	MACR1:	TEMP(0,0,CURAX,CIRX)
03100	MACR2:	TEMP(0,1,CURAX,CIRX)
03200	MACU1:	TEMP(0,0,CURAY,CIRY)
03300	MACU2:	TEMP(0,1,CURAY,CIRY)
03400	MACD1:	TEMP(1,0,CURAY,CIRY)
03500	MACD2:	TEMP(1,1,CURAY,CIRY)}
03550	   MOVER (M,CUR,Y)
03600	
03700	  DEFINE TEMP $(XY,YX)
03800	{	MOVE X,CUR$XY
03900		FSB X,CCENT$XY
04000		FMPR X,X
04100		MOVE Y,CRAD
04200		FSBM Y,X
04210		JUMPL X,[MOVE X,Y
04220			PUSHJ P,SQRTX
04230			MOVE Y,CCENT$XY
04240			FSB Y,CUR$XY
04250			SKIPL Y
04260			MOVNS X
04270			FAD X,CCENT$XY
04280			MOVEM X,CUR$XY
04290			MOVEI X,
04295			JRST .+1]
04300		PUSHJ P,SQRTX
04400		MOVE Y,CCENT$YX
04500		FSB Y,CUR$YX
04600		JUMPL Y,.+2
04700		MOVNS X
04800		FAD X,CCENT$YX
04850		MOVEM X,CUR$YX
04900		JRST MAIN}
05000	CIRX:	TEMP (X,Y)
05100	CIRY:	TEMP (Y,X)
05200	
05300	
05400	MAKL:	MOVE X,[1.4142317]
05500		FMPRM X,DSCL
05600		JRST MAIN
05700	MAKS:	MOVE X,DSCL
05800		FDVR X,[1.4142317]
05900		MOVEM X,DSCL
06000		JRST MAIN
06100	
06600	CF1:	SKIPE WCUR
06700		JRST MERR
06800		GETFST (A,B)
06900		MOVE C,ZPNT
07000		MOVEI T,2
07100		MOVEM T,(A)
07200		MOVE T,[8.0]
07300		MOVEM T,2(A)
07400		MOVE T,CURZL
07500		MOVEM T,1(A)
07600		GETFST (B,D)
07700		HRRZM B,10(A)
07800		HRRZM B,WCUR1#
07900		PUSHJ P,INSCUR
08000		PUSH C,A
08100		MOVEM C,ZPNT
08200		MOVEM B,SAVB
08300		MOVEI B,2
08400		MOVEM B,WCUR
08500		JRST MAIN
08600	CPLS:	SKIPN B,WCUR
08700		JRST MAIN
08800		JRST @(B)[0
08900			MERR
09000			CPLSF]
09100	CPLSF:
09200		SKIPN B,SAVB
09300		JRST MAIN
09400		PUSHJ P,INSCUR
09500		MOVEM B,SAVB
09600		JRST MAIN
09700	CALT:	SETZM UDMODE#
09800		MOVE B,WCUR
09900		JRST @(B)[MAIN
10000			WALT
10100			FALT]
10200	WALT:	MOVE C,CURZL
10300		MOVE B,WCUR1
10400		MOVEM C,1(B)
10450		SETZM 7(B)
10500		MOVE C,ZPNT
10600		PUSH C,B
10700		MOVEM C,ZPNT
10800	FALT:	SETZM WCUR
10900		JRST MAIN
11400	CW1:	SKIPE WCUR
11500		JRST MERR
11600		GETFST (B,C)
11700		MOVEM B,WCUR1
11800		MOVEI C,1
11900		MOVEM C,(B)
12000		MOVE C,[3.0]
12100		MOVEM C,2(B)
12200		SETZM 10(B)
12300		MOVEI X,3(B)
12400		HRLI X,CURX
12500		BLT X,4(B)
12600		MOVEI X,1
12700		MOVEM X,WCUR
12800		JRST MAIN
12900	
13000	CUDS:	MOVSI A,201400
13100		JUMPE D,.+3
13200		FSC A,1
13300		SOJG D,.-1
13400		MOVE B,UDMODE
13500		TRNE B,2
13600		FMPR A,[7.0]
13700		POPJ P,
13800	CUPA:	PUSHJ P,CUDS
13900		JRST .+3
14000	CDNA:	PUSHJ P,CUDS
14100		MOVNS A
14200		TRNN B,14
14300		JRST MCURUD
14400		TRNE B,4
14500		FADM A,DZU
14600		TRNE B,10
14700		FADM A,DZL
14800		MOVE A,DZL
14900		CAMLE A,DZU
15000		MOVEM A,DZU
15100		JRST MAIN
15200	MCURUD:	FADM A,CURZL
15300		JRST MAIN
15400	CMBB1:
15500	CMBB2:	TRO D,14
15600	CMUB1:
15700	CMUB2:	TROA D,4
15800	CMLB1:
15900	CMLB2:	TRO D,10
16000		MOVEM D,UDMODE
16100		JRST MAIN
16200	CMBB3:	MOVEI A,2
16300		MOVEM D,UDMODE
16400		JRST MAIN
16500	
16600	CC1:	MOVE T,[XWD CURX,CCENTX]
16700		BLT T,CCENTY
16800		JRST MAIN
16900	CR1:	SETOM CIRMOD#
17000	  FOR @$ A IN (X,Y)
17100	{	MOVE A,CCENT$A
17200		FSB A,CUR$A
17300		FMPR A,A
17350	}
17400		FAD X,Y
17500		MOVEM X,CRAD#
17600		JRST MAIN
17700	CR2:	SETZM CIRMOD
17800		JRST MAIN
17900	CC2:	MOVE T,[XWD CCENTX,CURX]
18000		BLT T,CURY
18100		JRST MAIN
18200	CC3:	SETZM CURX
18300		SETZM CURY
18400		JRST MAIN
18500	   DEFINE TEMP(A)
18600	{	MOVEI T,A
18700		MOVEM T,FCLS
18800		JRST MAIN}
18900	CW2:	TEMP(1)
19000	CF2:	TEMP(2)
19100	CL2:	TEMP(11)
19200	CP2:	TEMP(10)
19300	CU2:	TEMP(0)
19400	CSPC:	SETZM CMOVE#
19500		JRST MAIN
19600	CM1:	SKIPE FCLS
19700		SKIPN CLPNTR
19800		JRST MERR
19900		MOVE X,CLSX
20000		MOVE Y,CLSY
20100	CM12:	MOVEM X,CURX
20200		MOVEM Y,CURY
20300		JRST MAIN
20400	CM2:	SKIPE CLPNTR
20500		SKIPN A,FCLS
20600		JRST MERR
20700		CAIE A,10
20800		CAIN A,2
20900		SKIPA B,CLSPNT
21000		JRST MERR
21100		MOVEM B,CMOVE
21200		MOVE X,(B)
21230		MOVE Y,1(B)
21260		JRST CM12
21300	CD1TB:	MERR
21400		DELWAL
21500		DELFP
21600		0
21700		0
21800		0
21900		0
22000		0
22100		MERR
22200		DELFLR
22300	CD1:	MOVE A,FCLS
22400		SKIPN B,CLPNTR
22500		JRST MERR
22600		JRST @CD1TB(A)
22700	DELFLR:
22800	DELWAL:	MOVE A,ZLIST
22900		CAME B,(A)
23000		AOJA A,.-1
23100		HRLI A,1(A)
23200		MOVE B,ZPNT
23300		BLT A,(B)
23400		SUB B,[1,,1]
23500		MOVEM B,ZPNT
23600		JRST MAIN
23700	DELFP:	MOVE C,CLSPNT
23800		MOVE D,C
23900		ADDI D,2
24000		MOVE T,(D)
24100		TLNE T,-1
24200		JRST .-3
24300		JUMPE T,.-4
24400		HRLI C,2(C)
24500		BLT C,(D)
24600		JRST MAIN
24700	
     

00100	DOS2:	MOVE A,MANX
00200		MOVEM A,CURX
00300		MOVE A,MANY
00400		MOVEM A,CURY
00500		MOVE A,MANZ
00600		MOVEM A,CURZL
00700	DOS1:	JRST MAIN
00800	  DEFINE TEMP (A,B,C,Q)
00900	{	MOVE X,MCSA(D)
01000		IFN A,<MOVNS X>
01100		IFN B,<FMPR X,[16.0]>
01200		FADM X,C
01300		JRST DMAIN}
01400	  MOVER(D,MAN,Z)
01500	
01600	CS2:	MOVE A,CURX
01700		MOVEM A,MANX
01800		MOVE A,CURY
01900		MOVEM A,MANY
02000		MOVE A,CURZL
02100		MOVEM A,MANZ
02200	CS1:	PUSHJ P,ZORD
02300		MOVE C,ZLIST
02400		HRRZ B,ZPNT
02500	CSS1:	MOVE A,(C)
02600		MOVE D,(A)
02700		CAIE D,1
02800		JRST .+4
02900		PUSH P,B
03000		PUSHJ P,WALFIX
03100		POP P,B
03200		ADDI C,1
03300		CAMG C,B
03400		JRST CSS1
03500		UPGIOT 7,PGC
03600		UPGIOT 4,PGC
03700		UPGIOT 6,PGC
03800	DMAIN:	PUSHJ P,DO
03900		PUSHJ P,GETCOM
04000		LDB D,[POINT 2,C,28]
04100		ANDI C,177
04200		XCT DTAB3(C)
04300		OUTSTR [ASCIZ /???/]
04400		JRST DMAIN
04500	
04600	END STRT