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: GTEX1
C      SOURCE: 92840 - 18143
C      RELOC:  92840 - 16021
C 
C 
C 
CC*********************************************************** 
      SUBROUTINE GTEX1(IGCB,ITEXT,ISTRT,ITEXL,IDCB,IBUFR) 
     +,92840-16021 REV.2013 791129
C**************************************************************** 
C GTEX1 WRITES CHARACTERS FROM ITEXT TO THE 
C GRAPHICS LU USING SOFTWARE GENERATED TEXT. IT OUTPUTS THE 
C CHARACTERS ACCORDING TO THE TRANSFORMATION IN XMTRX.
C THE ONLY CONTROL CHARACTERS RECOGNIZED ARE CR AND CR-LF.
C ALL ILLEGAL CHARACTERS ARE PRINTED AS @.
C 
C IGCB = GCB TO THE GRAPHICS DEVICE.
C ITEXT= BUFFER CONTAINING THE CHARS TO BE OUTPUT.
C ISTRT= INDEX TO FIRST CHARACTER IN ITEXT TO BE OUTPUT.
C ITEXL= + NUMBER OF CHARACTERS TO BE OUTPUT. 
C IDCB = A DCB OPEN TO THE FONT FILE. 
C IBUFR = A 128-WORD UTILITY BUFFER THAT GTEX1 CAN USE. 
C 
C XMTRX= THE TRANSFORMATION MATRIX USED TO TRANSFORM EACH CHARACTER 
C        FROM THE FONT FILE.
C 
C X1 AND Y1 = THE START COORDINATES OF THE CURRENT LINE.
C               HELD CONSTANT EXCEPT FOR CR AND CR-LF.
C 
C INFO  = LOCAL 8-WORD ARRAY HOLDING INFORMATION ABOUT THE CHARACTERS 
C         IN THE FONT FILE. 
C 
C LEN  = + CHARACTER COUNT OF NUMBER OF CHARACTERS IN ITEXT.
C ISTRC= LOCAL VARIABLE THAT EQUALS ISTRT.
C ITEXL2= LOCAL VARIABLE THAT EQUALS ITEXL (OR ITEXL-1 IF THERE'S 
C         A CR-LF SUPPRESSION.) 
C IEND = INDEX OF THE LAST CHARACTER OF THE STRING OF INTEREST. 
C 
C NOCARR= TRUE IF THE USER REQUESTED A CR-LF SUPPRESSION. 
C DONE = TRUE WHEN YOU'RE DONE WITH ONE CHARACTER.
C 
C X1 AND Y1 = CURRENT POSITION UPON ENTRY. THIS POSITION IS USED TO 
C             ORIENT THE STRING FOR LORG PURPOSES. (X1,Y1)
C             IS UPDATED ONLY TO IMPLEMENT A CR-LF. 
C**************************************************************** 
      INTEGER IGCB(1),ITEXT(1),ITEXL,IDCB(1),IBUFR(1) 
      INTEGER IBUFS,INFO(9) 
      REAL XMTRX(2,2) 
      LOGICAL DONE,NOCARR 
      LOGICAL GWC 
      DATA IBUFS/128/ 
C************************************************************** 
C CHECK FOR ERROR CONDITIONS. 
C 
C 
      IF ((ITEXL .LE. 0) .OR. (ISTRT .LE. 0)) GO TO 8500
      ISTRC=ISTRT 
C************************************************************** 
C GET THE GRAPHICS LU OUT OF THE IGCB.
C 
      CALL GCBIM(2,1,LUG,0,1) 
C***********************************************************
C GET THE IMPORTANT INFO ABOUT THE CHARACTERS FROM THE FONT FILE
C HEADER RECORD.
C 
      CALL READF(IDCB,IERR,INFO,9,LENGTH,1) 
      IF (IERR .LT. 0) GO TO 9000 
C*****************************************************************
C CHECK FOR CR-LF SUPPRESSION.
C 
      CALL SGET(ITEXT,ISTRC+ITEXL-1,ICHAR)
      NOCARR=.FALSE.
      IF (ICHAR .EQ. 137B) NOCARR = .TRUE.
      ITEXL2=ITEXL
      IF (NOCARR) ITEXL2=ITEXL-1
