-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlisting8.html
executable file
·790 lines (593 loc) · 21.1 KB
/
listing8.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<!-- BEGIN META TAG INFO -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="home" href="http://developer.apple.com/">
<link rel="find" href="http://developer.apple.com/search/">
<link rel="stylesheet" type="text/css" href="../../documentation/css/adcstyle.css" title="fonts">
<script language="JavaScript" src="../../documentation/js/adc.js" type="text/javascript"></script>
<!-- END META TAG INFO -->
<!-- BEGIN TITLE -->
<title>SampleDS - /TWAIN Helper Glue/TWGlue.c</title>
<!-- END TITLE -->
<script language="JavaScript">
function JumpToNewPage() {
window.location=document.scpopupmenu.gotop.value;
return true;
}
</script>
</head>
<!-- BEGIN BODY OPEN -->
<body>
<!--END BODY OPEN -->
<!-- START CENTER OPEN -->
<center>
<!-- END CENTER OPEN -->
<!-- BEGIN LOGO AND SEARCH -->
<!--#include virtual="/includes/adcnavbar"-->
<!-- END LOGO AND SEARCH -->
<!-- START BREADCRUMB -->
<div id="breadcrumb">
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td scope="row"><img width="340" height="10" src="images/1dot.gif" alt=""></td>
<td><img width="340" height="10" src="images/1dot.gif" alt=""></td>
</tr>
<tr valign="middle">
<td align="left" colspan="2">
<a href="http://developer.apple.com/">ADC Home</a> > <a href="../../referencelibrary/index.html">Reference Library</a> > <a href="../../samplecode/index.html">Sample Code</a> > <a href="../../samplecode/AppleApplications/index.html">Apple Applications</a> > <a href="../../samplecode/AppleApplications/idxImageCapture-date.html">Image Capture</a> > <A HREF="javascript:location.replace('index.html');">SampleDS</A> >
</td>
</tr>
<tr>
<td colspan="2" scope="row"><img width="680" height="35" src="images/1dot.gif" alt=""></td>
</tr>
</table>
</div>
<!-- END BREADCRUMB -->
<!-- START MAIN CONTENT -->
<!-- START TITLE GRAPHIC AND INTRO-->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td><h1><div id="pagehead">SampleDS</div></h1></td>
</tr>
</table>
<!-- END TITLE GRAPHIC AND INTRO -->
<!-- START WIDE COLUMN -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td id="scdetails">
<h2>/TWAIN Helper Glue/TWGlue.c</h2>
<form name="scpopupmenu" onSubmit="return false;" method=post>
<p><strong>View Source Code:</strong>
<select name="gotop" onChange="JumpToNewPage();" style="width:340px"><option selected value="ingnore">Select File</option>
<option value="listing1.html">/Resources/carb.r</option>
<option value="listing2.html">/Resources/vers.r</option>
<option value="listing3.html">/Source/SampleDS.c</option>
<option value="listing4.html">/Source/SampleDS.h</option>
<option value="listing5.html">/TWAIN Helper Glue/TWAcquire.c</option>
<option value="listing6.html">/TWAIN Helper Glue/TWAcquire.h</option>
<option value="listing7.html">/TWAIN Helper Glue/TWDefs.h</option>
<option value="listing8.html">/TWAIN Helper Glue/TWGlue.c</option>
<option value="listing9.html">/TWAIN Helper Glue/TWGlue.h</option>
<option value="listing10.html">/TWAIN Helper Glue/TWSystem.c</option>
<option value="listing11.html">/TWAIN Helper Glue/TWSystem.h</option>
<option value="listing12.html">/TWAIN Helper Glue/TWUtilities.c</option>
<option value="listing13.html">/TWAIN Helper Glue/TWUtilities.h</option></select>
</p>
</form>
<p><strong><a href="SampleDS.zip">Download Sample</a></strong> (“SampleDS.zip”, 156.1K)<BR>
<strong><a href="SampleDS.dmg">Download Sample</a></strong> (“SampleDS.dmg”, 226.4K)</p>
<!--
<p><strong><a href="#">Download Sample</a></strong> (“filename.sit”, 500K)</p>
-->
</td>
</tr>
<tr>
<td scope="row"><img width="680" height="10" src="images/1dot.gif" alt=""><br>
<img height="1" width="680" src="images/1dot_919699.gif" alt=""><br>
<img width="680" height="20" src="images/1dot.gif" alt=""></td>
</tr>
<tr>
<td scope="row">
<!--googleon: index -->
<pre class="sourcecodebox">// ===========================================================================// TWGlue.c TWAIN 1.9 ©1991-2001 TWAIN Working Group// ===========================================================================// //#include "TWAIN.h"#include "TWGlue.h"#include "TWDefs.h"#include "TWAcquire.h"#include "TWUtilities.h"#include "TWSystem.h"#include "DebugPrintf.h" // // move the following defines to TWAIN.h//#define MSG_REGISTER_CALLBACK 0x0902#define MSG_INVOKE_CALLBACK 0x0903#define DAT_CALLBACK 0x0010TW_UINT16 DSM_Glue_Entry(pTW_IDENTITY pSource, pTW_IDENTITY pDestin, TW_UINT32 DG, TW_UINT16 Dat, TW_UINT16 Msg, TW_MEMREF pData); static TW_INT16 Initialized=FALSE;static TW_INT16 DSMOpen=FALSE;static TW_STR255 defaultVolName="\p";static TW_INT16 defaultVolRef=0;static TW_IDENTITY AppIdentity;static TW_INT16 DSOpen=FALSE;static TW_INT16 DSSelected=FALSE;static TW_INT16 DSEnabled=FALSE;static TW_IDENTITY DSIdentity;#pragma mark *** Application ***// ---------------------------------------------------------------------------// TWGetAppIdentity // ---------------------------------------------------------------------------// pTW_IDENTITY TWGetAppIdentity(void){ return (&AppIdentity);}#pragma mark -#pragma mark *** Source Manager ***// ---------------------------------------------------------------------------// DSM_Glue_Entry // ---------------------------------------------------------------------------// Main DSM Entry PointTW_UINT16 DSM_Glue_Entry ( pTW_IDENTITY pSource, pTW_IDENTITY pDestin, TW_UINT32 DG, TW_UINT16 Dat, TW_UINT16 Msg, TW_MEMREF pData ){ TW_UINT16 Result = TWERR; if ( Initialized == true && DSMOpen == true ) { Result = DSM_Entry(pSource,pDestin,DG,Dat,Msg,pData); } return Result;}// ---------------------------------------------------------------------------// TWInitialize // ---------------------------------------------------------------------------// TW_INT16 TWInitialize ( pTW_IDENTITY pIdentity ){ TW_INT16 result = TWRC_SUCCESS; if (DSM_Entry == (void*) kUnresolvedCFragSymbolAddress) { // Weak link failed. result=TWRC_FAILURE; } else { Initialized=TRUE; AppIdentity=*pIdentity; //DSIdentity.ProductName[0]=0; DSIdentity.Id=0; } return result;}// ---------------------------------------------------------------------------// TWTerminate // ---------------------------------------------------------------------------// TW_INT16 TWTerminate(){ TW_INT16 Result=TWRC_SUCCESS; if (Initialized==FALSE) return(TWERR); if (DSEnabled) { TW_USERINTERFACE UserInterface = {false, false, nil}; Result = TWDisableDS(&UserInterface); } if (DSOpen) Result = TWCloseDS(); if (DSMOpen) Result = TWCloseDSM(); Initialized = FALSE; return(Result);}// ---------------------------------------------------------------------------// TWMessageDSM // ---------------------------------------------------------------------------// TW_INT16 TWMessageDSM ( TW_UINT32 DG, TW_UINT16 Dat, TW_UINT16 Msg, TW_MEMREF pData ){ TW_INT16 Result=TWRC_SUCCESS; Result=DSM_Glue_Entry(&AppIdentity,NULL,DG,Dat,Msg,pData); return(Result);}// ---------------------------------------------------------------------------// TWOpenDSM // ---------------------------------------------------------------------------// TW_INT16 TWOpenDSM(){ TW_INT16 Result=TWRC_SUCCESS; DSMOpen = TRUE; Result = DSM_Glue_Entry(&AppIdentity, NULL, DG_CONTROL, DAT_PARENT, MSG_OPENDSM, NULL); return(Result);}// ---------------------------------------------------------------------------// TWCloseDSM // ---------------------------------------------------------------------------// TW_INT16 TWCloseDSM(){ TW_INT16 Result=TWRC_SUCCESS; if ((Initialized==FALSE)||(DSMOpen==FALSE)) return(TWERR); Result=DSM_Glue_Entry(&AppIdentity,NULL,DG_CONTROL,DAT_PARENT,MSG_CLOSEDSM,NULL); DSMOpen =FALSE; DSOpen =FALSE; DSEnabled =FALSE; return(TWRC_SUCCESS);}// ---------------------------------------------------------------------------// TWSelectDS // ---------------------------------------------------------------------------// TW_INT16 TWSelectDS(){ TW_INT16 Result=TWRC_SUCCESS; TW_IDENTITY NewDSIdentity; if (DSMOpen==FALSE) { Result=TWOpenDSM(); if (Result != TWRC_SUCCESS) return(TWERR); } NewDSIdentity.Id=0; NewDSIdentity.ProductName[0]=0; Result=DSM_Glue_Entry(&AppIdentity,NULL,DG_CONTROL,DAT_IDENTITY, MSG_USERSELECT,(TW_MEMREF)&NewDSIdentity); if (Result==TWRC_SUCCESS) DSIdentity=NewDSIdentity; DSSelected=TRUE; return(Result);}// ---------------------------------------------------------------------------// TWRegisterCallback// ---------------------------------------------------------------------------TW_INT16 TWRegisterCallback(DSMENTRYPROC ptr){ TW_INT16 Result=TWRC_SUCCESS; if (DSMOpen==FALSE) { Result=TWOpenDSM(); if (Result != TWRC_SUCCESS) return(TWERR); } Result=DSM_Glue_Entry(&AppIdentity, NULL, DG_CONTROL, DAT_CALLBACK, MSG_REGISTER_CALLBACK, (TW_MEMREF)ptr); return Result;}#pragma mark -#pragma mark *** Data Source ***// ---------------------------------------------------------------------------// TWEventDS // ---------------------------------------------------------------------------// TW_INT16 TWEventDS ( EventRecord *pEvent, pTW_INT16 pMessage ){ TW_EVENT TWEvent; TW_INT16 Result; if (DSOpen==FALSE) return(TWRC_NOTDSEVENT); if (DSEnabled==FALSE) return(TWRC_NOTDSEVENT); TWEvent.pEvent=(TW_MEMREF)pEvent; Result=TWMessageDS(DG_CONTROL,DAT_EVENT,MSG_PROCESSEVENT,(TW_MEMREF)&TWEvent); if (TWEvent.TWMessage!=MSG_NULL) /* we got a message */ { if (TWEvent.TWMessage!=MSG_XFERREADY) /* not an xfer ready message */ { Result=ProcessTWMessage(TWEvent.TWMessage); } else /* was an xfer ready message */ { if (pMessage!=NULL) *pMessage=TWEvent.TWMessage; } } return(Result);}// ---------------------------------------------------------------------------// TWOpenDSIdentity // ---------------------------------------------------------------------------// TW_INT16 TWOpenDSIdentity ( pTW_IDENTITY pDSIdentity ){ TW_INT16 Result=TWRC_SUCCESS; Result = TWOpenDS(); if (Result == TWRC_SUCCESS && pDSIdentity != NULL) { *pDSIdentity = DSIdentity; } return Result;}// ---------------------------------------------------------------------------// TWOpenDS // ---------------------------------------------------------------------------// TW_INT16 TWOpenDS(){ TW_INT16 Result=TWRC_SUCCESS; if (DSMOpen==FALSE) { Result=TWOpenDSM(); if (Result!=TWRC_SUCCESS) return(TWERR); } if (DSSelected==TRUE) { Result=DSM_Glue_Entry(&AppIdentity,NULL, DG_CONTROL,DAT_IDENTITY,MSG_OPENDS,(TW_MEMREF)&DSIdentity); } else { Result=DSM_Glue_Entry(&AppIdentity,NULL, DG_CONTROL,DAT_IDENTITY,MSG_OPENDS,(TW_MEMREF)&DSIdentity); } if (Result==TWRC_SUCCESS) DSOpen=TRUE; return(Result);}// ---------------------------------------------------------------------------// TWCloseDS // ---------------------------------------------------------------------------// TW_INT16 TWCloseDS(){ TW_INT16 Result; Result=DSM_Glue_Entry(&AppIdentity,NULL, DG_CONTROL,DAT_IDENTITY,MSG_CLOSEDS,(TW_MEMREF)&DSIdentity); DSOpen=FALSE; DSEnabled=FALSE; return(Result);}// ---------------------------------------------------------------------------// TWEnableDS // ---------------------------------------------------------------------------// TW_INT16 TWEnableDS ( pTW_USERINTERFACE pUserInterface ){ TW_INT16 Result; Result=TWMessageDS(DG_CONTROL,DAT_USERINTERFACE,MSG_ENABLEDS, (TW_MEMREF)pUserInterface); if (Result==TWRC_SUCCESS) DSEnabled=TRUE; return(Result);}// ---------------------------------------------------------------------------// TWDisableDS // ---------------------------------------------------------------------------// TW_INT16 TWDisableDS ( pTW_USERINTERFACE pUserInterface ){ TW_INT16 Result; Result=TWMessageDS(DG_CONTROL,DAT_USERINTERFACE,MSG_DISABLEDS, (TW_MEMREF)pUserInterface); if (Result==TWRC_SUCCESS) DSEnabled=FALSE; return(Result);}// ---------------------------------------------------------------------------// TWMessageDS // ---------------------------------------------------------------------------// TW_INT16 TWMessageDS ( TW_UINT32 DG, TW_UINT16 Dat, TW_UINT16 Msg, TW_MEMREF pData ){ TW_INT16 Result=TWRC_SUCCESS; Result=DSM_Glue_Entry(&AppIdentity, &DSIdentity, DG, Dat, Msg, pData);// DEBUGPRINTF("DSM_Glue_Entry: Result = %d ", Result); return(Result);}// ---------------------------------------------------------------------------// TWGetDSIdentity // ---------------------------------------------------------------------------// pTW_IDENTITY TWGetDSIdentity(){ return &DSIdentity;}// ---------------------------------------------------------------------------// TWIsDSEnabled // ---------------------------------------------------------------------------// TW_INT16 TWIsDSEnabled(){ return DSEnabled;}// ---------------------------------------------------------------------------// * TWGetDSCapability // ---------------------------------------------------------------------------// Simplifies capability negotiation. Tests one capability value at a time.TW_INT16 TWGetDSCapability ( TW_UINT16 capabilityID, TW_INT16 value, pTW_INT16 isCapable ){ TW_CAPABILITY capability; TW_INT16 result; TW_INT16 itemType; *isCapable = FALSE; capability.Cap = capabilityID; result = TWMessageDS ( DG_CONTROL, DAT_CAPABILITY, MSG_GET, (TW_MEMREF)&capability ); if ( result == TWRC_SUCCESS ) { switch ( capability.ConType ) { case TWON_ONEVALUE: { TW_INT32 item; result = DumpOneValue ( &capability, &itemType, &item ); if ( item == value ) *isCapable = TRUE; } break; case TWON_ENUMERATION: { TW_INT16 itemCount, currentIndex, defaultIndex, i; TW_UINT16 itemList[16]; result = DumpEnumeration ( &capability, &itemType, &itemCount, &currentIndex, &defaultIndex, (pTW_UINT8)itemList, 32 ); switch ( itemType ) { case TWTY_INT16: case TWTY_UINT16: { for ( i=0; i < itemCount; i++ ) { if ( itemList[i] == value ) *isCapable = TRUE; } } break; case TWTY_INT8: case TWTY_UINT8: { for ( i=0; i < itemCount; i++ ) { if ( ( (TW_INT8 *)itemList )[i] == value ) *isCapable = TRUE; } } break; default: result = TWRC_INFONOTSUPPORTED; break; } } break; case TWON_ARRAY: case TWON_RANGE: default: result = TWRC_INFONOTSUPPORTED; break; } } return result; }// ---------------------------------------------------------------------------// * TWSetDSCapability // ---------------------------------------------------------------------------// Simplifies capability negotiation. One value.TW_INT16 TWSetDSCapability ( TW_UINT16 capabilityID, TW_INT16 value ){ TW_INT16 result = TWRC_SUCCESS; TW_CAPABILITY capability; capability.Cap = capabilityID; SetupOneValue ( &capability, TWTY_UINT16, (TW_INT32)value ); result = TWMessageDS ( DG_CONTROL, DAT_CAPABILITY, MSG_SET, (TW_MEMREF)&capability ); return result;}// ---------------------------------------------------------------------------// TWGetPixelTypes // ---------------------------------------------------------------------------// Capability negotion for supported pixel types.TW_INT16 TWGetPixelTypes ( pTW_INT16 pDoesBW, pTW_INT16 pDoesGray, pTW_INT16 pDoesRGB, pTW_INT16 pDoesPalette ){ TW_INT16 Result = TWRC_SUCCESS; if ( pDoesBW != NULL ) Result = TWGetDSCapability ( ICAP_PIXELTYPE, TWPT_BW, pDoesBW ); if ( pDoesGray != NULL ) Result = TWGetDSCapability ( ICAP_PIXELTYPE, TWPT_GRAY, pDoesGray ); if ( pDoesRGB != NULL ) Result = TWGetDSCapability ( ICAP_PIXELTYPE, TWPT_RGB, pDoesRGB ); if ( pDoesPalette != NULL ) Result = TWGetDSCapability ( ICAP_PIXELTYPE, TWPT_PALETTE, pDoesPalette ); /* less simple, but somewhat better performance TW_INT16 i; TW_CAPABILITY Capability; TW_INT16 ItemType; TW_INT16 NumItems; TW_INT16 CurrentIndex; TW_INT16 DefaultIndex; TW_INT16 ItemList[4]; TW_INT16 Result; Capability.Cap=ICAP_PIXELTYPE; Result=TWMessageDS(DG_CONTROL,DAT_CAPABILITY,MSG_GET,(TW_MEMREF)&Capability); DumpEnumeration(&Capability,&ItemType,&NumItems,&CurrentIndex, &DefaultIndex,(pTW_UINT8)ItemList,8); if (pDoesBW!=NULL) *pDoesBW=FALSE; if (pDoesGray!=NULL) *pDoesGray=FALSE; if (pDoesRGB!=NULL) *pDoesRGB=FALSE; if (pDoesPalette!=NULL) *pDoesPalette=FALSE; for (i=0;i<NumItems;i++) { if ((ItemList[i]==TWPT_BW)&&(pDoesBW!=NULL)) *pDoesBW=TRUE; if ((ItemList[i]==TWPT_GRAY)&&(pDoesGray!=NULL)) *pDoesGray=TRUE; if ((ItemList[i]==TWPT_RGB)&&(pDoesRGB!=NULL)) *pDoesRGB=TRUE; if ((ItemList[i]==TWPT_PALETTE)&&(pDoesPalette!=NULL)) *pDoesPalette=TRUE; } */ return Result ;}// ---------------------------------------------------------------------------// TWSetPixelType // ---------------------------------------------------------------------------// TW_INT16 TWSetPixelType ( TW_INT16 PixelType ){ TW_INT16 result = TWRC_SUCCESS; result = TWSetDSCapability ( ICAP_PIXELTYPE, PixelType ); return result; /* TW_CAPABILITY Capability; TW_INT16 Result; TW_INT16 ItemReturned; Capability.Cap=ICAP_PIXELTYPE; SetupOneValue(&Capability,TWON_ONEVALUE,(TW_INT32)PixelType); Result=TWMessageDS(DG_CONTROL,DAT_CAPABILITY,MSG_SET, (TW_MEMREF)&Capability); DumpOneValue(&Capability,NULL,(pTW_INT32)&ItemReturned); return(Result); */} </pre>
<!--googleoff: index -->
</td>
</tr>
</table>
<!-- END WIDE COLUMN -->
<!-- END MAIN CONTENT -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><div style="width: 100%; height: 1px; background-color: #919699; margin-top: 5px; margin-bottom: 15px"></div></td>
</tr>
<tr>
<td align="center"><br/>
<table border="0" cellpadding="0" cellspacing="0" class="graybox">
<tr>
<th>Did this document help you?</th>
</tr>
<tr>
<td>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=1&url=/samplecode/SampleDS/listing8.html%3Fid%3DDTS10000657-1.0&media=dvd" target=_new>Yes</a>: Tell us what works for you.</div>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=2&url=/samplecode/SampleDS/listing8.html%3Fid%3DDTS10000657-1.0&media=dvd" target=_new>It’s good, but:</a> Report typos, inaccuracies, and so forth.</div>
<div><a href="http://developer.apple.com/feedback/?v=3&url=/samplecode/SampleDS/listing8.html%3Fid%3DDTS10000657-1.0&media=dvd" target=_new>It wasn’t helpful</a>: Tell us what would have helped.</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- START BOTTOM APPLE NAVIGATION -->
<!--#include virtual="/includes/footer"-->
<!-- END BOTTOM APPLE NAVIGATION -->
<!-- START CENTER CLOSE -->
</center>
<!-- END CENTER CLOSE -->
</body>
</html>