Annotation of researchv10no/cmd/bcp/sunlib.c, revision 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.