#include #include #include #include #include #include #include extern const char *__progname; #include "gl.h" #include "afont.h" static void handleargs(int ac, char **av) { int errs; int skip; errs = 0; skip = 0; for (ac--,av++;ac;ac--,av++) { if (skip > 0) { skip --; continue; } if (0) { needarg:; fprintf(stderr,"%s: %s needs another argument\n",__progname,*av); errs ++; continue; } #define WANTARGS(n) do { if ((skip+=(n)) >= ac) goto needarg; } while (0) if (!strcmp(*av,"-idev")) { WANTARGS(1); if (setidev(av[1])) { int first; first = 1; listidev(({ static void foo(const char *n, const char *d) { if (first) fprintf(stderr,"Known -idev values:\n"); fprintf(stderr,"\t%-20s %s\n",n,d); first = 0; } &foo; })); errs ++; } } else if (!strcmp(*av,"-odev")) { WANTARGS(1); if (setodev(av[1])) { int first; first = 1; listodev(({ static void foo(const char *n, const char *d) { if (first) fprintf(stderr,"Known -odev values:\n"); fprintf(stderr,"\t%-20s %s\n",n,d); first = 0; } &foo; })); errs ++; } } else if (**av == '-') { fprintf(stderr,"%s: unrecognized flag %s\n",__progname,*av); errs ++; } else { fprintf(stderr,"%s: extra argument: %s\n",__progname,*av); errs ++; } } if (errs) exit(1); } int main(int, char **); int main(int ac, char **av) { int i; int j; float v[2]; handleargs(ac,av); foreground(); prefposition(0,XMAXSCREEN-1,0,YMAXSCREEN-1); winopen("asteroids"); fullscrn(); RGBmode(); doublebuffer(); viewport(0,XMAXSCREEN,0,YMAXSCREEN); ortho2(0,XMAXSCREEN,0,YMAXSCREEN); gconfig(); cpack(0x00000000); clear(); cpack(0x00ffffff); for (i=-3;i<=3;i++) { for (j=-3;j<=3;j++) { bgnline(); v[0] = 500 + (50 * i); v[1] = 500 + (50 * j); v2f(v); v[0] = 500 + (57 * i); v[1] = 500 + (57 * j); v2f(v); endline(); } } for (i=0;i<=7;i++) { j = "\0\1\2\4\6\11\14"[i]; bgnline(); v[0] = 0; v[1] = j; v2f(v); v[0] = XMAXSCREEN; v[1] = j; v2f(v); endline(); bgnline(); v[0] = j; v[1] = 0; v2f(v); v[0] = j; v[1] = YMAXSCREEN; v2f(v); endline(); bgnline(); v[0] = XMAXSCREEN-j; v[1] = 0; v2f(v); v[0] = XMAXSCREEN-j; v[1] = YMAXSCREEN; v2f(v); endline(); bgnline(); v[0] = 0; v[1] = YMAXSCREEN-j; v2f(v); v[0] = XMAXSCREEN; v[1] = YMAXSCREEN-j; v2f(v); endline(); } { const char *v1; const char *v2; char buf[1024]; v1 = getenv("BWTWO_OFFSET"); if (! v1) v1 = "(unset)"; v2 = getenv("BWTWO_STRETCH"); if (! v2) v2 = "(unset)"; sprintf(&buf[0],"OFFSET=%s STRETCH=%s",v1,v2); pushmatrix(); translate(25,25,0); scale(25,25,1); font_leftstring(&buf[0]); popmatrix(); } swapbuffers(); sleep(1); closegl(); exit(0); }