more vbe
[vidsys] / vidsys.c
index 66f6811..01c8c81 100644 (file)
--- a/vidsys.c
+++ b/vidsys.c
@@ -2,21 +2,24 @@
 #include <stdlib.h>
 #include <assert.h>
 #include "vidsys.h"
+#include "vga.h"
 #include "drv.h"
 #include "cdpmi.h"
 
 struct vid_driver *vid_drvlist[MAX_DRV];
 int vid_numdrv;
 
+void *vid_vmem;
+int vid_vmem_size;
+
 static struct vid_modeinfo **modes, *cur_mode;
 static int num_modes, max_modes;
 
-static void *vmem;
-static int vmem_size;
 
 int vid_init(void)
 {
-       int i, j;
+       int i, j, len;
+       struct vid_modeinfo *vm;
 
        vid_numdrv = 0;
        free(modes);
@@ -24,8 +27,8 @@ int vid_init(void)
        cur_mode = 0;
        num_modes = max_modes = 0;
 
-       vmem = 0;
-       vmem_size = 0;
+       vid_vmem = 0;
+       vid_vmem_size = 0;
 
        if(dpmi_init() == -1) {
                return -1;
@@ -57,9 +60,18 @@ int vid_init(void)
        }
 
        printf("found %d modes:\n", num_modes);
-       for(i=0; i<num_modes; i++) {
-               printf("[%6s] %04x: %dx%d %dbpp\n", modes[i]->drv->name, modes[i]->modeno,
-                               modes[i]->width, modes[i]->height, modes[i]->bpp);
+       for(i=0; i<num_modes; i+=2) {
+               vm = modes[i];
+               len = printf("[%4s] %04x: %dx%d %dbpp", vm->drv->name, vm->modeno,
+                               vm->width, vm->height, vm->bpp);
+               if(i + 1 >= num_modes) {
+                       putchar('\n');
+                       break;
+               }
+               for(j=len; j<40; j++) putchar(' ');
+               vm = modes[i + 1];
+               printf("[%4s] %04x: %dx%d %dbpp\n", vm->drv->name, vm->modeno,
+                               vm->width, vm->height, vm->bpp);
        }
 
        return 0;
@@ -73,8 +85,8 @@ void vid_cleanup(void)
                vid_setmode(3);
        }
 
-       if(vmem >= (void*)0x100000) {
-               dpmi_munmap(vmem);
+       if(vid_vmem >= (void*)0x100000) {
+               dpmi_munmap(vid_vmem);
        }
 
        for(i=0; i<vid_numdrv; i++) {
@@ -106,19 +118,19 @@ void *vid_setmode(int mode)
                        if(drv->ops->setmode(mode) == 0) {
                                cur_mode = modes[i];
 
-                               if(vmem >= (void*)0x100000) {
-                                       assert(vmem_size);
-                                       dpmi_munmap(vmem);
+                               if(vid_vmem >= (void*)0x100000) {
+                                       assert(vid_vmem_size);
+                                       dpmi_munmap(vid_vmem);
                                }
 
                                if(modes[i]->vmem_addr < 0x100000) {
-                                       vmem = (void*)modes[i]->vmem_addr;
-                                       vmem_size = 0;
+                                       vid_vmem = (void*)modes[i]->vmem_addr;
+                                       vid_vmem_size = 0;
                                } else {
-                                       vmem = dpmi_mmap(modes[i]->vmem_addr, modes[i]->vmem_size);
-                                       vmem_size = modes[i]->vmem_size;
+                                       vid_vmem = dpmi_mmap(modes[i]->vmem_addr, modes[i]->vmem_size);
+                                       vid_vmem_size = modes[i]->vmem_size;
                                }
-                               return vmem;
+                               return vid_vmem;
                        }
                }
        }