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.
263 lines
7.1 KiB
263 lines
7.1 KiB
/***********************************************************************
|
|
TWAIN source code:
|
|
Copyright (C) '92-'93 Wang Laboratories, Inc.:
|
|
All rights reserved.
|
|
|
|
Author: Ken Spina
|
|
Project: TWAIN Scanner Support in O/i Client
|
|
Module: TRIPLET.C - Contains IMGTwainExecTriplet() & IMGTwainLayout()
|
|
Comments: DLL to support Wang Open/image Products
|
|
|
|
History of Revisions:
|
|
|
|
$Log: S:\oiwh\oitwain\triplet.c_v $
|
|
*
|
|
* Rev 1.1 20 Jul 1995 12:23:52 KFS
|
|
* changed oitwain.h to engoitwa.h and display.h to engdisp.h
|
|
*
|
|
* Rev 1.0 20 Jul 1995 10:32:00 KFS
|
|
* Initial entry
|
|
*
|
|
* Rev 1.1 23 Aug 1994 16:17:02 KFS
|
|
* No code change, add vlog comments to file on checkin
|
|
*
|
|
|
|
REV# INITIALS DATE CHANGES
|
|
|
|
1 kfs 03/10/93 Created for OITWAIN.DLL functions
|
|
|
|
*************************************************************************/
|
|
|
|
#include "nowin.h" // eliminate not used Window definitions
|
|
#include <windows.h> // Note: TWAIN.h also REQUIRES windows defs
|
|
#include "TWAIN.h" // for TW data type defines
|
|
//#include "oitwain.h" // public function prototypes & definitions
|
|
#include "engoitwa.h" // Prototypes & definitions used by other DLL's
|
|
// Previously called oitwain.h
|
|
#include "internal.h" // non-public function prototypes & definitions
|
|
#include "engdisp.h" // the private prop stuff -- jar
|
|
|
|
/* imported variables from other modules */
|
|
extern char szOiTwainProp[]; // "O/i TWAIN Support";
|
|
extern DSMENTRYPROC lpDSM_Entry; // entry point to the SM
|
|
|
|
/* exported variables to other modules (extern in other modules) */
|
|
|
|
// Globals within module
|
|
|
|
/***********************************************************************
|
|
*
|
|
* FUNCTION: IMGTwainExecTriplet()
|
|
*
|
|
* COMMENTS: Executes triplets that return no other data except for
|
|
* what is in the defined structure.
|
|
* Must Match DAT_ with required structure of TWAIN triplet
|
|
*
|
|
*
|
|
* ARGS: HWnd - handle to O/i Window
|
|
* pTriplet - pointer to O/i defined data struct in OITWAIN.H
|
|
*
|
|
* RETURNS: returns combined TWAIN & O/i error message, further
|
|
* error info found in DCError of Triplet structure,
|
|
*
|
|
*/
|
|
WORD PASCAL IMGTwainExecTriplet(HWND hWnd, pSTR_TRIPLET pTriplet)
|
|
{
|
|
STR_DCERROR DCError;
|
|
HANDLE hOiSupport;
|
|
pTWAIN_SUPPORT pOiSupport = 0L;
|
|
WORD wDatGroup;
|
|
|
|
DCError.dcRC = DCError.dcCC = 0; // TWXC_SUCCESS
|
|
|
|
if (!IsWindow(hWnd))
|
|
{
|
|
DCError.dcRC = TWRC_BAD_WND;
|
|
}
|
|
if (!(hOiSupport = IMGGetProp(hWnd, szOiTwainProp)))
|
|
{
|
|
DCError.dcRC = TWRC_NULLPTR;
|
|
}
|
|
|
|
if (!(pOiSupport = (pTWAIN_SUPPORT)GlobalLock(hOiSupport)))
|
|
{
|
|
DCError.dcRC = TWRC_MEMLOCK;
|
|
}
|
|
|
|
if (pTriplet)
|
|
{
|
|
if (DCError.dcRC) // upfront error, abort function
|
|
{
|
|
pTriplet->DCError = DCError;
|
|
return DCError.dcRC;
|
|
}
|
|
|
|
switch (pTriplet->wDATType)
|
|
{
|
|
case DAT_CAPABILITY:
|
|
case DAT_EVENT:
|
|
case DAT_IDENTITY:
|
|
case DAT_PARENT:
|
|
case DAT_PENDINGXFERS:
|
|
case DAT_SETUPMEMXFER:
|
|
case DAT_SETUPFILEXFER:
|
|
case DAT_STATUS:
|
|
case DAT_USERINTERFACE:
|
|
case DAT_XFERGROUP:
|
|
wDatGroup = DG_CONTROL;
|
|
break;
|
|
case DAT_IMAGEINFO:
|
|
case DAT_IMAGELAYOUT:
|
|
case DAT_IMAGEMEMXFER:
|
|
case DAT_IMAGENATIVEXFER:
|
|
case DAT_IMAGEFILEXFER:
|
|
case DAT_CIECOLOR:
|
|
case DAT_GRAYRESPONSE:
|
|
case DAT_RGBRESPONSE:
|
|
case DAT_JPEGCOMPRESSION:
|
|
case DAT_PALETTE8:
|
|
wDatGroup = DG_IMAGE;
|
|
break;
|
|
default: // if unrecognized, return with error
|
|
DCError.dcRC = TWRC_UNKNOWNVALUETYPE;
|
|
pTriplet->DCError = DCError;
|
|
return DCError.dcRC;
|
|
}
|
|
|
|
if (pTriplet->pVoidStr)
|
|
{
|
|
DCError.dcRC = (*lpDSM_Entry)(&pOiSupport->AppID,
|
|
&pOiSupport->DsID,
|
|
wDatGroup,
|
|
pTriplet->wDATType,
|
|
pTriplet->wMsgState,
|
|
(TW_MEMREF)pTriplet->pVoidStr);
|
|
}
|
|
else
|
|
{
|
|
DCError.dcRC = TWRC_NULLPTR;
|
|
pTriplet->DCError = DCError;
|
|
return DCError.dcRC;
|
|
}
|
|
|
|
// get condition code upon failure and its not the End of xfer
|
|
if (DCError.dcRC && (DCError.dcRC != TWRC_XFERDONE))
|
|
{
|
|
DCError.dcCC = DCGetConditionCode(pOiSupport);
|
|
}
|
|
|
|
// Report error on way out if structure defined properly
|
|
pTriplet->DCError = DCError;
|
|
}
|
|
else
|
|
{ // no structure to return error message
|
|
DCError.dcRC = TWRC_NULLPTR;
|
|
return DCError.dcRC;
|
|
}
|
|
|
|
if (pOiSupport) // unlock TWAIN info
|
|
{
|
|
GlobalUnlock(hOiSupport);
|
|
}
|
|
|
|
return DCError.dcRC;
|
|
} // end IMGTwainExecTriplet()
|
|
|
|
|
|
/***********************************************************************
|
|
* FUNCTION: IMGTwainLayout
|
|
*
|
|
* ARGS: lpLayout Structure to bSet, bDefault, and pImageLayout
|
|
*
|
|
* RETURNS: dcRC TWAIN status return code, pImageLayout filled in if
|
|
* bSet FALSE with current or default values, or if
|
|
* bSet TRUE with default TRUE, will set current values to
|
|
* default values, and return them
|
|
* bSet TRUE and default FALSE, user fills in structure with
|
|
* new values for layout
|
|
*/
|
|
WORD PASCAL IMGTwainLayout(HWND hWnd, pSTR_IMGLAYOUT pLayout)
|
|
{
|
|
TW_UINT16 dcRC = TWRC_SUCCESS;
|
|
TW_UINT16 wCCode = TWCC_SUCCESS;
|
|
TW_UINT16 temp = 0;
|
|
TW_UINT16 wMsgState;
|
|
HANDLE hOiSupport;
|
|
pTWAIN_SUPPORT pOiSupport = 0L;
|
|
|
|
if (!IsWindow(hWnd))
|
|
{
|
|
dcRC = TWRC_BAD_WND;
|
|
}
|
|
if (!(hOiSupport = IMGGetProp(hWnd, szOiTwainProp)))
|
|
{
|
|
dcRC = TWRC_NULLPTR;
|
|
}
|
|
if (!(pOiSupport = (pTWAIN_SUPPORT)GlobalLock(hOiSupport)))
|
|
{
|
|
dcRC = TWRC_MEMLOCK;
|
|
}
|
|
/*
|
|
Values to determine wMsgState
|
|
temp = 0x0000 then MSG_GET
|
|
temp = 0x0001 then MSG_SET
|
|
temp = 0x0010 then MSG_GETDEFAULT
|
|
temp = 0x0011 then MSG_RESET
|
|
*/
|
|
|
|
if (pLayout)
|
|
{
|
|
if (dcRC)
|
|
{
|
|
pLayout->DCError.dcRC = dcRC;
|
|
pLayout->DCError.dcCC = wCCode;
|
|
return dcRC;
|
|
}
|
|
|
|
if (pLayout->bSet)
|
|
temp = 0x1;
|
|
if (pLayout->bDefault)
|
|
temp |= 0x2;
|
|
|
|
switch (temp)
|
|
{
|
|
default:
|
|
case 0:
|
|
wMsgState = MSG_GET;
|
|
break;
|
|
|
|
case 1:
|
|
wMsgState = MSG_SET;
|
|
break;
|
|
|
|
case 2:
|
|
wMsgState = MSG_GETDEFAULT;
|
|
break;
|
|
|
|
case 3:
|
|
wMsgState = MSG_RESET;
|
|
}
|
|
|
|
dcRC = (*lpDSM_Entry)(&pOiSupport->AppID,
|
|
&pOiSupport->DsID,
|
|
DG_IMAGE,
|
|
DAT_IMAGELAYOUT,
|
|
wMsgState,
|
|
(TW_MEMREF)&pLayout->ImageLayout);
|
|
|
|
if (dcRC!= TWRC_SUCCESS)
|
|
wCCode = DCGetConditionCode(pOiSupport);
|
|
|
|
pLayout->DCError.dcRC = dcRC;
|
|
pLayout->DCError.dcCC = wCCode;
|
|
}
|
|
else
|
|
dcRC = TWRC_NULLPTR;
|
|
|
|
if (pOiSupport) // unlock TWAIN info
|
|
{
|
|
GlobalUnlock(hOiSupport);
|
|
}
|
|
|
|
return dcRC;
|
|
} // IMGTwainLayOut
|