Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

180 lines
3.8 KiB

/***************************************************************************
SCANDATA.C
Purpose: Contains device level Scanner Data transfer Routines
1. Tell handler to start scanning a block of data
2. Check if handler has finished scanning block of data
3. Retrieve the block of data
$Log: S:\oiwh\scanlib\scandata.c_v $
*
* Rev 1.0 20 Jul 1995 14:38:16 KFS
* Initial entry
*
* Rev 1.1 22 Aug 1994 15:55:56 KFS
* no code change, added vlog comments to file
*
****************************************************************************/
/*
Low level scanning and data routines
*/
/* 08-17-90 ccl move TIMEOUT error check into SuccessCheck() */
/* 10-23-90 ccl check valid for wFlag and lWrDataSize */
/* 11-19-90 ccl fix return success for CheckScanData */
/* 11-27-90 ccl fix CheckScanData BUSY to SHS_OK */
/* 06-07-93 kfs added support for TWAIN interface */
#include "pvundef.h"
/*
CAUTION! Only data which can be shared among appliations,
or data that is only used without giving up the CPU should declared staticly.
*/
/* imports */
/* exports */
/* locals */
/*************************/
/* StartScanData */
/*************************/
/*
Tell handler to start scanning a block of data
*/
int PASCAL IMGStartScanData(hScancb, wLineCount, wChanel)
HANDLE hScancb;
WORD wLineCount;
WORD wChanel;
{
int ret_val;
LPSCANCB sp;
TWAIN_PROP ToTwain;
if (ret_val = ParmCheck(hScancb, (LPSCANCB far *)&sp, &ToTwain))
return ret_val;
sp->Func = SHF_STARTDATA;
sp->Flags = SHIF_GLOBAL; /* emm not yet supported */
sp->Count = wLineCount;
sp->Gp1 = wChanel;
if (ToTwain.TSdh)
{
GlobalUnlock(ToTwain.TSdh);
}
else
{
SendMessage(sp->Wnd, WM_SCANCB, (WPARAM) hScancb, 0L);
}
return SuccessCheck(hScancb, sp);
}
/*************************/
/* CheckScanData */
/*************************/
/*
Check if handler has finished scanning block of data
*/
int PASCAL IMGCheckScanData(hScancb, lpiDataReady, wChanel)
HANDLE hScancb;
LPINT lpiDataReady;
WORD wChanel;
{
int ret_val;
LPSCANCB sp;
TWAIN_PROP ToTwain;
if (ret_val = ParmCheck(hScancb, (LPSCANCB far *)&sp, &ToTwain))
return ret_val;
sp->Func = SHF_CHECKDATA;
sp->Gp1 = wChanel;
if (ToTwain.TSdh)
{
GlobalUnlock(ToTwain.TSdh);
sp->Status = SHS_OK;
}
else
{
SendMessage(sp->Wnd, WM_SCANCB, (WPARAM) hScancb, 0L);
if( sp->Status == SHS_OK || sp->Status == SHS_BUSY )
{
*lpiDataReady = ( sp->Status == SHS_OK );
sp->Status = SHS_OK;
}
}
return SuccessCheck(hScancb, sp);
}
/***********************/
/* EndScanData */
/***********************/
/*
Retrieve the block of data
*/
int PASCAL IMGEndScanData(hScancb, hDataHandle, lDataOff,
wDataWidth, wFlag, lWrDataSize, wChanel )
HANDLE hScancb;
HANDLE hDataHandle;
LONG lDataOff;
WORD wDataWidth;
WORD FAR *wFlag;
LONG FAR *lWrDataSize;
WORD wChanel;
{
int ret_val;
LPSCANCB sp;
TWAIN_PROP ToTwain;
if (ret_val = ParmCheck(hScancb, (LPSCANCB far *)&sp, &ToTwain))
return ret_val;
if (hDataHandle == NULL || wFlag == NULL || lWrDataSize == NULL )
{
GlobalUnlock(hScancb);
return IMGSE_NULL_PTR;
}
sp->Func = SHF_ENDDATA;
sp->Flags = SHIF_GLOBAL; /* emm not yet supported */
sp->Datahandle = hDataHandle;
sp->Dataoff = lDataOff;
sp->Datapage = 0; /* for emm only */
sp->Datawidth = wDataWidth;
sp->Gp1 = wChanel;
// initialize it to zero
*lWrDataSize = 0L;
if (ToTwain.TSdh)
{
GlobalUnlock(ToTwain.TSdh);
}
else
{
SendMessage(sp->Wnd, WM_SCANCB, (WPARAM) hScancb, 0L);
*wFlag = 0;
if( sp->Flags & SHCF_ENDSTRIP)
*wFlag |= IMG_SCAN_ENDSTRIP;
if( sp->Flags & SHCF_ENDPAGE)
*wFlag |= IMG_SCAN_ENDPAGE;
*lWrDataSize = (LONG)sp->Count; /* # bytes returned from compressed data */
}
return SuccessCheck(hScancb, sp);
}