jepeway@rastaban.cs.utk.edu (Chris Jepeway) (12/19/88)
I just ftp'ed the Purdue mfb speedups down and tried applying the patches. Hunk #11 failed for the patch to ./ddx/mfb/mfbline.c. I've tried the -l option and fudge factors up to 6 without luck. I've even tried to apply the patch by hand with a text editor, and I'm too poor a Sorceror's Apprentice to get it right. Any help would be appreciated. C. Jepeway Systems Programmer University of TN, Knoxville
phil@BRL.MIL (Phil Dykstra) (12/20/88)
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 <phil@brl.mil> 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; }