|
|
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.