/* * (c) SPDsoft 1994 + ATIC */ #include #include #include #include #include #define ALPHA_OPAC 0x00 #define SCREEN_W 1280 #define SCREEN_H 1024 #define Boolean char #define Output if (G_prefs.Verbose) printf #define MIN(a,b) ((a)>(b)?(b):(a)); typedef struct { Boolean FullScreen; Boolean Growable; Boolean KeepAspectRatio; Boolean Verbose; Boolean points; } pref; void init_graphics(void); void redraw(void); void usage(char *name); void fatalError(char *name,char *str); Boolean get_options(int argc,char *argv[]); extern char *optarg; extern int optind,opterr; pref G_prefs; float data[2048][2]; float maxx,minx,maxy,miny; char theString[256]; int ndata; Boolean get_options(int argc,char *argv[]) { int opcion; int theError=0; G_prefs.FullScreen = 0; G_prefs.Growable = 0; G_prefs.KeepAspectRatio = 1; G_prefs.Verbose=0; G_prefs.points=0; while ( (opcion=getopt(argc,argv,"pfgGvh")) != EOF ) { switch(opcion) { case 'p': G_prefs.points = 1; break; case 'f': G_prefs.FullScreen = 1; break; case 'g': G_prefs.Growable = 1; break; case 'G': G_prefs.Growable = 1; G_prefs.KeepAspectRatio = 0; break; case 'v': printf("%s:SPDsoft v. 16/11/1993\n",argv[0]); G_prefs.Verbose=1; break; default: usage(argv[0]); } if ( theError!=0) usage(argv[0]); } } void usage(char *name) { fprintf(stderr, "usage: %s [-f|-g|-G][-v][-h][-p] files...\n%s\n%s\n%s\n%s\n%s\n%s\n",name, "-f: Full screen", "-g: Growable, Keep aspect ratio", "-G: Growable", "-v: Version, debug", "-p: points", "-h: This text. Note: plot input values" ); exit(-1); } void fatalError(char *name,char *str) { fprintf(stderr, "%s: Fatal Error: %s. bye...\n",name,str); exit(-2); } main(int argc,char *argv[]) { int i,j; long gwid; long gw_x, gw_y; long MyEvent; short val; int quitting=0; char tmpStr[64]; get_options(argc,argv); init_graphics(); if(G_prefs.FullScreen) { prefposition( 0, SCREEN_W, 0, SCREEN_H ); gwid=winopen(""); RGBmode(); gconfig(); } else { sprintf(tmpStr,"%s", "Hola!"); prefsize(640,480); gwid=winopen(tmpStr); clear(); RGBmode(); gconfig(); if(G_prefs.Growable) { if(G_prefs.KeepAspectRatio) keepaspect(640,480); winconstraints(); } } for( ndata=0; gets(theString) != NULL; ndata++ ) { sscanf(theString,"%f%f",&data[ndata][0],&data[ndata][1]); if(ndata==0) { minx=maxx=data[0][0]; miny=maxy=data[0][1]; } else { if(minxdata[ndata][0]) maxx = data[ndata][0]; if(maxy>data[ndata][1]) maxy = data[ndata][1]; } } redraw(); for (quitting=0;!quitting;) { while (!qtest()) ; /* Event Loop */ switch(MyEvent=qread(&val)) { case ESCKEY: quitting=!val; break; case REDRAW: redraw(); break; case WINQUIT: quitting=1; break; case INPUTCHANGE: break; default: if(G_prefs.Verbose) { printf("Event: %ld\n", MyEvent); fflush(stdout); } break; } } winclose(gwid); return(0); } void init_graphics(void) { qdevice(ESCKEY); qdevice(REDRAW); qdevice(WINSHUT); qdevice(WINQUIT); } void redraw(void) { int i; long xorig, yorig; ortho2(maxx,minx,maxy,miny); cpack(0x00000000); clear(); cpack(0x000000ff); if(!G_prefs.points) { move2(data[0][0],data[0][1]); for(i=1;i