]> 4ch.mooo.com Git - 16.git/blob - src/tesuto.c
update tesuto.c to latest VRL demo code. sprite drawing just got a bit faster.
[16.git] / src / tesuto.c
1 #include "src/tesuto.h"\r
2 \r
3 static unsigned char palette[768];\r
4 \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
9         unsigned int bufsz;\r
10         int fd;\r
11 \r
12         if (argc < 3) {\r
13                 fprintf(stderr,"drawvrl <VRL file> <palette file>\n");\r
14                 return 1;\r
15         }\r
16 \r
17         fd = open(argv[1],O_RDONLY|O_BINARY);\r
18         if (fd < 0) {\r
19                 fprintf(stderr,"Unable to open '%s'\n",argv[1]);\r
20                 return 1;\r
21         }\r
22         {\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
26 \r
27                 bufsz = (unsigned int)sz;\r
28                 buffer = malloc(bufsz);\r
29                 if (buffer == NULL) return 1;\r
30 \r
31                 lseek(fd,0,SEEK_SET);\r
32                 if ((unsigned int)read(fd,buffer,bufsz) < bufsz) return 1;\r
33 \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
37         }\r
38         close(fd);\r
39 \r
40         probe_dos();\r
41         if (!probe_vga()) {\r
42                 printf("VGA probe failed\n");\r
43                 return 1;\r
44         }\r
45         int10_setmode(19);\r
46         update_state_from_vga();\r
47         vga_enable_256color_modex(); // VGA mode X\r
48 \r
49         /* load color palette */\r
50         fd = open(argv[2],O_RDONLY|O_BINARY);\r
51         if (fd >= 0) {\r
52                 unsigned int i;\r
53 \r
54                 read(fd,palette,768);\r
55                 close(fd);\r
56 \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
59         }\r
60 \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
64 \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
67 \r
68         {\r
69                 unsigned int i;\r
70 \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
73         }\r
74         while (getch() != 13);\r
75 \r
76         {\r
77                 unsigned int i;\r
78 \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
81         }\r
82         while (getch() != 13);\r
83 \r
84         {\r
85                 unsigned int i;\r
86 \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
89         }\r
90         while (getch() != 13);\r
91         {\r
92                 unsigned int i;\r
93 \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
96         }\r
97         while (getch() != 13);\r
98 \r
99         int10_setmode(3);\r
100         free(vrl_lineoffs);\r
101         buffer = NULL;\r
102         free(buffer);\r
103         bufsz = 0;\r
104         return 0;\r
105 }\r
106 \r