home *** CD-ROM | disk | FTP | other *** search
- #include "xsignal.h"
-
- /* ARGSUSED */
- void Draw(widget,pane,callData)
- Widget widget;
- sigbox *pane;
- caddr_t callData;
- {
- int x1,y1,x2,y2,i, oldx1, hincr, nscan;
- int height,width, nsamp, halfheight, maxsamp;
- int start_samp, end_samp;
- float xincr, x;
- short *data;
- char sstart[30], slast[30];
- XPoint *vlist;
- Arg args[3];
-
- #define Sig pane->s
- #define Start pane->sb_start
- #define Last pane->sb_last
- #define Canvas pane->canvas
- #define GCCache pane->gccache
-
- XClearArea(XtDisplay(Canvas), XtWindow(Canvas), 0,0,0,0,False);
-
- if(Sig == NULL) return;
-
- XtSetArg(args[0], XtNwidth, &width);
- XtSetArg(args[1], XtNheight, &height);
- XtGetValues(Canvas, args, TWO);
- width += 1;
- height += 1;
- start_samp = pane->first;
- end_samp = pane->last;
- nsamp = end_samp - start_samp + 1;
-
- xincr = ((float) width) / ((float) nsamp);
- data = ((short *) Sig->sig_data)+start_samp;
- vlist = (XPoint *) malloc(sizeof(XPoint) * Sig->sig_nsamp);
-
- #define MAXVAL (32768L)
-
- for(i=start_samp, x=0; i <= end_samp; ++i, x = x+xincr, ++data) {
- vlist[i].x = x+.5;
- y1 = ((((int) *data)+MAXVAL) * height) >> 16L;
- vlist[i].y = height-y1;
- }
- if(pane->style == CONTINUOUS) {
- XDrawLines(XtDisplay(Canvas), XtWindow(Canvas), GCCache[PAINT],
- &vlist[start_samp], nsamp, CoordModeOrigin);
- } else if (pane->style == DISCRETE) {
- y1 = height/2;
- for( i = start_samp; i<end_samp; ++i ) {
- XDrawLine(XtDisplay(Canvas), XtWindow(Canvas), GCCache[PAINT],
- vlist[i].x,y1,vlist[i].x,vlist[i].y);
- }
- }
-
- x1=1 ; y1=height/2; x2=width; y2=y1;
- XDrawLine(XtDisplay(Canvas), XtWindow(Canvas), GCCache[PAINT], x1,y1,x2,y2);
- x1=1 ; y1=1; x2=1; y2=height;
- XDrawLine(XtDisplay(Canvas), XtWindow(Canvas), GCCache[PAINT], x1,y1,x2,y2);
- hincr = height/20;
- x1=1; x2=5;
- for(y1=y2=height/2; y1>0; y1=y2=y1-hincr){
- XDrawLine(XtDisplay(Canvas),XtWindow(Canvas),GCCache[PAINT], x1,y1,x2,y2);
- }
- for(y1=y2=height/2; y1<=height; y1=y2=y1+hincr){
- XDrawLine(XtDisplay(Canvas),XtWindow(Canvas),GCCache[PAINT], x1,y1,x2,y2);
- }
- Mark(pane, pane->lmark);
- Mark(pane, pane->rmark);
- }
-