[comp.sources.x] v02i017: Purdue speedups to Release 3 mfb code, Part01/02

mikew@wyse.wyse.com (Mike Wexler) (11/24/88)

Submitted-by: spaf@purdue.edu
Posting-number: Volume 2, Issue 17
Archive-name: pspeedups/part01

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 2)."
# Contents:  README maskbits.c.patch maskbits.h.patch mfbfillsp.c.patch
#   mfbline.c.patch mfbpntwin.c.patch
# Wrapped by mikew@wyse on Tue Nov 22 17:49:26 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(5827 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XIntro
X-----
XThese are the Purdue speedups for X11, Release 3.  These apply only to
XB/W servers (for the most part); similar patches for the color code
Xshould be released sometime in the next few weeks.
X
XInstallation
X------------
XThe patches in this archive should all be applied to the files in the
Xserver/ddx/mfb directory.  You need to set the symbol PURDUE in your
Xmacros or site.def file (e.g.,
X#define OptimizedCDebugFlags -O -DPURDUE") to use them.
XYou can also patch your server/ddx/mfb/Imakefile as follows:
X
X*** server/ddx/mfb/Imakefile.orig	Thu Nov 17 15:52:45 1988
X--- server/ddx/mfb/Imakefile		Thu Nov 17 15:52:45 1988
X***************
X*** 19,24 ****
X--- 19,25 ----
X  	 mfbpawhite.o mfbpablack.o mfbpainv.o mfbtile.o \
X           mfbtewhite.o mfbteblack.o mfbmisc.o mfbbstore.o
X  
X+ DEFINES = -DPURDUE
X  STD_DEFINES = ServerDefines
X  CDEBUGFLAGS = ServerCDebugFlags
X  INCLUDES = -I. -I../../include -I$(INCLUDESRC)
X
XSimilar patches must be made to ddx/mi/Imakefile and ddx/cfb/Imakefile
Xsince ddx/mfb/maskbits.h is included in files in those directories.
X
XWhichever change you make, you will need to cd to the server directory, then:
Xmake Makefile; make Makefiles depend; make
X
X
XDescription
X-----------
XThe changes in these patches fall into a few, similar categories:
X    * Optimized or added bitmasking functions, taking advantage of
X      properties known to exist for certain arithmetic operators
X      and domains of input;
X    * Replacing calculated bitmasks with table lookups
X    * Use of Duff's device in some places where it looks beneficial
X    * Reordering of code to share variables or move invariants out of
X      loops.
X
XThe changes seem to make some significant (but sometimes difficult to
Xmeasure objectively) impact on the speed of most operations.  This
Xspeedup will differ based on your job mix and machine configuration.
XSome operations appear to take up to 35% less cpu time to complete.
XIncremental measurements with gprof, time, and other tools show each
Xchange to have a positive overall effect on the server efficiency.  In
Xparticular, painting windows and drawing lines appears to be much
Xfaster.  An "ico -r" is obviously faster and smoother, as is tiling the
Xroot window (on my Sun 3/60).  Note that my measurements have not been
Xdone with any formal benchmarking, so they might still benefit from
Xsome tuning.  In particular, making the "Duff" macro unroll more or
Xless items might be beneficial.  On the MacII, for instance, a Duff's
XDevice of only 4 is better than the 8 used in the patches enclosed.
X
XInterestingly enough, the binary after installing these patches also
Xseems *smaller*.
X
XThe changes have been generated in a machine-independent way and should
Xwork on any other machine, although I have not yet been able to try
Xthem on any other kind of cpu.  I have thoroughly tested them on
Xvarious Sun 3 machines, and all my changes have been to optimize for
Xthat architecture (68020).  If I blew it, or if you have more
Xportable/better versions of these changes, please share them with me
Xand I'll use them in further releases.
X
X[I think this code is used in the Apollo servers, and since they also
X use a 68xxx chip, these changes should work there too.  They have been
X tested on a Mac II and work there (and act as speedups). I would love
X to see how these work on a Vaxstation, but DEC wouldn't even sell one
X to me at retail!  If anyone at DEC can explain what DEC has against
X us/me here at Purdue, I'd love to talk with you. We're all mystified. ]
X
XFuture Work
X-----------
XSome optimizations could still be done on this code.  Other than
Xchanges to the cfb code, these include:
X    * putting in some hacks to enhance speed for certain compilers.
X      In particular, gcc can produce incredibly good code, and some
X      small tuning of the mfb/cfb code could result in significant
X      improvements.
X    * putting in custom assembler macros for commonly used instructions,
X      such as the bits routines, abs, round, etc.
X    * algorithmic changes that radically change the nature of how
X      some things are done in the server; this amounts to a rewrite
X      of portions of the server.
X
XI may get around to doing some of these in the next few months.  If
Xnot, I hope others will and then share their results with the rest of
Xus.
X
XPlease share your comments on this package with me -- I'd like to know
Xwhat else *we* can do to make this server a more efficient piece of
Xcode.
X
XThanks to:
X----------
XAcknowledgments Sam Kimery of PURDUE ECN helped me develop some of the
Xoptimizations in the first release of these fixes (for X11R2).  Terry
XDonahue of Project Athena contributed some server fixes with the X11R3
Xrelease that helped focus my attention on some sections of code,
Xalthough I did not use any of his changes in these patches.  The
XPurdue/Florida Software Engineering Research Center provided the
Xmachines and funding that allowed me to do this tinkering.
XThanks to Jim Fulton for testing the changes on a Mac II, and for
Xrecommending some format changes (including the "SmallDuff").
X
XGene Spafford
Xspaf@cs.purdue.edu		11/17/88
X
X
X
XPS.  Late breaking numbers from someone (who wishes to remain
Xanonymous) who has applied these changes to the X11.R3 code on a Vax
Xwith an Xqvss display:
X
X>Date: Thu, 17 Nov 88 15:24:53 EST
X>To: spaf
X>Subject: Xqvss numbers
X>
X>Okay, quicky results:
X>
X>	filled rectangles:  25% faster
X>	lines:  no real change
X>	image text 8:  slightly slower
X>	text 8:  slightly slower
X>	rectangles:  slightly faster
X>	copy area:  20% faster
X>
X>It seems like it would be interesting to figure out what helps where and
X>set up appropriate #ifdefs after people have had a chance to poke at it.
X
XSo, these changes also work on a Vax, but should be tuned a little
Xdifferently.  Let me encourage people who can access Vaxen to contribute
Xsuch fixes.
END_OF_FILE
if test 5827 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'maskbits.c.patch' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'maskbits.c.patch'\"
else
echo shar: Extracting \"'maskbits.c.patch'\" \(29909 characters\)
sed "s/^X//" >'maskbits.c.patch' <<'END_OF_FILE'
X*** ./ddx/mfb/maskbits.c.orig	Tue Sep  6 13:53:30 1988
X--- ./ddx/mfb/maskbits.c	Thu Nov 17 15:21:24 1988
X***************
X*** 116,121 ****
X--- 116,122 ----
X  	0xFFFFFFFE
X      };
X  
X+ #ifndef PURDUE
X  /* a hack, for now, since the entries for 0 need to be all
X     1 bits, not all zeros.
X     this means the code DOES NOT WORK for segments of length
X***************
X*** 192,197 ****
X--- 193,458 ----
X  	0xFFFFFFFC,
X  	0xFFFFFFFE
X      };
X+ #else  /* PURDUE */
X+ unsigned int partmasks[32][32] = {
X+      {0xFFFFFFFF, 0x80000000, 0xC0000000, 0xE0000000,
X+       0xF0000000, 0xF8000000, 0xFC000000, 0xFE000000,
X+       0xFF000000, 0xFF800000, 0xFFC00000, 0xFFE00000,
X+       0xFFF00000, 0xFFF80000, 0xFFFC0000, 0xFFFE0000,
X+       0xFFFF0000, 0xFFFF8000, 0xFFFFC000, 0xFFFFE000,
X+       0xFFFFF000, 0xFFFFF800, 0xFFFFFC00, 0xFFFFFE00,
X+       0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0, 0xFFFFFFE0,
X+       0xFFFFFFF0, 0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE},
X+      {0x00000000, 0x40000000, 0x60000000, 0x70000000,
X+       0x78000000, 0x7C000000, 0x7E000000, 0x7F000000,
X+       0x7F800000, 0x7FC00000, 0x7FE00000, 0x7FF00000,
X+       0x7FF80000, 0x7FFC0000, 0x7FFE0000, 0x7FFF0000,
X+       0x7FFF8000, 0x7FFFC000, 0x7FFFE000, 0x7FFFF000,
X+       0x7FFFF800, 0x7FFFFC00, 0x7FFFFE00, 0x7FFFFF00,
X+       0x7FFFFF80, 0x7FFFFFC0, 0x7FFFFFE0, 0x7FFFFFF0,
X+       0x7FFFFFF8, 0x7FFFFFFC, 0x7FFFFFFE, 0x7FFFFFFF},
X+      {0x00000000, 0x20000000, 0x30000000, 0x38000000,
X+       0x3C000000, 0x3E000000, 0x3F000000, 0x3F800000,
X+       0x3FC00000, 0x3FE00000, 0x3FF00000, 0x3FF80000,
X+       0x3FFC0000, 0x3FFE0000, 0x3FFF0000, 0x3FFF8000,
X+       0x3FFFC000, 0x3FFFE000, 0x3FFFF000, 0x3FFFF800,
X+       0x3FFFFC00, 0x3FFFFE00, 0x3FFFFF00, 0x3FFFFF80,
X+       0x3FFFFFC0, 0x3FFFFFE0, 0x3FFFFFF0, 0x3FFFFFF8,
X+       0x3FFFFFFC, 0x3FFFFFFE, 0x3FFFFFFF, 0x00000000},
X+      {0x00000000, 0x10000000, 0x18000000, 0x1C000000,
X+       0x1E000000, 0x1F000000, 0x1F800000, 0x1FC00000,
X+       0x1FE00000, 0x1FF00000, 0x1FF80000, 0x1FFC0000,
X+       0x1FFE0000, 0x1FFF0000, 0x1FFF8000, 0x1FFFC000,
X+       0x1FFFE000, 0x1FFFF000, 0x1FFFF800, 0x1FFFFC00,
X+       0x1FFFFE00, 0x1FFFFF00, 0x1FFFFF80, 0x1FFFFFC0,
X+       0x1FFFFFE0, 0x1FFFFFF0, 0x1FFFFFF8, 0x1FFFFFFC,
X+       0x1FFFFFFE, 0x1FFFFFFF, 0x00000000, 0x00000000},
X+      {0x00000000, 0x08000000, 0x0C000000, 0x0E000000,
X+       0x0F000000, 0x0F800000, 0x0FC00000, 0x0FE00000,
X+       0x0FF00000, 0x0FF80000, 0x0FFC0000, 0x0FFE0000,
X+       0x0FFF0000, 0x0FFF8000, 0x0FFFC000, 0x0FFFE000,
X+       0x0FFFF000, 0x0FFFF800, 0x0FFFFC00, 0x0FFFFE00,
X+       0x0FFFFF00, 0x0FFFFF80, 0x0FFFFFC0, 0x0FFFFFE0,
X+       0x0FFFFFF0, 0x0FFFFFF8, 0x0FFFFFFC, 0x0FFFFFFE,
X+       0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x04000000, 0x06000000, 0x07000000,
X+       0x07800000, 0x07C00000, 0x07E00000, 0x07F00000,
X+       0x07F80000, 0x07FC0000, 0x07FE0000, 0x07FF0000,
X+       0x07FF8000, 0x07FFC000, 0x07FFE000, 0x07FFF000,
X+       0x07FFF800, 0x07FFFC00, 0x07FFFE00, 0x07FFFF00,
X+       0x07FFFF80, 0x07FFFFC0, 0x07FFFFE0, 0x07FFFFF0,
X+       0x07FFFFF8, 0x07FFFFFC, 0x07FFFFFE, 0x07FFFFFF,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x02000000, 0x03000000, 0x03800000,
X+       0x03C00000, 0x03E00000, 0x03F00000, 0x03F80000,
X+       0x03FC0000, 0x03FE0000, 0x03FF0000, 0x03FF8000,
X+       0x03FFC000, 0x03FFE000, 0x03FFF000, 0x03FFF800,
X+       0x03FFFC00, 0x03FFFE00, 0x03FFFF00, 0x03FFFF80,
X+       0x03FFFFC0, 0x03FFFFE0, 0x03FFFFF0, 0x03FFFFF8,
X+       0x03FFFFFC, 0x03FFFFFE, 0x03FFFFFF, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x01000000, 0x01800000, 0x01C00000,
X+       0x01E00000, 0x01F00000, 0x01F80000, 0x01FC0000,
X+       0x01FE0000, 0x01FF0000, 0x01FF8000, 0x01FFC000,
X+       0x01FFE000, 0x01FFF000, 0x01FFF800, 0x01FFFC00,
X+       0x01FFFE00, 0x01FFFF00, 0x01FFFF80, 0x01FFFFC0,
X+       0x01FFFFE0, 0x01FFFFF0, 0x01FFFFF8, 0x01FFFFFC,
X+       0x01FFFFFE, 0x01FFFFFF, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00800000, 0x00C00000, 0x00E00000,
X+       0x00F00000, 0x00F80000, 0x00FC0000, 0x00FE0000,
X+       0x00FF0000, 0x00FF8000, 0x00FFC000, 0x00FFE000,
X+       0x00FFF000, 0x00FFF800, 0x00FFFC00, 0x00FFFE00,
X+       0x00FFFF00, 0x00FFFF80, 0x00FFFFC0, 0x00FFFFE0,
X+       0x00FFFFF0, 0x00FFFFF8, 0x00FFFFFC, 0x00FFFFFE,
X+       0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00400000, 0x00600000, 0x00700000,
X+       0x00780000, 0x007C0000, 0x007E0000, 0x007F0000,
X+       0x007F8000, 0x007FC000, 0x007FE000, 0x007FF000,
X+       0x007FF800, 0x007FFC00, 0x007FFE00, 0x007FFF00,
X+       0x007FFF80, 0x007FFFC0, 0x007FFFE0, 0x007FFFF0,
X+       0x007FFFF8, 0x007FFFFC, 0x007FFFFE, 0x007FFFFF,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00200000, 0x00300000, 0x00380000,
X+       0x003C0000, 0x003E0000, 0x003F0000, 0x003F8000,
X+       0x003FC000, 0x003FE000, 0x003FF000, 0x003FF800,
X+       0x003FFC00, 0x003FFE00, 0x003FFF00, 0x003FFF80,
X+       0x003FFFC0, 0x003FFFE0, 0x003FFFF0, 0x003FFFF8,
X+       0x003FFFFC, 0x003FFFFE, 0x003FFFFF, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00100000, 0x00180000, 0x001C0000,
X+       0x001E0000, 0x001F0000, 0x001F8000, 0x001FC000,
X+       0x001FE000, 0x001FF000, 0x001FF800, 0x001FFC00,
X+       0x001FFE00, 0x001FFF00, 0x001FFF80, 0x001FFFC0,
X+       0x001FFFE0, 0x001FFFF0, 0x001FFFF8, 0x001FFFFC,
X+       0x001FFFFE, 0x001FFFFF, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00080000, 0x000C0000, 0x000E0000,
X+       0x000F0000, 0x000F8000, 0x000FC000, 0x000FE000,
X+       0x000FF000, 0x000FF800, 0x000FFC00, 0x000FFE00,
X+       0x000FFF00, 0x000FFF80, 0x000FFFC0, 0x000FFFE0,
X+       0x000FFFF0, 0x000FFFF8, 0x000FFFFC, 0x000FFFFE,
X+       0x000FFFFF, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00040000, 0x00060000, 0x00070000,
X+       0x00078000, 0x0007C000, 0x0007E000, 0x0007F000,
X+       0x0007F800, 0x0007FC00, 0x0007FE00, 0x0007FF00,
X+       0x0007FF80, 0x0007FFC0, 0x0007FFE0, 0x0007FFF0,
X+       0x0007FFF8, 0x0007FFFC, 0x0007FFFE, 0x0007FFFF,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00020000, 0x00030000, 0x00038000,
X+       0x0003C000, 0x0003E000, 0x0003F000, 0x0003F800,
X+       0x0003FC00, 0x0003FE00, 0x0003FF00, 0x0003FF80,
X+       0x0003FFC0, 0x0003FFE0, 0x0003FFF0, 0x0003FFF8,
X+       0x0003FFFC, 0x0003FFFE, 0x0003FFFF, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00010000, 0x00018000, 0x0001C000,
X+       0x0001E000, 0x0001F000, 0x0001F800, 0x0001FC00,
X+       0x0001FE00, 0x0001FF00, 0x0001FF80, 0x0001FFC0,
X+       0x0001FFE0, 0x0001FFF0, 0x0001FFF8, 0x0001FFFC,
X+       0x0001FFFE, 0x0001FFFF, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00008000, 0x0000C000, 0x0000E000,
X+       0x0000F000, 0x0000F800, 0x0000FC00, 0x0000FE00,
X+       0x0000FF00, 0x0000FF80, 0x0000FFC0, 0x0000FFE0,
X+       0x0000FFF0, 0x0000FFF8, 0x0000FFFC, 0x0000FFFE,
X+       0x0000FFFF, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00004000, 0x00006000, 0x00007000,
X+       0x00007800, 0x00007C00, 0x00007E00, 0x00007F00,
X+       0x00007F80, 0x00007FC0, 0x00007FE0, 0x00007FF0,
X+       0x00007FF8, 0x00007FFC, 0x00007FFE, 0x00007FFF,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00002000, 0x00003000, 0x00003800,
X+       0x00003C00, 0x00003E00, 0x00003F00, 0x00003F80,
X+       0x00003FC0, 0x00003FE0, 0x00003FF0, 0x00003FF8,
X+       0x00003FFC, 0x00003FFE, 0x00003FFF, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00001000, 0x00001800, 0x00001C00,
X+       0x00001E00, 0x00001F00, 0x00001F80, 0x00001FC0,
X+       0x00001FE0, 0x00001FF0, 0x00001FF8, 0x00001FFC,
X+       0x00001FFE, 0x00001FFF, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000800, 0x00000C00, 0x00000E00,
X+       0x00000F00, 0x00000F80, 0x00000FC0, 0x00000FE0,
X+       0x00000FF0, 0x00000FF8, 0x00000FFC, 0x00000FFE,
X+       0x00000FFF, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000400, 0x00000600, 0x00000700,
X+       0x00000780, 0x000007C0, 0x000007E0, 0x000007F0,
X+       0x000007F8, 0x000007FC, 0x000007FE, 0x000007FF,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000200, 0x00000300, 0x00000380,
X+       0x000003C0, 0x000003E0, 0x000003F0, 0x000003F8,
X+       0x000003FC, 0x000003FE, 0x000003FF, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000100, 0x00000180, 0x000001C0,
X+       0x000001E0, 0x000001F0, 0x000001F8, 0x000001FC,
X+       0x000001FE, 0x000001FF, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000080, 0x000000C0, 0x000000E0,
X+       0x000000F0, 0x000000F8, 0x000000FC, 0x000000FE,
X+       0x000000FF, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000040, 0x00000060, 0x00000070,
X+       0x00000078, 0x0000007C, 0x0000007E, 0x0000007F,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000020, 0x00000030, 0x00000038,
X+       0x0000003C, 0x0000003E, 0x0000003F, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000010, 0x00000018, 0x0000001C,
X+       0x0000001E, 0x0000001F, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000008, 0x0000000C, 0x0000000E,
X+       0x0000000F, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000004, 0x00000006, 0x00000007,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000002, 0x00000003, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000001, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+ };
X+ #endif  /* PURDUE */
X  #else		/* LSBFirst */
X  /* NOTE:
X  the first element in starttab could be 0xffffffff.  making it 0
X***************
X*** 271,276 ****
X--- 532,538 ----
X  	0x7FFFFFFF
X  	};
X  
X+ #ifndef PURDUE
X  /* a hack, for now, since the entries for 0 need to be all
X     1 bits, not all zeros.
X     this means the code DOES NOT WORK for segments of length
X***************
X*** 347,352 ****
X--- 609,874 ----
X  	0x3FFFFFFF,
X  	0x7FFFFFFF
X  	};
X+ #else  /* PURDUE */
X+ unsigned int partmasks[32][32] = {
X+      {0xFFFFFFFF, 0x00000001, 0x00000003, 0x00000007,
X+       0x0000000F, 0x0000001F, 0x0000003F, 0x0000007F,
X+       0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF,
X+       0x00000FFF, 0x00001FFF, 0x00003FFF, 0x00007FFF,
X+       0x0000FFFF, 0x0001FFFF, 0x0003FFFF, 0x0007FFFF,
X+       0x000FFFFF, 0x001FFFFF, 0x003FFFFF, 0x007FFFFF,
X+       0x00FFFFFF, 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF,
X+       0x0FFFFFFF, 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF},
X+      {0x00000000, 0x00000002, 0x00000006, 0x0000000E,
X+       0x0000001E, 0x0000003E, 0x0000007E, 0x000000FE,
X+       0x000001FE, 0x000003FE, 0x000007FE, 0x00000FFE,
X+       0x00001FFE, 0x00003FFE, 0x00007FFE, 0x0000FFFE,
X+       0x0001FFFE, 0x0003FFFE, 0x0007FFFE, 0x000FFFFE,
X+       0x001FFFFE, 0x003FFFFE, 0x007FFFFE, 0x00FFFFFE,
X+       0x01FFFFFE, 0x03FFFFFE, 0x07FFFFFE, 0x0FFFFFFE,
X+       0x1FFFFFFE, 0x3FFFFFFE, 0x7FFFFFFE, 0xFFFFFFFE},
X+      {0x00000000, 0x00000004, 0x0000000C, 0x0000001C,
X+       0x0000003C, 0x0000007C, 0x000000FC, 0x000001FC,
X+       0x000003FC, 0x000007FC, 0x00000FFC, 0x00001FFC,
X+       0x00003FFC, 0x00007FFC, 0x0000FFFC, 0x0001FFFC,
X+       0x0003FFFC, 0x0007FFFC, 0x000FFFFC, 0x001FFFFC,
X+       0x003FFFFC, 0x007FFFFC, 0x00FFFFFC, 0x01FFFFFC,
X+       0x03FFFFFC, 0x07FFFFFC, 0x0FFFFFFC, 0x1FFFFFFC,
X+       0x3FFFFFFC, 0x7FFFFFFC, 0xFFFFFFFC, 0x00000000},
X+      {0x00000000, 0x00000008, 0x00000018, 0x00000038,
X+       0x00000078, 0x000000F8, 0x000001F8, 0x000003F8,
X+       0x000007F8, 0x00000FF8, 0x00001FF8, 0x00003FF8,
X+       0x00007FF8, 0x0000FFF8, 0x0001FFF8, 0x0003FFF8,
X+       0x0007FFF8, 0x000FFFF8, 0x001FFFF8, 0x003FFFF8,
X+       0x007FFFF8, 0x00FFFFF8, 0x01FFFFF8, 0x03FFFFF8,
X+       0x07FFFFF8, 0x0FFFFFF8, 0x1FFFFFF8, 0x3FFFFFF8,
X+       0x7FFFFFF8, 0xFFFFFFF8, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000010, 0x00000030, 0x00000070,
X+       0x000000F0, 0x000001F0, 0x000003F0, 0x000007F0,
X+       0x00000FF0, 0x00001FF0, 0x00003FF0, 0x00007FF0,
X+       0x0000FFF0, 0x0001FFF0, 0x0003FFF0, 0x0007FFF0,
X+       0x000FFFF0, 0x001FFFF0, 0x003FFFF0, 0x007FFFF0,
X+       0x00FFFFF0, 0x01FFFFF0, 0x03FFFFF0, 0x07FFFFF0,
X+       0x0FFFFFF0, 0x1FFFFFF0, 0x3FFFFFF0, 0x7FFFFFF0,
X+       0xFFFFFFF0, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000020, 0x00000060, 0x000000E0,
X+       0x000001E0, 0x000003E0, 0x000007E0, 0x00000FE0,
X+       0x00001FE0, 0x00003FE0, 0x00007FE0, 0x0000FFE0,
X+       0x0001FFE0, 0x0003FFE0, 0x0007FFE0, 0x000FFFE0,
X+       0x001FFFE0, 0x003FFFE0, 0x007FFFE0, 0x00FFFFE0,
X+       0x01FFFFE0, 0x03FFFFE0, 0x07FFFFE0, 0x0FFFFFE0,
X+       0x1FFFFFE0, 0x3FFFFFE0, 0x7FFFFFE0, 0xFFFFFFE0,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000040, 0x000000C0, 0x000001C0,
X+       0x000003C0, 0x000007C0, 0x00000FC0, 0x00001FC0,
X+       0x00003FC0, 0x00007FC0, 0x0000FFC0, 0x0001FFC0,
X+       0x0003FFC0, 0x0007FFC0, 0x000FFFC0, 0x001FFFC0,
X+       0x003FFFC0, 0x007FFFC0, 0x00FFFFC0, 0x01FFFFC0,
X+       0x03FFFFC0, 0x07FFFFC0, 0x0FFFFFC0, 0x1FFFFFC0,
X+       0x3FFFFFC0, 0x7FFFFFC0, 0xFFFFFFC0, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000080, 0x00000180, 0x00000380,
X+       0x00000780, 0x00000F80, 0x00001F80, 0x00003F80,
X+       0x00007F80, 0x0000FF80, 0x0001FF80, 0x0003FF80,
X+       0x0007FF80, 0x000FFF80, 0x001FFF80, 0x003FFF80,
X+       0x007FFF80, 0x00FFFF80, 0x01FFFF80, 0x03FFFF80,
X+       0x07FFFF80, 0x0FFFFF80, 0x1FFFFF80, 0x3FFFFF80,
X+       0x7FFFFF80, 0xFFFFFF80, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000100, 0x00000300, 0x00000700,
X+       0x00000F00, 0x00001F00, 0x00003F00, 0x00007F00,
X+       0x0000FF00, 0x0001FF00, 0x0003FF00, 0x0007FF00,
X+       0x000FFF00, 0x001FFF00, 0x003FFF00, 0x007FFF00,
X+       0x00FFFF00, 0x01FFFF00, 0x03FFFF00, 0x07FFFF00,
X+       0x0FFFFF00, 0x1FFFFF00, 0x3FFFFF00, 0x7FFFFF00,
X+       0xFFFFFF00, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000200, 0x00000600, 0x00000E00,
X+       0x00001E00, 0x00003E00, 0x00007E00, 0x0000FE00,
X+       0x0001FE00, 0x0003FE00, 0x0007FE00, 0x000FFE00,
X+       0x001FFE00, 0x003FFE00, 0x007FFE00, 0x00FFFE00,
X+       0x01FFFE00, 0x03FFFE00, 0x07FFFE00, 0x0FFFFE00,
X+       0x1FFFFE00, 0x3FFFFE00, 0x7FFFFE00, 0xFFFFFE00,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000400, 0x00000C00, 0x00001C00,
X+       0x00003C00, 0x00007C00, 0x0000FC00, 0x0001FC00,
X+       0x0003FC00, 0x0007FC00, 0x000FFC00, 0x001FFC00,
X+       0x003FFC00, 0x007FFC00, 0x00FFFC00, 0x01FFFC00,
X+       0x03FFFC00, 0x07FFFC00, 0x0FFFFC00, 0x1FFFFC00,
X+       0x3FFFFC00, 0x7FFFFC00, 0xFFFFFC00, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00000800, 0x00001800, 0x00003800,
X+       0x00007800, 0x0000F800, 0x0001F800, 0x0003F800,
X+       0x0007F800, 0x000FF800, 0x001FF800, 0x003FF800,
X+       0x007FF800, 0x00FFF800, 0x01FFF800, 0x03FFF800,
X+       0x07FFF800, 0x0FFFF800, 0x1FFFF800, 0x3FFFF800,
X+       0x7FFFF800, 0xFFFFF800, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00001000, 0x00003000, 0x00007000,
X+       0x0000F000, 0x0001F000, 0x0003F000, 0x0007F000,
X+       0x000FF000, 0x001FF000, 0x003FF000, 0x007FF000,
X+       0x00FFF000, 0x01FFF000, 0x03FFF000, 0x07FFF000,
X+       0x0FFFF000, 0x1FFFF000, 0x3FFFF000, 0x7FFFF000,
X+       0xFFFFF000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00002000, 0x00006000, 0x0000E000,
X+       0x0001E000, 0x0003E000, 0x0007E000, 0x000FE000,
X+       0x001FE000, 0x003FE000, 0x007FE000, 0x00FFE000,
X+       0x01FFE000, 0x03FFE000, 0x07FFE000, 0x0FFFE000,
X+       0x1FFFE000, 0x3FFFE000, 0x7FFFE000, 0xFFFFE000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00004000, 0x0000C000, 0x0001C000,
X+       0x0003C000, 0x0007C000, 0x000FC000, 0x001FC000,
X+       0x003FC000, 0x007FC000, 0x00FFC000, 0x01FFC000,
X+       0x03FFC000, 0x07FFC000, 0x0FFFC000, 0x1FFFC000,
X+       0x3FFFC000, 0x7FFFC000, 0xFFFFC000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00008000, 0x00018000, 0x00038000,
X+       0x00078000, 0x000F8000, 0x001F8000, 0x003F8000,
X+       0x007F8000, 0x00FF8000, 0x01FF8000, 0x03FF8000,
X+       0x07FF8000, 0x0FFF8000, 0x1FFF8000, 0x3FFF8000,
X+       0x7FFF8000, 0xFFFF8000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00010000, 0x00030000, 0x00070000,
X+       0x000F0000, 0x001F0000, 0x003F0000, 0x007F0000,
X+       0x00FF0000, 0x01FF0000, 0x03FF0000, 0x07FF0000,
X+       0x0FFF0000, 0x1FFF0000, 0x3FFF0000, 0x7FFF0000,
X+       0xFFFF0000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00020000, 0x00060000, 0x000E0000,
X+       0x001E0000, 0x003E0000, 0x007E0000, 0x00FE0000,
X+       0x01FE0000, 0x03FE0000, 0x07FE0000, 0x0FFE0000,
X+       0x1FFE0000, 0x3FFE0000, 0x7FFE0000, 0xFFFE0000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00040000, 0x000C0000, 0x001C0000,
X+       0x003C0000, 0x007C0000, 0x00FC0000, 0x01FC0000,
X+       0x03FC0000, 0x07FC0000, 0x0FFC0000, 0x1FFC0000,
X+       0x3FFC0000, 0x7FFC0000, 0xFFFC0000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00080000, 0x00180000, 0x00380000,
X+       0x00780000, 0x00F80000, 0x01F80000, 0x03F80000,
X+       0x07F80000, 0x0FF80000, 0x1FF80000, 0x3FF80000,
X+       0x7FF80000, 0xFFF80000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00100000, 0x00300000, 0x00700000,
X+       0x00F00000, 0x01F00000, 0x03F00000, 0x07F00000,
X+       0x0FF00000, 0x1FF00000, 0x3FF00000, 0x7FF00000,
X+       0xFFF00000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00200000, 0x00600000, 0x00E00000,
X+       0x01E00000, 0x03E00000, 0x07E00000, 0x0FE00000,
X+       0x1FE00000, 0x3FE00000, 0x7FE00000, 0xFFE00000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00400000, 0x00C00000, 0x01C00000,
X+       0x03C00000, 0x07C00000, 0x0FC00000, 0x1FC00000,
X+       0x3FC00000, 0x7FC00000, 0xFFC00000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x00800000, 0x01800000, 0x03800000,
X+       0x07800000, 0x0F800000, 0x1F800000, 0x3F800000,
X+       0x7F800000, 0xFF800000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x01000000, 0x03000000, 0x07000000,
X+       0x0F000000, 0x1F000000, 0x3F000000, 0x7F000000,
X+       0xFF000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x02000000, 0x06000000, 0x0E000000,
X+       0x1E000000, 0x3E000000, 0x7E000000, 0xFE000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x04000000, 0x0C000000, 0x1C000000,
X+       0x3C000000, 0x7C000000, 0xFC000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x08000000, 0x18000000, 0x38000000,
X+       0x78000000, 0xF8000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x10000000, 0x30000000, 0x70000000,
X+       0xF0000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x20000000, 0x60000000, 0xE0000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x40000000, 0xC0000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+      {0x00000000, 0x80000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000,
X+       0x00000000, 0x00000000, 0x00000000, 0x00000000},
X+ };
X+ #endif  /* PURDUE */
X  #endif
X  
X  
X***************
X*** 402,405 ****
X      0xffffffff ^ (1<<30), 0xffffffff ^ (1<<31)
X      };
X  #endif
X- 
X--- 924,926 ----
END_OF_FILE
if test 29909 -ne `wc -c <'maskbits.c.patch'`; then
    echo shar: \"'maskbits.c.patch'\" unpacked with wrong size!
fi
# end of 'maskbits.c.patch'
fi
if test -f 'maskbits.h.patch' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'maskbits.h.patch'\"
else
echo shar: Extracting \"'maskbits.h.patch'\" \(5338 characters\)
sed "s/^X//" >'maskbits.h.patch' <<'END_OF_FILE'
X*** ./ddx/mfb/maskbits.h.orig	Mon Oct  3 07:25:17 1988
X--- ./ddx/mfb/maskbits.h	Thu Nov 17 15:21:25 1988
X***************
X*** 28,35 ****
X--- 28,39 ----
X  
X  extern int starttab[];
X  extern int endtab[];
X+ #ifndef PURDUE
X  extern int startpartial[];
X  extern int endpartial[];
X+ #else  /* PURDUE */
X+ extern unsigned partmasks[32][32];
X+ #endif  /* PURDUE */
X  extern int rmask[];
X  extern int mask[];
X  
X***************
X*** 206,213 ****
X--- 210,222 ----
X      else \
X  	nlw = (w) >> 5;
X  
X+ #ifndef PURDUE
X  #define maskpartialbits(x, w, mask) \
X      mask = startpartial[(x) & 0x1f] & endpartial[((x) + (w)) & 0x1f];
X+ #else  /* PURDUE */
X+ #define maskpartialbits(x, w, mask) \
X+     mask = partmasks[(x)&0x1f][(w)&0x1f];
X+ #endif  /* PURDUE */
X  
X  #define mask32bits(x, w, startmask, endmask) \
X      startmask = starttab[(x)&0x1f]; \
X***************
X*** 214,219 ****
X--- 223,230 ----
X      endmask = endtab[((x)+(w)) & 0x1f];
X  
X  
X+ #ifndef PURDUE
X+ 
X  #define getbits(psrc, x, w, dst) \
X  if ( ((x) + (w)) <= 32) \
X  { \
X***************
X*** 270,275 ****
X--- 281,287 ----
X      *((pdst)+1) = (*((pdst)+1) & starttab[n]) | (t2 & endtab[n]); \
X  }
X  
X+ 
X  #define putbitsrrop(src, x, w, pdst, rop) \
X  if ( ((x)+(w)) <= 32) \
X  { \
X***************
X*** 295,302 ****
X--- 307,399 ----
X      *((pdst)+1) = (*((pdst)+1) & starttab[n]) | (t2 & endtab[n]); \
X  }
X  
X+ #else  /* PURDUE */
X+ #define getbits(psrc, x, w, dst) \
X+ { \
X+     dst = SCRLEFT((unsigned) *(psrc), (x)); \
X+     if ( ((x) + (w)) > 32) \
X+ 	dst |= (SCRRIGHT((unsigned) *((psrc)+1), 32-(x))); \
X+ }
X+ 
X+ #define putbits(src, x, w, pdst) \
X+ { \
X+     register int n = (x)+(w)-32; \
X+     \
X+     if (n <= 0) \
X+     { \
X+ 	register int tmpmask; \
X+ 	maskpartialbits((x), (w), tmpmask); \
X+ 	*(pdst) = (*(pdst) & ~tmpmask) | \
X+ 		(SCRRIGHT((unsigned) src, x) & tmpmask); \
X+     } \
X+     else \
X+     { \
X+ 	register unsigned int *ptmp_ = (unsigned *) (pdst)+1; \
X+ 	*(pdst) = (*(pdst) & endtab[x]) | (SCRRIGHT((unsigned) (src), x)); \
X+ 	*ptmp_ = (*ptmp_ & starttab[n]) | \
X+ 		(SCRLEFT((unsigned) src, 32-(x)) & endtab[n]); \
X+     } \
X+ }
X+ 
X+ #define putbitsrop(src, x, w, pdst, rop) \
X+ {\
X+ 	register int t1, t2; \
X+ 	register int n = (x)+(w)-32; \
X+ 	\
X+ 	t1 = SCRRIGHT((src), (x)); \
X+ 	DoRop(t2, rop, t1, *(pdst)); \
X+ 	\
X+     if (n <= 0) \
X+     { \
X+ 	register int tmpmask; \
X+ 	\
X+ 	maskpartialbits((x), (w), tmpmask); \
X+ 	*(pdst) = (*(pdst) & ~tmpmask) | (t2 & tmpmask); \
X+     } \
X+     else \
X+     { \
X+ 	int m = 32-(x); \
X+ 	register unsigned int *ptmp_ = (unsigned *) (pdst)+1; \
X+ 	*(pdst) = (*(pdst) & endtab[x]) | (t2 & starttab[x]); \
X+ 	t1 = SCRLEFT((src), m); \
X+ 	DoRop(t2, rop, t1, *ptmp_); \
X+ 	*ptmp_ = (*ptmp_ & starttab[n]) | (t2 & endtab[n]); \
X+     } \
X+ }
X+ 
X+ #define putbitsrrop(src, x, w, pdst, rop) \
X+ {\
X+ 	register int t1, t2; \
X+ 	register int n = (x)+(w)-32; \
X+ 	\
X+ 	t1 = SCRRIGHT((src), (x)); \
X+ 	t2 = DoRRop(rop, t1, *(pdst)); \
X+ 	\
X+     if (n <= 0) \
X+     { \
X+ 	register int tmpmask; \
X+ 	\
X+ 	maskpartialbits((x), (w), tmpmask); \
X+ 	*(pdst) = (*(pdst) & ~tmpmask) | (t2 & tmpmask); \
X+     } \
X+     else \
X+     { \
X+ 	int m = 32-(x); \
X+ 	register unsigned int *ptmp_ = (unsigned *) (pdst)+1; \
X+ 	*(pdst) = (*(pdst) & endtab[x]) | (t2 & starttab[x]); \
X+ 	t1 = SCRLEFT((src), m); \
X+ 	t2 = DoRRop(rop, t1, *ptmp_); \
X+ 	*ptmp_ = (*ptmp_ & starttab[n]) | (t2 & endtab[n]); \
X+     } \
X+ }
X+ #endif  /* PURDUE */
X+ 
X  #if GETLEFTBITS_ALIGNMENT == 1
X+ #ifndef PURDUE
X  #define getleftbits(psrc, w, dst)	getbits((unsigned int *)psrc, 0, w, dst)
X+ #else  /* PURDUE */
X+ #define getleftbits(psrc, w, dst)	dst = *((unsigned int *) psrc)
X+ #endif
X  #endif /* GETLEFTBITS_ALIGNMENT == 1 */
X  
X  #if GETLEFTBITS_ALIGNMENT == 2
X***************
X*** 326,329 ****
X--- 423,470 ----
X  	getleftbits((psrc), (w), (dst)); \
X  	dst = SCRLEFT((dst), (offset));
X  
X+ #ifdef PURDUE
X+ /* pairs of getbits/putbits happen frequently. Some of the code can
X+  * be shared or avoided in a few specific instances.  It gets us a
X+  * small advantage, so we do it.
X+  */
X  
X+ #define getandputbits0(psrc, sbindex, width, pdst) \
X+ {			/* unroll the whole damn thing to see how it * behaves */ \
X+     register int          _flag = 32 - (sbindex); \
X+     register unsigned int _src; \
X+  \
X+     _src = SCRLEFT (*(psrc), (sbindex)); \
X+     if ((width) > _flag) \
X+ 	_src |=  SCRRIGHT (*((psrc) + 1), _flag); \
X+  \
X+     *(pdst) = (*(pdst) & starttab[(width)]) | (_src & endtab[(width)]); \
X+ }
X+ 
X+ 
X+ #define getandputrop0(psrc, sbindex, width, pdst, rop) \
X+ {			\
X+     register int          _flag = 32 - (sbindex); \
X+     register unsigned int _src; \
X+  \
X+     _src = SCRLEFT (*(psrc), (sbindex)); \
X+     if ((width) > _flag) \
X+ 	_src |=  SCRRIGHT (*((psrc) + 1), _flag); \
X+     DoRop(_src, rop, _src, *(pdst)); \
X+  \
X+     *(pdst) = (*(pdst) & starttab[(width)]) | (_src & endtab[(width)]); \
X+ }
X+ 
X+ #define getandputrrop0(psrc, sbindex, width, pdst, rop) \
X+ { \
X+     int             _flag = 32 - (sbindex); \
X+     register unsigned int _src; \
X+  \
X+     _src = SCRLEFT (*(psrc), (sbindex)); \
X+     if ((width) > _flag) \
X+ 	_src |=  SCRRIGHT (*((psrc) + 1), _flag); \
X+     _src = DoRRop(rop, _src, *(pdst)); \
X+  \
X+     *(pdst) = (*(pdst) & starttab[(width)]) | (_src & endtab[(width)]); \
X+ }
X+ #endif  /* PURDUE */
END_OF_FILE
if test 5338 -ne `wc -c <'maskbits.h.patch'`; then
    echo shar: \"'maskbits.h.patch'\" unpacked with wrong size!
fi
# end of 'maskbits.h.patch'
fi
if test -f 'mfbfillsp.c.patch' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mfbfillsp.c.patch'\"
else
echo shar: Extracting \"'mfbfillsp.c.patch'\" \(4526 characters\)
sed "s/^X//" >'mfbfillsp.c.patch' <<'END_OF_FILE'
X*** ./ddx/mfb/mfbfillsp.c.orig	Tue Sep  6 13:54:01 1988
X--- ./ddx/mfb/mfbfillsp.c	Thu Nov 17 15:21:37 1988
X***************
X*** 123,130 ****
X--- 123,134 ----
X  		maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);
X  		if (startmask)
X  		    *addrl++ &= ~startmask;
X+ #ifndef PURDUE
X  		while (nlmiddle--)
X  		    *addrl++ = 0x0;
X+ #else
X+ 		Duff (nlmiddle, *addrl++ = 0x0);
X+ #endif
X  		if (endmask)
X  		    *addrl &= ~endmask;
X  	    }
X***************
X*** 207,214 ****
X--- 211,222 ----
X  		maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);
X  		if (startmask)
X  		    *addrl++ |= startmask;
X+ #ifndef PURDUE
X  		while (nlmiddle--)
X  		    *addrl++ = 0xffffffff;
X+ #else
X+ 		Duff (nlmiddle, *addrl++ = 0xffffffff);
X+ #endif
X  		if (endmask)
X  		    *addrl |= endmask;
X  	    }
X***************
X*** 291,298 ****
X--- 299,310 ----
X  		maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);
X  		if (startmask)
X  		    *addrl++ ^= startmask;
X+ #ifndef PURDUE
X  		while (nlmiddle--)
X  		    *addrl++ ^= 0xffffffff;
X+ #else
X+ 		Duff (nlmiddle, *addrl++ ^= 0xffffffff);
X+ #endif  /* PURDUE */
X  		if (endmask)
X  		    *addrl ^= endmask;
X  	    }
X***************
X*** 382,389 ****
X--- 394,405 ----
X  	    maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);
X  	    if (startmask)
X  		*addrl++ |= (src & startmask);
X+ #ifndef PURDUE
X  	    while (nlmiddle--)
X  		*addrl++ |= src;
X+ #else
X+ 	    Duff (nlmiddle, *addrl++ |= src);
X+ #endif  /* PURDUE */
X  	    if (endmask)
X  		*addrl |= (src & endmask);
X          }
X***************
X*** 472,479 ****
X--- 488,499 ----
X  	    maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);
X  	    if (startmask)
X  		*addrl++ &= ~(src & startmask);
X+ #ifndef PURDUE
X  	    while (nlmiddle--)
X  		*addrl++ &= ~src;
X+ #else
X+ 	    Duff (nlmiddle, *addrl++ &= ~src);
X+ #endif  /* PURDUE */
X  	    if (endmask)
X  		*addrl &= ~(src & endmask);
X          }
X***************
X*** 562,569 ****
X--- 582,593 ----
X  	    maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);
X  	    if (startmask)
X  		*addrl++ ^= (src & startmask);
X+ #ifndef PURDUE
X  	    while (nlmiddle--)
X  		*addrl++ ^= src;
X+ #else
X+ 	    Duff(nlmiddle, *addrl++ ^= src);
X+ #endif  /* PURDUE */
X  	    if (endmask)
X  		*addrl ^= (src & endmask);
X          }
X***************
X*** 860,867 ****
X--- 884,895 ----
X  		else if(((x & 0x1f) + w) < 32)
X  		{
X  		    /* doing < 32 bits is easy, and worth special-casing */
X+ #ifndef PURDUE
X  		    getbits(psrc, 0, w, tmpSrc);
X  		    putbitsrop(tmpSrc, x & 0x1f, w, pdst, rop);
X+ #else
X+ 		    putbitsrop(*psrc, x & 0x1f, w, pdst, rop);
X+ #endif
X  		}
X  		else
X  		{
X***************
X*** 883,890 ****
X--- 911,922 ----
X  
X  		    if(startmask)
X  		    {
X+ #ifndef PURDUE
X  			getbits(psrc, 0, nstart, tmpSrc);
X  			putbitsrop(tmpSrc, (x & 0x1f), nstart, pdst, rop);
X+ #else
X+ 			putbitsrop(*psrc, (x & 0x1f), nstart, pdst, rop);
X+ #endif  /* PURDUE */
X  			pdst++;
X  			if(srcStartOver)
X  			    psrc++;
X***************
X*** 893,906 ****
X--- 925,946 ----
X  		    while(nlMiddle--)
X  		    {
X  			    getbits(psrc, nstart, 32, tmpSrc);
X+ #ifndef PURDUE
X  			    *pdst = DoRop(rop, tmpSrc, *pdst);
X+ #else  /* PURDUE */
X+ 			    DoRop(*pdst, rop, tmpSrc, *pdst); 
X+ #endif  /* PURDUE */
X  			    pdst++;
X  			    psrc++;
X  		    }
X  		    if(endmask)
X  		    {
X+ #ifndef PURDUE
X  			getbits(psrc, nstart, nend, tmpSrc);
X  			putbitsrop(tmpSrc, 0, nend, pdst, rop);
X+ #else
X+ 			getandputrop0(psrc, nstart, nend, pdst, rop);
X+ #endif  /* PURDUE */
X  		    }
X  		 }
X  		 x += w;
X***************
X*** 1022,1029 ****
X--- 1062,1073 ----
X  		else if(((x & 0x1f) + w) < 32)
X  		{
X  		    /* doing < 32 bits is easy, and worth special-casing */
X+ #ifndef PURDUE
X  		    getbits(psrc, 0, w, tmpSrc);
X  		    putbitsrrop(tmpSrc, x & 0x1f, w, pdst, rop);
X+ #else
X+ 		    putbitsrrop(*psrc, x & 0x1f, w, pdst, rop);
X+ #endif  /* PURDUE */
X  		}
X  		else
X  		{
X***************
X*** 1045,1052 ****
X--- 1089,1100 ----
X  
X  		    if(startmask)
X  		    {
X+ #ifndef PURDUE
X  			getbits(psrc, 0, nstart, tmpSrc);
X  			putbitsrrop(tmpSrc, (x & 0x1f), nstart, pdst, rop);
X+ #else
X+ 			putbitsrrop(*psrc, (x & 0x1f), nstart, pdst, rop);
X+ #endif
X  			pdst++;
X  			if(srcStartOver)
X  			    psrc++;
X***************
X*** 1061,1068 ****
X--- 1109,1120 ----
X  		    }
X  		    if(endmask)
X  		    {
X+ #ifndef PURDUE
X  			getbits(psrc, nstart, nend, tmpSrc);
X  			putbitsrrop(tmpSrc, 0, nend, pdst, rop);
X+ #else
X+ 			getandputrrop0(psrc, nstart, nend, pdst, rop);
X+ #endif  /* PURDUE */
X  		    }
X  		 }
X  		 x += w;
END_OF_FILE
if test 4526 -ne `wc -c <'mfbfillsp.c.patch'`; then
    echo shar: \"'mfbfillsp.c.patch'\" unpacked with wrong size!
fi
# end of 'mfbfillsp.c.patch'
fi
if test -f 'mfbline.c.patch' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mfbline.c.patch'\"
else
echo shar: Extracting \"'mfbline.c.patch'\" \(4895 characters\)
sed "s/^X//" >'mfbline.c.patch' <<'END_OF_FILE'
X*** ./ddx/mfb/mfbline.c.orig	Mon Oct 31 11:38:46 1988
X--- ./ddx/mfb/mfbline.c	Thu Nov 17 15:21:21 1988
X***************
X*** 110,116 ****
X--- 110,120 ----
X  #define round(dividend, divisor) \
X  ( (((dividend)<<1) + (divisor)) / ((divisor)<<1) )
X  
X+ #ifndef PURDUE
X  #define ceiling(m,n) ( ((m) + (n) -1)/(n) )
X+ #else
X+ #define ceiling(m,n)  (((m)-1)/(n) + 1)
X+ #endif  /* PURDUE */
X  
X  #define SignTimes(sign, n) ((sign) * ((int)(n)))
X  
X***************
X*** 119,124 ****
X--- 123,129 ----
X      ( ((sign)<0) ? -(n) : (n) )
X  */
X  
X+ #ifndef PURDUE
X  #define SWAPPT(p1, p2, pttmp) \
X  pttmp = p1; \
X  p1 = p2; \
X***************
X*** 129,134 ****
X--- 134,155 ----
X  i = j; \
X  j = t;
X  
X+ #else
X+ #define SWAPINT(i, j) \
X+ {  register int _t = i; \
X+    i = j; \
X+    j = _t; \
X+ }
X+ 
X+ #define SWAPPT(i, j) \
X+ {  register DDXPointRec _t; \
X+    _t = i; \
X+    i = j; \
X+    j = _t; \
X+ }
X+ #endif  /* PURDUE */
X+    
X+ 
X  void
X  mfbLineSS(pDrawable, pGC, mode, npt, pptInit)
X      DrawablePtr pDrawable;
X***************
X*** 200,210 ****
X--- 221,235 ----
X      nptTmp = npt;
X      if (mode == CoordModeOrigin)
X      {
X+ #ifndef PURDUE
X  	while(nptTmp--)
X  	{
X  	    ppt->x += xorg;
X  	    ppt++->y += yorg;
X  	}
X+ #else
X+ 	Duff(nptTmp, ppt->x += xorg; ppt++->y += yorg);
X+ #endif  /* PURDUE */
X      }
X      else
X      {
X***************
X*** 211,216 ****
X--- 236,242 ----
X  	ppt->x += xorg;
X  	ppt->y += yorg;
X  	nptTmp--;
X+ #ifndef PURDUE
X  	while(nptTmp--)
X  	{
X  	    ppt++;
X***************
X*** 217,222 ****
X--- 243,251 ----
X  	    ppt->x += (ppt-1)->x;
X  	    ppt->y += (ppt-1)->y;
X  	}
X+ #else
X+ 	Duff(nptTmp, ppt++; ppt->x += (ppt-1)->x; ppt->y += (ppt-1)->y);
X+ #endif  /* PURDUE */
X      }
X  
X      ppt = pptInit;
X***************
X*** 235,240 ****
X--- 264,272 ----
X  	    */
X  	    if (pt1.y > pt2.y)
X  	    {
X+ #ifdef PURDUE
X+ 		register int tmp;
X+ #endif
X  		tmp = pt2.y;
X  		pt2.y = pt1.y + 1;
X  		pt1.y = tmp + 1;
X***************
X*** 277,282 ****
X--- 309,317 ----
X  	    */
X  	    if (pt1.x > pt2.x)
X  	    {
X+ #ifdef PURDUE
X+ 		register int tmp;
X+ #endif
X  		tmp = pt2.x;
X  		pt2.x = pt1.x + 1;
X  		pt1.x = tmp + 1;
X***************
X*** 308,314 ****
X--- 343,353 ----
X  		    if (pbox->x1 >= pt2.x)
X  		    {
X  			nbox = 0;
X+ #ifndef PURDUE
X  			continue;
X+ #else
X+ 			break;
X+ #endif  /* PURDUE */
X  		    }
X  
X  		    x1 = max(pt1.x, pbox->x1);
X***************
X*** 440,445 ****
X--- 479,485 ----
X  	 (ppt->y != pptInit->y) ||
X  	 (ppt == pptInit + 1)))
X      {
X+ #ifndef PURDUE
X  	pt1 = *ppt;
X  
X  	nbox = nboxInit;
X***************
X*** 469,476 ****
X--- 509,555 ----
X  	    else
X  		pbox++;
X  	}
X+ #else
X+ 	unsigned int _mask;
X+ 	int _incr,  _rop = ((mfbPrivGC *)(pGC->devPriv))->rop;
X+ 
X+ 	pt1 = *ppt;
X+ 	if (_rop == RROP_BLACK)
X+ 		_mask = rmask[pt1.x & 0x1f];
X+ 	else
X+ 		_mask = mask[pt1.x & 0x1f];
X+ 	_incr = (pt1.y * nlwidth) + (pt1.x >> 5);
X+ 
X+ 	nbox = nboxInit;
X+ 	pbox = pboxInit;
X+ 	while (nbox--)
X+ 	{
X+ 	    if ((pt1.x >= pbox->x1) &&
X+ 		(pt1.y >= pbox->y1) &&
X+ 		(pt1.x <  pbox->x2) &&
X+ 		(pt1.y <  pbox->y2))
X+ 	    {
X+ 		addrl += _incr;
X+ 		switch(_rop)
X+ 		{
X+ 		    case RROP_BLACK:
X+ 		        *addrl &= _mask;
X+ 			break;
X+ 		    case RROP_WHITE:
X+ 		        *addrl |= _mask;
X+ 			break;
X+ 		    case RROP_INVERT:
X+ 		        *addrl ^= _mask;
X+ 			break;
X  		}
X+ 		break;
X  	    }
X+ 	    else
X+ 		pbox++;
X+ 	}
X+ #endif  /* PURDUE */
X+     }
X+ }
X  
X  
X  /*
X***************
X*** 570,580 ****
X--- 649,663 ----
X      nptTmp = npt;
X      if (mode == CoordModeOrigin)
X      {
X+ #ifndef PURDUE
X  	while(nptTmp--)
X  	{
X  	    ppt->x += xorg;
X  	    ppt++->y += yorg;
X  	}
X+ #else
X+ 	Duff(nptTmp, ppt->x += xorg; ppt++->y += yorg );
X+ #endif  /* PURDUE */
X      }
X      else
X      {
X***************
X*** 581,586 ****
X--- 664,670 ----
X  	ppt->x += xorg;
X  	ppt->y += yorg;
X  	nptTmp--;
X+ #ifndef PURDUE
X  	while(nptTmp--)
X  	{
X  	    ppt++;
X***************
X*** 587,592 ****
X--- 671,679 ----
X  	    ppt->x += (ppt-1)->x;
X  	    ppt->y += (ppt-1)->y;
X  	}
X+ #else
X+ 	Duff (nptTmp, ppt++; ppt->x += (ppt-1)->x; ppt->y += (ppt-1)->y);
X+ #endif
X      }
X  
X  
X***************
X*** 766,774 ****
X--- 853,867 ----
X  	    clipDone = 1;
X  	    if (swapped)
X  	    {
X+ #ifndef PURDUE
X  	        SWAPPT(pt1, pt2, ptTmp);
X  	        SWAPINT(oc1, oc2, tmp);
X  	        SWAPINT(clip1, clip2, tmp);
X+ #else
X+ 	        SWAPPT(pt1, pt2);
X+ 	        SWAPINT(oc1, oc2);
X+ 	        SWAPINT(clip1, clip2);
X+ #endif  /* PURDUE */
X  	    }
X          }
X          else /* have to clip */
X***************
X*** 776,784 ****
X--- 869,883 ----
X  	    /* only clip one point at a time */
X  	    if (!oc1)
X  	    {
X+ #ifndef PURDUE
X  	        SWAPPT(pt1, pt2, ptTmp);
X  	        SWAPINT(oc1, oc2, tmp);
X  	        SWAPINT(clip1, clip2, tmp);
X+ #else
X+ 	        SWAPPT(pt1, pt2);
X+ 	        SWAPINT(oc1, oc2);
X+ 	        SWAPINT(clip1, clip2);
X+ #endif  /* PURDUE */
X  	        swapped = !swapped;
X  	    }
X      
END_OF_FILE
if test 4895 -ne `wc -c <'mfbline.c.patch'`; then
    echo shar: \"'mfbline.c.patch'\" unpacked with wrong size!
