home *** CD-ROM | disk | FTP | other *** search
- #include "xsignal.h"
- extern char *malloc();
-
- /* ARGSUSED */
- void AddSignal(widget, pane, callData)
- Widget widget;
- sigbox *pane;
- caddr_t callData;
- {
- char *signalfile;
- int fd,mask,nbytes,firstb,firsts, newsamp;
- float top,shown;
- char snsamp[30], *newdata;
- Signal newsig;
- Arg arg[4];
-
- signalfile = XtDialogGetValueString( XtParent(widget));
- mask = 0644;
- if( (fd = open(signalfile,O_RDONLY,mask)) == -1) {
- perror(signalfile);
- fprintf(stderr,"Signal file '%s' cannot be opened\n",signalfile);
- return;
- }
- newsig = read_signal(fd);
- close(fd);
- if(pane->s == NULL) {
- pane->s = newsig;
- newsamp = 0;
- } else {
- newdata = (char *) malloc(pane->s->sig_len + newsig->sig_len);
- /* Copy first part of old data */
- nbytes = (pane->lmark + 1) * sizeof(short);
- firstb = 0;
- bcopy(&pane->s->sig_data[0],&newdata[firstb],nbytes);
- /* Add new data */
- firstb = nbytes;
- nbytes = newsig->sig_len;
- newsamp = newsig->sig_nsamp;
- bcopy(&newsig->sig_data[0],&newdata[firstb],nbytes);
- /* Now get the rest of the old data */
- firstb += newsig->sig_len;
- nbytes = pane->s->sig_len - ((pane->lmark + 1) * sizeof(short));
- firsts = (pane->lmark + 1) * sizeof(short);
- bcopy(&pane->s->sig_data[firsts],&newdata[firstb],nbytes);
- /* Set the new length, free the old data and replace with newdata */
- pane->s->sig_len += newsig->sig_len;
- pane->s->sig_nsamp = pane->s->sig_len / sizeof(short);
- free(pane->s->sig_data);
- pane->s->sig_data = newdata;
- free(newsig->sig_data);
- free(newsig);
- }
- XtDestroyWidget(pane->file);
- pane->file = (Widget) NULL;
- pane->lmark = pane->first;
- pane->last += newsamp;
- pane->rmark = pane->last;
- sprintf(snsamp,"%d Samples", pane->s->sig_nsamp);
- XtSetArg(arg[0], XtNlabel, snsamp );
- XtSetValues( pane->text_nsamp, arg, ONE );
- sprintf(snsamp,"%d", pane->s->sig_nsamp);
- XtSetValues( pane->endval, arg, ONE );
- XtSetSensitive(pane->draw, True);
- XtSetSensitive(pane->dstart, True);
- XtSetSensitive(pane->dlast, True);
- XtSetSensitive(pane->sb_start, True);
- XtSetSensitive(pane->sb_last, True);
- XtSetSensitive(pane->canvas, True);
- XtSetSensitive(pane->style_button, True);
- XtSetSensitive(pane->zoomcmd, True);
- XtSetSensitive(pane->delcmd, True);
- XtCallCallbacks(pane->draw,XtNcallback,NULL);
- }
-