#include #include #include #include #include #include #include "wllib.h" #define SAFE_BORDER (4) #define SIZE_MIN (16) #define DEFAULT_MODE G320x200x256 extern void drawgfx(void); long xmin,xmax,ymin,ymax; int winx,winy,iniline,minimax=1,xcur,ycur; float coefx,coefy; char *pname; void wl_line(long x,long y) { if (iniline) { iniline=0; if (minimax) { xmin=xmax=x; ymin=ymax=y; } else { xcur=rint(coefx*(x-xmin))+SAFE_BORDER; ycur=winy-SAFE_BORDER-rint(coefy*(y-ymin)); } } else { if (minimax) { if (xxmax) xmax=x; if (yymax) ymax=y; } else { int xcur2,ycur2; vga_drawline(xcur,ycur, xcur2=rint(coefx*(x-xmin))+SAFE_BORDER,ycur2=winy-SAFE_BORDER-rint(coefy*(y-ymin))); xcur=xcur2; ycur=ycur2; } } } void wl_done(void) { iniline=1; drawgfx(); minimax=0; if (xmax==xmin) xmax++; if (ymax==ymin) ymax++; if (iniline) return; coefx=(float)(winx-2*SAFE_BORDER-1)/(xmax-xmin); coefy=(float)(winy-2*SAFE_BORDER-1)/(ymax-ymin); iniline=1; drawgfx(); vga_getch(); } static void wl_cleanup(void) { vga_setmode(TEXT); } void wl_init(int *argcp,char **argv,const char *class) { int i,j; char *s=NULL; int mode=-1; if ((pname=rindex(*argv,'/'))) pname++; else pname=*argv; for (j=i=1;i<*argcp;i++) if (!strcmp(argv[i],"-m")||!strcmp(argv[i],"--mode")) { s=argv[++i]; j++; } else argv[j++]=argv[i]; if (s) mode=vga_getmodenumber(s); if (mode==-1) if ((mode=vga_getdefaultmode())==-1) mode=DEFAULT_MODE; if (vga_setmode(mode)==-1) { fprintf(stderr,"%s: Mode \"%s\" [%d] not available!\n",pname, vga_getmodename(mode),mode); exit(EXIT_FAILURE); } atexit(wl_cleanup); winx=vga_getxdim(); winy=vga_getydim(); vga_setcolor(vga_white()); }