aboutsummaryrefslogtreecommitdiffstats
path: root/control.c
diff options
context:
space:
mode:
authorJaroslav Hensl <jara@hensl.cz>2024-08-03 13:23:40 +0200
committerJaroslav Hensl <jara@hensl.cz>2024-08-03 13:23:40 +0200
commitbf572750be19c2dfe8f23739f06602b3be199f52 (patch)
treee7c6a325ce77886cc535def0327f4734ba808a5f /control.c
parente9f344c71fa790096f499e0d82ad072c8351bee0 (diff)
downloadvmdisp9x-bf572750be19c2dfe8f23739f06602b3be199f52.tar.gz
not pass unknown control codes to DIB (causes BSOD), control: if-elseif -> switchv1.2024.0.75
Diffstat (limited to 'control.c')
-rw-r--r--control.c629
1 files changed, 330 insertions, 299 deletions
diff --git a/control.c b/control.c
index 2828820..a45ef57 100644
--- a/control.c
+++ b/control.c
@@ -83,62 +83,62 @@ THE SOFTWARE.
**/
typedef struct _opengl_icd_t
{
- long Version;
- long DriverVersion;
- char DLL[262]; /* wchat_t DLL */
+ long Version;
+ long DriverVersion;
+ char DLL[262]; /* wchat_t DLL */
} opengl_icd_t;
#define OPENGL_ICD_SIZE sizeof(opengl_icd_t)
/* software OpenGL (Mesa3D softpipe/llvmpipe) */
const static opengl_icd_t software_icd = {
- 0x2,
- 0x1,
- "SOFTWARE"
+ 0x2,
+ 0x1,
+ "SOFTWARE"
};
/* Mesa3D SVGA3D OpengGL */
const static opengl_icd_t qemu3dfx_icd = {
- 0x2,
- 0x1,
- "QEMUFX"
+ 0x2,
+ 0x1,
+ "QEMUFX"
};
/* Mesa3D SVGA3D OpengGL */
const static opengl_icd_t vmwsvga_icd = {
- 0x2,
- 0x1,
- "VMWSVGA"
+ 0x2,
+ 0x1,
+ "VMWSVGA"
};
/* VIDEOPARAMETERS */
static VIDEOPARAMETERS_t tvsetup = {
- {0x02C62061UL, 0x1097, 0x11d1, 0x92, 0x0F, 0x00, 0xA0, 0x24, 0xDF, 0x15, 0x6E},
- 0, // dwOffset;
- 0, // dwCommand;
- 0, // dwFlags;
- VP_MODE_WIN_GRAPHICS, // dwMode;
- VP_TV_STANDARD_WIN_VGA, // dwTVStandard;
- VP_MODE_WIN_GRAPHICS | VP_MODE_TV_PLAYBACK, // dwAvailableModes;
+ {0x02C62061UL, 0x1097, 0x11d1, 0x92, 0x0F, 0x00, 0xA0, 0x24, 0xDF, 0x15, 0x6E},
+ 0, // dwOffset;
+ 0, // dwCommand;
+ 0, // dwFlags;
+ VP_MODE_WIN_GRAPHICS, // dwMode;
+ VP_TV_STANDARD_WIN_VGA, // dwTVStandard;
+ VP_MODE_WIN_GRAPHICS | VP_MODE_TV_PLAYBACK, // dwAvailableModes;
VP_TV_STANDARD_NTSC_M | VP_TV_STANDARD_NTSC_M_J | VP_TV_STANDARD_PAL_B | VP_TV_STANDARD_PAL_D | VP_TV_STANDARD_PAL_H | VP_TV_STANDARD_PAL_I | VP_TV_STANDARD_PAL_M | VP_TV_STANDARD_PAL_N |
VP_TV_STANDARD_SECAM_B | VP_TV_STANDARD_SECAM_D | VP_TV_STANDARD_SECAM_G | VP_TV_STANDARD_SECAM_H | VP_TV_STANDARD_SECAM_K | VP_TV_STANDARD_SECAM_K1 | VP_TV_STANDARD_SECAM_L |
VP_TV_STANDARD_WIN_VGA | VP_TV_STANDARD_NTSC_433 | VP_TV_STANDARD_PAL_G | VP_TV_STANDARD_PAL_60 | VP_TV_STANDARD_SECAM_L1, // dwAvailableTVStandard;
- 0, // dwFlickerFilter;
- 0, // dwOverScanX;
- 0, // dwOVerScanY;
- 1000, // dwMaxUnscaledX;
- 1000, // dwMaxUnscaledY;
- 0, // dwPositionX;
- 0, // dwPositionY;
- 100, // dwBrightness;
- 100, // dwContrast;
- 0, // dwCPType;
- 0, // dwCPCommand;
- VP_TV_STANDARD_NTSC_M | VP_TV_STANDARD_NTSC_M_J | VP_TV_STANDARD_PAL_B | VP_TV_STANDARD_PAL_D | VP_TV_STANDARD_PAL_H | VP_TV_STANDARD_PAL_I | VP_TV_STANDARD_PAL_M | VP_TV_STANDARD_PAL_N |
+ 0, // dwFlickerFilter;
+ 0, // dwOverScanX;
+ 0, // dwOVerScanY;
+ 1000, // dwMaxUnscaledX;
+ 1000, // dwMaxUnscaledY;
+ 0, // dwPositionX;
+ 0, // dwPositionY;
+ 100, // dwBrightness;
+ 100, // dwContrast;
+ 0, // dwCPType;
+ 0, // dwCPCommand;
+ VP_TV_STANDARD_NTSC_M | VP_TV_STANDARD_NTSC_M_J | VP_TV_STANDARD_PAL_B | VP_TV_STANDARD_PAL_D | VP_TV_STANDARD_PAL_H | VP_TV_STANDARD_PAL_I | VP_TV_STANDARD_PAL_M | VP_TV_STANDARD_PAL_N |
VP_TV_STANDARD_SECAM_B | VP_TV_STANDARD_SECAM_D | VP_TV_STANDARD_SECAM_G | VP_TV_STANDARD_SECAM_H | VP_TV_STANDARD_SECAM_K | VP_TV_STANDARD_SECAM_K1 | VP_TV_STANDARD_SECAM_L |
VP_TV_STANDARD_NTSC_433 | VP_TV_STANDARD_PAL_G | VP_TV_STANDARD_PAL_60 | VP_TV_STANDARD_SECAM_L1, // dwCPStandard;
- 0, // dwCPKey;
- 0, // bCP_APSTriggerBits
+ 0, // dwCPKey;
+ 0, // bCP_APSTriggerBits
};
#pragma code_seg( _INIT )
@@ -178,280 +178,311 @@ static VIDEOPARAMETERS_t tvsetup = {
LONG WINAPI __loadds Control(LPVOID lpDevice, UINT function,
LPVOID lpInput, LPVOID lpOutput)
{
- LONG rc = -1;
-
- //dbg_printf("Control (16bit): %d (0x%x)\n", function, function);
-
- if(function == QUERYESCSUPPORT)
- {
- WORD function_code = 0;
- function_code = *((LPWORD)lpInput);
- switch(function_code)
- {
- case OPENGL_GETINFO:
- case OP_FBHDA_SETUP:
- case MOUSETRAILS:
- case VIDEOPARAMETERS:
- rc = 1;
- break;
- case DCICOMMAND:
- rc = DD_HAL_VERSION;
- break;
- case QUERYESCSUPPORT:
- rc = 1;
- break;
- default:
- dbg_printf("Control: function check for unknown: %x\n", function_code);
- break;
- }
- }
- else if(function == OPENGL_GETINFO) /* input: NULL, output: opengl_icd_t */
- {
- if((hda->flags & FB_ACCEL_VMSVGA3D) && ((hda->flags & FB_FORCE_SOFTWARE) == 0))
- {
- _fmemcpy(lpOutput, &vmwsvga_icd, OPENGL_ICD_SIZE);
- }
- else if((hda->flags & FB_ACCEL_QEMU3DFX) && ((hda->flags & FB_FORCE_SOFTWARE) == 0))
- {
- _fmemcpy(lpOutput, &qemu3dfx_icd, OPENGL_ICD_SIZE);
- }
- else
- {
- _fmemcpy(lpOutput, &software_icd, OPENGL_ICD_SIZE);
- }
-
- rc = 1;
- }
- else if(function == DCICOMMAND) /* input ptr DCICMD */
- {
- DCICMD_t __far *lpDCICMD = lpInput;
- if(lpDCICMD != NULL)
- {
- if(lpDCICMD->dwVersion == DD_VERSION)
- {
- switch(lpDCICMD->dwCommand)
- {
- case DDCREATEDRIVEROBJECT:
- dbg_printf("DDCREATEDRIVEROBJECT: ");
- if(DDCreateDriverObject(0))
- {
- uint32_t __far *lpOut = lpOutput;
- DWORD hInst = DDHinstance();
- *lpOut = hInst;
-
- dbg_printf("success\n");
- rc = 1;
- }
- else
- {
- dbg_printf("failure\n");
- rc = 0;
- }
- break;
- case DDGET32BITDRIVERNAME:
- dbg_printf("DDGET32BITDRIVERNAME: ");
- if(DDGet32BitDriverName(lpOutput))
- {
- dbg_printf("success\n");
- rc = 1;
- }
- else
- {
- dbg_printf("failure\n");
- rc = 0;
- }
- break;
- case DDNEWCALLBACKFNS:
- dbg_printf("DDNEWCALLBACKFNS: ");
- if(DDNewCallbackFns(lpInput))
- {
- dbg_printf("success\n");
- rc = 1;
- }
- else
- {
- dbg_printf("failure\n");
- rc = 0;
- }
- break;
- case DDVERSIONINFO:
- dbg_printf("DDGetVersion\n");
- DDGetVersion(lpOutput);
- rc = 1;
- break;
- default:
- dbg_printf("UNK DD code: %lX\n", lpDCICMD->dwCommand);
- break;
- }
- }
- else if(lpDCICMD->dwVersion == DCI_VERSION)
- {
- dbg_printf("DCI(%d) -> failed!\n", lpDCICMD->dwCommand);
- }
- else
- {
- dbg_printf("hal required: %lX\n", lpDCICMD->dwVersion);
- }
- }
- }
- else if(function == MOUSETRAILS)
- {
-#ifdef DBGPRINT
- if(lpInput)
- {
- int trails = *((int __far *)lpInput);
- dbg_printf("MOUSETRAILS: %d\n", trails);
- }
-#endif
- //JH: mouse trails are disabled!
- //DIB_Control(lpDevice, MOUSETRAILS, lpInput, lpOutput);
- rc = 1;
- }
- else if(function == OP_FBHDA_SETUP) /* input: NULL, output: uint32 */
- {
- uint32_t __far *lpOut = lpOutput;
- lpOut[0] = hda_linear;
- dbg_printf("FBHDA request: %lX\n", hda_linear);
-
- rc = 1;
- }
- else if(function == VIDEOPARAMETERS)
+ LONG rc = -1;
+
+ dbg_printf("Control (16bit): %d (0x%x)\n", function, function);
+
+ switch(function)
{
- VIDEOPARAMETERS_t __far *vps = ((VIDEOPARAMETERS_t __far *)lpInput);
- rc = 0;
-
- if(vps->dwCommand == VP_COMMAND_GET)
- {
- DWORD checkMask = vps->dwFlags & (VP_FLAGS_TV_MODE | VP_FLAGS_TV_STANDARD | VP_FLAGS_FLICKER | VP_FLAGS_OVERSCAN | VP_FLAGS_MAX_UNSCALED |
- VP_FLAGS_POSITION | VP_FLAGS_BRIGHTNESS | VP_FLAGS_CONTRAST | VP_FLAGS_COPYPROTECT);
-
- if(checkMask == vps->dwFlags)
- {
- if(vps->dwFlags & VP_FLAGS_TV_MODE)
- {
- vps->dwMode = tvsetup.dwMode;
- vps->dwAvailableModes = tvsetup.dwAvailableModes;
- }
-
- if(vps->dwFlags & VP_FLAGS_TV_STANDARD)
- {
- vps->dwTVStandard = tvsetup.dwTVStandard;
- vps->dwAvailableTVStandard = tvsetup.dwAvailableTVStandard;
- }
-
- if(vps->dwFlags & VP_FLAGS_FLICKER)
- vps->dwFlickerFilter = tvsetup.dwFlickerFilter;
-
- if(vps->dwFlags & VP_FLAGS_OVERSCAN)
- {
- vps->dwOverScanX = tvsetup.dwOverScanX;
- vps->dwOverScanY = tvsetup.dwOverScanY;
- }
-
- if(vps->dwFlags & VP_FLAGS_MAX_UNSCALED)
- {
- vps->dwMaxUnscaledX = tvsetup.dwMaxUnscaledX;
- vps->dwMaxUnscaledY = tvsetup.dwMaxUnscaledY;
- }
-
- if(vps->dwFlags & VP_FLAGS_POSITION)
- {
- vps->dwPositionX = tvsetup.dwPositionX;
- vps->dwPositionY = tvsetup.dwPositionY;
- }
-
- if(vps->dwFlags & VP_FLAGS_BRIGHTNESS)
- vps->dwBrightness = tvsetup.dwBrightness;
-
- if(vps->dwFlags & VP_FLAGS_CONTRAST)
- vps->dwContrast = tvsetup.dwContrast;
-
-
- if(vps->dwFlags & VP_FLAGS_COPYPROTECT)
- {
- vps->dwCPType = tvsetup.dwCPType;
- vps->dwCPStandard = tvsetup.dwCPStandard;
- vps->bCP_APSTriggerBits = tvsetup.bCP_APSTriggerBits;
- }
-
- rc = 1;
- }
- }
- else if(vps->dwCommand == VP_COMMAND_SET)
- {
- rc = 1;
-
- if(vps->dwFlags & VP_FLAGS_TV_MODE)
- tvsetup.dwMode = vps->dwMode;
-
- if(vps->dwFlags & VP_FLAGS_TV_STANDARD)
- tvsetup.dwTVStandard = vps->dwTVStandard;
-
- if(vps->dwFlags & VP_FLAGS_FLICKER)
- tvsetup.dwFlickerFilter = vps->dwFlickerFilter;
-
- if(vps->dwFlags & VP_FLAGS_OVERSCAN)
- {
- tvsetup.dwOverScanX = vps->dwOverScanX;
- tvsetup.dwOverScanY = vps->dwOverScanY;
- }
-
- if(vps->dwFlags & VP_FLAGS_POSITION)
- {
- tvsetup.dwPositionX = vps->dwPositionX;
- tvsetup.dwPositionY = vps->dwPositionY;
- }
-
- if(vps->dwFlags & VP_FLAGS_BRIGHTNESS)
- tvsetup.dwBrightness = vps->dwBrightness;
-
- if(vps->dwFlags & VP_FLAGS_CONTRAST)
- tvsetup.dwContrast = vps->dwContrast;
-
- if(vps->dwFlags & VP_FLAGS_COPYPROTECT)
- {
- switch(vps->dwCPCommand)
- {
- case VP_CP_CMD_ACTIVATE:
- tvsetup.dwCPCommand = VP_CP_CMD_ACTIVATE;
- tvsetup.dwCPType = vps->dwCPType;
- tvsetup.dwCPKey = vps->dwCPKey;
- tvsetup.bCP_APSTriggerBits = vps->bCP_APSTriggerBits;
- break;
- case VP_CP_CMD_DEACTIVATE:
- case VP_CP_CMD_CHANGE:
- if(tvsetup.dwCPCommand == VP_CP_CMD_ACTIVATE)
- {
- if(tvsetup.dwCPKey != vps->dwCPKey)
- {
- rc = -1;
- }
- else
- {
- tvsetup.dwCPCommand = tvsetup.dwCPCommand;
- }
- }
- break;
- default:
- rc = 0;
- break;
- }
- }
- }
-
- if(rc < 0) /* return RC and don't pass to DIB */
- {
- return rc;
- }
- }
+ case QUERYESCSUPPORT:
+ {
+ WORD function_code = 0;
+ function_code = *((LPWORD)lpInput);
+ switch(function_code)
+ {
+ case OPENGL_GETINFO:
+ case OP_FBHDA_SETUP:
+ case MOUSETRAILS:
+ case VIDEOPARAMETERS:
+ rc = 1;
+ break;
+ case DCICOMMAND:
+ rc = DD_HAL_VERSION;
+ break;
+ case QUERYESCSUPPORT:
+ case QUERYDIBSUPPORT:
+ rc = 1;
+ break;
+ default:
+ dbg_printf("Control: function check for unknown: %x\n", function_code);
+ break;
+ }
+ break;
+ } /* QUERYESCSUPPORT */
+ case OPENGL_GETINFO: /* input: NULL, output: opengl_icd_t */
+ {
+ if((hda->flags & FB_ACCEL_VMSVGA3D) && ((hda->flags & FB_FORCE_SOFTWARE) == 0))
+ {
+ _fmemcpy(lpOutput, &vmwsvga_icd, OPENGL_ICD_SIZE);
+ }
+ else if((hda->flags & FB_ACCEL_QEMU3DFX) && ((hda->flags & FB_FORCE_SOFTWARE) == 0))
+ {
+ _fmemcpy(lpOutput, &qemu3dfx_icd, OPENGL_ICD_SIZE);
+ }
+ else
+ {
+ _fmemcpy(lpOutput, &software_icd, OPENGL_ICD_SIZE);
+ }
+
+ rc = 1;
+ break;
+ } /* OPENGL_GETINFO */
+ case DCICOMMAND: /* input ptr DCICMD */
+ {
+ DCICMD_t __far *lpDCICMD = lpInput;
+ if(lpDCICMD != NULL)
+ {
+ if(lpDCICMD->dwVersion == DD_VERSION)
+ {
+ switch(lpDCICMD->dwCommand)
+ {
+ case DDCREATEDRIVEROBJECT:
+ dbg_printf("DDCREATEDRIVEROBJECT: ");
+ if(DDCreateDriverObject(0))
+ {
+ uint32_t __far *lpOut = lpOutput;
+ DWORD hInst = DDHinstance();
+ *lpOut = hInst;
+
+ dbg_printf("success\n");
+ rc = 1;
+ }
+ else
+ {
+ dbg_printf("failure\n");
+ rc = 0;
+ }
+ break;
+ case DDGET32BITDRIVERNAME:
+ dbg_printf("DDGET32BITDRIVERNAME: ");
+ if(DDGet32BitDriverName(lpOutput))
+ {
+ dbg_printf("success\n");
+ rc = 1;
+ }
+ else
+ {
+ dbg_printf("failure\n");
+ rc = 0;
+ }
+ break;
+ case DDNEWCALLBACKFNS:
+ dbg_printf("DDNEWCALLBACKFNS: ");
+ if(DDNewCallbackFns(lpInput))
+ {
+ dbg_printf("success\n");
+ rc = 1;
+ }
+ else
+ {
+ dbg_printf("failure\n");
+ rc = 0;
+ }
+ break;
+ case DDVERSIONINFO:
+ dbg_printf("DDGetVersion\n");
+ DDGetVersion(lpOutput);
+ rc = 1;
+ break;
+ default:
+ dbg_printf("UNK DD code: %lX\n", lpDCICMD->dwCommand);
+ rc = 0;
+ break;
+ }
+ }
+ else if(lpDCICMD->dwVersion == DCI_VERSION)
+ {
+ dbg_printf("DCI(%d) -> failed!\n", lpDCICMD->dwCommand);
+ rc = 0;
+ }
+ else
+ {
+ dbg_printf("hal required: %lX\n", lpDCICMD->dwVersion);
+ rc = 1;
+ }
+ }
+ break;
+ } /* DCICOMMAND */
+ case MOUSETRAILS:
+ {
+ #ifdef DBGPRINT
+ if(lpInput)
+ {
+ int trails = *((int __far *)lpInput);
+ dbg_printf("MOUSETRAILS: %d\n", trails);
+ }
+ #endif
+ //JH: mouse trails are disabled!
+ //DIB_Control(lpDevice, MOUSETRAILS, lpInput, lpOutput);
+ rc = 1;
+ break;
+ } /* MOUSETRAILS */
+ case OP_FBHDA_SETUP: /* input: NULL, output: uint32 */
+ {
+ uint32_t __far *lpOut = lpOutput;
+ lpOut[0] = hda_linear;
+ dbg_printf("FBHDA request: %lX\n", hda_linear);
+
+ rc = 1;
+ break;
+ } /* OP_FBHDA_SETUP */
+ case VIDEOPARAMETERS:
+ {
+ VIDEOPARAMETERS_t __far *vps = ((VIDEOPARAMETERS_t __far *)lpInput);
+ rc = 0;
+
+ if(vps->dwCommand == VP_COMMAND_GET)
+ {
+ DWORD checkMask = vps->dwFlags & (VP_FLAGS_TV_MODE | VP_FLAGS_TV_STANDARD | VP_FLAGS_FLICKER | VP_FLAGS_OVERSCAN | VP_FLAGS_MAX_UNSCALED |
+ VP_FLAGS_POSITION | VP_FLAGS_BRIGHTNESS | VP_FLAGS_CONTRAST | VP_FLAGS_COPYPROTECT);
+
+ if(checkMask == vps->dwFlags)
+ {
+ if(vps->dwFlags & VP_FLAGS_TV_MODE)
+ {
+ vps->dwMode = tvsetup.dwMode;
+ vps->dwAvailableModes = tvsetup.dwAvailableModes;
+ }
+
+ if(vps->dwFlags & VP_FLAGS_TV_STANDARD)
+ {
+ vps->dwTVStandard = tvsetup.dwTVStandard;
+ vps->dwAvailableTVStandard = tvsetup.dwAvailableTVStandard;
+ }
+
+ if(vps->dwFlags & VP_FLAGS_FLICKER)
+ vps->dwFlickerFilter = tvsetup.dwFlickerFilter;
+
+ if(vps->dwFlags & VP_FLAGS_OVERSCAN)
+ {
+ vps->dwOverScanX = tvsetup.dwOverScanX;
+ vps->dwOverScanY = tvsetup.dwOverScanY;
+ }
+
+ if(vps->dwFlags & VP_FLAGS_MAX_UNSCALED)
+ {
+ vps->dwMaxUnscaledX = tvsetup.dwMaxUnscaledX;
+ vps->dwMaxUnscaledY = tvsetup.dwMaxUnscaledY;
+ }
+
+ if(vps->dwFlags & VP_FLAGS_POSITION)
+ {
+ vps->dwPositionX = tvsetup.dwPositionX;
+ vps->dwPositionY = tvsetup.dwPositionY;
+ }
+
+ if(vps->dwFlags & VP_FLAGS_BRIGHTNESS)
+ vps->dwBrightness = tvsetup.dwBrightness;
+
+ if(vps->dwFlags & VP_FLAGS_CONTRAST)
+ vps->dwContrast = tvsetup.dwContrast;
+
+
+ if(vps->dwFlags & VP_FLAGS_COPYPROTECT)
+ {
+ vps->dwCPType = tvsetup.dwCPType;
+ vps->dwCPStandard = tvsetup.dwCPStandard;
+ vps->bCP_APSTriggerBits = tvsetup.bCP_APSTriggerBits;
+ }
+
+ rc = 1;
+ }
+ }
+ else if(vps->dwCommand == VP_COMMAND_SET)
+ {
+ rc = 1;
+
+ if(vps->dwFlags & VP_FLAGS_TV_MODE)
+ tvsetup.dwMode = vps->dwMode;
+
+ if(vps->dwFlags & VP_FLAGS_TV_STANDARD)
+ tvsetup.dwTVStandard = vps->dwTVStandard;
+ if(vps->dwFlags & VP_FLAGS_FLICKER)
+ tvsetup.dwFlickerFilter = vps->dwFlickerFilter;
+
+ if(vps->dwFlags & VP_FLAGS_OVERSCAN)
+ {
+ tvsetup.dwOverScanX = vps->dwOverScanX;
+ tvsetup.dwOverScanY = vps->dwOverScanY;
+ }
+
+ if(vps->dwFlags & VP_FLAGS_POSITION)
+ {
+ tvsetup.dwPositionX = vps->dwPositionX;
+ tvsetup.dwPositionY = vps->dwPositionY;
+ }
+
+ if(vps->dwFlags & VP_FLAGS_BRIGHTNESS)
+ tvsetup.dwBrightness = vps->dwBrightness;
+
+ if(vps->dwFlags & VP_FLAGS_CONTRAST)
+ tvsetup.dwContrast = vps->dwContrast;
+
+ if(vps->dwFlags & VP_FLAGS_COPYPROTECT)
+ {
+ switch(vps->dwCPCommand)
+ {
+ case VP_CP_CMD_ACTIVATE:
+ tvsetup.dwCPCommand = VP_CP_CMD_ACTIVATE;
+ tvsetup.dwCPType = vps->dwCPType;
+ tvsetup.dwCPKey = vps->dwCPKey;
+ tvsetup.bCP_APSTriggerBits = vps->bCP_APSTriggerBits;
+ break;
+ case VP_CP_CMD_DEACTIVATE:
+ case VP_CP_CMD_CHANGE:
+ if(tvsetup.dwCPCommand == VP_CP_CMD_ACTIVATE)
+ {
+ if(tvsetup.dwCPKey != vps->dwCPKey)
+ {
+ rc = -1;
+ }
+ else
+ {
+ tvsetup.dwCPCommand = tvsetup.dwCPCommand;
+ }
+ }
+ break;
+ default:
+ rc = 0;
+ break;
+ }
+ }
+ }
+
+ if(rc < 0) /* return RC and don't pass to DIB */
+ {
+ return rc;
+ }
+
+ break;
+ } /* VIDEOPARAMETERS */
+ case QUERYDIBSUPPORT:
+ {
+ dbg_printf("QUERYDIBSUPPORT -> DIB\n");
+ return DIB_Control(lpDevice, function, lpInput, lpOutput);
+ break;
+ } /* QUERYDIBSUPPORT */
+ } /* switch */
+
+#if 0
/* if command accepted, return */
if(rc >= 0)
{
- return rc;
+ return rc;
}
/* else, call DIB_Control handle */
dbg_printf("Control: unknown code: %d\n", function);
return DIB_Control(lpDevice, function, lpInput, lpOutput);
+#else
+# if DBGPRINT
+ if(rc < 0)
+ {
+ dbg_printf("Control: unknown code: %d\n", function);
+ }
+# endif
+ /* JH: it's probably not good idea to pass unknown commands directly to DIB */
+ return rc;
+#endif
}