From: prefs AT my-deja DOT com Newsgroups: comp.os.msdos.djgpp Subject: vesa Date: Tue, 20 Jul 1999 12:20:47 GMT Organization: Deja.com - Share what you know. Learn what you don't. Lines: 122 Message-ID: <7n1pim$q4a$1@nnrp1.deja.com> NNTP-Posting-Host: 192.138.110.220 X-Article-Creation-Date: Tue Jul 20 12:20:47 1999 GMT X-Http-User-Agent: Mozilla/4.08 [en] (Win95; I) X-Http-Proxy: 1.0 fridge1:81 (Squid/2.1.PATCH2), 1.0 x33.deja.com:80 (Squid/1.1.22) for client 131.97.232.156, 192.138.110.220 X-MyDeja-Info: XMYDJUIDprefs To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Hi. I have a little problem with my vesa routines They compile as they should but when I run them they can't get information about some modes. But when I run them with the "|more" after, they work just as they should. I can't really figure out whats going on please help. /*Beginning of code*/ typedef struct { /*You'll have to paste in the vesa info structure here because I removed it before posting this message*/ }VBEInfo; typedef struct { /*You'll have to paste in the vesa mode info structure here because I removed it before posting this message*/ }VBEModeInfo; int vesaDetect(VBEInfo *vesaInfo) { __dpmi_regs regs; strncpy(vesaInfo->VESASignature, "VBE2", 4); regs.x.ax = 0x4F00; regs.x.di = __tb & 0x0F; regs.x.es = (__tb >> 4) & 0xFFFF; dosmemput(vesaInfo, sizeof(VBEInfo), __tb); __dpmi_int(0x10, ®s); if(regs.h.ah) { printf("Failed getting VESAInformation\n"); return -1; } dosmemget(__tb, sizeof(VBEInfo), vesaInfo); if(strncmp(vesaInfo->VESASignature, "VESA", 4) != 0) { printf("Weird Vesa Signature\n"); return -1; } return 0; } int vesaModeInfo(unsigned short mode, VBEModeInfo *modeInfo) { __dpmi_regs regs; regs.x.ax = 0x4F01; regs.x.cx = mode; regs.x.di = __tb & 0x0F; regs.x.es = (__tb >> 4) & 0xFFFF; dosmemput(modeInfo, sizeof(VBEModeInfo), __tb); __dpmi_int(0x10, ®s); if(regs.h.ah) { printf("Failed getting VESAModeInformation\n"); return -1; } dosmemget(__tb, sizeof(VBEModeInfo), modeInfo); return 0; } int countModes(unsigned short *mode, VBEInfo *vesaInfo) { int modes; unsigned long modePtr; _farsetsel(_dos_ds); modes = 0; modePtr = ((vesaInfo->VideoModePtr & 0xFFFF0000) >> 12) + (vesaInfo->VideoModePtr & 0xFFFF); mode[modes] = _farnspeekw(modePtr); while(mode[modes] != 0xFFFF) { modes++; modePtr += 2; mode[modes] = _farnspeekw(modePtr); } return modes; } int main() { unsigned short mode[1024]; int modes, i; VBEInfo vinfo; VBEModeInfo minfo; vesaDetect(&vinfo); modes = countModes(mode, &vinfo); printf("Available Modes:\t%d\n",modes); for(i=0;i