mirror of https://github.com/lianthony/NT4.0
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
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);
|
|
}
|
|
|