1: #ifdef  sun
   2: /*
   3:  * The Sun X drivers are a product of Sun Microsystems, Inc. and are provided
   4:  * for unrestricted use provided that this legend is included on all tape
   5:  * media and as a part of the software program in whole or part.  Users
   6:  * may copy or modify these drivers without charge, but are not authorized
   7:  * to license or distribute them to anyone else except as part of a product or
   8:  * program developed by the user.
   9:  *
  10:  * THE SUN X DRIVERS ARE PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
  11:  * INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A
  12:  * PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE
  13:  * PRACTICE.
  14:  *
  15:  * The Sun X Drivers are provided with no support and without any obligation
  16:  * on the part of Sun Microsystems, Inc. to assist in their use, correction,
  17:  * modification or enhancement.
  18:  *
  19:  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  20:  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THE SUN X
  21:  * DRIVERS OR ANY PART THEREOF.
  22:  *
  23:  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  24:  * or profits or other special, indirect and consequential damages, even if
  25:  * Sun has been advised of the possibility of such damages.
  26:  *
  27:  * Sun Microsystems, Inc.
  28:  * 2550 Garcia Avenue
  29:  * Mountain View, California  94043
  30:  */
  31: 
  32: #ifndef lint
  33: static char sccsid[] = "@(#)text.c 2.1 86/01/28 Copyright 1986 Sun Micro";
  34: #endif
  35: 
  36: /*-
  37:  * Copyright (c) 1986 by Sun Microsystems,  Inc.
  38:  */
  39: 
  40: /*
  41:  *	ToDo:
  42:  *		Color
  43:  */
  44: 
  45: #include "Xsun.h"
  46: #ifndef stdin
  47: #include <stdio.h>
  48: #endif
  49: #include <pixrect/memreg.h>
  50: #include <pixrect/cg2reg.h>
  51: 
  52: /* I've put in some rather ugly hacks, in the name of performance.  The
  53:    global variables private_* are really extra parameters to the batchrop
  54:    routines.  I did this, rather than adding parameters, because I wanted to
  55:    do the least violence to the "official" specs of batchrop -- this way X
  56:    will vaguely work on displays that don't use one of the tuned batchrops.
  57: 	JAG */
  58: 
  59: int         private_fgcolor, private_bgcolor, private_czmask;
  60: 
  61: extern struct pixrect *PixRect;
  62: 
  63: PrintText(string, strlen, font, fore, back, charpad, spacepad, dstx, dsty,
  64:       clips, clipcount, func, zmask)
  65:     register unsigned char *string;
  66:     FONT       *font;
  67:     int         strlen, fore, back, charpad, spacepad, dstx, dsty;
  68:     CLIP       *clips;
  69:     int         clipcount, zmask;
  70:     int         func;
  71: {
  72:     extern CURSOR *CurrentCursor;
  73:     extern      CursorDisplayed;
  74:     int         cleft, ctop, cwidth, cheight;
  75:     int         op;
  76:     extern char FBMap[];
  77: #define CHUNK   400
  78:     unsigned char *limit = string + (strlen < CHUNK ? strlen : CHUNK);
  79:     register    w = 0;
  80:     static struct pr_prpos bat[CHUNK];
  81:     int         bsize = 0;
  82:     int         lheight;
  83:     int         sbot, sright;
  84: 
  85:     private_czmask = zmask;
  86:     private_fgcolor = fore;
  87:     private_bgcolor = back;
  88:     if (fore & 1)
  89:     func += 0x20;
  90:     if (back & 1)
  91:     func += 0x10;
  92:     func = FBMap[func];
  93: #ifdef  notdef
  94:     op = SUN_FROM_X_OP(func) /* | PIX_COLOR(fore) */ ;
  95: #else
  96:     op = SUN_FROM_X_OP(func) | PIX_COLOR(fore);
  97: #endif
  98:     {
  99:     register struct pixfont *pf = (struct pixfont *) font->data;
 100:     register struct pr_prpos *p = bat;
 101:     lheight = pf->pf_defaultsize.y;
 102:     if (charpad == 0 && spacepad == 0)
 103:         while (string < limit) {
 104:         register struct pixchar *pc = &(pf->pf_char[*string++]);
 105:         if (pc == 0 || pc->pc_pr == NULL)
 106:             continue;
 107:         p->pr = pc->pc_pr;
 108:         p->pos.x = pc->pc_adv.x;
 109:         w += p->pos.x;
 110:         p++;
 111:         bsize++;
 112:         }
 113:     else {
 114:         struct pixchar *space = &pf->pf_char[font->space];
 115:         while (string < limit) {
 116:         register struct pixchar *pc = &(pf->pf_char[*string++]);
 117:         if (pc == 0 || pc->pc_pr == NULL)
 118:             continue;
 119:         p->pr = pc->pc_pr;
 120:         p->pos.x = pc->pc_adv.x + charpad;
 121:         if (pc == space)
 122:             p->pos.x += spacepad;
 123:         w += p->pos.x;
 124:         p++;
 125:         bsize++;
 126:         }
 127:     }
 128:     }
 129:     sbot = dsty + lheight;
 130:     sright = dstx + w;
 131:     if (CursorDisplayed) {
 132:     extern DEVICE *CurrentDevice;
 133:     register vsCursor *ms = CurrentDevice->mouse;
 134:     register CURSOR *cs = CurrentCursor;
 135:     if (ms->y < sbot && ms->x < sright
 136:         && ms->y + cs->height > dsty
 137:         && ms->x + cs->width > dstx)
 138:         DisplayCursor(NULL);
 139:     }
 140:     do {
 141:     GetNextClip(clips, cleft, ctop, cwidth, cheight);
 142:     if (dsty >= ctop && sbot <= ctop + cheight
 143:         && dstx >= cleft && sright <= cleft + cwidth)
 144:         pr_batchrop(PixRect, dstx - bat[0].pos.x, dsty,
 145:             op | PIX_DONTCLIP, bat, bsize);
 146:     else {
 147:         struct pixrect *region;
 148:         if (dsty > ctop + cheight)
 149:         continue;
 150:         if (dsty + lheight <= ctop)
 151:         continue;
 152:         region = pr_region(PixRect, cleft, ctop, cwidth, cheight);
 153:         pr_batchrop(region, dstx - cleft - bat[0].pos.x,
 154:             dsty - ctop,
 155:             op, bat, bsize);
 156:         pr_destroy(region);
 157:     }
 158:     } while (--clipcount > 0);
 159:     if (!CursorDisplayed)
 160:     DisplayCursor(CurrentCursor);
 161: }
 162: 
 163: PrintTextMask(string, strlen, font, srcpix, charpad, spacepad, dstx, dsty,
 164:           clips, clipcount, func, zmask)
 165:     unsigned char *string;
 166:     FONT       *font;
 167:     int         strlen, srcpix, charpad, spacepad, dstx, dsty;
 168:     CLIP       *clips;
 169:     int         clipcount, zmask;
 170:     register int func;
 171: {
 172:     extern CURSOR *CurrentCursor;
 173:     extern      CursorDisplayed;
 174:     int         cleft, ctop, cwidth, cheight;
 175:     int         op;
 176:     extern char SSMap[];
 177: #define CHUNK   400
 178:     unsigned char *limit = string + (strlen < CHUNK ? strlen : CHUNK);
 179:     register    w = 0;
 180:     static struct pr_prpos bat[CHUNK];
 181:     int         bsize = 0;
 182:     int         lheight;
 183:     int         sbot, sright;
 184: 
 185: 
 186:     SetZmask(PixRect, &zmask);
 187:     private_bgcolor = -1;
 188:     private_fgcolor = srcpix;
 189:     if (PixRect->pr_depth == 1) {
 190:     if ((srcpix & 1) == 0)
 191:         func += 0x10;
 192:     op = SUN_FROM_X_OP(SSMap[func]) & PIX_SRC | PIX_NOT(PIX_SRC) & PIX_DST;
 193:     }
 194:     else
 195:     op = SUN_FROM_X_OP(func);
 196:     if (PixRect->pr_depth > 1)
 197:     op |= PIX_COLOR(srcpix);
 198:     {
 199:     register struct pixfont *pf = (struct pixfont *) font->data;
 200:     register struct pr_prpos *p = bat;
 201:     lheight = pf->pf_defaultsize.y;
 202:     if (charpad == 0 && spacepad == 0)
 203:         while (string < limit) {
 204:         register struct pixchar *pc = &(pf->pf_char[*string++]);
 205:         if (pc == 0)
 206:             continue;
 207:         p->pr = pc->pc_pr;
 208:         p->pos.x = pc->pc_adv.x;
 209:         w += p->pos.x;
 210:         p++;
 211:         bsize++;
 212:         }
 213:     else {
 214:         struct pixchar *space = &pf->pf_char[font->space];
 215:         while (string < limit) {
 216:         register struct pixchar *pc = &(pf->pf_char[*string++]);
 217:         if (pc == 0)
 218:             continue;
 219:         p->pr = pc->pc_pr;
 220:         p->pos.x = pc->pc_adv.x + charpad;
 221:         if (pc == space)
 222:             p->pos.x += spacepad;
 223:         w += p->pos.x;
 224:         p++;
 225:         bsize++;
 226:         }
 227:     }
 228:     }
 229:     sbot = dsty + lheight;
 230:     sright = dstx + w;
 231:     if (CursorDisplayed) {
 232:     extern DEVICE *CurrentDevice;
 233:     register vsCursor *ms = CurrentDevice->mouse;
 234:     register CURSOR *cs = CurrentCursor;
 235:     if (ms->y < sbot && ms->x < sright
 236:         && ms->y + cs->height > dsty
 237:         && ms->x + cs->width > dstx)
 238:         DisplayCursor(NULL);
 239:     }
 240:     do {
 241:     GetNextClip(clips, cleft, ctop, cwidth, cheight);
 242:     if (dsty >= ctop && sbot <= ctop + cheight
 243:         && dstx >= cleft && sright <= cleft + cwidth)
 244:         pr_batchrop(PixRect, dstx - bat[0].pos.x, dsty,
 245:             op | PIX_DONTCLIP, bat, bsize);
 246:     else {
 247:         struct pixrect *region;
 248:         if (dsty > ctop + cheight)
 249:         continue;
 250:         if (dsty + lheight <= ctop)
 251:         continue;
 252:         region = pr_region(PixRect, cleft, ctop, cwidth, cheight);
 253:         pr_batchrop(region, dstx - cleft - bat[0].pos.x,
 254:             dsty - ctop,
 255:             op, bat, bsize);
 256:         pr_destroy(region);
 257:     }
 258:     } while (--clipcount > 0);
 259:     if (!CursorDisplayed)
 260:     DisplayCursor(CurrentCursor);
 261:     {
 262:     static      allmask = -1;
 263:     SetZmask(PixRect, &allmask);
 264:     }
 265: }
 266: 
 267: 
 268: /*
 269:  * Copyright (c) 1983 by Sun Microsystems, Inc.
 270:  */
 271: 
 272: /*
 273:  * Memory batchrop
 274:  */
 275: 
 276: 
 277: extern char pr_reversedst[];
 278: extern struct pixrectops mem_ops;
 279: 
 280: 
 281: 
 282: #define MEMBATCH(IfClip, IfMask, op, IfReverse)             \
 283:     for (; --count >= 0; src++) {                   \
 284:     dst.pos.x += src->pos.x;                    \
 285:     dp = dp0 + (((dskew = xoff0 + dst.pos.x) >> 3) & ~1);       \
 286:     dskew &= 0xF;                           \
 287:     spr = src->pr;                          \
 288:     sizex = spr->pr_size.x;                     \
 289:     sizey = spr->pr_size.y;                     \
 290:     sprd = mpr_d(spr);                      \
 291:     if (sprd->md_linebytes != 2)                    \
 292:         goto hard;                          \
 293:     sp = (u_short *) sprd->md_image;                \
 294:     IfClip( if (dst.pos.x + sizex > limx)               \
 295:             goto hard;                      \
 296:         if (dst.pos.y + sizey > limy)               \
 297:         sizey = limy - dst.pos.y;               \
 298:         if (dst.pos.x < 0)                  \
 299:             goto hard;                      \
 300:         if (dst.pos.y < 0) {                    \
 301:             sizey += dst.pos.y;                 \
 302:             sp -= dst.pos.y;                    \
 303:             dp -= pr_product(dst.pos.y, vert);          \
 304:         }                           \
 305:         if (sizex <= 0)                     \
 306:             continue;                       \
 307:     ,)                              \
 308:     if (--sizey>=0)                         \
 309:     if (dskew + sizex <= 16) {                  \
 310:         IfMask( register short mask;                \
 311:             mask = 0x8000;                  \
 312:             sizex -= 1;                 \
 313:             mask >>= sizex;                 \
 314:             ((unsigned short) mask) >>= dskew;      \
 315:             IfReverse(mask = ~mask;,),)         \
 316:         do {                            \
 317:         IfMask(*(u_short *) dp IfReverse(&,|)= mask;,)      \
 318:             *(u_short *) dp op (*sp++ >> dskew);        \
 319:         dp += vert;                     \
 320:         } while (--sizey != -1);                    \
 321:     }                               \
 322:     else {                              \
 323:         IfMask( register long mask;             \
 324:             mask = 0x80000000;              \
 325:             sizex -= 1;                 \
 326:             mask >>= sizex;                 \
 327:             ((unsigned long) mask) >>= dskew;       \
 328:             IfReverse(mask = ~mask;,),)         \
 329:         dskew = 16 - dskew;                     \
 330:         do {                            \
 331:         IfMask(*(u_int *) dp IfReverse(&,|)= mask;,)        \
 332:         *(u_int *) dp op (*sp++ << dskew);          \
 333:         dp += vert;                     \
 334:         } while (--sizey != -1);                    \
 335:     }                               \
 336:     }
 337: 
 338: #define MTRUE(a,b) a
 339: #define MFALSE(a,b) b
 340: 
 341: #define ClippedOp(mask,op,revmask) \
 342:     if(clip) MEMBATCH(MTRUE,mask,op,revmask) \
 343:     else MEMBATCH(MFALSE,mask,op,revmask)
 344: 
 345: mem_batchrop(dst, op, src, count)
 346:     struct pr_prpos dst;
 347:     int         op;
 348:     struct pr_prpos *src;
 349:     short       count;
 350: {
 351:     register u_short *sp;
 352:     register char *dp;
 353:     char       *dp0;
 354:     register char *handy;
 355:     register short sizex, sizey;
 356:     register    vert, dskew;
 357:     int         dskew0, xoff0;
 358:     int         errors = 0;
 359:     int         clip, limx, limy;
 360:     int         oppassed = op;
 361: 
 362:     /*
 363:      * Preliminaries: get pixrect data and image pointers; decide whether
 364:      * clipping.  If not clipping, normalize op, else compute limits for
 365:      * cursors for later comparisons.
 366:      */
 367: 
 368:     clip = 0;
 369:     if (!(op & PIX_DONTCLIP)) {
 370:     clip = 1;
 371:     limx = dst.pr->pr_size.x;
 372:     limy = dst.pr->pr_size.y;
 373:     }
 374:     op = (op >> 1) & 0xf;   /* Kill dontclip, just keep useful */
 375:     /*
 376:      * If destination is reverse video, invert function. FIXME: we dont
 377:      * deal with a reverse video source. Admittedly its unlikely that
 378:      * anyone will call batchrop with a device pixrect as source (since we
 379:      * copy the whole pixrect), but this is a bug.
 380:      */
 381:     if (mpr_d(dst.pr)->md_flags & MP_REVERSEVIDEO)
 382:     op = pr_reversedst[op];
 383: 
 384:     vert = mpr_d(dst.pr)->md_linebytes;
 385: #define dprd ((struct mpr_data *)handy)
 386:     dprd = mpr_d(dst.pr);
 387:     xoff0 = dprd->md_offset.x;
 388:     dp0 = (char *) ((int) dprd->md_image
 389:             + pr_product(dprd->md_linebytes,
 390:                  dst.pos.y + dprd->md_offset.y));
 391: #undef dprd
 392: restart:
 393: #define spr ((struct pixrect *)handy)
 394: #define sprd ((struct mpr_data *)handy)
 395:     switch (op) {
 396:     case (PIX_SRC ^ PIX_DST) >> 1:
 397:     ClippedOp(MFALSE, ^=, MTRUE);
 398:     break;
 399:     case PIX_SRC >> 1:
 400:     ClippedOp(MTRUE, |=, MTRUE);
 401:     break;
 402:     case PIX_NOT(PIX_SRC) >> 1:
 403:     ClippedOp(MTRUE, ^=, MFALSE);
 404:     break;
 405:     case (PIX_SRC | PIX_DST) >> 1:
 406:     ClippedOp(MFALSE, |=, MTRUE);
 407:     break;
 408:     case (PIX_NOT(PIX_SRC) & PIX_DST) >> 1:
 409:     ClippedOp(MFALSE, &=~, MTRUE);
 410:     break;
 411:     default:
 412:     for (; --count >= 0; src++) {
 413:         dst.pos.x += src->pos.x;
 414:         errors |= mem_rop(dst.pr, dst.pos, src->pr->pr_size,
 415:                   oppassed, src->pr, 0, 0);
 416:     }
 417:     }
 418:     return errors;
 419: hard:
 420:     if (dst.pos.x + sizex <= 0)
 421:     /*
 422: 	 * Completely clipped on left...
 423: 	 */
 424:     ;
 425:     else {
 426:     errors |= mem_rop(dst.pr, dst.pos, src->pr->pr_size,
 427:               oppassed, src->pr, 0, 0);
 428:     }
 429:     src++;
 430:     goto restart;
 431: }
 432: 
 433: /*
 434:  * cg2batch.c: Sun2 Color batchrop
 435:  */
 436: 
 437: extern struct pixrectops mem_ops;
 438: 
 439: 
 440: extern short mrc_lmasktable[];
 441: extern short mrc_rmasktable[];
 442: 
 443: #define resolution unused, 0
 444: 
 445: cg2_batchrop(dst, op, src, count)
 446:     struct pr_prpos dst;
 447:     int         op;
 448:     struct pr_prpos *src;
 449:     register int count;
 450: {
 451:     register short sizey;
 452:     register int tem, w, prime, linebytes;
 453:     register short *bx, *leftx, *ma;
 454:     register struct memropc *ropregs;
 455:     short       sizex;
 456:     int         clip;
 457:     struct pixrect *pr;
 458:     short      *ma_homey;
 459:     short       homex, homey, limx, limy, dstx, dsty, by;
 460: 
 461:     struct cg2fb *fb;
 462:     struct mpr_data *md;
 463:     int         oppassed = op;
 464:     int         errors = 0;
 465:     short       color;
 466: 
 467:     if (count <= 0)
 468:     return (0);
 469: 
 470:     /*
 471:      * Preliminaries: get pixrect data and frame buffer pointers; decide
 472:      * whether clipping.  If not clipping, normalize op, else compute
 473:      * limits for cursors for later comparisons.
 474:      */
 475: #define dbd ((struct cg2pr *)leftx)
 476:     dbd = cg2_d(dst.pr);
 477:     homex = dbd->cgpr_offset.x;
 478:     homey = dbd->cgpr_offset.y;
 479: #define FB ((struct cg2fb *)leftx)
 480:     FB = dbd->cgpr_va;
 481:     fb = FB;
 482: #undef dbd
 483:     ropregs = &FB->ropcontrol[CG2_ALLROP].ropregs;
 484:     if (op & PIX_DONTCLIP) {
 485:     op &= ~PIX_DONTCLIP;
 486:     clip = 0;
 487:     }
 488:     else {
 489:     clip = 1;
 490:     limx = homex + dst.pr->pr_size.x;
 491:     limy = homey + dst.pr->pr_size.y;
 492:     }
 493:     dstx = homex + dst.pos.x;
 494:     dsty = homey + dst.pos.y;
 495:     if (private_bgcolor < 0) {
 496:     FB->ppmask.reg = private_fgcolor;   /* set colored text */
 497:     ropregs->mrc_pattern = -1;
 498:     FB->ppmask.reg = ~private_fgcolor;
 499:     ropregs->mrc_pattern = 0;
 500:     FB->ppmask.reg = private_czmask;
 501:     switch (op & 0x1E) {
 502:     case PIX_SRC ^ PIX_DST:
 503:         ropregs->mrc_op = CG_SRC & (CG_MASK ^ CG_DEST) | ~CG_SRC & CG_DEST;
 504:         break;
 505:     case PIX_NOT(PIX_DST):
 506:         ropregs->mrc_op = CG_SRC & (~CG_DEST) | ~CG_SRC & CG_DEST;
 507:         break;
 508:     default:
 509:         ropregs->mrc_op = CG_SRC & CG_MASK | ~CG_SRC & CG_DEST;
 510:         break;
 511:     }
 512:     }
 513:     else {
 514:     FB->ppmask.reg = private_fgcolor & private_bgcolor;
 515:     ropregs->mrc_op = ~0;
 516:     FB->ppmask.reg = ~(private_fgcolor | private_bgcolor);
 517:     ropregs->mrc_op = 0;
 518:     FB->ppmask.reg = private_fgcolor & ~private_bgcolor;
 519:     ropregs->mrc_op = CG_SRC;
 520:     FB->ppmask.reg = ~private_fgcolor & private_bgcolor;
 521:     ropregs->mrc_op = ~CG_SRC;
 522:     FB->ppmask.reg = private_czmask;
 523:     }
 524:     FB->status.reg.ropmode = PWWWRD;
 525:     linebytes = cg2_linebytes(FB, PWWWRD);
 526: #undef FB
 527: 
 528:     for (; --count >= 0; src++) {
 529:     /*
 530: 	 * Update destination x and y by pre-advance amount. If no pixrect
 531: 	 * for this, then skip to next.
 532: 	 */
 533:     dstx += src->pos.x;
 534:     pr = src->pr;
 535:     if (pr == 0)
 536:         continue;
 537:     sizex = pr->pr_size.x;
 538:     sizey = pr->pr_size.y;
 539:     md = mpr_d(pr);
 540:     ma = md->md_image;
 541: 
 542:     /*
 543: 	 * Grab sizes and address of image.  If clipping (rare case
 544: 	 * hopefully) compare cursors against limits.
 545: 	 */
 546:     by = dsty;
 547:     tem = 0;
 548:     if (clip) {
 549:         if (dstx + sizex > limx)
 550:         sizex = limx - dstx;
 551:         if (dsty + sizey > limy)
 552:         sizey = limy - dsty;
 553:         if (dsty < homey) { /* works if pr_depth = 1! */
 554:         tem = homey - dsty;
 555:         by += tem;
 556:         ma += pr_product(tem, (md->md_linebytes >> 1));
 557:         sizey -= tem;
 558:         tem = 0;
 559:         }
 560:         if (dstx < homex) {
 561:         tem = homex - dstx;
 562:         ma += tem >> 4;
 563:         sizex -= tem;
 564:         }
 565:         if (sizex <= 0)
 566:         continue;
 567:     }
 568: 
 569:     /*
 570: 	 * Hard case: characters greater than 16 wide.
 571: 	 */
 572:     ma_homey = ma;
 573: 
 574:     /* set the ROP chip word width and opcount */
 575: 
 576:     w = cg2_prskew(dstx);   /* source skew is 0 */
 577:     ropregs->mrc_shift = (w & 0xF) | (1 << 8);
 578:     prime = !w;
 579:     w = (sizex + w + (tem & 0xF) - 1) >> 4;
 580:     ropregs->mrc_width = w;
 581:     ropregs->mrc_opcount = w;
 582: 
 583:     /* set the ROP chip end masks */
 584: 
 585:     ropregs->mrc_mask1 =
 586:         mrc_lmasktable[(tem += dstx) & 0xf];
 587:     ropregs->mrc_mask2 =
 588:         mrc_rmasktable[(sizex + tem - 1) & 0xf];
 589: 
 590:     leftx = cg2_ropwordaddr(fb, 0, tem, by);
 591:     tem = md->md_linebytes;
 592:     if (--sizey >= 0)
 593:         if (w) {
 594:         w++;
 595:         do {
 596:             register short i = w;
 597:             ma = ma_homey;
 598:             bx = leftx;
 599:             if (prime)
 600:             ropregs->mrc_source1 = *ma++;
 601:             while (i--)
 602:             *bx++ = *ma++;
 603:             (char *) ma_homey += tem;
 604:             (char *) leftx += linebytes;
 605:         } while (--sizey != -1);
 606:         }
 607:         else {
 608:         bx = leftx;
 609:         ma = ma_homey;
 610:         if (prime) {
 611:             ma++;
 612:             do {
 613:             ma--;
 614:             ropregs->mrc_source1 = *ma++;
 615:             *bx = *ma;
 616:             (char *) ma += tem;
 617:             (char *) bx += linebytes;
 618:             } while (--sizey != -1);
 619:         }
 620:         else
 621:             do {
 622:             *bx = *ma;
 623:             (char *) ma += tem;
 624:             (char *) bx += linebytes;
 625:             } while (--sizey != -1);
 626:         }
 627:     }
 628: 
 629:     return (errors);
 630: }
 631: 
 632: #endif	sun

Defined functions

PrintText defined in line 63; never used
PrintTextMask defined in line 163; never used
cg2_batchrop defined in line 445; never used
mem_batchrop defined in line 345; never used

Defined variables

private_bgcolor defined in line 59; used 7 times
private_czmask defined in line 59; used 3 times
private_fgcolor defined in line 59; used 8 times
sccsid defined in line 33; never used

Defined macros

CHUNK defined in line 177; used 6 times
ClippedOp defined in line 341; used 5 times
FB defined in line 479; used 14 times
MEMBATCH defined in line 282; used 2 times
MFALSE defined in line 339; used 5 times
MTRUE defined in line 338; used 7 times
dbd defined in line 475; used 5 times
dprd defined in line 385; used 6 times
resolution defined in line 443; never used
spr defined in line 393; used 4 times
sprd defined in line 394; used 3 times
Last modified: 1986-02-03
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1382
Valid CSS Valid XHTML 1.0 Strict