C***************************************************************
C CHECK AND SAVE WHETHER YOU'RE IN WC SPACE OR NDC SPACE. THEN
C ENABLE THE PROPER SPACE FOR ALL THE REST OF THE CALCULATIONS. 
C 
      CALL GSTAT(IGCB,11,1,ICU) 
D     WRITE(1,55) ICU 
D55   FORMAT(/"GTEX1: ICU = 1 FOR WC ENABLED : ",I2)
      IF (GWC(IGCB)) GO TO 100
C*************************************************************
C SET UP EVERYTHING FOR NDC CHARACTER PLOTTING. 
C 
      IUNIT=0 
      CALL SETGU(IGCB)
      GO TO 1000
C*********************************************************
C SET UP EVERYTHING FOR WC PLOTTING 
C 
100   IUNIT=1 
      CALL SETUU(IGCB)
      GO TO 1000
C***************************************************************
C SAVE THE CP TO USE LATER FOR PLACEMENT PURPOSES.
C 
1000  CALL WHERE(IGCB,X1,Y1)
C************************************************************** 
C GET THE LENGTH OF THE LINE. GET THE LORG VALUE. 
C THEN ADJUST THE CP FOR THE PROPER LORG PLACEMENT. 
C IDCB(17) IS SET TO 100000B TO TELL GLEN1 NOT TO PRINT OUT A GPS 13
C ERROR.
C 
      IDCB(17)=100000B
      CALL GLEN1(IGCB,ITEXT,ISTRC,ITEXL2,DELTX,DELTY,IDCB,IDCB(17)) 
      CALL GCBIM(21,1,LORG,0,1) 
      CALL GPLC1(IGCB,ITEXT,X1,Y1,DELTX,DELTY,LORG) 
C*************************************************************
C OUTPUT THE CHARACTERS ONE AT A TIME. ICHAR HOLDS THE JTH CHAR.
C 
      IEND=ISTRT+ITEXL2-1 
      DO 10 J=ISTRC,IEND
      CALL SGET(ITEXT,J,ICHAR)
C***********************************************************
C GET THE CP (NDC COORDS) ABOUT WHICH TO ORIENT THIS CHARACTER. 
C GET A NEW XMTRX TO USE TO TRANSFORM THE CHARACTERS FROM THE 
C CHARACTER COORDINATE SPACE INTO THE NDC SPACE.
C GET THE STROKES FOR THE CHARACTER INTO IBUFR. THEN OUTPUT 
C THE STROKES. YOU MAY HAVE TO GET SEVERAL BUNCHES OF STROKES 
C TO FINISH ONE CHARACTER.
C 
8     CALL WHERE(IGCB,CPX,CPY)
      CALL GCALC(IGCB,XMTRX,INFO,IBUFR,IUNIT) 
C 
      DO 15 IREPET=1,INFO(2)/128
      CALL GGET(ICHAR,IREPET,INFO,IDCB,IBUFR,IBUFS,INDEX) 
      CALL GCHR1(IGCB,LUG,IBUFR,IBUFS,INDEX,XMTRX,CPX,CPY,DONE) 
      IF (DONE) GO TO 30
15    CONTINUE
C*********************************************************
C DONE WITH THIS CHARACTER. CAN ADD CODE HERE TO PAD A
C BLANK CHARACTER IF YOU WANT TO JUSTIFY THE STRING.
C 
30    CONTINUE
10    CONTINUE
C*************************************************************
C FINISHED WITH THE WHOLE STRING. REENABLE THE PROPER UNITS 
C AND MOVE THE CP TO THE PROPER SPOT. 
C 
      CALL GPLC2(IGCB,INFO,XMTRX,X1,Y1,DELTX,DELTY,LORG,NOCARR,IBUFR) 
      IF (ICU .EQ. 1) CALL SETUU(IGCB)
      RETURN
C*************************************************************
C ITEXL OR ISTRC .LE. 0 
C 
8500  CONTINUE
      CALL PLTER(9,IDUMY) 
      RETURN
C*************************************************************
C SOME SORT OF FMP ERROR OCCURRED.
C 
9000  CONTINUE
      CALL PLTER(IERR-300,IDUMY)
      RETURN
      END 
                                                                                          