|
Packit Service |
21b5d1 |
// ***************************************************************** -*- C++ -*-
|
|
Packit Service |
21b5d1 |
// tiffaddpath-test.cpp
|
|
Packit Service |
21b5d1 |
// Test driver to test adding new tags to a TIFF composite structure
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
#include <exiv2/exiv2.hpp>
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
#include "tiffcomposite_int.hpp"
|
|
Packit Service |
21b5d1 |
#include "makernote2_int.hpp"
|
|
Packit Service |
21b5d1 |
#include "tiffimage_int.hpp"
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
#include <iostream>
|
|
Packit Service |
21b5d1 |
#include <iomanip>
|
|
Packit Service |
21b5d1 |
#include <sstream>
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
#include <cstdlib>
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
using namespace Exiv2;
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
void addPath(TiffComponent* pRootDir,
|
|
Packit Service |
21b5d1 |
uint16_t tag,
|
|
Packit Service |
21b5d1 |
TiffPath& tiffPath);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
void printPath(TiffPath tiffPath,
|
|
Packit Service |
21b5d1 |
uint32_t tag,
|
|
Packit Service |
21b5d1 |
uint16_t grp);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
struct TiffTagInfo {
|
|
Packit Service |
21b5d1 |
bool operator==(const uint32_t& tag) const;
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
uint32_t tag_;
|
|
Packit Service |
21b5d1 |
const char* name_;
|
|
Packit Service |
21b5d1 |
};
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
extern const TiffTagInfo tiffTagInfo[] = {
|
|
Packit Service |
21b5d1 |
{ 0x10000, "none" },
|
|
Packit Service |
21b5d1 |
{ 0x20000, "root" },
|
|
Packit Service |
21b5d1 |
{ 0x30000, "next" },
|
|
Packit Service |
21b5d1 |
{ 0x40000, "all" }
|
|
Packit Service |
21b5d1 |
};
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
bool TiffTagInfo::operator==(const uint32_t& tag) const
|
|
Packit Service |
21b5d1 |
{
|
|
Packit Service |
21b5d1 |
return tag_ == tag;
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
std::string tiffTagName(uint32_t tag)
|
|
Packit Service |
21b5d1 |
{
|
|
Packit Service |
21b5d1 |
const TiffTagInfo* gi = find(tiffTagInfo, tag);
|
|
Packit Service |
21b5d1 |
std::string name;
|
|
Packit Service |
21b5d1 |
if (gi != 0) {
|
|
Packit Service |
21b5d1 |
name = gi->name_;
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
else {
|
|
Packit Service |
21b5d1 |
std::ostringstream os;
|
|
Packit Service |
21b5d1 |
os << "0x" << std::hex << std::setw(4)
|
|
Packit Service |
21b5d1 |
<< std::setfill('0') << std::right << tag;
|
|
Packit Service |
21b5d1 |
name = os.str();
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
return name;
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
// -----------------------------------------------------------------------------
|
|
Packit Service |
21b5d1 |
// Main program
|
|
Packit Service |
21b5d1 |
int main(int argc, char* const argv[])
|
|
Packit Service |
21b5d1 |
{
|
|
Packit Service |
21b5d1 |
if (argc != 3) {
|
|
Packit Service |
21b5d1 |
std::cout << "Usage: " << argv[0] << " tag group\n"
|
|
Packit Service |
21b5d1 |
<< "Print the TIFF path for a tag and group (decimal numbers)\n";
|
|
Packit Service |
21b5d1 |
return 1;
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
uint32_t tag = atol(argv[1]);
|
|
Packit Service |
21b5d1 |
uint16_t grp = atol(argv[2]);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
TiffComponent* pRootDir = new TiffDirectory(0, 1);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
TiffPath tiffPath1;
|
|
Packit Service |
21b5d1 |
TiffCreator::getPath(tiffPath1, tag, grp);
|
|
Packit Service |
21b5d1 |
printPath(tiffPath1, tag, grp);
|
|
Packit Service |
21b5d1 |
addPath(pRootDir, tag, tiffPath1);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
++tag;
|
|
Packit Service |
21b5d1 |
TiffPath tiffPath2;
|
|
Packit Service |
21b5d1 |
TiffCreator::getPath(tiffPath2, tag, grp);
|
|
Packit Service |
21b5d1 |
printPath(tiffPath2, tag, grp);
|
|
Packit Service |
21b5d1 |
addPath(pRootDir, tag, tiffPath2);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
return 0;
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
// -----------------------------------------------------------------------------
|
|
Packit Service |
21b5d1 |
void addPath(TiffComponent* pRootDir,
|
|
Packit Service |
21b5d1 |
uint16_t tag,
|
|
Packit Service |
21b5d1 |
TiffPath& tiffPath)
|
|
Packit Service |
21b5d1 |
{
|
|
Packit Service |
21b5d1 |
TiffComponent* tc = pRootDir->addPath(tag, tiffPath);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
TiffPrinter tiffPrinter(std::cout);
|
|
Packit Service |
21b5d1 |
pRootDir->accept(tiffPrinter);
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
std::cout << std::endl;
|
|
Packit Service |
21b5d1 |
if (tc) {
|
|
Packit Service |
21b5d1 |
std::cout << "Added tag " << tiffTagName(tc->tag())
|
|
Packit Service |
21b5d1 |
<< ", group " << tiffGroupName(tc->group()) << "\n";
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
else {
|
|
Packit Service |
21b5d1 |
std::cout << "No tag added\n";
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
std::cout << std::endl;
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
// -----------------------------------------------------------------------------
|
|
Packit Service |
21b5d1 |
void printPath(TiffPath tiffPath,
|
|
Packit Service |
21b5d1 |
uint32_t tag,
|
|
Packit Service |
21b5d1 |
uint16_t grp)
|
|
Packit Service |
21b5d1 |
{
|
|
Packit Service |
21b5d1 |
std::cout << "\nTiff path for tag "
|
|
Packit Service |
21b5d1 |
<< std::setw(6) << std::setfill(' ') << std::left
|
|
Packit Service |
21b5d1 |
<< tiffTagName(tag)
|
|
Packit Service |
21b5d1 |
<< ", group " << tiffGroupName(grp)
|
|
Packit Service |
21b5d1 |
<< " (id = " << std::dec << grp << "):\n\n"
|
|
Packit Service |
21b5d1 |
<< "ext. tag group new group \n"
|
|
Packit Service |
21b5d1 |
<< "-------- ------------ ------------\n";
|
|
Packit Service |
21b5d1 |
|
|
Packit Service |
21b5d1 |
while (!tiffPath.empty())
|
|
Packit Service |
21b5d1 |
{
|
|
Packit Service |
21b5d1 |
const TiffStructure* ts = tiffPath.top();
|
|
Packit Service |
21b5d1 |
tiffPath.pop();
|
|
Packit Service |
21b5d1 |
std::cout << std::setw(8) << std::setfill(' ') << std::left
|
|
Packit Service |
21b5d1 |
<< tiffTagName(ts->extendedTag_)
|
|
Packit Service |
21b5d1 |
<< " " << std::setw(12) << std::setfill(' ') << std::left
|
|
Packit Service |
21b5d1 |
<< tiffGroupName(ts->group_)
|
|
Packit Service |
21b5d1 |
<< " " << std::setw(12) << std::setfill(' ') << std::left
|
|
Packit Service |
21b5d1 |
<< tiffGroupName(ts->newGroup_)
|
|
Packit Service |
21b5d1 |
<< "\n";
|
|
Packit Service |
21b5d1 |
}
|
|
Packit Service |
21b5d1 |
std::cout << std::endl;
|
|
Packit Service |
21b5d1 |
}
|