1 #include "src/tesuto.h"
\r
3 static unsigned char palette[768];
\r
5 int main(int argc,char **argv) {
\r
6 struct vrl1_vgax_header *vrl_header;
\r
7 vrl1_vgax_offset_t *vrl_lineoffs;
\r
8 unsigned char *buffer;
\r
13 fprintf(stderr,"drawvrl <VRL file> <palette file>\n");
\r
17 fd = open(argv[1],O_RDONLY|O_BINARY);
\r
19 fprintf(stderr,"Unable to open '%s'\n",argv[1]);
\r
23 unsigned long sz = lseek(fd,0,SEEK_END);
\r
24 if (sz < sizeof(*vrl_header)) return 1;
\r
25 if (sz >= 65535UL) return 1;
\r
27 bufsz = (unsigned int)sz;
\r
28 buffer = malloc(bufsz);
\r
29 if (buffer == NULL) return 1;
\r
31 lseek(fd,0,SEEK_SET);
\r
32 if ((unsigned int)read(fd,buffer,bufsz) < bufsz) return 1;
\r
34 vrl_header = (struct vrl1_vgax_header*)buffer;
\r
35 if (memcmp(vrl_header->vrl_sig,"VRL1",4) || memcmp(vrl_header->fmt_sig,"VGAX",4)) return 1;
\r
36 if (vrl_header->width == 0 || vrl_header->height == 0) return 1;
\r
42 printf("VGA probe failed\n");
\r
46 update_state_from_vga();
\r
47 vga_enable_256color_modex(); // VGA mode X
\r
49 /* load color palette */
\r
50 fd = open(argv[2],O_RDONLY|O_BINARY);
\r
54 read(fd,palette,768);
\r
57 vga_palette_lseek(0);
\r
58 for (i=0;i < 256;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2);
\r
61 /* preprocess the sprite to generate line offsets */
\r
62 vrl_lineoffs = vrl1_vgax_genlineoffsets(vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));
\r
63 if (vrl_lineoffs == NULL) return 1;
\r
65 draw_vrl1_vgax_modex(0,0,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));
\r
66 while (getch() != 13);
\r
71 for (i=1;i < 320;i++)
\r
72 draw_vrl1_vgax_modex(i,0,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));
\r
74 while (getch() != 13);
\r
79 for (i=1;i < 200;i++)
\r
80 draw_vrl1_vgax_modex(i,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));
\r
82 while (getch() != 13);
\r
87 for (i=(2 << 6)/*200%*/;i >= (1 << 4)/*25%*/;i--)
\r
88 draw_vrl1_vgax_modexstretch(0,0,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));
\r
90 while (getch() != 13);
\r
94 for (i=(2 << 6)/*200%*/;i >= (1 << 4)/*25%*/;i--)
\r
95 draw_vrl1_vgax_modexystretch(0,0,i,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));
\r
97 while (getch() != 13);
\r
100 free(vrl_lineoffs);
\r