Annotation of Net2/arch/amiga/dev/ite_cc.c, revision 1.1

1.1     ! root        1: #include "ite.h"
        !             2: #if NITE > 0
        !             3: 
        !             4: #include "param.h"
        !             5: #include "conf.h"
        !             6: #include "proc.h"
        !             7: #include "ioctl.h"
        !             8: #include "tty.h"
        !             9: #include "systm.h"
        !            10: 
        !            11: #include "itevar.h"
        !            12: 
        !            13: #include "machine/cpu.h"
        !            14: 
        !            15: /* XXX */
        !            16: #include "grfioctl.h"
        !            17: #include "grfvar.h"
        !            18: #include "grf_ccreg.h"
        !            19: 
        !            20: extern unsigned char kernel_font_width, kernel_font_height;
        !            21: extern unsigned char kernel_font_lo, kernel_font_hi;
        !            22: extern unsigned char kernel_font[], kernel_cursor[];
        !            23: 
        !            24: 
        !            25: customc_init(ip)
        !            26:        register struct ite_softc *ip;
        !            27: {
        !            28:   struct ccfb *fb;
        !            29:   int fboff, fbsize;
        !            30: 
        !            31:   if (ip->grf == 0)
        !            32:     ip->grf = &grf_softc[ip - ite_softc];
        !            33: 
        !            34:   ip->priv = ip->grf->g_display.gd_regaddr;
        !            35:   fb = (struct ccfb *) ip->priv;
        !            36:   fbsize = ip->grf->g_display.gd_fbsize;
        !            37:   
        !            38: #if 0
        !            39:   /* already done in the grf layer */
        !            40: 
        !            41:   /* clear the display. bzero only likes regions up to 64k, so call multiple times */
        !            42:   for (fboff = 0; fboff < fbsize; fboff += 64*1024)
        !            43:     bzero (fb->fb + fboff, fbsize - fboff > 64*1024 ? 64*1024 : fbsize - fboff);
        !            44: #endif
        !            45: 
        !            46:   /* this is a dreadful font, but I don't have an alternative at the moment.. */
        !            47:   ip->font     = kernel_font;
        !            48:   ip->font_lo  = kernel_font_lo;
        !            49:   ip->font_hi  = kernel_font_hi;
        !            50:   ip->ftwidth  = kernel_font_width;
        !            51:   ip->ftheight = kernel_font_height;
        !            52:   ip->cursor   = kernel_cursor;
        !            53:   
        !            54:   ip->rows     = fb->disp_height / ip->ftheight;
        !            55:   ip->cols     = fb->disp_width  / ip->ftwidth;
        !            56:   
        !            57:   
        !            58: #if 0
        !            59:   printf ("font@%x, cursor@%x\n", ip->font, ip->cursor);
        !            60:   dump_copperlist (fb->cop1);
        !            61:   dump_copperlist (fb->cop2);
        !            62: #endif
        !            63: }
        !            64: 
        !            65: customc_deinit(ip)
        !            66:        struct ite_softc *ip;
        !            67: {
        !            68:   ip->flags &= ~ITE_INITED;
        !            69: }
        !            70: 
        !            71: 
        !            72: void static inline
        !            73: customc_windowmove (src, srcx, srcy, srcmod,
        !            74:                    dst, dstx, dsty, dstmod, h, w, op)
        !            75:     unsigned char *src, *dst;
        !            76:     unsigned short srcx, srcy, srcmod;
        !            77:     unsigned short dstx, dsty, dstmod;
        !            78:     unsigned short h, w;
        !            79:     unsigned char op;
        !            80: {
        !            81:   int i;
        !            82: 
        !            83:   src += srcmod*srcy + (srcx >> 3);
        !            84:   dst += dstmod*dsty + (dstx >> 3);
        !            85: 
        !            86: #if 0
        !            87: printf("ccwm: %x-%x-%x-%x-%c\n", src, dst, h, w,
        !            88:        op == RR_XOR ? '^' : op == RR_COPY ? '|' : op == RR_CLEAR ? 'C' : 'I');
        !            89: #endif
        !            90:   
        !            91:   /* currently, only drawing to byte slots is supported... */
        !            92:   if ((srcx & 07) || (dstx & 07) || (w & 07))
        !            93:     panic ("customc_windowmove: odd offset");
        !            94:     
        !            95:   w >>= 3;
        !            96:   while (h--)
        !            97:     {
        !            98:       if (src > dst)
        !            99:        for (i = 0; i < w; i++)
        !           100:          switch (op)
        !           101:            {
        !           102:            case RR_COPY:
        !           103:              dst[i] = src[i];
        !           104:              break;
        !           105:            
        !           106:            case RR_CLEAR:
        !           107:              dst[i] = 0;
        !           108:              break;
        !           109:            
        !           110:            case RR_XOR:
        !           111:              dst[i] ^= src[i];
        !           112:              break;
        !           113:            
        !           114:            case RR_COPYINVERTED:
        !           115:              dst[i] = ~src[i];
        !           116:              break;
        !           117:            }
        !           118:       else
        !           119:        for (i = w - 1; i >= 0; i--)
        !           120:          switch (op)
        !           121:            {
        !           122:            case RR_COPY:
        !           123:              dst[i] = src[i];
        !           124:              break;
        !           125:            
        !           126:            case RR_CLEAR:
        !           127:              dst[i] = 0;
        !           128:              break;
        !           129:            
        !           130:            case RR_XOR:
        !           131:              dst[i] ^= src[i];
        !           132:              break;
        !           133:            
        !           134:            case RR_COPYINVERTED:
        !           135:              dst[i] = ~src[i];
        !           136:              break;
        !           137:            }
        !           138: 
        !           139:          
        !           140:       src += srcmod;
        !           141:       dst += dstmod;
        !           142:     }
        !           143: 
        !           144: }
        !           145: 
        !           146: 
        !           147: customc_putc(ip, c, dy, dx, mode)
        !           148:        register struct ite_softc *ip;
        !           149:         register int dy, dx;
        !           150:        int c, mode;
        !           151: {
        !           152:   register int wrr = ((mode == ATTR_INV) ? RR_COPYINVERTED : RR_COPY);
        !           153:   struct ccfb *fb = (struct ccfb *) ip->priv;
        !           154: 
        !           155:   if (c >= ip->font_lo && c <= ip->font_hi)
        !           156:     {
        !           157:       c -= ip->font_lo;
        !           158: 
        !           159:       customc_windowmove (ip->font, 0, c * ip->ftheight, 1,
        !           160:                          fb->fb, fb->fb_x + dx * ip->ftwidth,
        !           161:                          fb->fb_y + dy * ip->ftheight,
        !           162:                          fb->fb_width >> 3,
        !           163:                          ip->ftheight, ip->ftwidth, wrr);
        !           164:     }
        !           165: }
        !           166: 
        !           167: customc_cursor(ip, flag)
        !           168:        register struct ite_softc *ip;
        !           169:         register int flag;
        !           170: {
        !           171:   struct ccfb *fb = (struct ccfb *) ip->priv;
        !           172: 
        !           173:   if (flag != DRAW_CURSOR)
        !           174:     {
        !           175:       /* erase it */
        !           176:       customc_windowmove (ip->cursor, 0, 0, 1,
        !           177:                          fb->fb, fb->fb_x + ip->cursorx * ip->ftwidth,
        !           178:                          fb->fb_y + ip->cursory * ip->ftheight,
        !           179:                          fb->fb_width >> 3,
        !           180:                          ip->ftheight, ip->ftwidth, RR_XOR);
        !           181:     }
        !           182:   if (flag == DRAW_CURSOR || flag == MOVE_CURSOR)
        !           183:     {
        !           184:       /* draw it */
        !           185:       customc_windowmove (ip->cursor, 0, 0, 1,
        !           186:                          fb->fb, fb->fb_x + ip->curx * ip->ftwidth,
        !           187:                          fb->fb_y + ip->cury * ip->ftheight,
        !           188:                          fb->fb_width >> 3,
        !           189:                          ip->ftheight, ip->ftwidth, RR_XOR);
        !           190:       ip->cursorx = ip->curx;
        !           191:       ip->cursory = ip->cury;
        !           192:     }
        !           193: }
        !           194: 
        !           195: customc_clear(ip, sy, sx, h, w)
        !           196:        struct ite_softc *ip;
        !           197:        register int sy, sx, h, w;
        !           198: {
        !           199:   struct ccfb *fb = (struct ccfb *) ip->priv;
        !           200: 
        !           201:   customc_windowmove (0, 0, 0, 0,
        !           202:                      fb->fb, fb->fb_x + sx * ip->ftwidth,
        !           203:                      fb->fb_y + sy * ip->ftheight,
        !           204:                      fb->fb_width >> 3,
        !           205:                      h * ip->ftheight, w * ip->ftwidth, RR_CLEAR);
        !           206: }
        !           207: 
        !           208: customc_blockmove(ip, sy, sx, dy, dx, h, w)
        !           209:        register struct ite_softc *ip;
        !           210:        int sy, sx, dy, dx, h, w;
        !           211: {
        !           212:   struct ccfb *fb = (struct ccfb *) ip->priv;
        !           213: 
        !           214:   customc_windowmove(fb->fb, fb->fb_x + sx * ip->ftwidth,
        !           215:                     fb->fb_y + sy * ip->ftheight, 
        !           216:                     fb->fb_width >> 3,
        !           217:                     fb->fb, fb->fb_x + dx * ip->ftwidth,
        !           218:                     fb->fb_y + dy * ip->ftheight,
        !           219:                     fb->fb_width >> 3,
        !           220:                     h * ip->ftheight, w * ip->ftwidth, RR_COPY);
        !           221: }
        !           222: 
        !           223: customc_scroll(ip, sy, sx, count, dir)
        !           224:         register struct ite_softc *ip;
        !           225:         register int sy;
        !           226:         int dir, sx, count;
        !           227: {
        !           228:   register int height, dy, i;
        !           229:        
        !           230:   customc_cursor(ip, ERASE_CURSOR);
        !           231: 
        !           232:   if (dir == SCROLL_UP) 
        !           233:     {
        !           234:       dy = sy - count;
        !           235:       height = ip->bottom_margin - sy + 1;
        !           236:       for (i = 0; i < height; i++)
        !           237:        customc_blockmove(ip, sy + i, sx, dy + i, 0, 1, ip->cols);
        !           238:     }
        !           239:   else if (dir == SCROLL_DOWN) 
        !           240:     {
        !           241:       dy = sy + count;
        !           242:       height = ip->bottom_margin - dy + 1;
        !           243:       for (i = (height - 1); i >= 0; i--)
        !           244:        customc_blockmove(ip, sy + i, sx, dy + i, 0, 1, ip->cols);
        !           245:     }
        !           246:   else if (dir == SCROLL_RIGHT) 
        !           247:     {
        !           248:       customc_blockmove(ip, sy, sx, sy, sx + count, 1, ip->cols - (sx + count));
        !           249:     }
        !           250:   else 
        !           251:     {
        !           252:       customc_blockmove(ip, sy, sx, sy, sx - count, 1, ip->cols - sx);
        !           253:     }          
        !           254: }
        !           255: 
        !           256: #endif

unix.superglobalmegacorp.com

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