int main(int argc, char **argv) { float fz[BUFSIZ]; int iz=0,jz,nz=0; unsigned int z[BUFSIZ]; char line[BUFSIZ],*lp, *outpar; FILE *infp=stdin,*outfp=stdout, *outparfp; unsigned int *uz = &(z[0]); /* Hook up getpar */ initargs(argc, argv); requestdoc(1); /* Prevent floats from dumping on screen */ switch(filestat(STDOUT)) { case BADFILETYPE: warn("stdout is illegal filetype"); pagedoc(); break; case TTY: warn("stdout can't be tty"); pagedoc(); break; default: /* rest are OK */ break; } /* Get parameters and do set up */ if (!getparstring("outpar", &outpar)) outpar = "/dev/tty" ; outparfp = efopen(outpar, "w"); while (fgets(line,BUFSIZ,infp)!=NULL) { /* set pointer to beginning of line */ lp = line; /* read hex digits from input line */ for(iz=0;sscanf(lp,"%2x",&uz[iz])==1;iz++,nz++,lp+=2); /* convert to floats */ for(jz=0;jz<iz;jz++) fz[jz] = 255-z[jz]; /* write floats */ fwrite(fz,sizeof(float),iz,outfp); } /* Make par file */ fprintf(outparfp, "total number of values=%d\n",nz); return(CWP_Exit()); }
void requestdoc(int flag) { switch(flag) { case 1: if (xargc == 1 && isatty(STDIN)) pagedoc(); break; case 0: if (xargc == 1 && isatty(STDIN) && isatty(STDOUT)) pagedoc(); break; default: if (xargc <= flag) pagedoc(); break; } return; }
int main(int argc, char **argv) { int i=0; /* counter */ int verbose=0; /* verbose flag =1 chatty, =0 silent */ int stepmax=0; /* maximum number of steps */ double t=0.0; /* time */ double h=.001; /* time increment */ double tol=0.0; /* time increment */ double y[3]= {0.0}; /* dependent variable of ODE system */ rke_variables p; /* variable used by RKE routines */ FILE *out_file=stdout; /* pointer to file that we write out to */ cwp_String mode="x"; /* output mode of program */ int imode=SXY; /* integer flag for mode */ /* Hook up getpar */ initargs(argc, argv); requestdoc(0); switch(filestat(STDOUT)) { /* Prevent floats from dumping on screen */ case BADFILETYPE: warn("stdout is illegal filetype"); pagedoc(); break; case TTY: warn("stdout can't be tty"); pagedoc(); break; default: /* rest are OK */ break; } /* Get parameters */ if (!getparint("stepmax", &stepmax)) stepmax = 500; if (!getparint("verbose", &verbose)) verbose = 0; if (!getpardouble("y0", &y[0])) y[0]=10; if (!getpardouble("h", &h)) h = .01; if (!getpardouble("tol", &tol)) tol = RKE_ERR_BIAS_INIT; /* Get output mode, recall imode initialized to the default FABS */ getparstring("mode", &mode); if (STREQ(mode, "yz")) imode = SYZ; else if (STREQ(mode, "xz")) imode = SXZ; else if (STREQ(mode, "x")) imode = SX; else if (STREQ(mode, "y")) imode = SY; else if (STREQ(mode, "z")) imode = SZ; else if (!STREQ(mode, "xy")) err("unknown operation=\"%s\", see self-doc", mode); /* initialize Runge-Kutta-England routines */ p = (rke_variables) rke_init(1, verhulst_equation); /* set tolerance */ p->error_bias=tol; for (i=0; i<stepmax; ++i) { register int j; register int number=3; float yout[3]= {0,0,0}; double aimed_t; t=i*h; aimed_t=t+h; if (verbose) { warn("using %3d accepted and %3d rejected steps", p->accepted_steps, p->rejected_steps); if (verbose) warn("error tolerance = %10.24f",p->error_bias); } /* convert doubles in y to floats in yout and write out */ for(j=0; j<number; ++j) yout[j] = (float) y[j]; /* write out according to the mode */ { float tmpout[2]= {0,0}; switch(imode) { case SXY: /* write out xy pairs */ tmpout[0]=yout[0]; tmpout[1]=yout[1]; efwrite(tmpout,sizeof(float),2,out_file); break; case SYZ: /* write out yz pairs */ tmpout[0]=yout[1]; tmpout[1]=yout[2]; efwrite(tmpout,sizeof(float),2,out_file); break; case SXZ: /* write out xz pairs */ tmpout[0]=yout[0]; tmpout[1]=yout[2]; efwrite(tmpout,sizeof(float),2,out_file); break; case SXYZ: /* write out xyz triplet */ efwrite(yout,sizeof(float),3,out_file); break; case SX: /* write out x only */ tmpout[0] = yout[0]; efwrite(tmpout,sizeof(float),1,out_file); break; case SY: /* write out y only */ tmpout[0] = yout[1]; efwrite(tmpout,sizeof(float),1,out_file); break; case SZ: /* write out z only */ tmpout[0] = yout[2]; efwrite(tmpout,sizeof(float),1,out_file); break; default: /* defensive programming */ err("mysterious operation=\"%s\"", mode); } /* end scope of imode */ } /* run the Runge-Kutta-England solver */ rke_solve (p, &t, y, aimed_t); } /* end the session with rke */ rke_term(p); return EXIT_SUCCESS; }