9 struct vid_modeinfo *vm;
12 static const char *usage_fmt = "Usage %s: [options]\n"
14 " -s <XxY>: video resolution\n"
15 " -b <bpp>: color depth\n";
17 int main(int argc, char **argv)
25 for(i=1; i<argc; i++) {
26 if(argv[i][0] == '-') {
28 invalopt: fprintf(stderr, "invalid option: %s\n", argv[i]);
33 if(!argv[++i] || sscanf(argv[i], "%dx%d", &xres, &yres) != 2) {
34 fprintf(stderr, "invalid resolution: %s\n", argv[i]);
40 if(!argv[++i] || (bpp = atoi(argv[i])) <= 0) {
41 fprintf(stderr, "invalid color depth: %s\n", argv[i]);
46 printf(usage_fmt, argv[0]);
53 fprintf(stderr, "unexpected argument: %s\n", argv[i]);
59 if(vid_init() == -1) {
60 fprintf(stderr, "failed to initialize video\n");
63 printf("press any key...\n");
66 if((mode = vid_findmode(xres, yres, bpp)) == -1) {
67 fprintf(stderr, "failed to find video mode: %dx%d %dbpp\n", xres, yres, bpp);
70 if(!(vmem = vid_setmode(mode))) {
71 fprintf(stderr, "failed to set video mode %04x\n", mode);
74 vm = vid_modeinfo(mode);
99 static float fmin(float a, float b)
101 return a < b ? a : b;
104 #define PI 3.14159265
105 #define TWO_PI (PI * 2.0f)
111 struct vid_color cmap[256];
112 int winsz, winleft, winpos;
114 for(i=0; i<256; i++) {
115 float x = (float)i / (256.0f / TWO_PI);
116 cmap[i].r = (int)fmin(0.0f, sin(x) * 255.0f);
117 cmap[i].g = (int)fmin(0.0f, sin(x - PI) * 255.0f);
118 cmap[i].b = (int)fmin(0.0f, cos(x - TWO_PI) * 255.0f);
120 vid_setpal(0, 256, cmap);
134 for(i=0; i<vm->height; i++) {
135 for(j=0; j<vm->width; j++) {
137 winpos += vm->win_step;
138 vid_setwin(0, winpos);