File: PXDELT.SB of Tape: Sources/Other/new-14
(Source file text) 

/	SUBROUTINE DELTA(X,Y,INCHR)

	ENTRY DELTA

	DUMMY \X
	DUMMY \Y
	DUMMY \INCHR
\X,	BLOCK 2
\Y,	BLOCK 2
\INCHR, BLOCK 2

\IN,	0
XPNT,	\X
NBYTE,	0

/	DELTA CONTROL BYTE IS DEFINED AS FOLLOWING:

/			+Y
/	     44(8)    40(8)    24(8)
/	     36(10)   32(10)   20(10)
/		\	|	/
/		 \	|      /
/		  \	|     /
/		   \	|    /
/		    \	|   /
/		     \	|  /
/		      \	| /
/	     30(8)     \|/     20(8)
/	-X	-------	* -------	+X
/	     24(10)    /|\     16(10)
/		      / | \
/		     /  |  \
/		    /   |   \
/		   /	|    \
/		  /	|     \
/		 /	|      \
/		/	|	\
/	    34(8)     50(8)    54(8)
/	    28(10)    40(10)   44(10)
/			-Y

DELTA,	BLOCK 2
	TAD XPNT
	DCA \IN
	TAD (-6
	DCA NBYTE
TRLUP,	TAD I DELTA		/TRANSFER PARAMETERS
	DCA I \IN
	INC DELTA#
	INC \IN
	ISZ NBYTE
	JMP TRLUP
	TAD I \INCHR
	DCA \IN			/DELTA CONTROL BYTE
	TAD \IN
	AND (3
	DCA NBYTE		/NUMBER OF DELTAS FOLLOWING
	DCA IXVAL
	DCA IYVAL
	DCA IXSGN
	DCA IYSGN		/RESET
	TAD \IN
	AND (34			/4: BOTH BIT; TO SIGN
	CLL RTR			/10: ONLY SIGN BIT; TO LINK
	RTR			/20: ONLY X BIT; TO AC
	SPA			/BOTH DIRECTIONS ?
	JMP BOTH		/YES
	SZA			/NO, 1 DIR
	JMP XONLY		/ONLY X-DIRECTION
YONLY,	INC IYVAL		/ONLY Y-DIRECTION
	CLA RAL
	DCA IYSGN		/SIGN WAS IN LINK
	JMP GBYTES

XONLY,	INC IXVAL		/ONLY X-DIRECTION
	CLA RAL
	DCA IXSGN		/SIGN WAS IN LINK
	JMP GBYTES
	
BOTH,	AND (1			/PICK OUT 20 BIT
	SZA
	JMP XVYV		/+X,+Y DIAGONAL
	INC IXVAL		/+X,-Y DIAGONAL
	SNL
	INC IXSGN		/-X
	JMP YONLY

XVYV,	INC IYVAL		/+X,+Y DIAGONAL
	SZL
	INC IYSGN		/-Y
	JMP XONLY

GBYTES,	CALL 0,CLEAR		/BE SURE
	CALL 1,STO
	ARG \XRES
	CALL 1,STO
	ARG \YRES		/CLEAR THEM
	TAD IXVAL
	SNA CLA			/ANY X BYTES ?
	JMP GBYTY		/NO, GET Y BYTES
	TAD NBYTE
	CMA
	DCA ITEM		/ALWAYS 1 BYTE
XLUP,	CALL 1,IGETC		/GET BYTE FROM STREAM
	ARG (1
	CALL 0,FLOT
	CALL 1,STO
	ARG \BYTE		/TEMP
	CALL 1,FAD
	ARG \XRES
	CALL 1,FMP
	ARG \F64
	CALL 1,FAD
	ARG \BYTE
	CALL 1,STO		/XRES=XRES*64.+BYTE
	ARG \XRES
	ISZ ITEM		/MORE ?
	JMP XLUP
GBYTY,	TAD IYVAL
	SNA CLA			/Y BYTES ?
	JMP DELEX		/NO, THE END
	TAD NBYTE
	CMA
	DCA ITEM		/COUNT FOR Y BYTES
YLUP,	CALL 1,IGETC
	ARG (1
	CALL 0,FLOT
	CALL 1,STO
	ARG \BYTE
	CALL 1,FAD
	ARG \YRES
	CALL 1,FMP
	ARG \F64
	CALL 1,FAD
	ARG \BYTE
	CALL 1,STO		/YRES=YRES*64.+BYTE
	ARG \YRES
	ISZ ITEM
	JMP YLUP
DELEX,	CALL 1,FAD		/NOW CHECK SIGNS
	ARG \XRES
	TAD IXSGN		/X NEGATIVE ?
	SNA CLA
	JMP XPOS
	CALL 0,CHS		/YES, CHANGE SIGN
XPOS,	CALL 1,ISTO
	ARG \X			/FINAL ARG
	CALL 1,FAD
	ARG \YRES
	TAD IYSGN		/Y NEGATIVE ?
	SNA CLA
	JMP YPOS
	CALL 0,CHS		/YES, CHANGE SIGN
YPOS,	CALL 1,ISTO
	ARG \Y			/FINAL ARG
	RETRN DELTA		/TERMINATO
IXVAL,	0
IXSGN,	0
\XRES,	BLOCK 3
IYVAL,	0
IYSGN,	0
\YRES,	BLOCK 3
ITEM,	0
\BYTE,	BLOCK 3
\F64,	2074
	0
	0
END