* * $Id$ * * $Log$ * Revision 1.1.1.1 1995/10/24 10:20:25 cernlib * Geant * * #include "geant321/pilot.h" *CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani *-- Author : SUBROUTINE GDRAWT(X,Y,CHTEXT,SIZE,ANGLE,LWIDTH,IOPT) C. C. ****************************************************************** C. * * C. * Draw text with software characters * C. * * C. * In ITXATT (common GCDRAW) there is * C. * a bit mask for the text attributes : * C. * * C. * Bit 1- 3 = Text line width (LWIDTH) * C. * Bit 4- 7 = Text color * C. * Bit 8-11 = Text font * C. * Bit 12-24 = Reserved for future use * C. * * C. * ==>Called by : , , GDAHIT, GDARR, GDHEAD, * C. * GDPART, GDPRTR, GDSCAL, GDSHOW, GDSPEC * C. * Authors : P.Zanarini ; S.Giani ********* * C. * * C. ****************************************************************** C. #include "geant321/gcbank.inc" #include "geant321/gcdraw.inc" #include "geant321/gcunit.inc" #include "geant321/gcflag.inc" CHARACTER*(*) CHTEXT CHARACTER*1 CHOPT DIMENSION AITXFO(2) C. C. ------------------------------------------------------------------ C. CALL IGQ('TXCI',AITXCO) CALL IGQ('TXFP',AITXFO) ALWIDT=LWIDTH NCHAR=LNBLNK(CHTEXT) IF (IDVIEW.EQ.0.OR.IDVIEW.EQ.-175) GO TO 40 C C Store text on view bank IDVIEW C JV=LQ(JDRAW-IDVIEW) ITU=ITU+1 C 10 IF (ITU.LE.MAXTU) GO TO 20 C C Push text unit bank C JV = LQ(JV-3) CALL MZPUSH(IXCONS,JV,0,MORTU,'I') IF(IEOTRI.NE.0)GO TO 50 JV=LQ(JDRAW-IDVIEW) MAXTU=MAXTU+MORTU GO TO 10 C 20 IF ((ITS+6+NCHAR).LE.MAXTS) GO TO 30 C C Push text segment bank C JV = LQ(JV-6) CALL MZPUSH(IXCONS,JV,0,MORTS,'I') IF(IEOTRI.NE.0)GO TO 50 JV=LQ(JDRAW-IDVIEW) MAXTS=MAXTS+MORTS GO TO 20 C 30 JVTS=LQ(JV-6)+ITS+1 Q(JVTS)=X Q(JVTS+1)=Y Q(JVTS+2)=SIZE Q(JVTS+3)=ANGLE C C Bit 1- 3 = Text line width (LWIDTH) C Bit 4-24 = Text attribute C ISUM=0 ITXCOL=AITXCO CALL MVBITS(ITXCOL,0,4,ITXATT,3) IF(AITXFO(1).EQ.-6..AND.AITXFO(2).EQ.0.)THEN ITXFON=6 ELSEIF(AITXFO(1).EQ.-6..AND.AITXFO(2).EQ.1.)THEN ITXFON=7 ENDIF CALL MVBITS(ITXFON,0,4,ITXATT,7) CALL MVBITS(ITXATT,0,24,ISUM,0) CALL MVBITS(LWIDTH,0,3,ISUM,0) Q(JVTS+4)=ISUM C Q(JVTS+5)=IOPT Q(JVTS+6)=NCHAR CALL UCTOH(CHTEXT,IQ(JVTS+7),4,NCHAR) C Q(LQ(JV-3)+ITU)=ITS+1 ITS=ITS+7+NCHAR GO TO 999 C C Draw text on screen C 40 CONTINUE IF (IOPT.EQ.-1) THEN CHOPT='L' ALFLAG=10. ELSE IF (IOPT.EQ.0) THEN CHOPT='C' ALFLAG=20. ELSE IF (IOPT.EQ.1) THEN CHOPT='R' ALFLAG=30. ENDIF IF(IDVIEW.EQ.-175)THEN ITXCOL=IBITS(ITXATT,3,4) AITXCO=ITXCOL ITXFON=IBITS(ITXATT,7,4) IF(ITXFON.EQ.6)THEN ITXFON=-60 ELSEIF(ITXFON.EQ.7)THEN ITXFON=-61 ENDIF AITXFP=ITXFON CALL IGSET('TXFP',AITXFP) ENDIF IF(ALWIDT.GT.1.)ALWIDT=ALWIDT*3. *** CALL IGTEXT(X,Y,CHTEXT,SIZE,ANGLE,CHOPT) CALL IGSET('TXAL',ALFLAG) CALL IGSET('TANG',ANGLE) CALL IGSET('TXCI',AITXCO) CALL IGSET('CHHE',SIZE) CALL IGSET('LWID',ALWIDT) CALL ITX(X,Y,CHTEXT) GO TO 999 C 50 WRITE (CHMAIL,10000) CALL GMAIL(0,0) C 10000 FORMAT (' ERROR IN GDRAWT: MEMORY OVERFLOW IN PUSHING A BANK') 999 END