/* Wed Apr 6 14:58:33 EDT 1988 /usr4/gsg/src/test lout.c */ #include #include #define MAXBUF 2048 static unsigned int buf[ MAXBUF], itemp; static int n1=MAXBUF,n2=MAXBUF; static int ic = -1,jf=0; static int fid; lout_( itype, x, y, npen) int *itype,*npen; double *x, *y; { int mx,my; static unsigned int imove=0x80000000,idraw=0x8000,ipage=0x80008000,iend=0xffffffff; int pid,flags,ipen; char name[256]; float ai=1300.; static unsigned int mode=0x644; static double xmin=0.,xmax=11.,ymin=0.,ymax=8.0; if ( ic == -1) { pid = getpid(); sscanf(name,"/tmp/laser%x.%xvec\0",pid,++jf); flags = O_CREAT & O_WRONLY ; if ((fid=open( name, flags, mode)) == -1) { perror( name); exit(1); /* perror( name, exit(1)); */ } ic = 0; } if (*itype == 2 ) return(0); if (( *x < xmin) || ( *x > xmax)) return(1); if (( *y < ymin) || ( *y > ymax)) return(1); mx = ai*( *x - xmin)/(xmax - xmin); my = ai*( *y - ymin)/(ymax - ymin); ipen = ( *npen > 0) ? *npen : -*npen; itemp = 0; itemp = mx; itemp <<= 16; itemp |= my; itemp |= ( ipen == 3) ? imove : idraw; buf[ic++] = itemp; if ( ic >= MAXBUF) pushbuf(); if ( *npen < 0) buf[ic++] = ipage; if ( ic >= MAXBUF) pushbuf(); if ( ipen == 999) { buf[ic++] = iend; pushbuf(); close( fid); } return; } pushbuf() { n1 = 4*ic; write( fid, &n1, 4); write( fid, buf, n1); write( fid, &n1, 4); }