FTN4,L
C 
C 
C 
C 
C 
C 
CC************************************************************
C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
C RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
C PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
C OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
CC************************************************************
C 
C 
C 
C      NAME: GCHR1
C      SOURCE: 92840 - 18149
C      RELOC:  92840 - 16021
C 
C 
C 
CC*********************************************************** 
      SUBROUTINE GCHR1(IGCB,LUG,IBUFR,IBUFS,INDEX,XMTRX,
     +CPX,CPY,DONE) 
     +,92840-16021 REV.2013 791210
C************************************************************** 
C GCHR1 DRAWS ONE CHARACTER ONTO LUG ACCORDING TO THE CHARACTER 
C STROKES STORED IN BUFFER IBUFR STARTING AT WORD INDEX.
C 
C IBUFR = BUFFER THAT HOLDS THE STROKES TO BE MADE. 
C INDEX= FIRST WORD IN IBUFR TO START DRAWING THE STROKES AT. 
C IBUFS= TOTAL WORD-LENGTH OF IBUFR.
C 
C XMTRX= TRANSFORMATION XMTRX FOR THIS CHARACTER TO DO SLANTS,
C         CHANGE ASPECT RATIO, ETC. 
C 
C CPX AND CPY = THE CURRENT POINTER IN WC USED TO ORIENT THIS CHAR. 
C 
C DONE  = LOGICAL FLAG SET TO TRUE WHEN THE LAST STROKE OF A CHARACTER
C         HAS BEEN DRAWN (ALLOWS STROKES FOR A CHARACTER TO CROSS OVER
C         MULTIPLE BUFFERS.)
C***************************************************************
C 
      INTEGER IGCB(1),LUG,IBUFR(1),IBUFS,INDEX
      REAL XMTRX(2,2),CPX,CPY 
      LOGICAL DONE
C***************************************************************
C CHECK THAT THE INDEX IS VALID.
C 
C************************************************************ 
C DRAW THE CHARACTER STROKES. 
C IF IX=64, ITS A CONTROL PAIR WHERE IY DETERMINES THE TYPE OF CONTROL. 
C OTHERWISE, ITS AN X-Y PAIR TO WHICH TO MOVE.
C 
C THE FORMAT FOR AN X-Y PAIR FOLLOWS: (BIT 15 = SIGN(X), BIT 6=SIGN(Y)
C ------------------------------------------------- 
C 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 
C +-     X  X  X  X  X  X    +-  Y  Y  Y  Y  Y  Y 
C-------------------------------------------------- 
      DO 20 J=INDEX,IBUFS,1 
      IX=IBUFR(J)/256 
      IY=IAND(IBUFR(J),177B)
      IF (IY .GE. 64) IY=64-IY
C 
D     WRITE(13,1374) J,IX,IY
D1374 FORMAT("GCHR1: J,IX,IY = ",3I6) 
C 
      IF (IX .EQ. 64) GO TO 10
      IF ((IABS(IX) .GT. 63) .OR. 
     +    (IABS(IY) .GT. 63)) GO TO 9200
      X=FLOAT(IX) 
      Y=FLOAT(IY) 
C 
C****************************************************************** 
C TRANSFORM THE X-Y PAIR BY XMTRX, ADD IN THE CURRENT POINTER.
C 
      X1=XMTRX(1,1)*X+XMTRX(1,2)*Y+CPX
      Y1=XMTRX(2,1)*X+XMTRX(2,2)*Y+CPY
C 
D     WRITE(13,3456) X1,Y1
D3456 FORMAT("GCHR1: X1 AND Y1 = ",2F13.6,//) 
C 
      CALL PLOT(IGCB,X1,Y1,IPEN)
      GO TO 20
C*****************************************************************
C HAVE A CONTROL PAIR. Y HAS THE FOLLOWING MEANINGS:
C    IY  < 0 IMPLIES HAVE A BAD X-Y PAIR OFF THE DISC.
C        = 0 IMPLIES LIFT THE PEN.
C        = 1 IMPLIES LOWER THE PEN. 
C        = 2 IMPLIES DONE WITH THIS CHARACTER.
C        > 2 IMPLIES BAD X-Y PAIR OFF THE DISC. 
C 
10    IF (IY) 9200,100,15 
15    GO TO (200,300,9200) IY 
C***************************************************************
C IY=0 SIGNIFIES LIFT PEN.
C 
100   IPEN=-2 
      GO TO 20
C***************************************************************
C IY=1 SIGNIFIES LOWER PEN. 
C 
200   IPEN=-1 
      GO TO 20
C***************************************************************
C IY=2 SIGNIFIES DONE.
C 
300   CONTINUE
      DONE=.TRUE. 
      RETURN
C************************************************************** 
C END OF PROCESSING CURRENT X-Y PAIR. CONTINUE THE DO LOOP. 
C 
20    CONTINUE
C********************************************************** 
C PROCESSED ALL THE STROKES IN THE CURRENT BUFFER. SET THE
C DONE FLAG TO FALSE AND RETURN.
C 
      DONE=.FALSE.
      RETURN
C*************************************************************
C ERROR PROCESSING. 
C 
C************************************************************** 
C ERROR ON READF CALL.
C 
9100  CALL PLTER(IERR-300,IDUMMY) 
      RETURN
C************************************************************ 
C FAULTY X-Y PAIR FROM THE DISC.
C 
9200  CALL PLTER(38,IDUMMY) 
      RETURN
      END 
                                                                                                                                                                      