throbber
http://groups.google.com/d/topic/comp.dcom.modems/oQxiZ9m8M9c/discussion
`comp.dcom.modems ›
`checkblazer.c -- get spectrum data from last connection
`1 post by 1 author
`Steve Murphy
`4/21/88
`Here's something (checkblazer.c) maybe someone might find useful. Enjoy.
` --murf
`------------------------------------------------------------------------
`#include <sys/types.h>
`#include <signal.h>
`#include <setjmp.h>
`#include <stdio.h>
`#ifdef USG
`#include <termio.h>
`#endif
`#ifndef USG
`#include <sgtty.h>
`#endif
`#include <sys/stat.h>
`#define OUTPUTDIR "/usr/spool/uucp"
`#define DEFSTARTSPEED EXTA
` /* A program to grab Telebit TrailBlazer Status Data and dump to ascii files */
` /* by Steve Murphy */
` /* Some say the globals, etc. seem similar to some used in a particular
` version of uucp. This is, of course, purely accidental, but those with
` discernment may be able to take advantage of this accident.
` People with discernment usually take advantage of "accidents".
` Wouldn't it be nice if, while closing the modem in uucp, you generated
` data files that showed the status of the connection?
` */
` /* For the rest of us: this little standalone will,
` IF the proper command line args are supplied,
` IF the modem is set up with just the right defaults in its regs,
` (I have E0 F1 M1 Q6 T V1 X3, and s51=5, for example)
` extract all the S70 type registers revealing the status of the last
` connection made, fast or slow (depending on the regs) */
` /* This data is dumped out to files in x,y pairs suitable for progs like
` gnuplot, or just echoed back to the user if non-array oriented. */
` /* I developed my own hp7475A interface to GNUPLOT and use it to generate
` nice-looking and informative pen-plots of connections. This info is really
` informative at times about what kind of problems I'm seeing. */
` /* here's an example GNUPLOT.INI.telebit file to display the files generated
` on an hp pen plot:
` set term hp74
` set samples 2048
` set output "hp.noise.telebit"
` plot [0:4000] [-80:10] "blazer_noise.telebit" with lines,
` "blazer_rbits.telebit" with impulses,
` "blazer_tbits.telebit" with lines
` quit
` This will display the noise profile on the bottom and the two bitrates
`overlay
` each other above.
` Because This generates several files if run with several sys names,
` I generated a pile of these GNUPLOT.INI files, AND
` I have a generic GNUPLOT.INI submitter:
` file: plotsys (mode 666)
` contents follows:
`
`Page 1 of 9
`
`

`
`#e
`
`cho $argv[1]
`cp GNUPLOT.INI.$argv[1] .gnuplot
`gnuplot
`And, of course, a lpr -Php hp.noise.telebit (in this case) would
`be the next thing (go stick paper in the plotter first!)
`Now, some clever person could do this much more neatly with sed scripts,
`I'm sure. Have at it. Have fun. Go for it.
` */
` /* As usual, This will most likely require modification to run on your modems.
` I set up my registers like few others on the net, because of constraints
`beyond
` my control.
` I doubt that this will work on anything but sun 3's.
` Releasing even this peice of junk is charity on my part; Don't bother me with
` anything but something better -- I didn't generate this for money, really,
` and so I really can't support it either. It may be a little work for you to
`make
` it run, but hey, I think I did more than you, OK?
` Purpose: For those who want to grab this kind of data bad enough to make this
` work, but not bad enough, obviously, to write their own from scratch
` Encouragement: This code actually runs on my machine (sun3/160) with my OS
` (SunOS3.2) with my modems (Telebit Trailblazer Plus, rev 3 roms. */
`jmp_buf Sjbuf;
`jmp_buf Pipebuf;
`#define STBNULL 0
`#define CF_DIAL 5
`#define BAND (4000.0/512.0)
`int blazer_slow=0, blazer_fast = 0;
`int onesys = 0;
`int turntime = 30 * 60; /* 30 minutes expressed in seconds */
`char *ttyn = NULL;
`extern int errno;
`char devSel[200],Rmtname[200];
`#ifdef USG
`struct termio Savettyb;
`#endif
`#ifndef USG
`struct sgttyb Savettyb;
`#endif
`alarmtr()
` signal(SIGALRM, alarmtr);
` longjmp(Sjbuf, 1);
`
`{
`
`}e
`
`xpect(str,fd)
`char *str;
` char *p = str;
` char bug[10];
` if (setjmp(Sjbuf))
` {
` fprintf(stderr, "TIMEOUT\n");
` return CF_DIAL;
` }
` signal(SIGALRM, alarmtr);
` alarm(10);
` again:
` while( *p && read( fd,bug,1) == 1 && *p == bug[0] )
` p++;
` if ( !*p )
` {
` alarm(0);
` return 0;
` }
`
`{
`
`Page 2 of 9
`
`

`
` else
` {
` p = str;
` goto again;
` }
`
`}l
`
`{
`
`ogent( what, arg1,arg2,arg3,arg4)
`char *what,*arg1,*arg2,*arg3,*arg4;
` FILE *lo;
` char buff[300];
`/* lo = fopen("/usr/spool/uucp/LOGFILE","a"); For those who enjoy permanent
`records
` if( !lo )
` return; */
` sprintf(buff,what,arg1,arg2,arg3,arg4);
` printf(buff);
`/* fprintf(lo,"checkblazer: %s",buff); to go a log file
` fclose( lo ); */
` return;
`
`}m
`
`ain(argc, argv)
`int argc;
`register char *argv[];
` int seq,localbits,Ifn;
` char *q, tty_port[100];
` if( argc < 4)
` {
` fprintf(stderr,"usage: checkblazer SLOW|FAST device label\n");
` exit(0);
` }
` Ifn = setreuid(geteuid(),geteuid());
` if( Ifn )
` {
` logent("Couldn't setuid to %d\n",geteuid());
` }
` Ifn = setregid(getegid(),getegid());
` if( Ifn )
` {
` logent("Couldn't setgid to %d\n",getegid());
` }
` ttyn = tty_port;
` if( !strcmp(argv[1],"SLOW") || !strcmp(argv[1],"slow") )
` blazer_slow = 1;
` else
` blazer_fast =1;
` strcpy(tty_port,argv[2]);
` strcpy(Rmtname,argv[3]);
` if( ttyn )
` strcpy(devSel, ttyn);
` else
` strcpy(devSel,"");
` cleanup(0);
`
`{
`
`}c
`
`leanup(code)
` int dh = -1;
` char dcname[40];
` sleep(2);
` strcpy(dcname,devSel);
` if (setjmp(Sjbuf))
` {
` logent( "TIMEOUT\n");
` return CF_DIAL;
` }
` signal(SIGALRM, alarmtr);
` alarm(10);
` dh = open(dcname, 2); /* read/write */
`
`{
`
`Page 3 of 9
`
`

`
` alarm(0);
` /* modem is open */
` if (dh >= 0)
` {
` char spdy[30];
`#ifdef USG
` ioctl(dh, TCGETA, &Savettyb);
` Savettyb.c_cflag = (Savettyb.c_cflag & ~CS8) | CS7;
` Savettyb.c_oflag |= OPOST;
` Savettyb.c_lflag |= (ISIG|ICANON|ECHO);
`#else !USG
` ioctl(dh, TIOCGETP, &Savettyb);
` Savettyb.sg_flags |= ECHO;
` Savettyb.sg_flags &= ~RAW;
` Savettyb.sg_ispeed = Savettyb.sg_ospeed = DEFSTARTSPEED;
` (void) ioctl(dh, TIOCHPCL, STBNULL);
`#endif !USG
`#ifdef USG
` ioctl(dh, TCSETA, &Savettyb);
`#else !USG
` ioctl(dh, TIOCSETP, &Savettyb);
`#endif !USG
` sleep(1);
` if( blazer_slow )
` blazer_status_slow(dh);
` if( blazer_fast )
` blazer_status_fast(dh);
` close(dh);
` if( !strcmp("/dev/cua",devSel) )
` strcpy(spdy,"/dev/ttya");
` else
` strcpy(spdy,"/dev/ttyb");
` }
` else
` {
` logent("CAN'T OPEN %s\n",dcname);
` exit(dh);
` }
`
`}b
`
`{
`
`lazer_status_slow(fd)
`
` char *cp,sss[300],qqq[100],*cq;
` char freq_offset[40],line_qual[40];
` int i;
` write(fd, "ATS77?\r", 7);
` /* freq offset */
` cp = freq_offset;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > 0x20 )
` break;
` }
` while (++cp < &freq_offset[39] && read(fd, cp, 1) == 1
` && *cp != '\n')
` ;
` cq = qqq -1;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1 /* collect OK */
` && *cq != '\n')
` ;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` /* line quality */
` write(fd, "ATS78?\r", 7);
` cp = line_qual;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &line_qual[39] && read(fd, cp, 1) == 1
` && *cp != '\n')
` ;
`
`Page 4 of 9
`
`

`
` cq = qqq;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1 /* collect OK */
` && *cq != '\n')
` ;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` sprintf(sss,"Modem reports freq offset=%s, Line Quality=%s\n",
` freq_offset,line_qual);
` logent( sss );
`
`}b
`
`lazer_status_fast(fd)
` char freq_offset[40],line_qual[40],tdr[20],rdr[20],retrans[20],
` packacc[20];
` char *cp,sss[300],*cq,qqq[100];
` double noise[512];
` struct sgttyb mode1;
` int i,bitpersec[512];
` /* freq offset */
` write(fd, "ATS77?\r", 7);
` syncup:
` cp = freq_offset;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &freq_offset[39] && read(fd, cp, 1) == 1
` && *cp != '\n')
` ;
` if( freq_offset[0] != '+' && freq_offset[0] != '-')
` goto syncup;
` sync_1:
` cq = qqq-1;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1 /* collect OK */
` && *cq != '\n')
` ;
` if( strcmp(qqq,"OK\n") )
` goto sync_1;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` /* transmit data rate */
` write(fd, "ATS70?\r", 7);
` cp = tdr;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &tdr[19] && read(fd, cp, 1) == 1
` && *cp != '\n')
` ;
` sync_2:
` cq = qqq-1;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1 /* collect OK */
` && *cq != '\n')
` ;
` if( strcmp(qqq,"OK\n") )
` goto sync_2;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` /* receive data rate */
` write(fd, "ATS72?\r", 7);
` cp = rdr;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &rdr[19] && read(fd, cp, 1) == 1
` && *cp != '\n')
`
`{
`
`Page 5 of 9
`
`

`
` ;
` sync_5:
` cq = qqq-1;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1 /* collect OK */
` && *cq != '\n')
` ;
` if( strcmp(qqq,"OK\n") )
` goto sync_5;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` /* packets retransmitted */
` write(fd, "ATS74?\r", 7);
` cp = retrans;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &retrans[19] && read(fd, cp, 1) == 1
` && *cp != '\n')
` ;
` sync_3:
` cq = qqq-1;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1 /* collect OK */
` && *cq != '\n')
` ;
` if( strcmp(qqq,"OK\n") )
` goto sync_3;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` /* packets accepted */
` write(fd, "ATS75?\r", 7);
` cp = packacc;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &packacc[19] && read(fd, cp, 1) == 1
` && *cp != '\n')
` ;
` sync_4:
` cq = qqq-1;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1 /* collect OK */
` && *cq != '\n')
` ;
` if( strcmp(qqq,"OK\n") )
` goto sync_4;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` write(fd, "ATS58=4\r", 8);
` if (expect("OK",fd) != 0)
` logent( "TB did not respond to ATS58=4\n",devSel);
` ioctl(fd,TIOCGETP,&mode1);
` mode1.sg_flags |= CBREAK|TANDEM;
` ioctl(fd,TIOCSETP,&mode1);
` if (setjmp(Sjbuf))
` {
` logent( "TIMEOUT\n");
` close(fd);
` return CF_DIAL;
` }
` signal(SIGALRM, alarmtr);
` alarm(30);
` /* noise sprectrum */
` sleep(1);
` write(fd, "ATS76?\r", 7);
` if(1)
` {
`
`Page 6 of 9
`
`

`
` FILE *graphout;
` sprintf(sss,"%s/blazer_noise.%s",OUTPUTDIR,Rmtname);
` graphout = (FILE *)fopen(sss,"w");
` for( i=0; i<511; i++)
` {
` double atof();
` cp = sss;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &sss[20] && read(fd, cp, 1) == 1
` && *cp != '\n' && *cp != ' ')
` ;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` noise[i] = atof(sss);
` if( graphout )
` {
` fprintf(graphout,"%g
`%g\n",(double)(i+1)*BAND,noise[i]);
` fflush(graphout);
` }
` }
` if(graphout)
` fclose(graphout);
` if(1)
` {
` double nmax, nmin, nave;
` nmax = -50000.0;
` nmin = 50000.0;
` nave = 0;
` for( i=0; i<511; i++)
` {
` if( noise[i] > nmax )
` nmax = noise[i];
` if( noise[i] < nmin )
` nmin = noise[i];
` nave += noise[i];
` }
` nave /= 511.0;
` sprintf(sss,"noise:min=%g,max=%g,ave=%g\n",nmin,nmax,nave);
` logent( sss);
` }
` }
` cq = qqq;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1/* collect OK */
` && *cq != '\n')
` ;
` alarm(0);
` alarm(30);
` /* transmit sprectrum */
` sleep(1);
` write(fd, "ATS71?\r", 7);
` if(1)
` {
` FILE *graphout;
` sprintf(sss,"%s/blazer_tbits.%s",OUTPUTDIR,Rmtname);
` graphout = (FILE *)fopen(sss,"w");
` for( i=0; i<511; i++)
` {
` cp = sss;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &sss[20] && read(fd, cp, 1) == 1
` && *cp != '\n' && *cp != ' ')
` ;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` bitpersec[i] = atoi(sss);
` if( graphout )
` {
`
`Page 7 of 9
`
`

`
` fprintf(graphout,"%g
`%d\n",(double)(i+1)*BAND,bitpersec[i]);
` fflush(graphout);
` }
` }
` if(graphout)
` fclose(graphout);
` if(1)
` {
` double nmax, nmin, nave;
` int nfirst, nlast,ntotal;
` nmax = -50000.0;
` nmin = 50000.0;
` nave = 0;
` nfirst = -1;
` nlast = ntotal = 0;
` for( i=0; i<511; i++)
` {
` if( bitpersec[i] && nfirst == -1 )
` nfirst = i;
` if( bitpersec[i] && bitpersec[i-1] )
` nlast = i;
` if( bitpersec[i] > nmax )
` nmax = bitpersec[i];
` if( bitpersec[i] < nmin )
` nmin = bitpersec[i];
` nave += bitpersec[i];
` ntotal += bitpersec[i];
` }
` nave /= 511.0;
` sprintf(sss,"tbits:min=%g,max=%g,ave=%g,
`lo=%g,hi=%g,total=%d\n",nmin,nmax,nave,
`
`(double)(nfirst+1)*BAND,(double)(nlast+1)*BAND,ntotal);
` logent( sss );
` }
` }
` cq = qqq;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1/* collect OK */
` && *cq != '\n')
` ;
` alarm(0);
` alarm(30);
` /* rec bit sprectrum */
` sleep(1);
` write(fd, "ATS73?\r", 7);
` if(1)
` {
` FILE *graphout;
` sprintf(sss,"%s/blazer_rbits.%s",OUTPUTDIR,Rmtname);
` graphout = (FILE *)fopen(sss,"w");
` for( i=0; i<511; i++)
` {
` cp = sss;
` while (read(fd, cp ,1) == 1)
` {
` if (*cp > ' ')
` break;
` }
` while (++cp < &sss[20] && read(fd, cp, 1) == 1
` && *cp != '\n' && *cp != ' ')
` ;
` *cp-- = '\0';
` if (*cp == '\r')
` *cp = '\0';
` bitpersec[i] = atoi(sss);
` if( graphout )
` {
` fprintf(graphout,"%g
`%d\n",(double)(i+1)*BAND,bitpersec[i]);
` fflush(graphout);
` }
` }
` if(graphout)
` fclose(graphout);
` if(1)
`
`Page 8 of 9
`
`

`
` {
` double nmax, nmin, nave;
` int nfirst, nlast,ntotal;
` nmax = -50000.0;
` nmin = 50000.0;
` nave = 0;
` nfirst = -1;
` nlast = ntotal = 0;
` for( i=0; i<511; i++)
` {
` if( bitpersec[i] && nfirst == -1 )
` nfirst = i;
` if( bitpersec[i] && bitpersec[i-1] )
` nlast = i;
` if( bitpersec[i] > nmax )
` nmax = bitpersec[i];
` if( bitpersec[i] < nmin )
` nmin = bitpersec[i];
` nave += bitpersec[i];
` ntotal += bitpersec[i];
` }
` nave /= 511.0;
` sprintf(sss,"rbits:min=%g,max=%g,ave=%g,
`lo=%g,hi=%g,total=%d\n",nmin,nmax,nave,
`
`(double)(nfirst+1)*BAND,(double)(nlast+1)*BAND,ntotal);
` logent( sss);
` }
` }
` cq = qqq;
` while (++cq < &qqq[99] && read(fd, cq, 1) == 1/* collect OK */
` && *cq != '\n')
` ;
` alarm(0);
` sleep(3);
` write(fd, "ATZ\r", 4); /* this'll return the modem to normal */
` if (expect("OK",fd) != 0)
` logent( "HSM did not respond to ATZ\n",devSel);
` /*ioctl(fd,TIOCGETP,&mode1);*/ /* turn off XON/XOFF */
` /* mode1.sg_flags &= ~TANDEM | RAW; why bother?
` ioctl(fd,TIOCSETP,&mode1); */
` sprintf(sss,"Foff=%s,tdr=%s,rdr=%s,retrans=%s,acc=%s\n",
` freq_offset,tdr,rdr,retrans,packacc);
` logent( sss);
` sleep(4);
`-
` Steve Murphy, CAECO, Inc., 7090 South Union Park Avenue,
` Suite 200, Midvale, UT 84047
` (801)255-8880
` <WORLD>!{byuadam,utah-cs,nrc-ut,wicat}!caeco!murf
`Click here to Reply
`
`}-
`
`Page 9 of 9

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket