|
|
1.1 root 1: #ifndef lint
2: static char *rcsid_text_c = "$Header: text.c,v 10.1 86/11/29 13:52:56 jg Rel $";
3: #endif lint
4: /*
5:
6: Copyright 1986 by the University of Utah
7:
8: Permission to use, copy, modify, and distribute this
9: software and its documentation for any purpose and without
10: fee is hereby granted, provided that the above copyright
11: notice appear in all copies and that both that copyright
12: notice and this permission notice appear in supporting
13: documentation, and that the name of the University of Utah
14: not be used in advertising or publicity pertaining to
15: distribution of the software without specific, written
16: prior permission. The University of Utah makes no
17: representations about the suitability of this software for
18: any purpose. It is provided "as is" without express or
19: implied warranty.
20:
21: */
22:
23: /*
24: * ToDo:
25: * xymask's
26: */
27:
28: #include "Xapollo.h"
29: #ifndef stdin
30: #include <stdio.h>
31: #endif
32:
33: extern boolean borrow_flag;
34: extern int old_op;
35:
36: PrintText(string, strlen, font, fore, back, charpad, spacepad, dstx, dsty,
37: clipstart, clipcount, func, zmask)
38: unsigned char *string;
39: FONT *font;
40: int strlen, fore, back, charpad, spacepad, dstx, dsty;
41: CLIP *clipstart;
42: int clipcount, zmask;
43: int func;
44: {
45: int op, i;
46: extern char FBMap[];
47: register w = 0;
48: int bsize = 0;
49: int lheight;
50: int sbot, sright;
51: int savestrlen = strlen;
52: unsigned char *savestring = string;
53: gpr_$window_t cwindow;
54: boolean active;
55: status_$t status;
56: FontPriv * fp;
57: static int old_fore = -1,
58: old_back = -1;
59:
60: fp = (FontPriv *)font->data;
61:
62: /* Do apollo-format fonts */
63: if (fp->ap_font) {
64: int lback, lfore;
65:
66: if (!borrow_flag)
67: active = gpr_$acquire_display( status );
68: if ((charpad != 0) || (spacepad != 0))
69: fprintf(stderr, "charpad=%d, spacepad=%d\n", charpad,spacepad);
70: /* if window is inverted (and just using 0 & 1 pixels, use inverted font */
71: gpr_$set_text_font( (short)fp->ap_font_id, status);
72: if ((back == 1) && (fore == 0))
73: gpr_$set_text_font( (short)fp->ap_font_id_inv, status);
74: fore = (fore == 0) ? 1 : fore;
75: back = (back == 1) ? 0 : back;
76:
77: if (old_fore != fore) {
78: old_fore = fore;
79: gpr_$set_text_value((gpr_$pixel_value_t)fore, status);
80: }
81: if (old_back != back) {
82: old_back = back;
83: gpr_$set_text_background_value((gpr_$pixel_value_t)back, status);
84: }
85: set_zmask(zmask);
86: set_op( func );
87: CheckCursor(dstx, dsty, strlen * fp->maxwidth, font->height);
88: dsty = dsty + font->height - 1;
89: do {
90: GetNextClip(clipstart, cwindow);
91: gpr_$set_clip_window( cwindow, status);
92: gpr_$move( (short)dstx, (short)dsty, status);
93: gpr_$text( *string, (short)strlen, status);
94: } while (--clipcount);
95: if (!borrow_flag)
96: gpr_$release_display( status);
97: }
98: else {
99: /* wasn't in apollo format, use internal format--this should be avoided! */
100: if (fore & 1)
101: func += 0x20;
102: if (back & 1)
103: func += 0x10;
104: func = FBMap[func];
105:
106: lheight = font->height;
107:
108: sbot = dsty + lheight;
109: sright = dstx + w;
110:
111: dsty -= font->base;
112: do {
113: gpr_$window_t window;
114: gpr_$position_t dest;
115: int w;
116:
117: gpr_$set_raster_op((short)0, (short)func, status);
118: old_op = func;
119: GetNextClip(clipstart, cwindow);
120: CheckCursor(cwindow.x_coord, cwindow.y_coord,
121: cwindow.x_size, cwindow.y_size);
122: gpr_$set_clip_window( cwindow, status);
123: window.y_size = lheight;
124: dest.y_coord = dsty;
125: dest.x_coord = dstx;
126:
127: while( strlen-- )
128: {
129: window.x_coord = fp->leftarray[*string];
130: w = fp->widths[*string];
131: window.x_size = w;
132: gpr_$bit_blt(fp->strike->data, window, (short)0, dest, (short)0, status);
133: ++string;
134: dest.x_coord += w;
135: }
136: string = savestring;
137: strlen = savestrlen;
138: } while (--clipcount > 0);
139: }
140: RestoreCursor();
141: }
142:
143: PrintTextMask(string, strlen, font, srcpix, charpad, spacepad, dstx, dsty,
144: clips, clipcount, func, zmask)
145: unsigned char *string;
146: FONT *font;
147: int strlen, srcpix, charpad, spacepad, dstx, dsty;
148: CLIP *clips;
149: int clipcount, zmask;
150: register int func;
151: {
152: int cleft, ctop, cwidth, cheight;
153: int fore, back;
154: extern char SSMap[];
155:
156: /* ( assume depth == 1) */
157: fore = 1;
158: back = 0;
159: if ((srcpix & 1) == 0) {
160: fore = 0;
161: back = 1;
162: }
163: /* Punt for now on masking */
164: PrintText(string, strlen, font, fore, back, charpad, spacepad, dstx, dsty,
165: clips, clipcount, func, zmask);
166:
167: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.