windows-nt/Source/XPSP1/NT/multimedia/media/avi/avicap.16/capdriv.c
2020-09-26 16:20:57 +08:00

102 lines
2.8 KiB
C

/****************************************************************************
*
* capdriv.c
*
* Smartdrv control.
*
* Microsoft Video for Windows Sample Capture Class
*
* Copyright (c) 1992, 1993 Microsoft Corporation. All Rights Reserved.
*
* You have a royalty-free right to use, modify, reproduce and
* distribute the Sample Files (and/or any modified version) in
* any way you find useful, provided that you agree that
* Microsoft has no warranty obligations or liability for any
* Sample Application Files which are modified.
*
***************************************************************************/
#include <windows.h>
#include <windowsx.h>
#pragma optimize ("", off)
// SD_CACHE_DRIVE:
// FUNCTION:
// Enables and disables read or write caching for a particular
// drive unit. Returns the cache state of the drive in DL. Get
// takes no action, but simply returns cache state for drive unit
// in DL.
//
// INPUT:
// AX=MULT_SMARTDRV (4A10h)
// BX=SD_CACHE_DRIVE (3)
// DL=CACHE_DRIVE_<get,read|write enable|disable>
// BP=unit number of drive
// OUTPUT:
// DL=cache state of unit:
// Bit 7 set -> no caching enabled for this unit
// Bit 7 not set -> read caching enabled for this unit
// Bit 6 set -> write caching not enabled for this unit
// Bit 6 not set -> write caching enabled for this unit
// -1 -> not a cachable drive
// USES:
// ALL except DS,ES
//
#define MULT_SMARTDRV 0x4a10
#define SD_CACHE_DRIVE 3
#define CACHE_DRIVE_GET 0
#define CACHE_DRIVE_READ_ENABLE 1
#define CACHE_DRIVE_READ_DISABLE 2
#define CACHE_DRIVE_WRITE_ENABLE 3
#define CACHE_DRIVE_WRITE_DISABLE 4
#define F_WRITE_CACHE (1 << 7)
#define F_READ_CACHE (1 << 6)
WORD NEAR PASCAL SmartDrvCache(int iDrive, BYTE cmd)
{
WORD w;
_asm {
push bp
mov ax, MULT_SMARTDRV
mov bx, SD_CACHE_DRIVE
mov dl, cmd
mov bp, iDrive
int 2fh
mov al,dl
xor ah,ah
pop bp
mov w,ax
}
return w;
}
WORD FAR PASCAL SmartDrv(char chDrive, WORD w)
{
WORD wCur;
int iDrive;
iDrive = (chDrive | 0x20) - 'a';
wCur = SmartDrvCache(iDrive, CACHE_DRIVE_GET);
if (w & F_WRITE_CACHE)
SmartDrvCache(iDrive, CACHE_DRIVE_WRITE_DISABLE);
else
SmartDrvCache(iDrive, CACHE_DRIVE_WRITE_ENABLE);
if (w & F_READ_CACHE)
SmartDrvCache(iDrive, CACHE_DRIVE_READ_DISABLE);
else
SmartDrvCache(iDrive, CACHE_DRIVE_READ_ENABLE);
return wCur;
}
#pragma optimize ("", on)