- 2005.05.19 02:14 "Re: [Tiff] Looking for the definitions of (MS Specific?) tags", by Joris Van Damme
- 2005.05.23 11:33 "Re: [Tiff] (MS Specific?) tags, Hi Kevin", by Ulf Zibis
2005.05.19 13:54 "Re: [Tiff] Looking for the definitions of (MS Specific?) tags [part 2]", by Ulf Zibis
Hi Joris, Kevin and all,
the requested MS-tags are not listed in awaresystems directory.
I have explored some new tags, which are used by Microsoft for the faxconsole, which is included in Windows XP. I dissassembled and iterpreted the TIFF-files myself, so I can't guerantee that the values are all right. I added these tags as described in http://www.remotesensing.org/libtiff/addingtags.html. Please refer to the files in the attachment.
I have written these files to extend sfftobmp capabilities. See: http://sfftools.sourceforge.net.
I had some problems because via xtiffiop.h there are only 33 additional tags possible. So I propose to add theese tags to the normal library.
Because the 3 files exceed the limit of 40 kBytes I post them in to parts for the mailing list.
bye
Ulf Zibis
/*
* xtif_dir.c
*
* Extended TIFF Directory Tag Support.
*
* You may use this file as a template to add your own
* extended tags to the library. Only the parts of the code
* marked with "XXX" require modification. Three example tags
* are shown; you should replace them with your own.
*
* Author: Niles D. Ritter
* Author: Ulf Zibis <Ulf.Zibis@gmx.de>: new tags for Microsoft faxconsole
*/
#include "xtiffiop.h"
#include <stdio.h>
/* Tiff info structure.
*
* Entry format:
* { TAGNUMBER, ReadCount, WriteCount, DataType, FIELDNUM,
* OkToChange, PassDirCountOnSet, AsciiName }
*
* For ReadCount, WriteCount, -1 = unknown; used for mult-valued
* tags and ASCII.
*/
// Note: For the following tags :
//
// PARENTJOBID, SUBMISSIONTIME, SCHEDULED, STARTTIME, ENDTIME
// Microsoft faxconsole uses DataType 10, which is incorrect according to
// TIFF specification. So we use DataType 7 =UNDEFINED. We can do this,
// because the actual Microsoft faxconsole (delivered with Windows XP)
// seems to ignore this.
static const TIFFFieldInfo xtiffFieldInfo[] = {
/* XXX Replace these example tags with your own extended tags */
{ TIFFTAG_MSFAX_CSID, -1,-1, TIFF_ASCII, FIELD_MSFAX_CSID,
TRUE, FALSE, "MyCalledStationIdTag" },
{ TIFFTAG_MSFAX_TSID, -1,-1, TIFF_ASCII, FIELD_MSFAX_TSID,
TRUE, FALSE, "MyTransmitStationIdTag" },
{ TIFFTAG_MSFAX_DEVICE, -1,-1, TIFF_ASCII, FIELD_MSFAX_DEVICE,
TRUE, FALSE, "MyDeviceTag" },
{ TIFFTAG_MSFAX_ROUTINGINFO, -1,-1, TIFF_ASCII, FIELD_MSFAX_ROUTINGINFO,
TRUE, FALSE, "MyRoutingInfoTag" },
{ TIFFTAG_MSFAX_CALLERID, -1,-1, TIFF_ASCII, FIELD_MSFAX_CALLERID,
TRUE, FALSE, "MyCallerIdTag" },
{ TIFFTAG_MSFAX_RECIPIENTNAME, -1,-1, TIFF_ASCII, FIELD_MSFAX_RECIPIENTNAME,
TRUE, FALSE, "MyRecipientNameTag" },
{ TIFFTAG_MSFAX_RECIPIENTFAXNUMBER, -1,-1, TIFF_ASCII, FIELD_MSFAX_RECIPIENTFAXNUMBER,
TRUE, FALSE, "MyRecipientFaxNumberTag" },
/*
{ TIFFTAG_MSFAX_40008, -1,-1, TIFF_ASCII, FIELD_MSFAX_40008,
TRUE, FALSE, "My40008Tag" },
{ TIFFTAG_MSFAX_40009, -1,-1, TIFF_ASCII, FIELD_MSFAX_40009,
TRUE, FALSE, "My40009Tag" },
{ TIFFTAG_MSFAX_40010, -1,-1, TIFF_ASCII, FIELD_MSFAX_40010,
TRUE, FALSE, "My40010Tag" },
{ TIFFTAG_MSFAX_40011, -1,-1, TIFF_ASCII, FIELD_MSFAX_40011,
TRUE, FALSE, "My40011Tag" },
{ TIFFTAG_MSFAX_40012, -1,-1, TIFF_ASCII, FIELD_MSFAX_40012,
TRUE, FALSE, "My40012Tag" },
{ TIFFTAG_MSFAX_40013, -1,-1, TIFF_ASCII, FIELD_MSFAX_40013,
TRUE, FALSE, "My40013Tag" },
{ TIFFTAG_MSFAX_40014, -1,-1, TIFF_ASCII, FIELD_MSFAX_40014,
TRUE, FALSE, "My40014Tag" },
{ TIFFTAG_MSFAX_40015, -1,-1, TIFF_ASCII, FIELD_MSFAX_40015,
TRUE, FALSE, "My40015Tag" },
{ TIFFTAG_MSFAX_40016, -1,-1, TIFF_ASCII, FIELD_MSFAX_40016,
TRUE, FALSE, "My40016Tag" },
{ TIFFTAG_MSFAX_40017, -1,-1, TIFF_ASCII, FIELD_MSFAX_40017,
TRUE, FALSE, "My40017Tag" },
{ TIFFTAG_MSFAX_40018, -1,-1, TIFF_ASCII, FIELD_MSFAX_40018,
TRUE, FALSE, "My40018Tag" },
{ TIFFTAG_MSFAX_40019, -1,-1, TIFF_ASCII, FIELD_MSFAX_40019,
TRUE, FALSE, "My40019Tag" },
{ TIFFTAG_MSFAX_40020, -1,-1, TIFF_ASCII, FIELD_MSFAX_40020,
TRUE, FALSE, "My40020Tag" },
*/
{ TIFFTAG_MSFAX_SENDERNAME, -1,-1, TIFF_ASCII, FIELD_MSFAX_SENDERNAME,
TRUE, FALSE, "MySenderNameTag" },
{ TIFFTAG_MSFAX_SENDERFAXNUMBER, -1,-1, TIFF_ASCII, FIELD_MSFAX_SENDERFAXNUMBER,
TRUE, FALSE, "MySenderFaxNumberTag" },
/*
{ TIFFTAG_MSFAX_SENDERCOMPANY, -1,-1, TIFF_ASCII, FIELD_MSFAX_SENDERCOMPANY,
TRUE, FALSE, "MySenderCompanyTag" },
{ TIFFTAG_MSFAX_40024, -1,-1, TIFF_ASCII, FIELD_MSFAX_40024,
TRUE, FALSE, "My40024Tag" },
{ TIFFTAG_MSFAX_40025, -1,-1, TIFF_ASCII, FIELD_MSFAX_40025,
TRUE, FALSE, "My40025Tag" },
{ TIFFTAG_MSFAX_40026, -1,-1, TIFF_ASCII, FIELD_MSFAX_40026,
TRUE, FALSE, "My40026Tag" },
{ TIFFTAG_MSFAX_40027, -1,-1, TIFF_ASCII, FIELD_MSFAX_40027,
TRUE, FALSE, "My40027Tag" },
{ TIFFTAG_MSFAX_40028, -1,-1, TIFF_ASCII, FIELD_MSFAX_40028,
TRUE, FALSE, "My40028Tag" },
{ TIFFTAG_MSFAX_40029, -1,-1, TIFF_ASCII, FIELD_MSFAX_40029,
TRUE, FALSE, "My40029Tag" },
{ TIFFTAG_MSFAX_40030, -1,-1, TIFF_ASCII, FIELD_MSFAX_40030,
TRUE, FALSE, "My40030Tag" },
{ TIFFTAG_MSFAX_40031, -1,-1, TIFF_ASCII, FIELD_MSFAX_40031,
TRUE, FALSE, "My40031Tag" },
{ TIFFTAG_MSFAX_40032, -1,-1, TIFF_ASCII, FIELD_MSFAX_40032,
TRUE, FALSE, "My40032Tag" },
{ TIFFTAG_MSFAX_40033, -1,-1, TIFF_ASCII, FIELD_MSFAX_40033,
TRUE, FALSE, "My40033Tag" },
{ TIFFTAG_MSFAX_40034, -1,-1, TIFF_ASCII, FIELD_MSFAX_40034,
TRUE, FALSE, "My40034Tag" },
{ TIFFTAG_MSFAX_40035, -1,-1, TIFF_ASCII, FIELD_MSFAX_40035,
TRUE, FALSE, "My40035Tag" },
*/
{ TIFFTAG_MSFAX_BILLINGCODE, -1,-1, TIFF_ASCII, FIELD_MSFAX_BILLINGCODE,
TRUE, FALSE, "MyBillingCcodeTag" },
{ TIFFTAG_MSFAX_USERNAME, -1,-1, TIFF_ASCII, FIELD_MSFAX_USERNAME,
TRUE, FALSE, "MyUserNameTag" },
{ TIFFTAG_MSFAX_40038, -1,-1, TIFF_ASCII, FIELD_MSFAX_40038,
TRUE, FALSE, "My40038Tag" },
{ TIFFTAG_MSFAX_DOCUMENT, -1,-1, TIFF_ASCII, FIELD_MSFAX_DOCUMENT,
TRUE, FALSE, "MyDocumentTag" },
{ TIFFTAG_MSFAX_COVERPAGESUBJECT, -1,-1, TIFF_ASCII, FIELD_MSFAX_COVERPAGESUBJECT,
TRUE, FALSE, "MyCoverPageSubjectTag" },
{ TIFFTAG_MSFAX_RETRIES, 1, 1, TIFF_LONG, FIELD_MSFAX_RETRIES,
TRUE, FALSE, "MyRetriesTag" },
{ TIFFTAG_MSFAX_PRIORITY, 1, 1, TIFF_LONG, FIELD_MSFAX_PRIORITY,
TRUE, FALSE, "MyPriorityTag" },
{ TIFFTAG_MSFAX_PARENTJOBID, sizeof(uint64), sizeof(uint64),
TIFF_UNDEFINED, FIELD_MSFAX_PARENTJOBID, TRUE, FALSE, "MyParentJobIdTag" },
{ TIFFTAG_MSFAX_SUBMISSIONTIME, sizeof(FILETIME), sizeof(FILETIME),
TIFF_UNDEFINED, FIELD_MSFAX_SUBMISSIONTIME, TRUE, FALSE, "MySubmissionTimeTag" },
{ TIFFTAG_MSFAX_SCHEDULED, sizeof(FILETIME), sizeof(FILETIME),
TIFF_UNDEFINED, FIELD_MSFAX_SCHEDULED, TRUE, FALSE, "MyScheduledTag" },
{ TIFFTAG_MSFAX_TOTALPAGES, 1, 1, TIFF_LONG, FIELD_MSFAX_TOTALPAGES,
TRUE, FALSE, "MyTotalPagesTag" },
{ TIFFTAG_MSFAX_TYPE, 1, 1, TIFF_LONG, FIELD_MSFAX_TYPE,
TRUE, FALSE, "MyTypeTag" },
{ TIFFTAG_MSFAX_40048, 1, 1, TIFF_LONG, FIELD_MSFAX_40048,
TRUE, FALSE, "My40048Tag" },
{ TIFFTAG_MSFAX_ERRORCODE, 1, 1, TIFF_LONG, FIELD_MSFAX_ERRORCODE,
TRUE, FALSE, "MyErrorCodeTag" },
{ TIFFTAG_MSFAX_40050, -1,-1, TIFF_ASCII, FIELD_MSFAX_40050,
TRUE, FALSE, "My40050Tag" },
{ TIFFTAG_MSFAX_STARTTIME, sizeof(FILETIME), sizeof(FILETIME),
TIFF_UNDEFINED, FIELD_MSFAX_STARTTIME, TRUE, FALSE, "MyStartTimeTag" },
{ TIFFTAG_MSFAX_ENDTIME, sizeof(FILETIME), sizeof(FILETIME),
TIFF_UNDEFINED, FIELD_MSFAX_ENDTIME, TRUE, FALSE, "MyEndTimeTag" },
{ TIFFTAG_MSFAX_40053, 1, 1, TIFF_LONG, FIELD_MSFAX_40053,
TRUE, FALSE, "My40053Tag" },
// { TIFFTAG_EXAMPLE_MULTI, -1,-1, TIFF_DOUBLE, FIELD_EXAMPLE_MULTI,
// TRUE, TRUE, "MyMultivaluedTag" },
// { TIFFTAG_EXAMPLE_SINGLE, 1, 1, TIFF_LONG, FIELD_EXAMPLE_SINGLE,
// TRUE, FALSE, "MySingleLongTag" },
// { TIFFTAG_EXAMPLE_ASCII, -1,-1, TIFF_ASCII, FIELD_EXAMPLE_ASCII,
// TRUE, FALSE, "MyAsciiTag" },
};
#define N(a) (sizeof (a) / sizeof (a[0]))
static void
_XTIFFPrintDirectory(TIFF* tif, FILE* fd, long flags)
{
xtiff *xt = XTIFFDIR(tif);
XTIFFDirectory *xd = &xt->xtif_dir;
/* call the inherited method */
if (PARENT(xt,printdir))
(PARENT(xt,printdir))(tif,fd,flags);
/* XXX Add field printing here. Replace the three example
* tags implemented below with your own.
*/
fprintf(fd,"--My MSFax Tags--\n");
// fprintf(fd,"--My Example Tags--\n");
if (TIFFFieldSet(tif,FIELD_MSFAX_CSID))
{
_TIFFprintAsciiTag(fd,"My CalledStationId Tag",
xd->xd_msfax_csid);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_TSID))
{
_TIFFprintAsciiTag(fd,"My TransmitStationId Tag",
xd->xd_msfax_tsid);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_DEVICE))
{
_TIFFprintAsciiTag(fd,"My Device Tag",
xd->xd_msfax_device);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_ROUTINGINFO))
{
_TIFFprintAsciiTag(fd,"My RoutingInfo Tag",
xd->xd_msfax_routinginfo);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_CALLERID))
{
_TIFFprintAsciiTag(fd,"My CallerId Tag",
xd->xd_msfax_callerid);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_RECIPIENTNAME))
{
_TIFFprintAsciiTag(fd,"My RecipientName Tag",
xd->xd_msfax_recipientname);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_RECIPIENTFAXNUMBER))
{
_TIFFprintAsciiTag(fd,"My RecipientFaxNumber Tag",
xd->xd_msfax_recipientfaxnumber);
}
/*
if (TIFFFieldSet(tif,FIELD_MSFAX_40008))
{
_TIFFprintAsciiTag(fd,"My 40008 Tag",
xd->xd_msfax_40008);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40009))
{
_TIFFprintAsciiTag(fd,"My 40009 Tag",
xd->xd_msfax_40009);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40010))
{
_TIFFprintAsciiTag(fd,"My 40010 Tag",
xd->xd_msfax_40010);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40011))
{
_TIFFprintAsciiTag(fd,"My 40011 Tag",
xd->xd_msfax_40011);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40012))
{
_TIFFprintAsciiTag(fd,"My 40012 Tag",
xd->xd_msfax_40012);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40013))
{
_TIFFprintAsciiTag(fd,"My 40013 Tag",
xd->xd_msfax_40013);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40014))
{
_TIFFprintAsciiTag(fd,"My 40014 Tag",
xd->xd_msfax_40014);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40015))
{
_TIFFprintAsciiTag(fd,"My 40015 Tag",
xd->xd_msfax_40015);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40016))
{
_TIFFprintAsciiTag(fd,"My 40016 Tag",
xd->xd_msfax_40016);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40017))
{
_TIFFprintAsciiTag(fd,"My 40017 Tag",
xd->xd_msfax_40017);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40018))
{
_TIFFprintAsciiTag(fd,"My 40018 Tag",
xd->xd_msfax_40018);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40019))
{
_TIFFprintAsciiTag(fd,"My 40019 Tag",
xd->xd_msfax_40019);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40020))
{
_TIFFprintAsciiTag(fd,"My 40020 Tag",
xd->xd_msfax_40020);
}
*/
if (TIFFFieldSet(tif,FIELD_MSFAX_SENDERNAME))
{
_TIFFprintAsciiTag(fd,"My SenderName Tag",
xd->xd_msfax_sendername);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_SENDERFAXNUMBER))
{
_TIFFprintAsciiTag(fd,"My SenderFaxNumber Tag",
xd->xd_msfax_senderfaxnumber);
}
/*
if (TIFFFieldSet(tif,FIELD_MSFAX_SENDERCOMPANY))
{
_TIFFprintAsciiTag(fd,"My SenderCompany Tag",
xd->xd_msfax_sendercompany);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40024))
{
_TIFFprintAsciiTag(fd,"My 40024 Tag",
xd->xd_msfax_40024);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40025))
{
_TIFFprintAsciiTag(fd,"My 40025 Tag",
xd->xd_msfax_40025);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40026))
{
_TIFFprintAsciiTag(fd,"My 40026 Tag",
xd->xd_msfax_40026);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40027))
{
_TIFFprintAsciiTag(fd,"My 40027 Tag",
xd->xd_msfax_40027);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40028))
{
_TIFFprintAsciiTag(fd,"My 40028 Tag",
xd->xd_msfax_40028);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40029))
{
_TIFFprintAsciiTag(fd,"My 40029 Tag",
xd->xd_msfax_40029);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40030))
{
_TIFFprintAsciiTag(fd,"My 40030 Tag",
xd->xd_msfax_40030);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40031))
{
_TIFFprintAsciiTag(fd,"My 40031 Tag",
xd->xd_msfax_40031);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40032))
{
_TIFFprintAsciiTag(fd,"My 40032 Tag",
xd->xd_msfax_40032);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40033))
{
_TIFFprintAsciiTag(fd,"My 40033 Tag",
xd->xd_msfax_40033);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40034))
{
_TIFFprintAsciiTag(fd,"My 40034 Tag",
xd->xd_msfax_40034);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40035))
{
_TIFFprintAsciiTag(fd,"My 40035 Tag",
xd->xd_msfax_40035);
}
*/
if (TIFFFieldSet(tif,FIELD_MSFAX_BILLINGCODE))
{
_TIFFprintAsciiTag(fd,"My BillingCode Tag",
xd->xd_msfax_billingcode);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_USERNAME))
{
_TIFFprintAsciiTag(fd,"My UserName Tag",
xd->xd_msfax_username);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40038))
{
_TIFFprintAsciiTag(fd,"My 40038 Tag",
xd->xd_msfax_40038);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_DOCUMENT))
{
_TIFFprintAsciiTag(fd,"My Document Tag",
xd->xd_msfax_document);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_COVERPAGESUBJECT))
{
_TIFFprintAsciiTag(fd,"My CoverPageSubject Tag",
xd->xd_msfax_coverpagesubject);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_RETRIES))
{
fprintf(fd, " My Retries Tag: %lu\n", xd->xd_msfax_retries);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_PRIORITY))
{
fprintf(fd, " My Priority Tag: %lu\n", xd->xd_msfax_priority);
}
// if (TIFFFieldSet(tif,FIELD_MSFAX_PARENTJOBID "My ParentJobId Tag" xd_msfax_parentjobid
// if (TIFFFieldSet(tif,FIELD_MSFAX_SUBMISSIONTIME "My SubmissionTime Tag" xd_msfax_submissiontime
// if (TIFFFieldSet(tif,FIELD_MSFAX_SCHEDULED "My Scheduled Tag" xd_msfax_scheduled
if (TIFFFieldSet(tif,FIELD_MSFAX_TOTALPAGES))
{
fprintf(fd, " My TotalPages Tag: %lu\n", xd->xd_msfax_totalpages);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_TYPE))
{
fprintf(fd, " My Type Tag: %lu\n", xd->xd_msfax_type);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40048))
{
fprintf(fd, " My 40048 Tag: %lu\n", xd->xd_msfax_40048);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_ERRORCODE))
{
fprintf(fd, " My ErrorCode Tag: %lu\n", xd->xd_msfax_errorcode);
}
if (TIFFFieldSet(tif,FIELD_MSFAX_40050))
{
_TIFFprintAsciiTag(fd,"My 40050 Tag",
xd->xd_msfax_40050);
}
// if (TIFFFieldSet(tif,FIELD_MSFAX_STARTTIME "My StartTime Tag" xd_msfax_starttime
// if (TIFFFieldSet(tif,FIELD_MSFAX_ENDTIME "My EndTime Tag" xd_msfax_endtime
if (TIFFFieldSet(tif,FIELD_MSFAX_40053))
{
fprintf(fd, " My 40053 Tag: %lu\n", xd->xd_msfax_40053);
}
/* Our first example tag may have a lot of values, so we
* will only print them out if the TIFFPRINT_MYMULTIDOUBLES
* flag is passed into the print method.
*/
/*
if (TIFFFieldSet(tif,FIELD_EXAMPLE_MULTI))
{
int i,num;
fprintf(fd, " My Multi-Valued Doubles:");
if (flags & TIFFPRINT_MYMULTIDOUBLES)
{
double *value = xd->xd_example_multi;
num = xd->xd_num_multi;
fprintf(fd,"(");
for (i=0;i<num;i++) fprintf(fd, " %lg", *value++);
fprintf(fd,")\n");
} else
fprintf(fd, "(present)\n");
}
if (TIFFFieldSet(tif,FIELD_EXAMPLE_SINGLE))
{
fprintf(fd, " My Single Long Tag: %lu\n", xd->xd_example_single);
}
if (TIFFFieldSet(tif,FIELD_EXAMPLE_ASCII))
{
_TIFFprintAsciiTag(fd,"My ASCII Tag",
xd->xd_example_ascii);
}
*/
}
static int
_XTIFFVSetField(TIFF* tif, ttag_t tag, va_list ap)
{
xtiff *xt = XTIFFDIR(tif);
XTIFFDirectory* xd = &xt->xtif_dir;
int status = 1;
uint32 v32=0;
int i=0, v=0;
va_list ap1 = ap;
/* va_start is called by the calling routine */
switch (tag) {
/*
* XXX put your extended tags here; replace the implemented
* example tags with your own.
*/
case TIFFTAG_MSFAX_CSID:
_TIFFsetString(&xd->xd_msfax_csid, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_TSID:
_TIFFsetString(&xd->xd_msfax_tsid, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_DEVICE:
_TIFFsetString(&xd->xd_msfax_device, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_ROUTINGINFO:
_TIFFsetString(&xd->xd_msfax_routinginfo, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_CALLERID:
_TIFFsetString(&xd->xd_msfax_callerid, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_RECIPIENTNAME:
_TIFFsetString(&xd->xd_msfax_recipientname, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_RECIPIENTFAXNUMBER:
_TIFFsetString(&xd->xd_msfax_recipientfaxnumber, va_arg(ap, char*));
break;
/*
case TIFFTAG_MSFAX_40008:
_TIFFsetString(&xd->xd_msfax_40008, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40009:
_TIFFsetString(&xd->xd_msfax_40009, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40010:
_TIFFsetString(&xd->xd_msfax_40010, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40011:
_TIFFsetString(&xd->xd_msfax_40011, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40012:
_TIFFsetString(&xd->xd_msfax_40012, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40013:
_TIFFsetString(&xd->xd_msfax_40013, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40014:
_TIFFsetString(&xd->xd_msfax_40014, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40015:
_TIFFsetString(&xd->xd_msfax_40015, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40016:
_TIFFsetString(&xd->xd_msfax_40016, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40017:
_TIFFsetString(&xd->xd_msfax_40017, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40018:
_TIFFsetString(&xd->xd_msfax_40018, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40019:
_TIFFsetString(&xd->xd_msfax_40019, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40020:
_TIFFsetString(&xd->xd_msfax_40020, va_arg(ap, char*));
break;
*/
case TIFFTAG_MSFAX_SENDERNAME:
_TIFFsetString(&xd->xd_msfax_sendername, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_SENDERFAXNUMBER:
_TIFFsetString(&xd->xd_msfax_senderfaxnumber, va_arg(ap, char*));
break;
/*
case TIFFTAG_MSFAX_SENDERCOMPANY:
_TIFFsetString(&xd->xd_msfax_sendercompany, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40024:
_TIFFsetString(&xd->xd_msfax_40024, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40025:
_TIFFsetString(&xd->xd_msfax_40025, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40026:
_TIFFsetString(&xd->xd_msfax_40026, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40027:
_TIFFsetString(&xd->xd_msfax_40027, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40028:
_TIFFsetString(&xd->xd_msfax_40028, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40029:
_TIFFsetString(&xd->xd_msfax_40029, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40030:
_TIFFsetString(&xd->xd_msfax_40030, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40031:
_TIFFsetString(&xd->xd_msfax_40031, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40032:
_TIFFsetString(&xd->xd_msfax_40032, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40033:
_TIFFsetString(&xd->xd_msfax_40033, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40034:
_TIFFsetString(&xd->xd_msfax_40034, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40035:
_TIFFsetString(&xd->xd_msfax_40035, va_arg(ap, char*));
break;
*/
case TIFFTAG_MSFAX_BILLINGCODE:
_TIFFsetString(&xd->xd_msfax_billingcode, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_USERNAME:
_TIFFsetString(&xd->xd_msfax_username, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_40038:
_TIFFsetString(&xd->xd_msfax_40038, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_DOCUMENT:
_TIFFsetString(&xd->xd_msfax_document, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_COVERPAGESUBJECT:
_TIFFsetString(&xd->xd_msfax_coverpagesubject, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_RETRIES:
xd->xd_msfax_retries = va_arg(ap, uint32);
break;
case TIFFTAG_MSFAX_PRIORITY:
xd->xd_msfax_priority = va_arg(ap, uint32);
break;
case TIFFTAG_MSFAX_PARENTJOBID:
// xd->xd_msfax_parentjobid = va_arg(ap, int64);
_TIFFsetByteArray(&xd->xd_msfax_parentjobid, va_arg(ap, uint8*),
(long)sizeof(uint64));
break;
case TIFFTAG_MSFAX_SUBMISSIONTIME:
// xd->xd_msfax_submissiontime = va_arg(ap, FILETIME);
_TIFFsetByteArray(&xd->xd_msfax_submissiontime, va_arg(ap, uint8*),
(long)sizeof(FILETIME));
break;
case TIFFTAG_MSFAX_SCHEDULED:
// xd->xd_msfax_scheduled = va_arg(ap, FILETIME);
_TIFFsetByteArray(&xd->xd_msfax_scheduled, va_arg(ap, uint8*),
(long)sizeof(FILETIME));
break;
case TIFFTAG_MSFAX_TOTALPAGES:
xd->xd_msfax_totalpages = va_arg(ap, uint32);
break;
case TIFFTAG_MSFAX_TYPE:
xd->xd_msfax_type = va_arg(ap, uint32);
break;
case TIFFTAG_MSFAX_40048:
xd-> xd_msfax_40048 = va_arg(ap, uint32);
break;
case TIFFTAG_MSFAX_ERRORCODE:
xd->xd_msfax_errorcode = va_arg(ap, uint32);
break;
case TIFFTAG_MSFAX_40050:
_TIFFsetString(&xd->xd_msfax_40050, va_arg(ap, char*));
break;
case TIFFTAG_MSFAX_STARTTIME:
// xd->xd_msfax_starttime = va_arg(ap, FILETIME);
_TIFFsetByteArray(&xd->xd_msfax_starttime, va_arg(ap, uint8*),
(long)sizeof(FILETIME));
break;
case TIFFTAG_MSFAX_ENDTIME:
// xd->xd_msfax_endtime = va_arg(ap, FILETIME);
_TIFFsetByteArray(&xd->xd_msfax_endtime, va_arg(ap, uint8*),
(long)sizeof(FILETIME));
break;
case TIFFTAG_MSFAX_40053:
xd->xd_msfax_40053 = va_arg(ap, uint32);
break;
/*
case TIFFTAG_EXAMPLE_MULTI:
// multi-valued tags need to store the count as well
xd->xd_num_multi = (uint16) va_arg(ap, int);
_TIFFsetDoubleArray(&xd->xd_example_multi, va_arg(ap, double*),
(long) xd->xd_num_multi);
break;
case TIFFTAG_EXAMPLE_SINGLE:
xd->xd_example_single = va_arg(ap, uint32);
break;
case TIFFTAG_EXAMPLE_ASCII:
_TIFFsetString(&xd->xd_example_ascii, va_arg(ap, char*));
break;
*/
default:
/* call the inherited method */
return (PARENT(xt,vsetfield))(tif,tag,ap);
break;
}
if (status) {
/* we have to override the print method here,
* after the compression tags have gotten to it.
* This makes sense because the only time we would
* need the extended print method is if an extended
* tag is set by the reader.
*/
if (!(xt->xtif_flags & XTIFFP_PRINT))
{
PARENT(xt,printdir) = TIFFMEMBER(tif,printdir);
TIFFMEMBER(tif,printdir) = _XTIFFPrintDirectory;
xt->xtif_flags |= XTIFFP_PRINT;
}
TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
tif->tif_flags |= TIFF_DIRTYDIRECT;
}
va_end(ap);
return (status);
badvalue:
TIFFError(tif->tif_name, "%d: Bad value for \"%s\"", v,
_TIFFFieldWithTag(tif, tag)->field_name);
va_end(ap);
return (0);
badvalue32:
TIFFError(tif->tif_name, "%ld: Bad value for \"%s\"", v32,
_TIFFFieldWithTag(tif, tag)->field_name);
va_end(ap);
return (0);
}
static int
_XTIFFVGetField(TIFF* tif, ttag_t tag, va_list ap)
{
xtiff *xt = XTIFFDIR(tif);
XTIFFDirectory* xd = &xt->xtif_dir;
switch (tag) {
/*
* XXX put your extended tags here; replace the implemented
* example tags with your own.
*/
case TIFFTAG_MSFAX_CSID:
*va_arg(ap, char**) = xd->xd_msfax_csid;
break;
case TIFFTAG_MSFAX_TSID:
*va_arg(ap, char**) = xd->xd_msfax_tsid;
break;
case TIFFTAG_MSFAX_DEVICE:
*va_arg(ap, char**) = xd->xd_msfax_device;
break;
case TIFFTAG_MSFAX_ROUTINGINFO:
*va_arg(ap, char**) = xd->xd_msfax_routinginfo;
break;
case TIFFTAG_MSFAX_CALLERID:
*va_arg(ap, char**) = xd->xd_msfax_callerid;
break;
case TIFFTAG_MSFAX_RECIPIENTNAME:
*va_arg(ap, char**) = xd->xd_msfax_recipientname;
break;
case TIFFTAG_MSFAX_RECIPIENTFAXNUMBER:
*va_arg(ap, char**) = xd->xd_msfax_recipientfaxnumber;
break;
/*
case TIFFTAG_MSFAX_40008:
*va_arg(ap, char**) = xd->xd_msfax_40008;
break;
case TIFFTAG_MSFAX_40009:
*va_arg(ap, char**) = xd->xd_msfax_40009;
break;
case TIFFTAG_MSFAX_40010:
*va_arg(ap, char**) = xd->xd_msfax_40010;
break;
case TIFFTAG_MSFAX_40011:
*va_arg(ap, char**) = xd->xd_msfax_40011;
break;
case TIFFTAG_MSFAX_40012:
*va_arg(ap, char**) = xd->xd_msfax_40012;
break;
case TIFFTAG_MSFAX_40013:
*va_arg(ap, char**) = xd->xd_msfax_40013;
break;
case TIFFTAG_MSFAX_40014:
*va_arg(ap, char**) = xd->xd_msfax_40014;
break;
case TIFFTAG_MSFAX_40015:
*va_arg(ap, char**) = xd->xd_msfax_40015;
break;
case TIFFTAG_MSFAX_40016:
*va_arg(ap, char**) = xd->xd_msfax_40016;
break;
case TIFFTAG_MSFAX_40017:
*va_arg(ap, char**) = xd->xd_msfax_40017;
break;
case TIFFTAG_MSFAX_40018:
*va_arg(ap, char**) = xd->xd_msfax_40018;
break;
case TIFFTAG_MSFAX_40019:
*va_arg(ap, char**) = xd->xd_msfax_40019;
break;
case TIFFTAG_MSFAX_40020:
*va_arg(ap, char**) = xd->xd_msfax_40020;
break;
*/
case TIFFTAG_MSFAX_SENDERNAME:
*va_arg(ap, char**) = xd->xd_msfax_sendername;
break;
case TIFFTAG_MSFAX_SENDERFAXNUMBER:
*va_arg(ap, char**) = xd->xd_msfax_senderfaxnumber;
break;
/*
case TIFFTAG_MSFAX_SENDERCOMPANY:
*va_arg(ap, char**) = xd->xd_msfax_sendercompany;
break;
case TIFFTAG_MSFAX_40024:
*va_arg(ap, char**) = xd->xd_msfax_40024;
break;
case TIFFTAG_MSFAX_40025:
*va_arg(ap, char**) = xd->xd_msfax_40025;
break;
case TIFFTAG_MSFAX_40026:
*va_arg(ap, char**) = xd->xd_msfax_40026;
break;
case TIFFTAG_MSFAX_40027:
*va_arg(ap, char**) = xd->xd_msfax_40027;
break;
case TIFFTAG_MSFAX_40028:
*va_arg(ap, char**) = xd->xd_msfax_40028;
break;
case TIFFTAG_MSFAX_40029:
*va_arg(ap, char**) = xd->xd_msfax_40029;
break;
case TIFFTAG_MSFAX_40030:
*va_arg(ap, char**) = xd->xd_msfax_40030;
break;
case TIFFTAG_MSFAX_40031:
*va_arg(ap, char**) = xd->xd_msfax_40031;
break;
case TIFFTAG_MSFAX_40032:
*va_arg(ap, char**) = xd->xd_msfax_40032;
break;
case TIFFTAG_MSFAX_40033:
*va_arg(ap, char**) = xd->xd_msfax_40033;
break;
case TIFFTAG_MSFAX_40034:
*va_arg(ap, char**) = xd->xd_msfax_40034;
break;
case TIFFTAG_MSFAX_40035:
*va_arg(ap, char**) = xd->xd_msfax_40035;
break;
*/
case TIFFTAG_MSFAX_BILLINGCODE:
*va_arg(ap, char**) = xd->xd_msfax_billingcode;
break;
case TIFFTAG_MSFAX_USERNAME:
*va_arg(ap, char**) = xd->xd_msfax_username;
break;
case TIFFTAG_MSFAX_40038:
*va_arg(ap, char**) = xd->xd_msfax_40038;
break;
case TIFFTAG_MSFAX_DOCUMENT:
*va_arg(ap, char**) = xd->xd_msfax_document;
break;
case TIFFTAG_MSFAX_COVERPAGESUBJECT:
*va_arg(ap, char**) = xd->xd_msfax_coverpagesubject;
break;
case TIFFTAG_MSFAX_RETRIES:
*va_arg(ap, uint32*) = xd->xd_msfax_retries;
break;
case TIFFTAG_MSFAX_PRIORITY:
*va_arg(ap, uint32*) = xd->xd_msfax_priority;
break;
case TIFFTAG_MSFAX_PARENTJOBID:
*va_arg(ap, uint64**) = xd->xd_msfax_parentjobid;
break;
case TIFFTAG_MSFAX_SUBMISSIONTIME:
*va_arg(ap, FILETIME**) = xd->xd_msfax_submissiontime;
break;
case TIFFTAG_MSFAX_SCHEDULED:
*va_arg(ap, FILETIME**) = xd->xd_msfax_scheduled;
break;
case TIFFTAG_MSFAX_TOTALPAGES:
*va_arg(ap, uint32*) = xd->xd_msfax_totalpages;
break;
case TIFFTAG_MSFAX_TYPE:
*va_arg(ap, uint32*) = xd->xd_msfax_type;
break;
case TIFFTAG_MSFAX_40048:
*va_arg(ap, uint32*) = xd->xd_msfax_40048;
break;
case TIFFTAG_MSFAX_ERRORCODE:
*va_arg(ap, uint32*) = xd->xd_msfax_errorcode;
break;
case TIFFTAG_MSFAX_40050:
*va_arg(ap, char**) = xd->xd_msfax_40050;
break;
case TIFFTAG_MSFAX_STARTTIME:
*va_arg(ap, FILETIME**) = xd->xd_msfax_starttime;
break;
case TIFFTAG_MSFAX_ENDTIME:
*va_arg(ap, FILETIME**) = xd->xd_msfax_endtime;
break;
case TIFFTAG_MSFAX_40053:
*va_arg(ap, uint32*) = xd->xd_msfax_40053;
break;
/*
case TIFFTAG_EXAMPLE_MULTI:
*va_arg(ap, uint16*) = xd->xd_num_multi;
*va_arg(ap, double**) = xd->xd_example_multi;
break;
case TIFFTAG_EXAMPLE_SINGLE:
*va_arg(ap, uint32*) = xd->xd_example_single;
break;
case TIFFTAG_EXAMPLE_ASCII:
*va_arg(ap, char**) = xd->xd_example_ascii;
break;*/
default:
/* return inherited method */
return (PARENT(xt,vgetfield))(tif,tag,ap);
break;
}
return (1);
}
#define CleanupField(member) { \
if (xd->member) { \
_TIFFfree(xd->member); \
xd->member = 0; \
} \
}
/*
* Release storage associated with a directory.
*/
static void
_XTIFFFreeDirectory(xtiff* xt)
{
XTIFFDirectory* xd = &xt->xtif_dir;
/*
* XXX - Purge all Your allocated memory except
* for the xtiff directory itself. This includes
* all fields that require a _TIFFsetXXX call in
* _XTIFFVSetField().
*/
CleanupField(xd_msfax_csid);
CleanupField(xd_msfax_tsid);
CleanupField(xd_msfax_device);
CleanupField(xd_msfax_routinginfo);
CleanupField(xd_msfax_callerid);
CleanupField(xd_msfax_recipientname);
CleanupField(xd_msfax_recipientfaxnumber);
/*
CleanupField(xd_msfax_40008);
CleanupField(xd_msfax_40009);
CleanupField(xd_msfax_40010);
CleanupField(xd_msfax_40011);
CleanupField(xd_msfax_40012);
CleanupField(xd_msfax_40013);
CleanupField(xd_msfax_40014);
CleanupField(xd_msfax_40015);
CleanupField(xd_msfax_40016);
CleanupField(xd_msfax_40017);
CleanupField(xd_msfax_40018);
CleanupField(xd_msfax_40019);
CleanupField(xd_msfax_40020);
*/
CleanupField(xd_msfax_sendername);
CleanupField(xd_msfax_senderfaxnumber);
/*
CleanupField(xd_msfax_sendercompany);
CleanupField(xd_msfax_40024);
CleanupField(xd_msfax_40025);
CleanupField(xd_msfax_40026);
CleanupField(xd_msfax_40027);
CleanupField(xd_msfax_40028);
CleanupField(xd_msfax_40029);
CleanupField(xd_msfax_40030);
CleanupField(xd_msfax_40031);
CleanupField(xd_msfax_40032);
CleanupField(xd_msfax_40033);
CleanupField(xd_msfax_40034);
CleanupField(xd_msfax_40035);
*/
CleanupField(xd_msfax_billingcode);
CleanupField(xd_msfax_username);
CleanupField(xd_msfax_40038);
CleanupField(xd_msfax_document);
CleanupField(xd_msfax_coverpagesubject);
CleanupField(xd_msfax_parentjobid);
CleanupField(xd_msfax_submissiontime);
CleanupField(xd_msfax_scheduled);
CleanupField(xd_msfax_40050);
CleanupField(xd_msfax_starttime);
CleanupField(xd_msfax_endtime);
// CleanupField(xd_example_multi);
// CleanupField(xd_example_ascii);
}
#undef CleanupField
static void _XTIFFLocalDefaultDirectory(TIFF *tif)
{
xtiff *xt = XTIFFDIR(tif);
XTIFFDirectory* xd = &xt->xtif_dir;
/* Install the extended Tag field info */
_TIFFMergeFieldInfo(tif, xtiffFieldInfo, N(xtiffFieldInfo));
/*
* free up any dynamically allocated arrays
* before the new directory is read in.
*/
_XTIFFFreeDirectory(xt);
_TIFFmemset(xt,0,sizeof(xtiff));
/* Override the tag access methods */
PARENT(xt,vsetfield) = TIFFMEMBER(tif,vsetfield);
TIFFMEMBER(tif,vsetfield) = _XTIFFVSetField;
PARENT(xt,vgetfield) = TIFFMEMBER(tif,vgetfield);
TIFFMEMBER(tif,vgetfield) = _XTIFFVGetField;
/*
* XXX Set up any default values here.
*/
xd->xd_msfax_csid = "40001";
xd->xd_msfax_tsid = "40002";
xd->xd_msfax_device = "40003";
xd->xd_msfax_routinginfo = "40004";
xd->xd_msfax_callerid = "40005";
xd->xd_msfax_recipientname = "40006";
xd->xd_msfax_recipientfaxnumber = "40007";
/*
xd->xd_msfax_40008 = "40008";
xd->xd_msfax_40009 = "40009";
xd->xd_msfax_40010 = "40010";
xd->xd_msfax_40011 = "40011";
xd->xd_msfax_40012 = "40012";
xd->xd_msfax_40013 = "40013";
xd->xd_msfax_40014 = "40014";
xd->xd_msfax_40015 = "40015";
xd->xd_msfax_40016 = "40016";
xd->xd_msfax_40017 = "40017";
xd->xd_msfax_40018 = "40018";
xd->xd_msfax_40019 = "40019";
xd->xd_msfax_40020 = "40020";
*/
xd->xd_msfax_sendername = "40021";
xd->xd_msfax_senderfaxnumber = "40022";
/*
xd->xd_msfax_sendercompany = "40023";
xd->xd_msfax_40024 = "40024";
xd->xd_msfax_40025 = "40025";
xd->xd_msfax_40026 = "40026";
xd->xd_msfax_40027 = "40027";
xd->xd_msfax_40028 = "40028";
xd->xd_msfax_40029 = "40029";
xd->xd_msfax_40030 = "40030";
xd->xd_msfax_40031 = "40031";
xd->xd_msfax_40032 = "40032";
xd->xd_msfax_40033 = "40033";
xd->xd_msfax_40034 = "40034";
xd->xd_msfax_40035 = "40035";
*/
xd->xd_msfax_billingcode = "40036";
xd->xd_msfax_username = "40037";
xd->xd_msfax_40038 = "40038";
xd->xd_msfax_document = "40039";
xd->xd_msfax_coverpagesubject = "40040";
xd->xd_msfax_retries = 40041;
xd->xd_msfax_priority = 40042;
xd->xd_msfax_parentjobid = "40043";
xd->xd_msfax_submissiontime = "40044";
xd->xd_msfax_scheduled = "40045";
xd->xd_msfax_totalpages = 40046;
xd->xd_msfax_type = 40047;
xd->xd_msfax_40048 = 40048;
xd->xd_msfax_errorcode = 40049;
xd->xd_msfax_40050 = "40050";
xd->xd_msfax_starttime = "40051";
xd->xd_msfax_endtime = "40052";
xd->xd_msfax_40053 = 40053;
// xd->xd_example_single = 234;
}
/**********************************************************************
* Nothing below this line should need to be changed.
**********************************************************************/
static TIFFExtendProc _ParentExtender;
/*
* This is the callback procedure, and is
* called by the DefaultDirectory method
* every time a new TIFF directory is opened.
*/
static void
_XTIFFDefaultDirectory(TIFF *tif)
{
xtiff *xt;
/* Allocate Directory Structure if first time, and install it */
if (!(tif->tif_flags & XTIFF_INITIALIZED))
{
xt = _TIFFmalloc(sizeof(xtiff));
if (!xt)
{
/* handle memory allocation failure here ! */
return;
}
_TIFFmemset(xt,0,sizeof(xtiff));
/*
* Install into TIFF structure.
*/
TIFFMEMBER(tif,clientdir) = (tidata_t)xt;
tif->tif_flags |= XTIFF_INITIALIZED; /* dont do this again! */
}
/* set up our own defaults */
_XTIFFLocalDefaultDirectory(tif);
/* Since an XTIFF client module may have overridden
* the default directory method, we call it now to
* allow it to set up the rest of its own methods.
*/
if (_ParentExtender)
(*_ParentExtender)(tif);
}
/*
* XTIFF Initializer -- sets up the callback
* procedure for the TIFF module.
*/
static
void _XTIFFInitialize(void)
{
static first_time=1;
if (! first_time) return; /* Been there. Done that. */
first_time = 0;
/* Grab the inherited method and install */
_ParentExtender = TIFFSetTagExtender(_XTIFFDefaultDirectory);
}
/*
* Public File I/O Routines.
*/
TIFF*
XTIFFOpen(const char* name, const char* mode)
{
/* Set up the callback */
_XTIFFInitialize();
/* Open the file; the callback will set everything up
*/
return TIFFOpen(name, mode);
}
TIFF*
XTIFFFdOpen(int fd, const char* name, const char* mode)
{
/* Set up the callback */
_XTIFFInitialize();
/* Open the file; the callback will set everything up
*/
return TIFFFdOpen(fd, name, mode);
}
void
XTIFFClose(TIFF *tif)
{
xtiff *xt = XTIFFDIR(tif);
/* call inherited function first */
TIFFClose(tif);
/* Free up extended allocated memory */
_XTIFFFreeDirectory(xt);
_TIFFfree(xt);
}