]> 4ch.mooo.com Git - 16.git/blobdiff - src/tesuto.c
update tesuto.c to latest VRL demo code. sprite drawing just got a bit faster.
[16.git] / src / tesuto.c
index 4ad302e9196987db772c5600fcce029c8e16d9f7..f309c143405349b6f9d2191995a1d41ef8a2c81f 100755 (executable)
@@ -1,6 +1,106 @@
-#include <stdio.h>\r
+#include "src/tesuto.h"\r
 \r
-void main()\r
-{\r
-       printf("pee\n");\r
+static unsigned char palette[768];\r
+\r
+int main(int argc,char **argv) {\r
+       struct vrl1_vgax_header *vrl_header;\r
+       vrl1_vgax_offset_t *vrl_lineoffs;\r
+       unsigned char *buffer;\r
+       unsigned int bufsz;\r
+       int fd;\r
+\r
+       if (argc < 3) {\r
+               fprintf(stderr,"drawvrl <VRL file> <palette file>\n");\r
+               return 1;\r
+       }\r
+\r
+       fd = open(argv[1],O_RDONLY|O_BINARY);\r
+       if (fd < 0) {\r
+               fprintf(stderr,"Unable to open '%s'\n",argv[1]);\r
+               return 1;\r
+       }\r
+       {\r
+               unsigned long sz = lseek(fd,0,SEEK_END);\r
+               if (sz < sizeof(*vrl_header)) return 1;\r
+               if (sz >= 65535UL) return 1;\r
+\r
+               bufsz = (unsigned int)sz;\r
+               buffer = malloc(bufsz);\r
+               if (buffer == NULL) return 1;\r
+\r
+               lseek(fd,0,SEEK_SET);\r
+               if ((unsigned int)read(fd,buffer,bufsz) < bufsz) return 1;\r
+\r
+               vrl_header = (struct vrl1_vgax_header*)buffer;\r
+               if (memcmp(vrl_header->vrl_sig,"VRL1",4) || memcmp(vrl_header->fmt_sig,"VGAX",4)) return 1;\r
+               if (vrl_header->width == 0 || vrl_header->height == 0) return 1;\r
+       }\r
+       close(fd);\r
+\r
+       probe_dos();\r
+       if (!probe_vga()) {\r
+               printf("VGA probe failed\n");\r
+               return 1;\r
+       }\r
+       int10_setmode(19);\r
+       update_state_from_vga();\r
+       vga_enable_256color_modex(); // VGA mode X\r
+\r
+       /* load color palette */\r
+       fd = open(argv[2],O_RDONLY|O_BINARY);\r
+       if (fd >= 0) {\r
+               unsigned int i;\r
+\r
+               read(fd,palette,768);\r
+               close(fd);\r
+\r
+               vga_palette_lseek(0);\r
+               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
+       }\r
+\r
+       /* preprocess the sprite to generate line offsets */\r
+       vrl_lineoffs = vrl1_vgax_genlineoffsets(vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       if (vrl_lineoffs == NULL) return 1;\r
+\r
+       draw_vrl1_vgax_modex(0,0,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       while (getch() != 13);\r
+\r
+       {\r
+               unsigned int i;\r
+\r
+               for (i=1;i < 320;i++)\r
+                       draw_vrl1_vgax_modex(i,0,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       }\r
+       while (getch() != 13);\r
+\r
+       {\r
+               unsigned int i;\r
+\r
+               for (i=1;i < 200;i++)\r
+                       draw_vrl1_vgax_modex(i,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       }\r
+       while (getch() != 13);\r
+\r
+       {\r
+               unsigned int i;\r
+\r
+               for (i=(2 << 6)/*200%*/;i >= (1 << 4)/*25%*/;i--)\r
+                       draw_vrl1_vgax_modexstretch(0,0,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       }\r
+       while (getch() != 13);\r
+       {\r
+               unsigned int i;\r
+\r
+               for (i=(2 << 6)/*200%*/;i >= (1 << 4)/*25%*/;i--)\r
+                       draw_vrl1_vgax_modexystretch(0,0,i,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       }\r
+       while (getch() != 13);\r
+\r
+       int10_setmode(3);\r
+       free(vrl_lineoffs);\r
+       buffer = NULL;\r
+       free(buffer);\r
+       bufsz = 0;\r
+       return 0;\r
 }\r
+\r