Annotation of researchv10no/cmd/bcp/sunlib.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1989, 1990 AT&T --- All Rights Reserved.              */
                      2: /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T.                */
                      3: /* The copyright notice does not imply actual or intended publication. */
                      4: /* AUTHORS:                                            */
                      5: /*     T. Thompson - ATT-BL HO - first versions        */
                      6: #include <stdio.h>
                      7: #include <sys/types.h>
                      8: #include <sys/stat.h>
                      9: #include <sys/ioctl.h>
                     10: #include <pixrect/pixrect.h>
                     11: #include <pixrect/pixfont.h>
                     12: #include <suntool/sunview.h>
                     13: #include <suntool/canvas.h>
                     14: #include "met.h"
                     15: #include "boole.h"
                     16: #include "Coord.h"
                     17: 
                     18: #define XYSCALE(x,y) (x=(x-obotx)*scx+botx),(y=(y-oboty)*scy+boty)
                     19: 
                     20: struct pixrect *source_pixrect;
                     21: 
                     22: Frame Mainframe;
                     23: Canvas Win;
                     24: int Winfd;
                     25: Pixwin *Pw;
                     26: int Key = -1;
                     27: int Mousex;
                     28: int Mousey;
                     29: int Colorval;
                     30: 
                     31: /* CMAPSIZE MUST BE A POWER OF 2 (restriction in sun colormap stuff)*/
                     32: #define CMAPSIZE 8
                     33: 
                     34: #define DEFAULTCOLOR (CMAPSIZE-1)
                     35: 
                     36: #define S_WHITE 0
                     37: #define S_RED 1
                     38: #define S_GREEN 2
                     39: #define S_BLUE 3
                     40: #define S_GREY 4
                     41: #define S_AQUA 5
                     42: #define S_YELLOW 6
                     43: #define S_BLACK 7
                     44: 
                     45: int mycolors[CMAPSIZE][3] = {
                     46:        255, 255, 255,  /* white */
                     47:        230, 0, 75,     /* red */
                     48:        0, 200, 0,      /* green */
                     49:        0, 0, 200,      /* blue */
                     50:        200, 200, 200,  /* grey */
                     51:        0, 160, 170,    /* aqua */
                     52:        250, 220, 0,    /* yellow */
                     53:        0,0,0           /* foreground (black) */
                     54: };
                     55: 
                     56: 
                     57: void domouse();
                     58: 
                     59: extern int Debug;
                     60: 
                     61: extern event_proc();
                     62: 
                     63: static int
                     64:        boty = 32767,           /* screen bottom y */
                     65:        botx = 0,                       /* screen bottom x */
                     66:        topx = 32767,           /* screen top x */
                     67:        topy = 0,                       /* screen top y */
                     68:        oboty = 0,                      /* user's bottom y */
                     69:        obotx = 0,                      /* user's bottom x */
                     70:        otopy = 32767,          /* user's top y */
                     71:        otopx = 32767;          /* user's top x */
                     72: 
                     73: static double
                     74:        scx = 1.0,                      /* scale factor x */
                     75:        scy = 1.0                       /* scale factor y */
                     76: ;
                     77: static int lastx = 0;
                     78: static int lasty = 0;
                     79: static int lmode = 3;          /* drawing mode (default is xor)*/
                     80: 
                     81: int Prevlmode = 3;
                     82: 
                     83: #define signof(x) ((x)>=0.0?(1):(-1))
                     84: #define absof(x) ((x)>=0.0?(x):(-x))
                     85: 
                     86: void flushout() { }
                     87: 
                     88: short bsy_pixrect_data[] = {
                     89: /* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
                     90:  */
                     91:        0x7FFE,0x4002,0x200C,0x1A38,0x0FF0,0x07E0,0x03C0,0x0180,
                     92:        0x0180,0x0240,0x0520,0x0810,0x1108,0x23C4,0x47E2,0x7FFE
                     93: };
                     94: mpr_static(busy_pixrect, 16, 16, 1, bsy_pixrect_data);
                     95: 
                     96: int childpid;
                     97: 
                     98: Rect sweeparect();
                     99: 
                    100: om_open()
                    101: {
                    102:        Rect r;
                    103: 
                    104:        r = sweeparect();
                    105: 
                    106:        notify_errno = NOTIFY_OK;
                    107: 
                    108:        Mainframe = window_create((Window)NULL, FRAME,
                    109:                FRAME_LABEL, "ocr",
                    110:                0 );
                    111:        Win = window_create(Mainframe, CANVAS, 0);
                    112:         Pw = canvas_pixwin(Win);
                    113: 
                    114:        window_set(Mainframe, WIN_X, r.r_left,
                    115:                        WIN_Y, r.r_top, 0);
                    116:        window_set(Win, WIN_WIDTH, r.r_width,
                    117:                        WIN_HEIGHT, r.r_height, 0);
                    118: 
                    119:        window_fit(Win);
                    120:        window_fit(Mainframe);
                    121: 
                    122:        window_set(Mainframe, WIN_SHOW, TRUE, 0);
                    123: 
                    124:        Winfd = (int) window_get(Win, WIN_FD);
                    125: 
                    126:        if ( notify_errno != NOTIFY_OK ) {
                    127:                notify_perror("ocr");
                    128:                exit(1);
                    129:        }
                    130: 
                    131:        setcolormap();
                    132: 
                    133:        set_color(DEFAULTCOLOR);
                    134:        linemod("solid");
                    135: 
                    136:        window_set(Win,
                    137:                WIN_CONSUME_PICK_EVENTS,
                    138:                        WIN_NO_EVENTS,
                    139:                        WIN_ASCII_EVENTS,
                    140:                        WIN_MOUSE_BUTTONS,
                    141:                        LOC_MOVE,
                    142:                        /* LOC_DRAG, */
                    143:                        LOC_WINEXIT, LOC_WINENTER,
                    144:                        LOC_RGNEXIT, LOC_RGNENTER, 0,
                    145:                0);
                    146: 
                    147:        window_set(Win, WIN_EVENT_PROC, event_proc, 0);
                    148: 
                    149:        space(0,0,M_WID,M_HGT);
                    150:        interact();
                    151: }
                    152: 
                    153: /***********************************************************/
                    154: /* The code below was taken from the 'dumpregion' program. */
                    155: /***********************************************************/
                    156: 
                    157: /*
                    158:  * Copyright Richard Tobin 1987.  You may freely copy, modify and distribute
                    159:  * this program in source form provided this comment remains intact.
                    160:  *
                    161:  * Richard Tobin,                    JANET: [email protected]             
                    162:  * AI Applications Institute,        ARPA:  R.Tobin%[email protected]
                    163:  * Edinburgh University.             UUCP:  ...!ukc!ed.ac.uk!R.Tobin
                    164:  */
                    165: 
                    166: #include <sys/file.h>
                    167: #include <suntool/fullscreen.h>
                    168: 
                    169: short nwdata[] = {
                    170: #include </usr/include/images/stretchNW.cursor>
                    171: };
                    172: mpr_static(nwpixrect, 16, 16, 1, nwdata);
                    173: 
                    174: short sedata[] = {
                    175: #include </usr/include/images/stretchSE.cursor>
                    176: };
                    177: mpr_static(sepixrect, 16, 16, 1, sedata);
                    178: 
                    179: Rect rect = {0,0,0,0};
                    180: 
                    181: Rect
                    182: sweeparect()
                    183: {
                    184:     int wfd, n;
                    185:     struct fullscreen *fs;
                    186:     Event event;
                    187:     Pixwin *pw;
                    188:     int left, right, top, bottom, temp;
                    189:     Window win;
                    190:     double w;
                    191:     Rect r;
                    192: 
                    193:     win = window_create(0, FRAME,
                    194:                        FRAME_OPEN_RECT, &rect,
                    195:                        WIN_CONSUME_PICK_EVENTS,
                    196:                        WIN_ASCII_EVENTS,
                    197:                         LOC_MOVE, WIN_MOUSE_BUTTONS, 0,
                    198:                        0);
                    199: 
                    200:     wfd = (int)window_get(win, WIN_FD);
                    201:     fs = fullscreen_init(wfd);
                    202:     pw = fs->fs_pixwin;
                    203: 
                    204:     window_set(win,
                    205:               WIN_CURSOR, cursor_create(CURSOR_IMAGE, &nwpixrect,
                    206:                                         CURSOR_XHOT, 0, CURSOR_YHOT, 0,
                    207:                                         0),
                    208:               0);
                    209: 
                    210:     for ( ;; ) {
                    211:        n = window_read_event(win, &event);
                    212:        if ( n < 0 )
                    213:                continue;
                    214:        if ( event_is_ascii(&event) ) {
                    215:                if ( event_id(&event) == 'F' ) {
                    216:                        r.r_left = 10;
                    217:                        r.r_top = 10;
                    218:                        r.r_width = 900;
                    219:                        r.r_height = 900;
                    220:                }
                    221:                else {
                    222:                        r.r_left = 542;
                    223:                        r.r_top = 0;
                    224:                        r.r_width = 540;
                    225:                        r.r_height = 512;
                    226:                }
                    227:                goto getout;
                    228:        }
                    229:        if ( event_is_down(&event) && event_is_button(&event) )
                    230:                break;
                    231:     }
                    232: 
                    233:     right = left = event_x(&event);
                    234:     bottom = top = event_y(&event);
                    235: 
                    236:     window_set(win,
                    237:               WIN_CURSOR, cursor_create(CURSOR_IMAGE, &sepixrect,
                    238:                                         CURSOR_XHOT, 15, CURSOR_YHOT, 15,
                    239:                                         0),
                    240:               0);
                    241: 
                    242:     drawbox(pw, left, top, right, bottom);
                    243: 
                    244:     while(window_read_event(win, &event) == -1 ||
                    245:          !event_is_up(&event) ||
                    246:          !event_is_button(&event))
                    247:     {
                    248:        drawbox(pw, left, top, right, bottom);
                    249:        right = event_x(&event);
                    250:        bottom = event_y(&event);
                    251:        drawbox(pw, left, top, right, bottom);
                    252:     }
                    253: 
                    254:     drawbox(pw, left, top, right, bottom);
                    255: 
                    256:     if(right < left)
                    257:     {
                    258:        temp = right;
                    259:        right = left;
                    260:        left = temp;
                    261:     }
                    262:     if(bottom < top)
                    263:     {
                    264:        temp = bottom;
                    265:        bottom = top;
                    266:        top = temp;
                    267:     }
                    268:     r.r_left = left;
                    269:     r.r_top = top;
                    270:     r.r_width = (right-left);
                    271:     r.r_height = (bottom-top);
                    272: getout:
                    273:     fullscreen_destroy(fs);
                    274: 
                    275:     window_set(win, FRAME_NO_CONFIRM, TRUE, 0);
                    276:     window_destroy(win);
                    277:     return r;
                    278: }
                    279: 
                    280: drawbox(pw, left, top, right, bottom)
                    281: Pixwin *pw;
                    282: int left, top, right, bottom;
                    283: {
                    284:     fullscreen_pw_vector(pw, left, top, right, top, PIX_NOT(PIX_DST), 0);
                    285:     fullscreen_pw_vector(pw, right, top, right, bottom, PIX_NOT(PIX_DST), 0);
                    286:     fullscreen_pw_vector(pw, right, bottom, left, bottom, PIX_NOT(PIX_DST), 0);
                    287:     fullscreen_pw_vector(pw, left, bottom, left, top, PIX_NOT(PIX_DST), 0);
                    288: }
                    289: 
                    290: ttygets(buff,len)
                    291: char *buff;
                    292: {
                    293:        int x, y, n, key;
                    294:        char *p = buff;
                    295: 
                    296:        for ( n=0; n<(len-1); n++ ) {
                    297:                while ( (key=mouseorkey(&x,&y)) < 0 )
                    298:                        ;
                    299:                if ( key == '\r' )      /* just in case */
                    300:                        key = '\n';
                    301:                *p++ = key;
                    302:                if ( key == '\n' || key == '\0' )
                    303:                        break;
                    304:        }
                    305:        *p++ = '\0';
                    306: }
                    307: 
                    308: int mouseorkey(x,y)
                    309: int* x;
                    310: int* y;
                    311: {
                    312:        Event anevent;
                    313:        char c;
                    314:        int n;
                    315: 
                    316:        Key = -1;
                    317: 
                    318:        notify_do_dispatch();
                    319:        n = read(0,&c,1);
                    320:        notify_no_dispatch();
                    321:        if ( n == 1 ) {
                    322:                /* character was typed in text (original) window */
                    323:                /* ie. stdin */
                    324:                Key = c;
                    325:                *x = Mousex;
                    326:                *y = Mousey;
                    327:                xyunscale(x,y);
                    328:        }
                    329:        else if ( Key >= 0 ) {
                    330:                /* character was typed in graphics window */
                    331:                /* so it must be echoed. */
                    332:                putchar(Key);
                    333:                if ( Key == '\r' )
                    334:                        putchar('\n');
                    335:                fflush(stdout);
                    336:                *x = Mousex;
                    337:                *y = Mousey;
                    338:                xyunscale(x,y);
                    339:        }
                    340:        return(Key);
                    341: }
                    342: 
                    343: interact()
                    344: {
                    345:        (void) notify_dispatch();
                    346: }
                    347: 
                    348: setcolormap()
                    349: {
                    350:        u_char red[CMAPSIZE], green[CMAPSIZE], blue[CMAPSIZE];
                    351:        int n;
                    352: 
                    353:        for(n=0;n<CMAPSIZE;n++) {
                    354:                red[n] = mycolors[n][0];
                    355:                green[n] = mycolors[n][1];
                    356:                blue[n] = mycolors[n][2];
                    357:        }
                    358:         pw_setcmsname(Pw,"showcolor");
                    359:         pw_putcolormap(Pw, 0, CMAPSIZE, red, green, blue);
                    360: }
                    361: 
                    362: /*ARGSUSED*/
                    363: wait_proc(window,event,arg)
                    364: Window window;
                    365: Event *event;
                    366: caddr_t arg;
                    367: {
                    368:        int id = event_id(event);
                    369: 
                    370:        if ( event_is_ascii(event) && id == 'q' )
                    371:                notify_stop(0);
                    372: }
                    373: 
                    374: om_close()
                    375: {
                    376:        window_set(Win, WIN_EVENT_PROC, wait_proc, 0);
                    377:        if ( fork() == 0 ) {
                    378:                close(0);
                    379:                close(1);
                    380:                close(2);
                    381:                /* This stuff doesn't seem to work.  I'm trying to */
                    382:                /* get the window to be able to repaint itself when */
                    383:                /* uncovered.  */
                    384:                sleep(1);
                    385:                window_main_loop(Mainframe);
                    386:                exit(0);
                    387:        }
                    388: }
                    389: 
                    390: space(x0,y0,x1,y1)
                    391: int x0, y0, x1, y1;
                    392: {
                    393:        int tx, ty;
                    394: 
                    395:        obotx = x0;
                    396:        oboty = y0;
                    397:        otopx = x1;
                    398:        otopy = y1;
                    399: 
                    400:         boty = 0;
                    401:         botx = 0;
                    402:         tx = (int) window_get(Win,WIN_WIDTH);
                    403:         ty = (int) window_get(Win,WIN_HEIGHT); 
                    404:         topx = tx;
                    405:         topy = ty;
                    406:         scx = (double)(topx-botx)/(otopx-obotx);
                    407:         scy = (double)(topy-boty)/(otopy-oboty);
                    408: }
                    409: 
                    410: #ifdef OLDSTUFF
                    411: xyscale(x, y)
                    412: int *x, *y;
                    413: {
                    414:         *x = (*x-obotx)*scx+botx;
                    415:         *y = (*y-oboty)*scy+boty;
                    416: }
                    417: #endif
                    418: 
                    419: xyunscale(x, y)
                    420: int *x, *y;
                    421: {
                    422:        /* map from device coordinates to space() coordinates */
                    423: 
                    424:        *x = ( (*x - botx)/scx + obotx );
                    425:        *y = ( (*y - boty)/scy + oboty );
                    426: }
                    427: 
                    428: wline(x1,y1,x2,y2)
                    429: int x1, y1, x2, y2;
                    430: {
                    431:        lastx = x2;
                    432:        lasty = y2;
                    433: 
                    434:        XYSCALE(x1, y1);
                    435:        XYSCALE(x2, y2);
                    436: 
                    437:        arawline(x1,y1,x2,y2);
                    438: }
                    439: 
                    440: wrect(x1,y1,x2,y2)
                    441: int x1, y1, x2, y2;
                    442: {
                    443:        lastx = x2;
                    444:        lasty = y2;
                    445: 
                    446:        XYSCALE(x1, y1);
                    447:        XYSCALE(x2, y2);
                    448: 
                    449:        arawbox(x1,y1,x2,y2);
                    450: }
                    451: 
                    452: arawbox(x1,y1,x2,y2)
                    453: int x1, y1, x2, y2;
                    454: {
                    455:        arawline(x1,y1,x2,y1);
                    456:        arawline(x2,y1,x2,y2);
                    457:        arawline(x2,y2,x1,y2);
                    458:        arawline(x1,y2,x1,y1);
                    459: }
                    460: 
                    461: arawline(x1,y1,x2,y2)
                    462: int x1, y1, x2, y2;
                    463: {
                    464:        int op, col;
                    465: 
                    466:        currentopcol(&op,&col);
                    467: /* fprintf(stderr,"calling pw_vector, %d,%d  %d,%d  currentop=%d  Colorval=%d  Pw=%ld\n",x1,y1,x2,y2,op,col,Pw); */
                    468:        pw_vector(Pw, (int)x1,(int)y1, (int)x2,(int)y2, op, col);
                    469:        interact();
                    470: }
                    471: 
                    472: currentopcol(aop,acol)
                    473: int *aop, *acol;
                    474: {
                    475:        if ( lmode == 1 && Colorval == S_WHITE ) {
                    476:                *aop = (PIX_NOT(PIX_SRC) & PIX_DST);
                    477:                *acol = S_BLACK;
                    478:        }
                    479:        else {
                    480:                *acol = Colorval;
                    481:                switch (lmode) {
                    482:                case 0:
                    483:                        *aop = (PIX_NOT(PIX_SRC) & PIX_DST);
                    484:                        break;
                    485:                case 1:
                    486:                case 2:
                    487:                        /* *aop = (PIX_SRC | PIX_DST); */
                    488:                        *aop = PIX_SRC;
                    489:                        break;
                    490:                case 3:
                    491:                        *aop = (PIX_SRC ^ PIX_DST);
                    492:                        break;
                    493:                default:
                    494:                        *aop = (PIX_SRC | PIX_DST);
                    495:                        break;
                    496:                }
                    497:        }
                    498: }
                    499: 
                    500: wt(s,scl,left,top,right,bot)
                    501: char *s;
                    502: {
                    503:        int op, col;
                    504: /* fprintf(stderr,"wt() called, s=%s  lastxy=%d,%d  scl=%d  left-top=%d,%d\n",
                    505: s,left,top,scl,left,top); */
                    506:        currentopcol(&op,&col);
                    507:        XYSCALE(left, top);
                    508:        pw_ttext(Pw,(int)left,(int)top,op,NULL,s);
                    509: }
                    510: 
                    511: Sp *
                    512: set_font(n)
                    513: {
                    514:        static Sp chsz;
                    515:        struct pr_size prs;
                    516:        int x, y;
                    517: 
                    518:        prs = pf_textwidth(1,pf_default(),"x");
                    519:        x = prs.x;
                    520:        y = prs.y;
                    521:        xyunscale(&x,&y);
                    522:        chsz.x = ++x;
                    523:        chsz.y = y;
                    524:        return &chsz;
                    525: }
                    526: 
                    527: #ifdef OLDSTUFF
                    528: textwidth(s)
                    529: {
                    530:        struct pr_size prs;
                    531: 
                    532:        prs = pf_textwidth(bound,strlen(s),pf_default(),s);
                    533: 
                    534:        
                    535:        prs = pf_textwidth(1,pf_default(),"x");
                    536:        *ax = prs.x;
                    537:        *ay = prs.y;
                    538:        xyunscale(ax,ay);
                    539: }
                    540: #endif
                    541: 
                    542: amove(x,y)
                    543: int x,y;
                    544: {
                    545:        lastx = x;
                    546:        lasty = y;
                    547: }
                    548: 
                    549: cont(x,y)
                    550: int x,y;
                    551: {
                    552:        wline(lastx,lasty,x,y);
                    553:        /* last[xy] are then updated by line */
                    554: }
                    555: 
                    556: 
                    557: set_color(n)
                    558: int n;
                    559: {
                    560:        switch(n){
                    561:        case M_WHITE:
                    562:                n = S_WHITE; break;
                    563:        case M_PALE_GREY:
                    564:        case M_GREY_7:
                    565:                n = S_GREY; break;
                    566:        case M_BLACK:
                    567:                n = S_BLACK; break;
                    568:        case M_YELLOW_13:
                    569:        case M_YELLOW_11:
                    570:                n = S_YELLOW; break;
                    571:        case M_MAGENTA:
                    572:        case M_CYAN:
                    573:        case M_CYAN_14:
                    574:                n = S_AQUA; break;
                    575:        case M_GREEN:
                    576:        case M_GREEN_7:
                    577:                n = S_GREEN; break;
                    578:        case M_BLUE:
                    579:                n = S_BLUE; break;
                    580:        case M_RED:
                    581:                n = S_RED; break;
                    582:        default:
                    583:                fprintf(stderr,"Unknown color in set_color (%d)\n",n);
                    584:                n = S_WHITE;
                    585:                break;
                    586:        }
                    587:        Colorval = n;
                    588: /* fprintf(stderr,"set_color = (sun#) %d\n",n); */
                    589: }
                    590: 
                    591: linemod(s)
                    592: char *s;
                    593: {
                    594:        if ( strcmp(s,"erase")==0 )
                    595:                lmode = 0;
                    596:        else if ( strcmp(s,"dotted")==0 || strcmp(s,"hilight")==0 )
                    597:                lmode = 2;
                    598:        else if ( strcmp(s,"xor")==0 )
                    599:                lmode = 3;
                    600:        else { /* everything, including "solid" defaults to this */
                    601:                lmode = 1;
                    602:        }
                    603: }
                    604: 
                    605: aerase()
                    606: {
                    607:        pw_writebackground(Pw,0,0,(int)topx,(int)topy,PIX_SRC);
                    608: }
                    609: 
                    610: wfrect(x1,y1,x2,y2)
                    611: int x1, y1, x2, y2;
                    612: {
                    613:        int op, col;
                    614:        int t;
                    615: 
                    616:        XYSCALE(x1, y1);
                    617:        XYSCALE(x2, y2);
                    618: 
                    619:        currentopcol(&op,&col);
                    620: 
                    621:        if ( x1 > x2 ) {
                    622:                t = x1;
                    623:                x1 = x2;
                    624:                x2 = t;
                    625:        }
                    626:        if ( y1 > y2 ) {
                    627:                t = y1;
                    628:                y1 = y2;
                    629:                y2 = t;
                    630:        }
                    631: /* fprintf(stderr,"wfrect(%d,%d to %d,%d  lmode=%d op=%d col=%d)\n",
                    632: x1,y1,x2,y2,lmode,op,col); */
                    633:        for ( t=y1; t<=y2; t++ ) {
                    634:                pw_vector(Pw, x1,t, x2,t, op, col);
                    635:        }
                    636:        interact();
                    637: }
                    638: 
                    639: /*ARGSUSED*/
                    640: event_proc(window,event,arg)
                    641: Window window;
                    642: Event *event;
                    643: caddr_t arg;
                    644: {
                    645:        int id = event_id(event);
                    646: 
                    647:        if ( event_is_ascii(event) ) {
                    648:                Key = id;
                    649:                notify_stop(0);
                    650:                return;
                    651:        }
                    652: }
                    653: 
                    654: /* trim a Metheus X coordinate to fit on screen */
                    655: int M_trimX(x)
                    656:        int x;
                    657: {      if(x<0) return(0);
                    658:        else if(x>(topx-1)) return((topx-1));
                    659:        return(x);
                    660:        }
                    661: 
                    662: /* trim a Metheus Y coordinate to fit on screen */
                    663: int M_trimY(y)
                    664:        int y;
                    665: {      if(y<0) return(0);
                    666:        else if(y>(topy-1)) return((topy-1));
                    667:        return(y);
                    668:        }
                    669: 
                    670: /* show Sp (Metheus coordinates) on Metheus,
                    671:    enlarged to a `dot'-sided square */
                    672: sh_Mp(mpp,dot)
                    673:        Sp *mpp;
                    674:        int dot;
                    675: {      int half_dot;
                    676:        if(dot==1)
                    677:           wfrect(mpp->x,mpp->y,mpp->x,mpp->y);
                    678:        else {
                    679:                half_dot=dot/2;
                    680:                if((dot%2)==0)
                    681:                        wfrect( M_trimX(mpp->x-half_dot+1),
                    682:                                M_trimY(mpp->y-half_dot+1),
                    683:                                M_trimX(mpp->x+half_dot),
                    684:                                M_trimY(mpp->y+half_dot) );
                    685:                else    wfrect( M_trimX(mpp->x-half_dot),
                    686:                                M_trimY(mpp->y-half_dot),
                    687:                                M_trimX(mpp->x+half_dot),
                    688:                                M_trimY(mpp->y+half_dot) );
                    689:                };
                    690:        }
                    691: 
                    692: 
                    693: om_force(){}
                    694: 
                    695: /* write "thick" line, two pixels wide */
                    696: wtline(x1,y1,x2,y2)
                    697: {   int absdx, absdy;
                    698:        wline(x1,y1,x2,y2);
                    699:        absdx = (x1-x2)>=0 ? x1-x2 : x2-x1;
                    700:        absdy = (y1-y2)>=0 ? y1-y2 : y2-y1;
                    701:        if(absdx>absdy)
                    702:                /* more horizontal -- thicken vertically */
                    703:                wline(x1,M_trimY(y1+1),x2,M_trimY(y2+1));
                    704:        else
                    705:                /* more vertical -- thicken horizontally */
                    706:                wline(M_trimX(x1+1),y1,M_trimX(x2+1),y2);
                    707: }
                    708: 
                    709: /* write "fat" line, three pixels wide */
                    710: wfline(x1,y1,x2,y2)
                    711: {      register int absdx, absdy;
                    712: 
                    713:        wline(x1,y1,x2,y2);
                    714:        absdx = (x1-x2)>=0 ? x1-x2 : x2-x1;
                    715:        absdy = (y1-y2)>=0 ? y1-y2 : y2-y1;
                    716:        if(absdx>absdy) {
                    717:                /* more horizontal -- thicken vertically */
                    718:                wline(x1,M_trimY(y1+1),x2,M_trimY(y2+1));
                    719:                wline(x1,M_trimY(y1-1),x2,M_trimY(y2-1));
                    720:                }
                    721:        else    {
                    722:                /* more vertical -- thicken horizontally */
                    723:                wline(M_trimX(x1+1),y1,M_trimX(x2+1),y2);
                    724:                wline(M_trimX(x1-1),y1,M_trimX(x2-1),y2);
                    725:                };
                    726: }
                    727: 
                    728: 
                    729: om_wrpix()
                    730: {
                    731:         printf("om_wrpix called\n");
                    732: }
                    733: 
                    734: om_buffer(n) { }
                    735: 
                    736: rreset() { }

unix.superglobalmegacorp.com

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