Annotation of researchv9/X11/src/X.V11R1/clients/xcalc/sr.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *     $Source: /@/orpheus/u1/X11/clients/xcalc/RCS/sr.c,v $
        !             3:  *     $Header: sr.c,v 1.2 87/09/11 01:50:21 newman Exp $
        !             4:  */
        !             5: 
        !             6: #ifndef lint
        !             7: static char *rcsid_sr_c = "$Header: sr.c,v 1.2 87/09/11 01:50:21 newman Exp $";
        !             8: #endif lint
        !             9: 
        !            10: /* Slide Rule */
        !            11: 
        !            12: #include <stdio.h>
        !            13: #include <math.h>
        !            14: #include <strings.h>
        !            15: #include <signal.h>
        !            16: #include <X11/Xlib.h>
        !            17: #include <X11/Xutil.h>
        !            18: #include <X11/cursorfont.h>
        !            19: #include <sys/time.h>
        !            20: 
        !            21: 
        !            22: #define SLIDETOP       26
        !            23: #define SLIDEHIGH      38
        !            24: #define WIDTH          800
        !            25: #define HEIGHT         100
        !            26: #define START          70
        !            27: #define END            20
        !            28: #define LABEL          55
        !            29: #define MAXWIDTH       32766
        !            30: 
        !            31: #define FOFFSET                3
        !            32: #define MAJORH         10
        !            33: #define MIDDH          7
        !            34: #define MINORH         4
        !            35: #define HALVES         5
        !            36: #define FIFTHS         15
        !            37: #define TENTHS         40
        !            38: #define LABELFIFTH     41
        !            39: #define LABELTENTHS    200
        !            40: #define LABELSPACE     20
        !            41: 
        !            42: #define LSCALEH                2
        !            43: #define ASCALEH                16
        !            44: #define BSCALEH                0
        !            45: #define CISCALEH       14
        !            46: #define CSCALEH                28
        !            47: #define DSCALEH                66
        !            48: #define DISCALEH       84
        !            49: 
        !            50: extern Display *dpy;
        !            51: Window slidewid,hairlwid,blackwid;
        !            52: extern Window theWindow,dispwid;
        !            53: extern XFontStruct *kfontinfo;
        !            54: Font   scalefont, sscalefont;
        !            55: extern Pixmap stipplePix,regBorder,dimBorder,IconPix;
        !            56: Pixmap slidePix = NULL;
        !            57: Pixmap framePix = NULL;
        !            58: extern Cursor  arrow;
        !            59: GC     sgc, cgc;
        !            60: int    height,scalelen,width,fheight,foffset;
        !            61: int    xo,hx,xm;
        !            62: extern int ForeColor,BackColor;
        !            63: double log2;
        !            64: extern short check_bits[];
        !            65: 
        !            66: 
        !            67: 
        !            68: /**************/
        !            69: do_sr(argc, argv, geom, border)
        !            70: /**************/
        !            71: char   **argv;
        !            72: char   *geom;
        !            73: int    border;
        !            74: {
        !            75:     char def_geom[32];
        !            76: 
        !            77:     XSizeHints szhint;
        !            78:     XEvent event;
        !            79:     XGCValues gcv;
        !            80: 
        !            81:     /* figure out sizes of keypad and display */
        !            82: 
        !            83:     sscalefont = scalefont = kfontinfo->fid;
        !            84:     fheight = kfontinfo->max_bounds.ascent + FOFFSET;
        !            85:     foffset = kfontinfo->max_bounds.ascent;
        !            86: 
        !            87:     /* Open the main window. */
        !            88:     width = WIDTH;
        !            89:     scalelen = width - START - END;
        !            90:     height = HEIGHT;
        !            91:     xo = -1;
        !            92:     hx = width/2;
        !            93:     log2 = log10(2.0);
        !            94: 
        !            95:     sprintf (def_geom, "=%dx%d+0-0", width, height);
        !            96:     if (geom == NULL) {
        !            97:       geom = (char *) malloc(24);
        !            98:       sprintf(geom, "=%dx%d", width, height);
        !            99:     }
        !           100: 
        !           101:     theWindow = XCreateSimpleWindow(dpy, RootWindow(dpy, DefaultScreen(dpy)),
        !           102:                                    0, 0, START+END+2, height, border,
        !           103:                                    ForeColor, BackColor);
        !           104: 
        !           105:     szhint.flags = PSize|PMinSize;
        !           106:     szhint.width = szhint.min_width = WIDTH;
        !           107:     szhint.height = szhint.min_height = HEIGHT;
        !           108:     XSetStandardProperties(dpy, theWindow, "Slide Rule", NULL, IconPix,
        !           109:                           argv, argc, &szhint);
        !           110: 
        !           111:     blackwid = XCreateSimpleWindow(dpy, theWindow,
        !           112:                                   0,SLIDETOP,WIDTH,SLIDEHIGH+2,0,
        !           113:                                   BackColor,ForeColor);
        !           114:     XSetWindowBackgroundPixmap(dpy, blackwid, stipplePix);
        !           115: 
        !           116:     slidewid = XCreateSimpleWindow(dpy, theWindow,
        !           117:                                   -1,SLIDETOP,WIDTH,SLIDEHIGH,1,
        !           118:                                   ForeColor, BackColor);
        !           119:     hairlwid = XCreateSimpleWindow(dpy, theWindow,
        !           120:                                   WIDTH/2,0,1,height,0,
        !           121:                                   BackColor, ForeColor);
        !           122:     dispwid = XCreateSimpleWindow(dpy, theWindow,
        !           123:                                  0, 0, START-END, HEIGHT,1,
        !           124:                                  ForeColor, BackColor);
        !           125: 
        !           126:     gcv.foreground = ForeColor;
        !           127:     gcv.background = BackColor;
        !           128:     gcv.font = scalefont;
        !           129:     sgc = XCreateGC(dpy, theWindow, GCForeground|GCBackground|GCFont, &gcv);
        !           130:     gcv.foreground = BackColor;
        !           131:     gcv.background = ForeColor;
        !           132:     cgc = XCreateGC(dpy, theWindow, GCForeground|GCBackground|GCFont, &gcv);
        !           133: 
        !           134: #define STDEVENTS      ExposureMask|EnterWindowMask|LeaveWindowMask
        !           135: #define BUTEVENTS      ButtonPressMask|ButtonReleaseMask
        !           136: #define MOVEVENTS      Button1MotionMask|Button2MotionMask|Button3MotionMask
        !           137:     XSelectInput(dpy, theWindow, STDEVENTS|BUTEVENTS|MOVEVENTS);
        !           138:     XSelectInput(dpy, hairlwid,  STDEVENTS);
        !           139:     XSelectInput(dpy, dispwid,   STDEVENTS);
        !           140:     XSelectInput(dpy, slidewid,  STDEVENTS|BUTEVENTS|MOVEVENTS);
        !           141:     XSelectInput(dpy, blackwid,  STDEVENTS|BUTEVENTS);
        !           142: 
        !           143:     XMapWindow    (dpy, theWindow);
        !           144:     XMapSubwindows(dpy, theWindow);
        !           145:     arrow=XCreateFontCursor(dpy, XC_hand2);
        !           146:     XDefineCursor (dpy, theWindow, arrow);
        !           147: 
        !           148: 
        !           149:     /**************** Main loop *****************/
        !           150: 
        !           151:     while (1) {
        !           152:         Window wind,mwid;
        !           153:        int     dummy, w;
        !           154: 
        !           155:         XNextEvent(dpy, &event);
        !           156: 
        !           157:         switch (event.type) {
        !           158: 
        !           159:         case Expose: {
        !           160:            XExposeEvent *exp_event = (XExposeEvent *) &event;
        !           161:             wind = exp_event->window;
        !           162: 
        !           163:             if (wind==theWindow) {
        !           164:                XGetGeometry(dpy, theWindow, &mwid, &dummy, &dummy, &w, &dummy,
        !           165:                             &dummy, &dummy);
        !           166:                if (width != w) {
        !           167:                    rescale(w);
        !           168:                    break;
        !           169:                }
        !           170:                redrawframe(exp_event->x, exp_event->y, exp_event->width,
        !           171:                            exp_event->height);
        !           172:            } else if (wind==slidewid)
        !           173:              redrawslide(exp_event->x, exp_event->y, exp_event->width,
        !           174:                          exp_event->height);
        !           175:             else if (wind==hairlwid)
        !           176:              drawhairl();
        !           177:            else if (wind==blackwid)
        !           178:              XClearWindow(dpy, blackwid, exp_event->x, exp_event->y,
        !           179:                           exp_event->width, exp_event->height, 0);
        !           180:            else if (wind==dispwid)
        !           181:              drawnums();
        !           182:             break;
        !           183:        }
        !           184:         case ButtonPress: {
        !           185:             XButtonPressedEvent *but_event = (XButtonPressedEvent *) &event;
        !           186: 
        !           187:             mwid = wind = but_event->window;
        !           188:            if (wind == slidewid || wind == blackwid) {
        !           189:                switch (but_event->button & 0xff) {
        !           190:                case Button1:
        !           191:                    xo = (wind==slidewid?xo:0) + but_event->x - START;
        !           192:                    break;
        !           193:                case Button2:
        !           194:                    if (but_event->state & ShiftMask)
        !           195:                      exit(0);
        !           196:                    if (wind == slidewid)
        !           197:                      xm = but_event->x;
        !           198:                    break;
        !           199:                case Button3:
        !           200:                    if (but_event->state & ShiftMask)
        !           201:                      exit(0);
        !           202:                    xo = (wind==slidewid?xo:0) + but_event->x + END - width;
        !           203:                    break;
        !           204:                }
        !           205:                XMoveWindow(dpy, slidewid, xo - 1, SLIDETOP);
        !           206:                drawnums();
        !           207:                break;
        !           208:            }
        !           209:            if (wind == theWindow) {
        !           210:                switch (but_event->button & 0xff) {
        !           211:                case Button1:
        !           212:                    hx = but_event->x;
        !           213:                    break;
        !           214:                case Button2:
        !           215:                    if (but_event->state & ShiftMask)
        !           216:                      exit(0);
        !           217:                    if (width*2 < MAXWIDTH)
        !           218:                      rescale(width*2);
        !           219:                    break;
        !           220:                case Button3:
        !           221:                    rescale(width/2);
        !           222:                }
        !           223:                drawhairl();
        !           224:                drawnums();
        !           225:                break;
        !           226:            }
        !           227:             break;
        !           228:          }
        !           229:        case MotionNotify: {
        !           230:             XPointerMovedEvent *mov_event = (XPointerMovedEvent *) &event;
        !           231:            int x, y, newx, dummy, mask;
        !           232:            Window mwid;
        !           233: 
        !           234:             wind = mwid;
        !           235:            XQueryPointer(dpy, theWindow, &mwid, &mwid, &x, &y, &dummy, &dummy,
        !           236:                          &mask);
        !           237:            while (XPending(dpy) && (XPeekEvent(dpy, &event),
        !           238:                   (event.type == MotionNotify)))
        !           239:              XNextEvent(dpy, &event);
        !           240:            if (wind == slidewid) {
        !           241:                if (mask & Button1Mask)
        !           242:                  newx = x - START;
        !           243:                else if (mask & Button2Mask)
        !           244:                  newx = x + END - width;
        !           245:                else
        !           246:                  newx = x - xm;
        !           247:                if (newx != xo) {
        !           248:                    xo = newx;
        !           249:                    XMoveWindow(dpy, slidewid, xo, SLIDETOP);
        !           250:                    drawnums();
        !           251:                }
        !           252:            } else if (wind == theWindow) {
        !           253:                if (mask & Button1Mask) {
        !           254:                    newx = x;
        !           255:                    if (newx != hx) {
        !           256:                        hx = newx;
        !           257:                        drawhairl();
        !           258:                        drawnums();
        !           259:                    }
        !           260:                }
        !           261:            }
        !           262:            break;
        !           263:          }
        !           264:        case ButtonRelease:
        !           265:            break;
        !           266:        case EnterNotify:
        !           267:        case LeaveNotify: {
        !           268:            XCrossingEvent *cross_event = (XCrossingEvent *) &event;
        !           269: 
        !           270:            if (event.type == EnterNotify)
        !           271:              XSetWindowBorder(dpy,theWindow,ForeColor);
        !           272:            else if ((cross_event->window == theWindow) &&
        !           273:                (cross_event->detail != NotifyInferior)) {
        !           274:              XSetWindowBorderPixmap(dpy,theWindow,dimBorder);
        !           275:             }
        !           276:             break;
        !           277:          }
        !           278:        case NoExpose:
        !           279:            break;
        !           280:         default:
        !           281:            printf("event type=%ld\n",event.type); 
        !           282: /*           XSRError("Unexpected X_Event"); */
        !           283: 
        !           284:         }  /* end of switch */
        !           285:     }  /* end main loop */
        !           286: }
        !           287: 
        !           288: 
        !           289: /***********************************/
        !           290: XSRError (identifier)
        !           291:        char *identifier;
        !           292: {
        !           293:     fprintf(stderr, "xsr: %s\n", identifier);
        !           294:     exit(1);
        !           295: }
        !           296: 
        !           297: 
        !           298: rescale(w)
        !           299: int    w;
        !           300: {
        !           301:     int        x,y,wx,wy;
        !           302:     Window win;
        !           303:     int        oldwidth, dummy;
        !           304: 
        !           305:     XGetGeometry(dpy, theWindow, &win, &wx, &wy, &oldwidth, &dummy,
        !           306:                 &dummy, &dummy);
        !           307:     if (oldwidth != w) {
        !           308:        XQueryPointer(dpy, theWindow, &win, &win, &dummy, &dummy, &x, &y,
        !           309:                      &dummy);
        !           310:        XMoveResizeWindow(dpy, theWindow, wx + x - (x * w)/oldwidth, wy,
        !           311:                          w, HEIGHT);
        !           312:     }
        !           313:     hx = (hx * w) / width;
        !           314:     xo = (xo * w) / width;
        !           315:     width = w;
        !           316:     scalelen = width - START - END;
        !           317:     XResizeWindow(dpy, slidewid, width, SLIDEHIGH);
        !           318:     XResizeWindow(dpy, blackwid, width, SLIDEHIGH+2);
        !           319:     if (framePix)
        !           320:       XFreePixmap(dpy, framePix);
        !           321:     framePix = NULL;
        !           322:     drawframe();
        !           323:     if (slidePix)
        !           324:       XFreePixmap(dpy, slidePix);
        !           325:     slidePix = NULL;
        !           326:     drawslide();
        !           327:     XMoveWindow(dpy, slidewid, xo, SLIDETOP);
        !           328:     drawnums();
        !           329:     drawhairl();
        !           330: }
        !           331: 
        !           332: drawmark(win, x, y, height, topp)
        !           333: Window win;
        !           334: int    x,y,height,topp;
        !           335: {
        !           336:     XDrawLine(dpy, win, sgc, x, (topp?y:y+MAJORH-height),
        !           337:              x, height + (topp?y:y+MAJORH-height), ForeColor);
        !           338: }
        !           339: 
        !           340: dolabel(win, x, y, str, topp, majorp)
        !           341: Window win;
        !           342: int    x,y;
        !           343: char   *str;
        !           344: int    topp,majorp;
        !           345: {
        !           346:     XDrawString(dpy, win, sgc, x + 2,
        !           347:                (topp?y+FOFFSET+foffset:y+MAJORH-fheight+foffset),
        !           348:                str, strlen(str));
        !           349: }
        !           350: 
        !           351: 
        !           352: drawframe()
        !           353: {
        !           354:     int                i,x,j,xx;
        !           355:     char       str[5];
        !           356:     int midpt = scalelen/2;
        !           357: 
        !           358:     if (framePix == NULL)
        !           359:       framePix = XCreatePixmap(dpy, theWindow, width, HEIGHT, 1);
        !           360:     XFillRectangle(dpy, framePix, cgc, 0, 0, width, HEIGHT);
        !           361:     XDrawString(dpy, framePix, sgc, LABEL, LSCALEH+foffset, "L", 1);
        !           362:     for (i = 0; i <= 10; i++) {
        !           363:        sprintf(str, "%d", i);
        !           364:        x = START+(i*scalelen)/10;
        !           365:        dolabel(framePix, x, LSCALEH, str, 0, 1);
        !           366:        drawmark(framePix, x, LSCALEH, MAJORH, 0);
        !           367:        for (j = 1; j < 10; j++)
        !           368:          drawmark(framePix, x+(j*scalelen)/100, LSCALEH, (j==5?MIDDH:MINORH),
        !           369:                   0);
        !           370:     }
        !           371:     XDrawString(dpy, framePix, sgc, LABEL, ASCALEH+foffset, "A", 1);
        !           372:     doscale(framePix, ASCALEH, START, midpt, 0);
        !           373:     doscale(framePix, ASCALEH, START + midpt, scalelen - midpt, 0);
        !           374:     XDrawString(dpy, framePix, sgc, LABEL, DSCALEH+foffset, "D", 1);
        !           375:     doscale(framePix, DSCALEH, START, scalelen, 1);
        !           376:     XDrawString(dpy, framePix, sgc, LABEL, DISCALEH+foffset, "DI", 2);
        !           377:     for (i = 1; i <= 10; i++) {
        !           378:        x = START + scalelen * (1 - log10((float) i)) + 0.5;
        !           379:        sprintf(str, "%d", (i==10?1:i));
        !           380:        dolabel(framePix, x, DISCALEH, str, 1, 1);
        !           381:        drawmark(framePix, x, DISCALEH, MAJORH, 1);
        !           382:     }
        !           383:     XCopyArea(dpy, framePix, theWindow, sgc, 0, 0, scalelen + START+END, HEIGHT, 0, 0);
        !           384: }
        !           385: 
        !           386: doscale(win, high, offset, len, topp)
        !           387:      Window    win;
        !           388:      int       high, offset, len, topp;
        !           389: {
        !           390:   int  i,x,xx,j;
        !           391:   int  xs[11];
        !           392:   char str[6];
        !           393: 
        !           394:   xs[0] = offset - 100;
        !           395:   for (i = 1; i <= 10; i++)
        !           396:     xs[i] = offset + len * log10((float) i) + 0.5;
        !           397: 
        !           398:   for (i = 1; i < 10; i++) {
        !           399:       if (xs[i] > xs[i-1] + LABELSPACE) {
        !           400:          sprintf(str, "%d", (i==10?1:i));
        !           401:          dolabel(win, xs[i], high, str, topp, 1);
        !           402:          drawmark(win, xs[i], high, MAJORH, topp);
        !           403:       } else
        !           404:        drawmark(win, xs[i], high, MIDDH, topp);
        !           405: 
        !           406:       sprintf(str, "%d.", i);
        !           407:       dotenths(win, high, xs[i], xs[i+1]-xs[i], str, topp);
        !           408:   }
        !           409:   dolabel(win, xs[i], high, "1", topp, 1);
        !           410:   drawmark(win, xs[i], high, MAJORH, topp);
        !           411: }
        !           412: 
        !           413: 
        !           414: dotenths(win, high, offset, len, str, topp)
        !           415: Window win;
        !           416: int    high, offset, len;
        !           417: char   *str;
        !           418: int    topp;
        !           419: {
        !           420:     int        i,x;
        !           421:     int        xs[11];
        !           422:     char nstr[8];
        !           423: 
        !           424:     for (i = 0; i <= 10; i++ )
        !           425:       xs[i] = offset +
        !           426:        len * log10((float) 1.0 + ((float) i) / 10.0) / log2;
        !           427: 
        !           428:     if (len < HALVES)
        !           429:       return;
        !           430:     if (len < FIFTHS) {
        !           431:        drawmark(win, xs[5], high, MINORH, topp);
        !           432:        return;
        !           433:     }  
        !           434:     if (len < TENTHS) {
        !           435:        for (i = 0; i < 10; i += 2)
        !           436:          drawmark(win, xs[i], high, MINORH, topp);
        !           437:        return;
        !           438:     }
        !           439:     if (len < LABELFIFTH) {
        !           440:        for (i = 0; i < 10; i++) {
        !           441:            drawmark(win, xs[i], high, (x==5?MIDDH:MINORH), topp);
        !           442:            dotenths(win, high, xs[i], xs[i+1]-xs[i], "", topp);
        !           443:        }
        !           444:        return;
        !           445:     }
        !           446:     if (len < LABELTENTHS) {
        !           447:        for (i = 0; i < 10; i++) {
        !           448:            if (i == 5) {
        !           449:                sprintf(nstr, "%s%d", str, 5);
        !           450:                dolabel(win, xs[i], high, nstr, topp, 0);
        !           451:            }
        !           452:            drawmark(win, xs[i], high, (x==5?MAJORH:MIDDH), topp);
        !           453:            dotenths(win, high, xs[i], xs[i+1]-xs[i], "", topp);
        !           454:        }
        !           455:     } else {
        !           456:        for (i = 0; i < 10; i++) {
        !           457:            sprintf(nstr, "%s%d", str, i);
        !           458:            if (i > 0) {
        !           459:                dolabel(win, xs[i], high, nstr, topp, 0);
        !           460:                drawmark(win, xs[i], high, MAJORH, topp);
        !           461:            }
        !           462:            dotenths(win, high, xs[i], xs[i+1]-xs[i], nstr, topp);
        !           463:        }
        !           464:     }
        !           465: }
        !           466: 
        !           467: 
        !           468: 
        !           469: 
        !           470: drawslide()
        !           471: {
        !           472:     int                i,x,j;
        !           473:     char       str[5];
        !           474:     int        midpt = scalelen/2;
        !           475: 
        !           476:     if (slidePix == NULL)
        !           477:       slidePix = XCreatePixmap(dpy, theWindow, width, SLIDEHIGH, 1);
        !           478:     XFillRectangle(dpy, slidePix, cgc, 0, 0, width, SLIDEHIGH);
        !           479:     XDrawString(dpy, slidePix, sgc, LABEL, BSCALEH+foffset, "B", 1);
        !           480:     doscale(slidePix, BSCALEH, START, midpt, 1);
        !           481:     doscale(slidePix, BSCALEH, START + midpt, scalelen - midpt, 1);
        !           482:     XDrawString(dpy, slidePix, sgc, LABEL, CISCALEH+foffset, "CI", 2);
        !           483:     for (i = 1; i <= 10; i++) {
        !           484:        x = START + scalelen * (1 - log10((float) i)) + 0.5;
        !           485:        sprintf(str, "%d", (i==10?1:i));
        !           486:        dolabel(slidePix, x, CISCALEH, str, 1, 1);
        !           487:        drawmark(slidePix, x, CISCALEH, MAJORH, 1);
        !           488:     }
        !           489:     XDrawString(dpy, slidePix, sgc, LABEL, CSCALEH+foffset, "C", 1);
        !           490:     doscale(slidePix, CSCALEH, START, scalelen, 0);
        !           491:     XCopyArea(dpy, slidePix, slidewid, sgc, 0, 0, scalelen+START+END, SLIDEHIGH, 0, 0);
        !           492: }
        !           493: 
        !           494: redrawslide(x, y, w, h)
        !           495: int    x,y,w,h;
        !           496: {
        !           497:     int        i;
        !           498: 
        !           499:     if (slidePix != NULL)
        !           500:       XCopyArea(dpy, slidePix, slidewid, sgc, 0, 0, scalelen + START + END, SLIDEHIGH,
        !           501:                0, 0);
        !           502:     else
        !           503:       drawslide();
        !           504: }
        !           505: 
        !           506: redrawframe(x, y, w, h)
        !           507: int    x,y,w,h;
        !           508: {
        !           509:     if (framePix != NULL)
        !           510:       XCopyArea(dpy, framePix, theWindow, sgc, 0, 0, scalelen + START + END, HEIGHT,
        !           511:                0, 0);
        !           512:     else
        !           513:       drawframe();
        !           514: }
        !           515: 
        !           516: drawhairl()
        !           517: {
        !           518:     XMoveWindow(dpy, hairlwid, hx, 0);
        !           519:     XClearWindow(dpy, hairlwid);
        !           520: }
        !           521: 
        !           522: drawnums()
        !           523: {
        !           524:     char       str[10];
        !           525:     float      x = ((float) (hx - START))/((float) scalelen);
        !           526:     float      xs = ((float) (hx - START - xo))/((float) scalelen);
        !           527: 
        !           528:     XClearWindow(dpy, dispwid);
        !           529:     sprintf(str, "%5f", 10. * x);
        !           530:     XDrawImageString(dpy, dispwid, sgc, 5, LSCALEH+foffset, str, strlen(str));
        !           531:     sprintf(str, "%5f", pow(100., x));
        !           532:     XDrawImageString(dpy, dispwid, sgc, 5, ASCALEH+foffset, str, strlen(str));
        !           533:     sprintf(str, "%5f", pow(100., xs));
        !           534:     XDrawImageString(dpy, dispwid, sgc, 5, SLIDETOP+foffset + BSCALEH, str, strlen(str));
        !           535:     sprintf(str, "%5f", pow(10., 1. - xs));
        !           536:     XDrawImageString(dpy, dispwid, sgc, 5, SLIDETOP+foffset + CISCALEH, str, strlen(str));
        !           537:     sprintf(str, "%5f", pow(10., xs));
        !           538:     XDrawImageString(dpy, dispwid, sgc, 5, SLIDETOP+foffset + CSCALEH, str, strlen(str));
        !           539:     sprintf(str, "%5f", pow(10., x));
        !           540:     XDrawImageString(dpy, dispwid, sgc, 5, DSCALEH+foffset, str, strlen(str));
        !           541:     sprintf(str, "%5f", pow(10., 1. - x));
        !           542:     XDrawImageString(dpy, dispwid, sgc, 5, DISCALEH+foffset, str, strlen(str));
        !           543: }

unix.superglobalmegacorp.com

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