]> 4ch.mooo.com Git - 16.git/blobdiff - src/bakapi.c
bakapi modex16 test fun: allow video mode choice from command line.
[16.git] / src / bakapi.c
index 9a5412c752b1935703a8f8008d0be51e51e08e6f..1b839a21bb0d8b9c7c0aa5d43267746e928d0b15 100755 (executable)
 global_game_variables_t gvar;
 static bakapee_t bakapee;
 word key,d,xpos,ypos,xdir,ydir;
+sword vgamodex_mode = 1; // 320x240 default
 int ch=0x0;
 
 void
 main(int argc, char *argvar[])
 {
+       char *a;
+       int i;
+
+       // allow changing default mode from command line
+       for (i=1;i < argc;) {
+               a = argvar[i++];
+
+               if (*a == '-') {
+                       do { a++; } while (*a == '-');
+
+                       if (!strcmp(a,"mx")) {
+                               // (based on src/lib/modex16.c)
+                               // 1 = 320x240
+                               // 2 = 160x120
+                               // 3 = 320x200
+                               // 4 = 192x144
+                               // 5 = 256x192
+                               vgamodex_mode = (sword)strtoul(argvar[i++],NULL,0);
+                       }
+                       else {
+                               fprintf(stderr,"Unknown switch %s\n",a);
+                               return;
+                       }
+               }
+               else {
+                       fprintf(stderr,"Unknown command arg %s\n",a);
+                       return;
+               }
+       }
+
        // DOSLIB: check our environment
        probe_dos();
 
@@ -63,32 +94,10 @@ main(int argc, char *argvar[])
        ydir=1;
 
 #ifdef MXLIB
-       VGAmodeX(1, &gvar);
+       VGAmodeX(vgamodex_mode, &gvar); // TODO: Suggestion: Instead of magic numbers for the first param, might I suggest defining an enum or some #define constants that are easier to remember? --J.C.
 #else
-       int10_setmode(19);
-       update_state_from_vga();
-       vga_enable_256color_modex(); // VGA mode X
-       vga_state.vga_width = 320; // VGA lib currently does not update this
-       vga_state.vga_height = 240; // VGA lib currently does not update this
-
-//#if 1 // 320x240 test mode: this is how Project 16 is using our code, enable for test case
-       {
-               struct vga_mode_params cm;
-
-               vga_read_crtc_mode(&cm);
-
-               // 320x240 mode 60Hz
-               cm.vertical_total = 525;
-               cm.vertical_start_retrace = 0x1EA;
-               cm.vertical_end_retrace = 0x1EC;
-               cm.vertical_display_end = 480;
-               cm.vertical_blank_start = 489;
-               cm.vertical_blank_end = 517;
-
-               vga_write_crtc_mode(&cm,0);
-       }
-       vga_state.vga_height = 240; // VGA lib currently does not update this
-//#endif
+# error REMOVED // this code is written around modex16 which so far is a better fit than using DOSLIB vga directly, so leave MXLIB code in.
+               // we'll integrate DOSLIB vga into that part of the code instead for less disruption. -- J.C.
 #endif
        bakapee.xx = rand()&0%gvar.video.page[0].width;
        bakapee.yy = rand()&0%gvar.video.page[0].height;
@@ -116,33 +125,36 @@ main(int argc, char *argvar[])
 #ifdef BOINK
        while(d>0)      // on!
        {
-               if(!kbhit())
-               { // conditions of screen saver
+               /* run screensaver routine until keyboard input */
+               while (key > 0) {
+                       if (kbhit()) {
+                               getch(); // eat keyboard input
+                               break;
+                       }
+
                        ding(&gvar.video.page[0], &bakapee, key);
                }
-               else
+
                {
-#ifndef MXLIB
-                       int10_setmode(3);
-#else
+                       int c;
+
+# ifndef MXLIB
+#  error REMOVED // this code is written around modex16 which so far is a better fit than using DOSLIB vga directly, so leave MXLIB code in.
+               // we'll integrate DOSLIB vga into that part of the code instead for less disruption. -- J.C.
+# else
                        VGAmodeX(0, &gvar);
-#endif
+# endif
                        // user imput switch
                        fprintf(stderr, "xx=%d  yy=%d   tile=%d\n", bakapee.xx, bakapee.yy, bakapee.tile);
-                       printf("Enter 1, 2, 3, 4, or 6 to run a screensaver, or enter 0 to quit.\n", getch());  // prompt the user
-                       //scanf("%d", &key);
-                       if(scanf("%d", &key) != 1)
-                       {
-                               printf("%d\n", key);
-                       }
-                       getch();
-                       //if(key==3){xx=yy=0;} // crazy screen saver wwww
-                       switch (key)
-                       {
-                               case 0:
+                       printf("Enter 1, 2, 3, 4, or 6 to run a screensaver, or enter 0 to quit.\n");
+
+                       c = getch();
+                       switch (c) {
+                               case 27: /* Escape key */
+                               case '0':
                                        d=0;
-                               break;
-                               case 65536:
+                                       break;
+                               case 'b': // test tile change
                                        switch (bakapee.tile)
                                        {
                                                case 0:
@@ -152,50 +164,34 @@ main(int argc, char *argvar[])
                                                        bakapee.tile=0;
                                                break;
                                        }
-                                       d=2;
-                               default:
-#ifdef MXLIB
+                                       key=0;
+                                       break;
+                               case '1':
+                               case '2':
+                               case '3':
+                               case '4':
+                               case '5':
+                               case '6':
+                                       key = c - '0';
+# ifdef MXLIB
                                        gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0]);
                                        gvar.video.page[0].width += (TILEWH*2);
                                        gvar.video.page[0].height += (TILEWH*2);
-                                       VGAmodeX(1, &gvar);
-#else
-                                               probe_dos();
-       if (!probe_vga()) {
-               printf("VGA probe failed\n");
-               return 1;
-       }
-       int10_setmode(19);
-       update_state_from_vga();
-       vga_enable_256color_modex(); // VGA mode X
-       vga_state.vga_width = 320; // VGA lib currently does not update this
-       vga_state.vga_height = 240; // VGA lib currently does not update this
-
-//#if 1 // 320x240 test mode: this is how Project 16 is using our code, enable for test case
-       {
-               struct vga_mode_params cm;
-
-               vga_read_crtc_mode(&cm);
-
-               // 320x240 mode 60Hz
-               cm.vertical_total = 525;
-               cm.vertical_start_retrace = 0x1EA;
-               cm.vertical_end_retrace = 0x1EC;
-               cm.vertical_display_end = 480;
-               cm.vertical_blank_start = 489;
-               cm.vertical_blank_end = 517;
-
-               vga_write_crtc_mode(&cm,0);
-       }
-       vga_state.vga_height = 240; // VGA lib currently does not update this
-//#endif
-#endif
+                                       VGAmodeX(vgamodex_mode, &gvar);
+# else
+#  error REMOVED // this code is written around modex16 which so far is a better fit than using DOSLIB vga directly, so leave MXLIB code in.
+               // we'll integrate DOSLIB vga into that part of the code instead for less disruption. -- J.C.
+# endif
                                        modexShowPage(&gvar.video.page[0]);
-                               break;
+                                       break;
+                               default:
+                                       key=0;
+                                       break;
                        }
                }
        }
-#else
+#else // !defined(BOINK)
+// FIXME: Does not compile. Do you want to remove this?
        while(1)
        { // conditions of screen saver
                while(!kbhit())
@@ -269,7 +265,7 @@ main(int argc, char *argvar[])
        if(ch==0x1b)break; // 'ESC'
        }
 //     VGAmodeX(0, &gvar);
-#endif
+#endif // defined(BOINK)
        printf("bakapi ver. 1.04.13.04\nis made by sparky4\81i\81\86\83Ö\81\85\81j feel free to use it ^^\nLicence: GPL v3\n");
 }
 //pee!