.TITLE HCGPCK .ENABL LC ; ; CALL PACK( IVEC, IXP, IYP, IPEN ) -- This subroutine packs ; the pen move into an integer. ; ; CALL UNPACK( IVEC, IXP, IYP, IPEN ) -- This subroutine ; unpacks an integer into a pen move. ; ; IVEC Packed pen move. ; IXP, X and Y integer coordinates, the position of the ; IYP origin (LL0) is figured into the numbers. ; IPEN Pen status. ; ; Word: 0PXXXXXXXYYYYYYY (0+1+7+7) ; .PSECT HCGPCK ; PACK:: MOV @4(R5),R0 ;GET IXP ADD LL0,R0 ;REMOVE OFFSET BIC #177600,R0 ;MASK OFF HIGH BITS ASH #7,R0 ;SHIFT INTO PLACE ; MOV @6(R5),R1 ;GET IYP ADD LL0,R1 ;REMOVE OFFSET BIC #177600,R1 ;MASK OFF HIGH BITS BIS R1,R0 ;BIT SET INTO PLACE ; MOV @10(R5),R1 ;GET IPEN SUB #2,R1 ;REMOVE OFFSET ASH #14.,R1 ;SHIFT INTO PLACE BIS R1,R0 ;BIT SET INTO PLACE ; MOV R0,@2(R5) ;STORE AS IVEC RTS PC ;RETURN ; UNPACK::MOV @2(R5),R0 ;GET IVEC MOV #2,@10(R5) ;SET PEN UP ASL R0 ;PEN UP? TST R0 ;TEST PEN BGE 1$ ;BRANCH IF TRUE INC @10(R5) ;SET PEN DOWN ; 1$: MOVB R0,R1 ;GET IYP ASR R1 ;SHIFT BACK INTO PLACE SUB LL0,R1 ;ADD IN OFFSET MOV R1,@6(R5) ;STORE AS IYP ; ASL R0 ;SHIFT OFF HIGH BIT ASH #-9.,R0 ;SHIFT BACK INTO PLACE SUB LL0,R0 ;ADD IN OFFSET MOV R0,@4(R5) ;STORE AS IXP RTS PC ;RETURN ; .PSECT HCDB RW, D, GBL, REL, OVR ICASE: .WORD 0 ;Upper (0) and Lower (4) case flag. NVCTRS: .WORD 0 ;Number of vectors defining character. IWIDTH: .WORD 0 ;Width of character LL0: .WORD 0 ;Default LL origin. SCALE: .FLT2 0. ;Default scaling factor. DES: .WORD 0 ;Address of descriptor table. DEF: .WORD 0 ;Address of definition table. .END