Path: utzoo!attcan!uunet!husc6!bloom-beacon!BRL.MIL!phil From: phil@BRL.MIL (Phil Dykstra) Newsgroups: comp.windows.x Subject: Re: Patch failure for Purdue speedups Message-ID: <8812191535.aa01286@SPARK.BRL.MIL> Date: 19 Dec 88 20:35:10 GMT Sender: daemon@bloom-beacon.MIT.EDU Organization: The Internet Lines: 279 In the PURDUE speedups patch for ./ddx/mfb/mfbline.c there were a couple of curly braces indented differently in the version Gene Spafford diffed against than in the original MIT code. Their location was such that patch looses context (they were immediately after some inserted code). Below is a new patch file for mfbline.c that corrects the indentation problem that causes patch to fail. I reported this to Gene a week or so ago but got no response. He could do the world (another) favor by updating the file on expo. Hope this helps. - Phil uunet!brl!phil Apply this one INSTEAD OF (not in addition to) the one in the Purdue patches. =========================== *** ./ddx/mfb/mfbline.c.orig Tue Sep 6 14:53:25 1988 --- ./ddx/mfb/mfbline.c Mon Dec 5 12:36:50 1988 *************** *** 110,116 **** --- 110,120 ---- #define round(dividend, divisor) \ ( (((dividend)<<1) + (divisor)) / ((divisor)<<1) ) + #ifndef PURDUE #define ceiling(m,n) ( ((m) + (n) -1)/(n) ) + #else + #define ceiling(m,n) (((m)-1)/(n) + 1) + #endif /* PURDUE */ #define SignTimes(sign, n) ((sign) * ((int)(n))) *************** *** 119,124 **** --- 123,129 ---- ( ((sign)<0) ? -(n) : (n) ) */ + #ifndef PURDUE #define SWAPPT(p1, p2, pttmp) \ pttmp = p1; \ p1 = p2; \ *************** *** 129,134 **** --- 134,155 ---- i = j; \ j = t; + #else + #define SWAPINT(i, j) \ + { register int _t = i; \ + i = j; \ + j = _t; \ + } + + #define SWAPPT(i, j) \ + { register DDXPointRec _t; \ + _t = i; \ + i = j; \ + j = _t; \ + } + #endif /* PURDUE */ + + void mfbLineSS(pDrawable, pGC, mode, npt, pptInit) DrawablePtr pDrawable; *************** *** 200,210 **** --- 221,235 ---- nptTmp = npt; if (mode == CoordModeOrigin) { + #ifndef PURDUE while(nptTmp--) { ppt->x += xorg; ppt++->y += yorg; } + #else + Duff(nptTmp, ppt->x += xorg; ppt++->y += yorg); + #endif /* PURDUE */ } else { *************** *** 211,216 **** --- 236,242 ---- ppt->x += xorg; ppt->y += yorg; nptTmp--; + #ifndef PURDUE while(nptTmp--) { ppt++; *************** *** 217,222 **** --- 243,251 ---- ppt->x += (ppt-1)->x; ppt->y += (ppt-1)->y; } + #else + Duff(nptTmp, ppt++; ppt->x += (ppt-1)->x; ppt->y += (ppt-1)->y); + #endif /* PURDUE */ } ppt = pptInit; *************** *** 235,240 **** --- 264,272 ---- */ if (pt1.y > pt2.y) { + #ifdef PURDUE + register int tmp; + #endif tmp = pt2.y; pt2.y = pt1.y + 1; pt1.y = tmp + 1; *************** *** 277,282 **** --- 309,317 ---- */ if (pt1.x > pt2.x) { + #ifdef PURDUE + register int tmp; + #endif tmp = pt2.x; pt2.x = pt1.x + 1; pt1.x = tmp + 1; *************** *** 308,314 **** --- 343,353 ---- if (pbox->x1 >= pt2.x) { nbox = 0; + #ifndef PURDUE continue; + #else + break; + #endif /* PURDUE */ } x1 = max(pt1.x, pbox->x1); *************** *** 440,445 **** --- 479,485 ---- (ppt->y != pptInit->y) || (ppt == pptInit + 1))) { + #ifndef PURDUE pt1 = *ppt; nbox = nboxInit; *************** *** 469,474 **** --- 509,553 ---- else pbox++; } + #else + unsigned int _mask; + int _incr, _rop = ((mfbPrivGC *)(pGC->devPriv))->rop; + + pt1 = *ppt; + if (_rop == RROP_BLACK) + _mask = rmask[pt1.x & 0x1f]; + else + _mask = mask[pt1.x & 0x1f]; + _incr = (pt1.y * nlwidth) + (pt1.x >> 5); + + nbox = nboxInit; + pbox = pboxInit; + while (nbox--) + { + if ((pt1.x >= pbox->x1) && + (pt1.y >= pbox->y1) && + (pt1.x < pbox->x2) && + (pt1.y < pbox->y2)) + { + addrl += _incr; + switch(_rop) + { + case RROP_BLACK: + *addrl &= _mask; + break; + case RROP_WHITE: + *addrl |= _mask; + break; + case RROP_INVERT: + *addrl ^= _mask; + break; + } + break; + } + else + pbox++; + } + #endif /* PURDUE */ } } *************** *** 570,580 **** --- 649,663 ---- nptTmp = npt; if (mode == CoordModeOrigin) { + #ifndef PURDUE while(nptTmp--) { ppt->x += xorg; ppt++->y += yorg; } + #else + Duff(nptTmp, ppt->x += xorg; ppt++->y += yorg ); + #endif /* PURDUE */ } else { *************** *** 581,586 **** --- 664,670 ---- ppt->x += xorg; ppt->y += yorg; nptTmp--; + #ifndef PURDUE while(nptTmp--) { ppt++; *************** *** 587,592 **** --- 671,679 ---- ppt->x += (ppt-1)->x; ppt->y += (ppt-1)->y; } + #else + Duff (nptTmp, ppt++; ppt->x += (ppt-1)->x; ppt->y += (ppt-1)->y); + #endif } *************** *** 766,774 **** --- 853,867 ---- clipDone = 1; if (swapped) { + #ifndef PURDUE SWAPPT(pt1, pt2, ptTmp); SWAPINT(oc1, oc2, tmp); SWAPINT(clip1, clip2, tmp); + #else + SWAPPT(pt1, pt2); + SWAPINT(oc1, oc2); + SWAPINT(clip1, clip2); + #endif /* PURDUE */ } } else /* have to clip */ *************** *** 776,784 **** --- 869,883 ---- /* only clip one point at a time */ if (!oc1) { + #ifndef PURDUE SWAPPT(pt1, pt2, ptTmp); SWAPINT(oc1, oc2, tmp); SWAPINT(clip1, clip2, tmp); + #else + SWAPPT(pt1, pt2); + SWAPINT(oc1, oc2); + SWAPINT(clip1, clip2); + #endif /* PURDUE */ swapped = !swapped; }