/* Make cursor mkcur.c A program to build a cursor. Started Jan 27, 2001 */ /* Don Secrest */ #include #include #include #include #include #include #include "arrow.h" unsigned char *fnt=0; static int software = 0,psiz; static unsigned int sprt[64] = {0}; void usage(void) { puts("Usage:\n" "buildcsr -p -b -m -s\n" "\tDraw sprite by holding down the left mouse button.\n" "\tDraw color 2 type 2 and use left button.\n" "\tRight mouse button to erase pixels.\n" "\t-p print out the sprite as a header file to be compiled\n" "\t-b print out the sprite as a binary file to be read by a program\n" "\t-m to use any mode. Default is vga_default mode or G640x480x256.\n" "\t-s to use software cursor. Default is to use hardware cursor if it\n" "\t exits." ); exit(2); }; void setcursor(int *arrow,int cursor, int color0, int color1) { static int init = 1; if(init) { init = 0; if(cursor != 0) vga_setcursorimage(cursor,0,color0,color1,(void *)arrow); else { vga_setmousesupport(1); vga_initcursor(software); } } vga_setcursorimage(cursor,0,color0,color1,(void *) arrow); /* if(vga_selectcursor(0) == -1) { vga_setmode(TEXT); printf("Cursor select failure.\n"); exit(1); } */ vga_selectcursor(cursor); mouse_setposition(0,0); mouse_setxrange(-5,psiz - 1); mouse_setyrange(0,psiz - 1); return; }; int main(int argc,char **argv) { int vgamode,opt,vmode=0,color1,color2,xmax,ymax,i,j,px,dx,colnum; int colors; char *nameb=0,*namep=0; FILE *binfile=0,*progfile=0; while(EOF !=(opt = getopt(argc,argv,"p:b:m:s"))) switch(opt){ case 'p': namep = optarg; break; case 'b': nameb = optarg; break; case 'm': vmode = atoi(optarg); break; case 's': software = 1; break; case ':': printf("Missingh argument.\n"); usage(); case '?': printf("Unknown argument, %c\n",optopt); usage(); } vga_init(); if(vmode) vgamode = vmode; else vgamode = vga_getdefaultmode(); if(vgamode == -1) vgamode = G640x480x256; if(!vga_hasmode(vgamode)){ printf("Mode %d not available\n",vgamode); exit(1); } vga_setmode(vgamode); gl_setcontextvga(vgamode); gl_enableclipping(); fnt = gl_font8x8; gl_setfont(8,8,fnt); gl_setwritemode(FONT_COMPRESSED + WRITEMODE_OVERWRITE); gl_setfontcolors(0,vga_white()); colors = color1 = gl_rgbcolor(0,200,0); color2 = gl_rgbcolor(100,0,100); xmax = vga_getxdim(); ymax = vga_getydim(); colnum = vga_getcolors(); if(colnum == 256) vga_setcolor(vga_white()); else vga_setrgbcolor(255,255,255); psiz = (xmax < ymax)?xmax:ymax; i = (psiz -8)/32; psiz = i*32 - 1; j = (i*5)/6; px = j; dx = i; setcursor(arrow,0,0xff0000,0x0000ff); vga_drawline(0,0,psiz+1,0); vga_drawline(psiz+1,0,psiz+1,psiz); vga_drawline(psiz+1,psiz,0,psiz); vga_drawline(0,psiz,0,0); gl_printf(1,psiz+1,"Type n: new sprite, o: old, q: quit"); gl_fillbox(290,psiz+1,px,px,colors); do { int evt,mx,my,button,key; evt = vga_waitevent(VGA_MOUSEEVENT | VGA_KEYEVENT,NULL,NULL,NULL,NULL); if(evt & VGA_KEYEVENT) { key = vga_getkey(); if(key == 'q' || key == 'Q') break; if(key == 'n') { setcursor(sprt,1,0xff0000,0x0000ff); } if(key == 'o') { setcursor(arrow,0,0xff0000,0x0000ff); } if(key == '2') { colors = color2; gl_fillbox(290,psiz+1,px,px,colors); } if(key == '1') { colors = color1; gl_fillbox(290,psiz+1,px,px,colors); } } if(evt & VGA_MOUSEEVENT) { int x,y,add; unsigned int loc; button = 0; mouse_update(); mx = mouse_getx(); my = mouse_gety(); button = mouse_getbutton(); vga_setcursorposition(mx,my); vga_showcursor(1); if(button) { vga_showcursor(2); x = 1 + (mx/dx)*dx; y = 1 + (my/dx)*dx; gl_fillbox(x,y,px,px,colors); add = y/dx +32; loc = 1 << (31 - x/dx); if(button & 4) { sprt[add] = sprt[add] | loc; if(colors == color2) sprt[add - 32] = sprt[add - 32] | loc; } else if(button & 1) { vga_showcursor(2); x = 1 + (mx/dx)*dx; y = 1 + (my/dx)*dx; gl_fillbox(x,y,px,px,0); sprt[add] = sprt[add] & (~loc); /* erase it. */ sprt[add - 32] = sprt[add - 32] & (~loc); } } } }while(1); vga_setmode(TEXT); if(namep) { if((progfile = fopen(namep,"w"))) { fprintf(progfile,"unsigned int %s[64] = {\n",namep); for(i = 0;i < 63;i++) { fprintf(progfile,"0x%08x, ",sprt[i]); if((i+1)%4 == 0) fprintf(progfile,"\n"); } fprintf(progfile,"0x%08x};\n",sprt[63]); } else printf("Unable to open file %s.\n",namep); } if(nameb) { if((binfile = fopen(nameb,"w"))) fwrite(sprt,4,64,binfile); else printf("Unable to open file %s.\n",nameb); } printf("psiz = %d, px = %d, dx = %d\n",psiz,px,dx); return(0); }