Annotation of researchv9/X11/src/X.V11R1/server/ddx/mfb/mfbbres.c, revision 1.1.1.1

1.1       root        1: /***********************************************************
                      2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
                      3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
                      4: 
                      5:                         All Rights Reserved
                      6: 
                      7: Permission to use, copy, modify, and distribute this software and its 
                      8: documentation for any purpose and without fee is hereby granted, 
                      9: provided that the above copyright notice appear in all copies and that
                     10: both that copyright notice and this permission notice appear in 
                     11: supporting documentation, and that the names of Digital or MIT not be
                     12: used in advertising or publicity pertaining to distribution of the
                     13: software without specific, written prior permission.  
                     14: 
                     15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
                     16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
                     17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
                     18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
                     19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
                     20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
                     21: SOFTWARE.
                     22: 
                     23: ******************************************************************/
                     24: /* $Header: mfbbres.c,v 1.11 87/09/11 07:48:29 toddb Exp $ */
                     25: #include "X.h"
                     26: #include "misc.h"
                     27: #include "mfb.h"
                     28: #include "maskbits.h"
                     29: 
                     30: /* Solid bresenham line */
                     31: /* NOTES
                     32:    e2 is used less often than e1, so it's not in a register
                     33: */
                     34: 
                     35: mfbBresS(rop, addrl, nlwidth, signdx, signdy, axis, x1, y1, e, e1, e2, len)
                     36: int rop;               /* a reduced rasterop */
                     37: register int *addrl;           /* pointer to base of bitmap */
                     38: int nlwidth;           /* width in longwords of bitmap */
                     39: int signdx, signdy;    /* signs of directions */
                     40: int axis;              /* major axis (Y_AXIS or X_AXIS) */
                     41: int x1, y1;            /* initial point */
                     42: register int e;                /* error accumulator */
                     43: register int e1;       /* bresenham increments */
                     44: int e2;
                     45: register int len;      /* length of line */
                     46: {
                     47: 
                     48:     register int yinc; /* increment to next scanline */
                     49:     register int addrb;                /* bitmask */
                     50: 
                     51:     /* point to longword containing first point */
                     52:     addrl = addrl + (y1 * nlwidth) + (x1 >> 5);
                     53:     addrb = x1&0x1f;
                     54:     yinc = signdy * nlwidth;
                     55: 
                     56:     if (rop == RROP_BLACK)
                     57:     {
                     58:         if (axis == X_AXIS)
                     59:         {
                     60:            if (signdx > 0)
                     61:            {
                     62:                while(len--)
                     63:                {
                     64:                    *addrl &= rmask[addrb];
                     65:                    if (e < 0)
                     66:                        e += e1;
                     67:                    else
                     68:                    {
                     69:                        addrl += yinc;
                     70:                        e += e2;
                     71:                    }
                     72:                    if (addrb == 31)
                     73:                    {
                     74:                        addrb = -1;
                     75:                        addrl++;
                     76:                    }
                     77:                    addrb++;
                     78:                }
                     79:            }
                     80:            else
                     81:            {
                     82:                while(len--)
                     83:                {
                     84:                    *addrl &= rmask[addrb];
                     85:                    if (e <= 0)
                     86:                        e += e1;
                     87:                    else
                     88:                    {
                     89:                        addrl += yinc;
                     90:                        e += e2;
                     91:                    }
                     92:                    if (addrb == 0)
                     93:                    {
                     94:                        addrb = 32;
                     95:                        addrl--;
                     96:                    }
                     97:                    addrb--;
                     98:                }
                     99:            }
                    100:         } /* if X_AXIS */
                    101:         else
                    102:         {
                    103:            if (signdx > 0)
                    104:            {
                    105:                while(len--)
                    106:                {
                    107:                    *addrl &= rmask[addrb];
                    108:                    if (e < 0)
                    109:                        e += e1;
                    110:                    else
                    111:                    {
                    112:                        if (addrb == 31)
                    113:                        {
                    114:                            addrb = -1;
                    115:                            addrl++;
                    116:                        }
                    117:                        addrb++;
                    118:                        e += e2;
                    119:                    }
                    120:                    addrl += yinc;
                    121:                }
                    122:            }
                    123:            else
                    124:            {
                    125:                while(len--)
                    126:                {
                    127:                    *addrl &= rmask[addrb];
                    128:                    if (e <= 0)
                    129:                        e += e1;
                    130:                    else
                    131:                    {
                    132:                        if (addrb == 0)
                    133:                        {
                    134:                            addrb = 32;
                    135:                            addrl--;
                    136:                        }
                    137:                        addrb--;
                    138:                        e += e2;
                    139:                    }
                    140:                    addrl += yinc;
                    141:                }
                    142:            }
                    143:         } /* else Y_AXIS */
                    144:     } 
                    145:     else if (rop == RROP_WHITE)
                    146:     {
                    147:         if (axis == X_AXIS)
                    148:         {
                    149:            if (signdx > 0)
                    150:            {
                    151:                while(len--)
                    152:                {
                    153:                    *addrl |= mask[addrb];
                    154:                    if (e < 0)
                    155:                        e += e1;
                    156:                    else
                    157:                    {
                    158:                        addrl += yinc;
                    159:                        e += e2;
                    160:                    }
                    161:                    if (addrb == 31)
                    162:                    {
                    163:                        addrb = -1;
                    164:                        addrl++;
                    165:                    }
                    166:                    addrb++;
                    167:                }
                    168:            }
                    169:            else
                    170:            {
                    171:                while(len--)
                    172:                {
                    173:                    *addrl |= mask[addrb];
                    174:                    if (e <= 0)
                    175:                        e += e1;
                    176:                    else
                    177:                    {
                    178:                        addrl += yinc;
                    179:                        e += e2;
                    180:                    }
                    181:                    if (addrb == 0)
                    182:                    {
                    183:                        addrb = 32;
                    184:                        addrl--;
                    185:                    }
                    186:                    addrb--;
                    187:                }
                    188:            }
                    189:         } /* if X_AXIS */
                    190:         else
                    191:         {
                    192:            if (signdx > 0)
                    193:            {
                    194:                while(len--)
                    195:                {
                    196:                    *addrl |= mask[addrb];
                    197:                    if (e < 0)
                    198:                        e += e1;
                    199:                    else
                    200:                    {
                    201:                        if (addrb == 31)
                    202:                        {
                    203:                            addrb = -1;
                    204:                            addrl++;
                    205:                        }
                    206:                        addrb++;
                    207:                        e += e2;
                    208:                    }
                    209:                    addrl += yinc;
                    210:                }
                    211:            }
                    212:            else
                    213:            {
                    214:                while(len--)
                    215:                {
                    216:                    *addrl |= mask[addrb];
                    217:                    if (e <= 0)
                    218:                        e += e1;
                    219:                    else
                    220:                    {
                    221:                        if (addrb == 0)
                    222:                        {
                    223:                            addrb = 32;
                    224:                            addrl--;
                    225:                        }
                    226:                        addrb--;
                    227:                        e += e2;
                    228:                    }
                    229:                    addrl += yinc;
                    230:                }
                    231:            }
                    232:         } /* else Y_AXIS */
                    233:     }
                    234:     else if (rop == RROP_INVERT)
                    235:     {
                    236:         if (axis == X_AXIS)
                    237:         {
                    238:            if (signdx > 0)
                    239:            {
                    240:                while(len--)
                    241:                {
                    242:                    *addrl ^= mask[addrb];
                    243:                    if (e < 0)
                    244:                        e += e1;
                    245:                    else
                    246:                    {
                    247:                        addrl += yinc;
                    248:                        e += e2;
                    249:                    }
                    250:                    if (addrb == 31)
                    251:                    {
                    252:                        addrb = -1;
                    253:                        addrl++;
                    254:                    }
                    255:                    addrb++;
                    256:                }
                    257:            }
                    258:            else
                    259:            {
                    260:                while(len--)
                    261:                {
                    262:                    *addrl ^= mask[addrb];
                    263:                    if (e <= 0)
                    264:                        e += e1;
                    265:                    else
                    266:                    {
                    267:                        addrl += yinc;
                    268:                        e += e2;
                    269:                    }
                    270:                    if (addrb == 0)
                    271:                    {
                    272:                        addrb = 32;
                    273:                        addrl--;
                    274:                    }
                    275:                    addrb--;
                    276:                }
                    277:            }
                    278:         } /* if X_AXIS */
                    279:         else
                    280:         {
                    281:            if (signdx > 0)
                    282:            {
                    283:                while(len--)
                    284:                {
                    285:                    *addrl ^= mask[addrb];
                    286:                    if (e < 0)
                    287:                        e += e1;
                    288:                    else
                    289:                    {
                    290:                        if (addrb == 31)
                    291:                        {
                    292:                            addrb = -1;
                    293:                            addrl++;
                    294:                        }
                    295:                        addrb++;
                    296:                        e += e2;
                    297:                    }
                    298:                    addrl += yinc;
                    299:                }
                    300:            }
                    301:            else
                    302:            {
                    303:                while(len--)
                    304:                {
                    305:                    *addrl ^= mask[addrb];
                    306:                    if (e <= 0)
                    307:                        e += e1;
                    308:                    else
                    309:                    {
                    310:                        if (addrb == 0)
                    311:                        {
                    312:                            addrb = 32;
                    313:                            addrl--;
                    314:                        }
                    315:                        addrb--;
                    316:                        e += e2;
                    317:                    }
                    318:                    addrl += yinc;
                    319:                }
                    320:            }
                    321:         } /* else Y_AXIS */
                    322:     }
                    323: } 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.