Annotation of 43BSDTahoe/new/X/showimg/shutil.c, revision 1.1

1.1     ! root        1: /* split off some utility functions */
        !             2: 
        !             3: #include <stdio.h>
        !             4: #include <X/Xlib.h>
        !             5: 
        !             6: #include "quad_arrow.cursor"
        !             7: #include "quad_arrow_mask.cursor"
        !             8: #include "pan.cursor"
        !             9: #include "pan_mask.cursor"
        !            10: #include "print.cursor"
        !            11: #include "print_mask.cursor"
        !            12: #include "zoom2.cursor"
        !            13: #include "zoom2_mask.cursor"
        !            14: #include "zoom4.cursor"
        !            15: #include "zoom4_mask.cursor"
        !            16: #include "pal.cursor"
        !            17: #include "pal_mask.cursor"
        !            18: 
        !            19: #define MIN(a,b) (((a) < (b)) ? (a) : (b))
        !            20: #define MAX(a,b) (((a) > (b)) ? (a) : (b))
        !            21: 
        !            22: #define SYNCINT 20
        !            23: 
        !            24: ipow( x, n)
        !            25: register int x, n;
        !            26: {
        !            27:        register int p;
        !            28:        for (p = 1; n > 0; --n)
        !            29:                p *= x;
        !            30:        return(p);
        !            31: }
        !            32: 
        !            33: make_cursors(imcursor,pancursor,printcursor,zoom2cursor,zoom4cursor,
        !            34:             palcursor)
        !            35:       Cursor *imcursor, *pancursor, *printcursor;
        !            36:       Cursor *zoom2cursor, *zoom4cursor, *palcursor;
        !            37: {
        !            38:       Cursor XCreateCursor();
        !            39: 
        !            40:      *imcursor = XCreateCursor(quad_arrow_width, quad_arrow_height,
        !            41:                              quad_arrow_bits, 
        !            42:                              quad_arrow_mask_bits,
        !            43:                              quad_arrow_x_hot, quad_arrow_y_hot,
        !            44:                              BlackPixel, WhitePixel, GXcopy);
        !            45:      *pancursor = XCreateCursor(pan_width, pan_height,
        !            46:                              pan_bits, 
        !            47:                              pan_mask_bits,
        !            48:                              pan_x_hot, pan_y_hot,
        !            49:                              BlackPixel, WhitePixel, GXcopy);
        !            50:      *printcursor = XCreateCursor(print_width, print_height,
        !            51:                              print_bits, 
        !            52:                              print_mask_bits,
        !            53:                              print_x_hot, print_y_hot,
        !            54:                              BlackPixel, WhitePixel, GXcopy);
        !            55:      *zoom2cursor = XCreateCursor(zoom2_width, zoom2_height,
        !            56:                              zoom2_bits, 
        !            57:                              zoom2_mask_bits,
        !            58:                              zoom2_x_hot, zoom2_y_hot,
        !            59:                              BlackPixel, WhitePixel, GXcopy);
        !            60:      *zoom4cursor = XCreateCursor(zoom4_width, zoom4_height,
        !            61:                              zoom4_bits, 
        !            62:                              zoom4_mask_bits,
        !            63:                              zoom4_x_hot, zoom4_y_hot,
        !            64:                              BlackPixel, WhitePixel, GXcopy);
        !            65:      *palcursor = XCreateCursor(pal_width, pal_height,
        !            66:                              pal_bits, 
        !            67:                              pal_mask_bits,
        !            68:                              pal_x_hot, pal_y_hot,
        !            69:                              BlackPixel, WhitePixel, GXcopy);
        !            70:      return;
        !            71: }
        !            72: 
        !            73: /* write image pixels to the screen according to location, 
        !            74:  * zoom factor
        !            75:  */
        !            76: writepix(wind, image, ncols, nrows, zoomfactor, x, y, width, height,
        !            77:         xzero, yzero, mask,func,planes)
        !            78:      Window wind;
        !            79:      unsigned char *image;
        !            80:      short ncols, nrows, zoomfactor, x, y, width, height, xzero, yzero;
        !            81:      int mask, func, planes;
        !            82: {
        !            83:      unsigned char linebuf[8192];
        !            84:      int j, k, l, minw, ldebug = 0;
        !            85: 
        !            86:      register unsigned char *byteimage, *line = linebuf;
        !            87:      register int ncols_reg = ncols;
        !            88:      register minwidth, maxy;
        !            89:      register int i;
        !            90: 
        !            91:      minwidth = MIN((ncols_reg-x)<<zoomfactor, width);
        !            92:      maxy = MIN(nrows<<zoomfactor, y+height);
        !            93: 
        !            94:      byteimage = image + ((yzero + y) * ncols_reg) + xzero + x;
        !            95: 
        !            96:      XSync(0);
        !            97:      if(zoomfactor == 0) {
        !            98:          for(i=y; i<maxy; i++) {
        !            99:            XPixmapBitsPutZ(wind, x, i,
        !           100:                minwidth, 1, byteimage, mask, func, planes);
        !           101:            if((i % SYNCINT) == 0) XSync(0)        !           102:            byteimage += ncols_reg;
        !           103:          }
        !           104:          return;
        !           105:      } else {
        !           106: 
        !           107:        l = 1<<zoomfactor;
        !           108: 
        !           109:        /* adjust for odd pixels */
        !           110:        width += x & (l-1);
        !           111:        x -= x & (l-1);
        !           112:        height += y & (l-1);
        !           113:        y -= y & (l-1);
        !           114:        if(width & (l-1))
        !           115:         width = (width & ~(l-1)) + l;
        !           116:        if(height & (l-1))
        !           117:         height = (height & ~(l-1))+ l;
        !           118: 
        !           119:        minwidth = MIN((ncols_reg-(x>>zoomfactor))<<zoomfactor, width);
        !           120:        maxy = MIN(nrows<<zoomfactor, y+height);
        !           121:        minw = minwidth>>zoomfactor;
        !           122: 
        !           123:        byteimage = image + ((yzero + (y>>zoomfactor)) * ncols_reg)
        !           124:                       + xzero + (x>>zoomfactor);
        !           125: 
        !           126:        for( j=y; j<maxy; j+=l) {
        !           127:           for(k=0; k<minw; k++ ) 
        !           128:               for(i=0; i<l; i++)
        !           129:                   *line++ = byteimage[k];
        !           130:            line = linebuf;
        !           131:           for(i=0; i<l; i++) {
        !           132:               if(j+i >= maxy) return;
        !           133:                XPixmapBitsPutZ(wind, x, j+i, minwidth, 1, line,
        !           134:                             mask, func, planes);
        !           135:               if(((i+j) % SYNCINT) == 0) XSync(0)        !           136:           }
        !           137:           byteimage += ncols_reg;
        !           138:        }
        !           139:      }
        !           140:      return;
        !           141: }
        !           142: 
        !           143: 

unix.superglobalmegacorp.com

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