-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlisting12.html
executable file
·563 lines (435 loc) · 17.5 KB
/
listing12.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/TWUtilities.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/TWUtilities.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">// ===========================================================================// TWUtilities.c TWAIN 1.9 ©1991-2001 TWAIN Working Group// ===========================================================================//// Glue-code utilities.#include "TWUtilities.h"#include "TWDefs.h"static TW_INT16 CopyItems(pTW_UINT8 pSource,pTW_UINT8 pDestin,TW_INT16 ItemType,TW_INT16 NumItems);// ---------------------------------------------------------------------------// * SetupOneValue // ---------------------------------------------------------------------------// Fills in a capability struct for sets of one valueTW_INT16 SetupOneValue(pTW_CAPABILITY pCapability, TW_INT16 ItemType, TW_INT32 Item){ pTW_ONEVALUE pOneValue; pCapability->ConType=TWON_ONEVALUE; pCapability->hContainer=NewHandle(sizeof(TW_ONEVALUE)); if (pCapability->hContainer==NULL) return(TWERR); pOneValue=(pTW_ONEVALUE)(*pCapability->hContainer); pOneValue->ItemType=ItemType; pOneValue->Item=Item; return(OKAY);}// ---------------------------------------------------------------------------// * SetupRange // ---------------------------------------------------------------------------// Fills in a capability struct for rangesTW_INT16 SetupRange(pTW_CAPABILITY pCapability, TW_INT16 ItemType, TW_INT32 MinValue, TW_INT32 MaxValue, TW_INT32 StepSize, TW_INT32 DefaultValue, TW_INT32 CurrentValue){ pTW_RANGE pRange; pCapability->ConType=TWON_RANGE; pCapability->hContainer=NewHandle(sizeof(TW_RANGE)); if (pCapability->hContainer==NULL) return(TWERR); pRange=(pTW_RANGE)(*pCapability->hContainer); pRange->ItemType=ItemType; pRange->MinValue=MinValue; pRange->MaxValue=MaxValue; pRange->StepSize=StepSize; pRange->DefaultValue=DefaultValue; pRange->CurrentValue=CurrentValue; return(OKAY);}// ---------------------------------------------------------------------------// * SetupEnumeration // ---------------------------------------------------------------------------// Sets up a capability struct for enumeration type negotiation. TW_INT16 SetupEnumeration(pTW_CAPABILITY pCapability, TW_INT16 ItemType, TW_INT16 NumItems, TW_INT16 CurrentIndex, TW_INT16 DefaultIndex, pTW_UINT8 ItemList)/*** Parameters: ** pCapability - pointer to TW_CAPABILITY struct** ItemType - type of item in range (i.e. TWTY_INT16)** NumItems - number of items in enumerated list** CurrentIndex- index to current value in list** DefaultIndex- index to default value in list** ItemList - pointer to enumerated list** Globals: None.** Operation: ** Return:** OKAY - if successful** TWERR - handle allocation failed*/{ pTW_ENUMERATION pEnumeration; pCapability->ConType=TWON_ENUMERATION; pCapability->hContainer=NewHandle(sizeof(TW_ENUMERATION)+ GetItemSize(ItemType)*NumItems); if (pCapability->hContainer==NULL) return(TWERR); pEnumeration=(pTW_ENUMERATION)(*pCapability->hContainer); pEnumeration->ItemType=ItemType; pEnumeration->NumItems=NumItems; pEnumeration->CurrentIndex=CurrentIndex; pEnumeration->DefaultIndex=DefaultIndex; CopyItems(ItemList,pEnumeration->ItemList,ItemType,NumItems); return(OKAY);}// ---------------------------------------------------------------------------// * SetupArray // ---------------------------------------------------------------------------// Sets up a capability struct for array negotiation.TW_INT16 SetupArray(pTW_CAPABILITY pCapability, TW_INT16 ItemType, TW_INT16 NumItems, pTW_UINT8 ItemList){ pTW_ARRAY pArray; pCapability->ConType=TWON_ARRAY; pCapability->hContainer=NewHandle(sizeof(TW_ARRAY)+ GetItemSize(ItemType)*NumItems); pArray=(pTW_ARRAY)(*pCapability->hContainer); pArray->ItemType=ItemType; pArray->NumItems=NumItems; CopyItems(ItemList,pArray->ItemList,ItemType,NumItems); return(OKAY);}// ---------------------------------------------------------------------------// * GetOneValue // ---------------------------------------------------------------------------// Extracts a value from a ONE_VALUE capability struct.TW_INT16 GetOneValue(pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT32 pItem){ pTW_ONEVALUE pOneValue; if (pCapability->ConType!=TWON_ONEVALUE) return(TWERR); pOneValue=(pTW_ONEVALUE)(*pCapability->hContainer); if (pItemType!=NULL) *pItemType=pOneValue->ItemType; if (pItem!=NULL) *pItem=pOneValue->Item; return(OKAY);}// ---------------------------------------------------------------------------// * GetRange // ---------------------------------------------------------------------------// Extracts a range of values from a RANGE capability struct.TW_INT16 GetRange(pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT32 pMinValue, pTW_INT32 pMaxValue, pTW_INT32 pStepSize, pTW_INT32 pDefaultValue, pTW_INT32 pCurrentValue){ pTW_RANGE pRange; if (pCapability->ConType!=TWON_RANGE) return(TWERR); pRange=(pTW_RANGE)(*pCapability->hContainer); if (pItemType!=NULL) *pItemType=pRange->ItemType; if (pMinValue!=NULL) *pMinValue=pRange->MinValue; if (pMaxValue!=NULL) *pMaxValue=pRange->MaxValue; if (pStepSize!=NULL) *pStepSize=pRange->StepSize; if (pDefaultValue!=NULL) *pDefaultValue=pRange->DefaultValue; if (pCurrentValue!=NULL) *pCurrentValue=pRange->CurrentValue; return(OKAY);}// ---------------------------------------------------------------------------// * GetEnumeration // ---------------------------------------------------------------------------// Extracts a list of enumerated items from a capability structure.TW_INT16 GetEnumeration(pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT16 pNumItems, pTW_INT16 pCurrentIndex, pTW_INT16 pDefaultIndex, pTW_UINT8 pItemList, TW_INT16 MaxBytes){ pTW_ENUMERATION pEnumeration; if (pCapability->ConType!=TWON_ENUMERATION) return(TWERR); pEnumeration=(pTW_ENUMERATION)(*pCapability->hContainer); if (pItemType!=NULL) *pItemType=pEnumeration->ItemType; if (pNumItems!=NULL) *pNumItems=pEnumeration->NumItems; if (pCurrentIndex!=NULL) *pCurrentIndex=pEnumeration->CurrentIndex; if (pDefaultIndex!=NULL) *pDefaultIndex=pEnumeration->DefaultIndex; if (pItemList!=NULL) { if (MaxBytes<(*pNumItems*GetItemSize(*pItemType))) return(TWERR); CopyItems(pEnumeration->ItemList,pItemList,*pItemType,*pNumItems); } return(OKAY);}// ---------------------------------------------------------------------------// * GetArray // ---------------------------------------------------------------------------// Extracts a list of enumerated items from a capability structure.TW_INT16 GetArray( pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT16 pNumItems, pTW_UINT8 pItemList, TW_INT16 MaxBytes){ pTW_ARRAY pArray; if (pCapability->ConType!=TWON_ARRAY) return(TWERR); pArray=(pTW_ARRAY)(*pCapability->hContainer); if (pItemType!=NULL) *pItemType=pArray->ItemType; if (pNumItems!=NULL) *pNumItems=pArray->NumItems; if (pItemList!=NULL) { if (MaxBytes<(*pNumItems*GetItemSize(*pItemType))) return(TWERR); CopyItems(pArray->ItemList,pItemList,*pItemType,*pNumItems); } return(OKAY);}// ---------------------------------------------------------------------------// * DumpOneValue // ---------------------------------------------------------------------------// Extracts contents of one value struct and disposes of the container.TW_INT16 DumpOneValue(pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT32 pItem){ TW_INT16 Result=OKAY; Result=GetOneValue(pCapability,pItemType,pItem); if (Result==OKAY) { DisposeHandle(pCapability->hContainer); pCapability->hContainer=NULL; } return(Result);}// ---------------------------------------------------------------------------// * DumpRange // ---------------------------------------------------------------------------// Extracts contents of range struct and disposes of the container.TW_INT16 DumpRange(pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT32 pMinValue, pTW_INT32 pMaxValue, pTW_INT32 pStepSize, pTW_INT32 pDefaultValue, pTW_INT32 pCurrentValue){ TW_INT16 Result=OKAY; Result=GetRange(pCapability,pItemType,pMinValue,pMaxValue,pStepSize, pDefaultValue,pCurrentValue); if (Result==OKAY) { DisposeHandle(pCapability->hContainer); pCapability->hContainer=NULL; } return(Result);}// ---------------------------------------------------------------------------// * DumpEnumeration // ---------------------------------------------------------------------------// Extracts contents of enumeration struct and disposes of the container.TW_INT16 DumpEnumeration(pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT16 pNumItems, pTW_INT16 pCurrentIndex, pTW_INT16 pDefaultIndex, pTW_UINT8 pItemList, TW_INT16 MaxBytes){ TW_INT16 Result=OKAY; Result=GetEnumeration(pCapability,pItemType,pNumItems, pCurrentIndex,pDefaultIndex,pItemList,MaxBytes); if (Result==OKAY) { DisposeHandle(pCapability->hContainer); pCapability->hContainer=NULL; } return(Result);}// ---------------------------------------------------------------------------// * DumpArray // ---------------------------------------------------------------------------// Extracts contents of enumeration struct and disposes of the container.TW_INT16 DumpArray( pTW_CAPABILITY pCapability, pTW_INT16 pItemType, pTW_INT16 pNumItems, pTW_UINT8 pItemList, TW_INT16 MaxBytes){ TW_INT16 Result=OKAY; Result=GetArray(pCapability,pItemType,pNumItems,pItemList,MaxBytes); DisposeHandle(pCapability->hContainer); pCapability->hContainer=NULL; return(Result);}// ---------------------------------------------------------------------------// * GetItemSize // ---------------------------------------------------------------------------// Returns the size of an item in bytes.TW_INT16 GetItemSize(TW_INT16 ItemType){ TW_INT16 size = 0; switch (ItemType) { case TWTY_INT8: case TWTY_UINT8: size = 1; break; case TWTY_INT16: case TWTY_UINT16: case TWTY_BOOL: size = 2; break; case TWTY_INT32: case TWTY_UINT32: case TWTY_FIX32: size = 4; break; case TWTY_STR32: size = 32; break; case TWTY_STR64: size = 64; break; case TWTY_STR128: size = 128; break; case TWTY_STR255: size = 256; break; default: break; } return size;}// ---------------------------------------------------------------------------// * CopyItems // ---------------------------------------------------------------------------// Copies numItems from the source to the destination listTW_INT16 CopyItems(pTW_UINT8 pSource,pTW_UINT8 pDestin,TW_INT16 ItemType,TW_INT16 numItems ){ TW_INT16 i; TW_INT16 ItemSize; TW_INT32 Length; ItemSize=GetItemSize(ItemType); Length=(TW_INT32)ItemSize*(TW_INT32)numItems; for (i=0;i<Length;i++) pDestin[i]=pSource[i]; return(OKAY);} </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/listing12.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/listing12.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/listing12.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>