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: GLEN1 C SOURCE: 92840 - 18154 C RELOC: 92840 - 16021 C C C CC*********************************************************** SUBROUTINE GLEN1(IGCB,ITEXT,ISTRT,ITEXL,DELTX,DELTY,IDCB,IBUFR) +,92840-16021 REV.2013 791107 C************************************************************ C GLEN1 RETURNS THE SOFTWARE LENGTH OF THE TEXT STRING C IN ITEXT. C C ITEXT = BUFFER CONTAINING THE CHARACTER STRING. C ISTRT = INDEX OF FIRST CHARACTER IN THE SUBSTRING WHOSE C LENGTH IS DESIRED. C ITEXL = CHARACTER COUNT OF THE ENTIRE STRING THAT CONTAINS C THAT CONTAINS THE SUBSTRING. C DELTX = RETURNED DELTA X THAT WOULD OCCUR IF ITEXT WERE OUTPUT C ACCORDING TO THE CURRENT CHARACTER SIZE, LDIR, ETC. C DELTY = RETURNED DELTA Y THAT WOULD OCCUR IF ITEXT WERE OUTPUT C IDCB = DCB THAT'S OPEN TO THE FONT FILE. C IBUFR = MINIMUM 128 WORD UTILITY BUFFER. C C 11-07-79 THIS SUBR NOW CHECKS TO SEE WHETHER IT SHOULD PRINT OUT C A GPS 13 ERROR WHEN AN ILLEGAL CHARACTER IS ENCOUNTERED. C C IF IBUFR(1) .EQ. 100000B GLEN1 DOESNT PRINT OUT A GPS 13 ERROR C************************************************************** INTEGER IGCB(1),ITEXT(1),ITEXL,IDCB(1),IBUFR(1) REAL DELTX,DELTY LOGICAL SKIP C REAL XMTRX(2,2) INTEGER INFO(9) C************************************************************* C 4-26-79 IMPLEMENT A STUB. C D LU=LOGLU(IDUMY) D WRITE(LU,1000) D1000 FORMAT(/"GLEN1: ENTERING GLEN1.") C*********************************************************** C SET THE SKIP FLAG ACCORDING TO THE VALUE IN IBUFR(1) C SKIP=.FALSE. IF (IBUFR(1) .EQ. 100000B) SKIP = .TRUE. C************************************************************* C GET THE POSITIVE CHARACTER COUNT OF THE CHARACTERS IN ITEXT. C IF ((ISTRT .LE. 0) .OR. (ITEXL .LE. 0)) GO TO 8500 ISTRC=ISTRT C************************************************************ C READ IN INFO FROM THE FONT FILE. C CALL READF(IDCB,IERR,INFO,9,LEN,1) IF (IERR .LT. 0) GO TO 8000 C********************************************************* C CALL GCALC TO CALCULATE THE TRANSFORMATION MATRIX. C (NOTE: GCALC DESTROYS THE DATA IN IBUFR.) C (NOTE: IUNIT = 0 TO GET AN NDC XMTRX, C = 1 TO GET A WC XMTRX) C IUNIT=IADCD(IDUMY)-11 CALL GCALC(IGCB,XMTRX,INFO,IBUFR,IUNIT) C**************************************************************** C SEE IF THERE'S AN UNDERSCORE AS THE LAST CHARACTER. IF SO, IGNORE IT. C CALL SGET(ITEXT,ISTRT+ITEXL-1,ICHAR) ITEXL2=ITEXL IF (ICHAR .EQ. 137B) ITEXL2=ITEXL2-1 C******************************************************** C IF YOU DON'T HAVE A WIDTH TABLE, JUMP DOWN BELOW AND JUST C USE THE STANDARD WIDTH. IF YOU DO HAVE A WIDTH TABLE, ADD C UP THE INDIVIDUAL WIDTHS FOR EACH CHARACTER. C ITBL=INFO(6) IF (ITBL .EQ. 0) GO TO 2000 C********************************************************* C ADD UP THE WIDTHS OF EACH INDIVIDUAL CHARACTER. C IWIDE=0 IEND=ISTRC+ITEXL2-1 DO 1500 J=ISTRC,IEND CALL SGET(ITEXT,J,ICHAR) IF ((ICHAR .GE. INFO(7)) .AND. +(ICHAR .LE. INFO(8))) GO TO 1550 ICHAR=INFO(9) IF (SKIP) GO TO 1550 CALL PLTER(13,IDUMY) C************************************************************** C READ IN THE APPROPRIATE PART OF THE WIDTH TABLE. C 1550 CONTINUE IOFF=ICHAR-INFO(7)+1 IREC1=IOFF/128 INDEX=MOD(IOFF,128) C CALL READF(IDCB,IERR,IBUFR,128,LEN,ITBL+IREC1) IF (IERR .LT. 0) GO TO 8000 C IWIDE=IWIDE+IBUFR(INDEX) 1500 CONTINUE GO TO 3000 C********************************************************** C NO WIDTH TABLE. USE STANDARD VALUES. C 2000 CONTINUE IWIDE=ITEXL2*INFO(4) GO TO 3000 C******************************************************** C IWIDE NOW CONTAINS THE TOTAL LENGTH OF THE CHARACTERS IN C CHARACTER COORDINATES. C MULTIPLY BY THE XMTRX VALUES TO C GET THE CURRENT UNIT VALUES TO RETURN TO THE USER. C 3000 CONTINUE XWIDE=FLOAT(IWIDE) DELTX=XMTRX(1,1)*XWIDE DELTY=XMTRX(2,1)*XWIDE D WRITE(LU,3005) DELTX,DELTY D3005 FORMAT(/"GLEN1: DELTX AND DELTY = ",2F9.5) RETURN C********************************************************* C FMP ERROR POINT. C 8000 CONTINUE CALL PLTER(IERR-300,IDUMY) RETURN C********************************************************* C ITEXL OR ISTRT .LE. 0 C 8500 CONTINUE CALL PLTER(9,IDUMY) RETURN END