fi
# end of 'mfbline.c.patch'
fi
if test -f 'mfbpntwin.c.patch' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mfbpntwin.c.patch'\"
else
echo shar: Extracting \"'mfbpntwin.c.patch'\" \(1369 characters\)
sed "s/^X//" >'mfbpntwin.c.patch' <<'END_OF_FILE'
X*** ./ddx/mfb/mfbpntwin.c.orig	Mon Oct 31 02:03:05 1988
X--- ./ddx/mfb/mfbpntwin.c	Thu Nov 17 15:21:33 1988
X***************
X*** 179,186 ****
X--- 179,190 ----
X  		    nlw = nlwMiddle;
X  		    *p = (*p & ~startmask) | (srcpix & startmask);
X  		    p++;
X+ #ifndef PURDUE
X  		    while (nlw--)
X  			*p++ = srcpix;
X+ #else
X+ 		    Duff (nlw, *p++ = srcpix );
X+ #endif  /* PURDUE */
X  		    *p = (*p & ~endmask) | (srcpix & endmask);
X  		    p += nlwExtra;
X  		}
X***************
X*** 195,202 ****
X--- 199,210 ----
X  		    nlw = nlwMiddle;
X  		    *p = (*p & ~startmask) | (srcpix & startmask);
X  		    p++;
X+ #ifndef PURDUE
X  		    while (nlw--)
X  			*p++ = srcpix;
X+ #else
X+ 		Duff (nlw, *p++ = srcpix );
X+ #endif  /* PURDUE */
X  		    p += nlwExtra;
X  		}
X  	    }
X***************
X*** 207,214 ****
X--- 215,226 ----
X  		    srcpix = psrc[y%tileHeight];
X  		    y++;
X  		    nlw = nlwMiddle;
X+ #ifndef PURDUE
X  		    while (nlw--)
X  			*p++ = srcpix;
X+ #else
X+ 		Duff (nlw, *p++ = srcpix);
X+ #endif  /* PURDUE */
X  		    *p = (*p & ~endmask) | (srcpix & endmask);
X  		    p += nlwExtra;
X  		}
X***************
X*** 220,227 ****
X--- 232,243 ----
X  		    srcpix = psrc[y%tileHeight];
X  		    y++;
X  		    nlw = nlwMiddle;
X+ #ifndef PURDUE
X  		    while (nlw--)
X  			*p++ = srcpix;
X+ #else
X+ 		Duff (nlw, *p++ = srcpix);
X+ #endif  /* PURDUE */
X  		    p += nlwExtra;
X  		}
X  	    }
END_OF_FILE
if test 1369 -ne `wc -c <'mfbpntwin.c.patch'`; then
    echo shar: \"'mfbpntwin.c.patch'\" unpacked with wrong size!
fi
# end of 'mfbpntwin.c.patch'
fi
echo shar: End of archive 1 \(of 2\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked both archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330
Moderator of comp.sources.x