]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1995/10/24 10:20:25 cernlib | |
6 | * Geant | |
7 | * | |
8 | * | |
9 | #include "geant321/pilot.h" | |
10 | *CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani | |
11 | *-- Author : | |
12 | SUBROUTINE GDRAWT(X,Y,CHTEXT,SIZE,ANGLE,LWIDTH,IOPT) | |
13 | C. | |
14 | C. ****************************************************************** | |
15 | C. * * | |
16 | C. * Draw text with software characters * | |
17 | C. * * | |
18 | C. * In ITXATT (common GCDRAW) there is * | |
19 | C. * a bit mask for the text attributes : * | |
20 | C. * * | |
21 | C. * Bit 1- 3 = Text line width (LWIDTH) * | |
22 | C. * Bit 4- 7 = Text color * | |
23 | C. * Bit 8-11 = Text font * | |
24 | C. * Bit 12-24 = Reserved for future use * | |
25 | C. * * | |
26 | C. * ==>Called by : <USER>, <GXINT>, GDAHIT, GDARR, GDHEAD, * | |
27 | C. * GDPART, GDPRTR, GDSCAL, GDSHOW, GDSPEC * | |
28 | C. * Authors : P.Zanarini ; S.Giani ********* * | |
29 | C. * * | |
30 | C. ****************************************************************** | |
31 | C. | |
32 | #include "geant321/gcbank.inc" | |
33 | #include "geant321/gcdraw.inc" | |
34 | #include "geant321/gcunit.inc" | |
35 | #include "geant321/gcflag.inc" | |
36 | CHARACTER*(*) CHTEXT | |
37 | CHARACTER*1 CHOPT | |
38 | DIMENSION AITXFO(2) | |
39 | C. | |
40 | C. ------------------------------------------------------------------ | |
41 | C. | |
42 | CALL IGQ('TXCI',AITXCO) | |
43 | CALL IGQ('TXFP',AITXFO) | |
44 | ALWIDT=LWIDTH | |
45 | NCHAR=LNBLNK(CHTEXT) | |
46 | IF (IDVIEW.EQ.0.OR.IDVIEW.EQ.-175) GO TO 40 | |
47 | C | |
48 | C Store text on view bank IDVIEW | |
49 | C | |
50 | JV=LQ(JDRAW-IDVIEW) | |
51 | ITU=ITU+1 | |
52 | C | |
53 | 10 IF (ITU.LE.MAXTU) GO TO 20 | |
54 | C | |
55 | C Push text unit bank | |
56 | C | |
57 | JV = LQ(JV-3) | |
58 | CALL MZPUSH(IXCONS,JV,0,MORTU,'I') | |
59 | IF(IEOTRI.NE.0)GO TO 50 | |
60 | JV=LQ(JDRAW-IDVIEW) | |
61 | MAXTU=MAXTU+MORTU | |
62 | GO TO 10 | |
63 | C | |
64 | 20 IF ((ITS+6+NCHAR).LE.MAXTS) GO TO 30 | |
65 | C | |
66 | C Push text segment bank | |
67 | C | |
68 | JV = LQ(JV-6) | |
69 | CALL MZPUSH(IXCONS,JV,0,MORTS,'I') | |
70 | IF(IEOTRI.NE.0)GO TO 50 | |
71 | JV=LQ(JDRAW-IDVIEW) | |
72 | MAXTS=MAXTS+MORTS | |
73 | GO TO 20 | |
74 | C | |
75 | 30 JVTS=LQ(JV-6)+ITS+1 | |
76 | Q(JVTS)=X | |
77 | Q(JVTS+1)=Y | |
78 | Q(JVTS+2)=SIZE | |
79 | Q(JVTS+3)=ANGLE | |
80 | C | |
81 | C Bit 1- 3 = Text line width (LWIDTH) | |
82 | C Bit 4-24 = Text attribute | |
83 | C | |
84 | ISUM=0 | |
85 | ITXCOL=AITXCO | |
86 | CALL MVBITS(ITXCOL,0,4,ITXATT,3) | |
87 | IF(AITXFO(1).EQ.-6..AND.AITXFO(2).EQ.0.)THEN | |
88 | ITXFON=6 | |
89 | ELSEIF(AITXFO(1).EQ.-6..AND.AITXFO(2).EQ.1.)THEN | |
90 | ITXFON=7 | |
91 | ENDIF | |
92 | CALL MVBITS(ITXFON,0,4,ITXATT,7) | |
93 | CALL MVBITS(ITXATT,0,24,ISUM,0) | |
94 | CALL MVBITS(LWIDTH,0,3,ISUM,0) | |
95 | Q(JVTS+4)=ISUM | |
96 | C | |
97 | Q(JVTS+5)=IOPT | |
98 | Q(JVTS+6)=NCHAR | |
99 | CALL UCTOH(CHTEXT,IQ(JVTS+7),4,NCHAR) | |
100 | C | |
101 | Q(LQ(JV-3)+ITU)=ITS+1 | |
102 | ITS=ITS+7+NCHAR | |
103 | GO TO 999 | |
104 | C | |
105 | C Draw text on screen | |
106 | C | |
107 | 40 CONTINUE | |
108 | IF (IOPT.EQ.-1) THEN | |
109 | CHOPT='L' | |
110 | ALFLAG=10. | |
111 | ELSE IF (IOPT.EQ.0) THEN | |
112 | CHOPT='C' | |
113 | ALFLAG=20. | |
114 | ELSE IF (IOPT.EQ.1) THEN | |
115 | CHOPT='R' | |
116 | ALFLAG=30. | |
117 | ENDIF | |
118 | IF(IDVIEW.EQ.-175)THEN | |
119 | ITXCOL=IBITS(ITXATT,3,4) | |
120 | AITXCO=ITXCOL | |
121 | ITXFON=IBITS(ITXATT,7,4) | |
122 | IF(ITXFON.EQ.6)THEN | |
123 | ITXFON=-60 | |
124 | ELSEIF(ITXFON.EQ.7)THEN | |
125 | ITXFON=-61 | |
126 | ENDIF | |
127 | AITXFP=ITXFON | |
128 | CALL IGSET('TXFP',AITXFP) | |
129 | ENDIF | |
130 | IF(ALWIDT.GT.1.)ALWIDT=ALWIDT*3. | |
131 | *** CALL IGTEXT(X,Y,CHTEXT,SIZE,ANGLE,CHOPT) | |
132 | CALL IGSET('TXAL',ALFLAG) | |
133 | CALL IGSET('TANG',ANGLE) | |
134 | CALL IGSET('TXCI',AITXCO) | |
135 | CALL IGSET('CHHE',SIZE) | |
136 | CALL IGSET('LWID',ALWIDT) | |
137 | CALL ITX(X,Y,CHTEXT) | |
138 | GO TO 999 | |
139 | C | |
140 | 50 WRITE (CHMAIL,10000) | |
141 | CALL GMAIL(0,0) | |
142 | C | |
143 | 10000 FORMAT (' ERROR IN GDRAWT: MEMORY OVERFLOW IN PUSHING A BANK') | |
144 | 999 END |