/*****************************************************************************
** FILE IDENTIFICATION
**
-** Name: pjfinfo.cpp
+** Name: pjinfo.cpp
** Purpose: Convert an projection data file to an image file
** Programmer: Kevin Rosenberg
** Date Started: April 2000
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: pjinfo.cpp,v 1.1 2000/09/02 05:17:29 kevin Exp $
+** $Id: pjinfo.cpp,v 1.5 2001/01/10 21:21:53 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
******************************************************************************/
/* FILE
- * pjfinfo.c Convert Raysum to image
- *
- * DATE
- * August 2000
- */
+* pjinfo.c Convert Raysum to image
+*
+* DATE
+* August 2000
+*/
#include "ct.h"
#include "timer.h"
-enum { O_DUMP, O_HELP, O_VERSION };
+enum { O_BINARYHEADER, O_BINARYVIEWS, O_STARTVIEW, O_ENDVIEW, O_DUMP, O_HELP, O_VERSION };
static struct option my_options[] =
{
+ {"binaryheader", 0, 0, O_BINARYHEADER},
+ {"binaryviews", 0, 0, O_BINARYVIEWS},
+ {"startview", 1, 0, O_STARTVIEW},
+ {"endview", 1, 0, O_ENDVIEW},
{"dump", 0, 0, O_DUMP},
{"help", 0, 0, O_HELP},
{"version", 0, 0, O_VERSION},
{0, 0, 0, 0}
};
-static const char* g_szIdStr = "$Id: pjinfo.cpp,v 1.1 2000/09/02 05:17:29 kevin Exp $";
+static const char* g_szIdStr = "$Id: pjinfo.cpp,v 1.5 2001/01/10 21:21:53 kevin Exp $";
void
-pjfinfo_usage (const char *program)
+pjinfo_usage (const char *program)
{
- cout << "usage: " << fileBasename(program) << " proj-file [OPTIONS]" << endl;
- cout << "Display projection file information" << endl;
- cout << endl;
- cout << " --dump Dump all scan data" << endl;
- cout << " --version Print version" << endl;
- cout << " --help Print this help message" << endl;
+ std::cout << "usage: " << fileBasename(program) << " proj-file [OPTIONS]\n";
+ std::cout << "Display projection file information\n";
+ std::cout << "\n";
+ std::cout << " --binaryheader Dump binary header data\n";
+ std::cout << " --binaryviews Dump binary view data\n";
+ std::cout << " --startview n Beginning view number to display (default=0)\n";
+ std::cout << " --endview n Ending view number to display (default=last view)\n";
+ std::cout << " --dump Print all scan data ASCII format\n";
+ std::cout << " --version Print version\n";
+ std::cout << " --help Print this help message\n";
}
-
+
int
-pjfinfo_main (const int argc, char *const argv[])
+pjinfo_main (const int argc, char *const argv[])
{
- string pj_name;
+ std::string pj_name;
bool optDump = false;
+ bool optBinaryHeader = false;
+ bool optBinaryViews = false;
+ int optStartView = 0;
+ int optEndView = -1; // tells copyViewData to use default last view
extern int optind;
- Timer timerProgram;
-
+
while (1)
+ {
+ char *endptr, *endstr;
+ int c = getopt_long (argc, argv, "", my_options, NULL);
+ if (c == -1)
+ break;
+
+ switch (c)
{
- int c = getopt_long (argc, argv, "", my_options, NULL);
- if (c == -1)
- break;
-
- switch (c)
- {
- case O_DUMP:
- optDump = true;
- break;
- case O_VERSION:
+ case O_DUMP:
+ optDump = true;
+ break;
+ case O_BINARYHEADER:
+ optBinaryHeader = true;
+ break;
+ case O_BINARYVIEWS:
+ optBinaryViews = true;
+ break;
+ case O_STARTVIEW:
+ optStartView = strtol(optarg, &endptr, 10);
+ endstr = optarg + strlen(optarg);
+ if (endptr != endstr) {
+ std::cerr << "Error setting --startview to %s" << optarg << std::endl;
+ pjinfo_usage(argv[0]);
+ return (1);
+ }
+ break;
+ case O_ENDVIEW:
+ optEndView = strtol(optarg, &endptr, 10);
+ endstr = optarg + strlen(optarg);
+ if (endptr != endstr) {
+ std::cerr << "Error setting --endview to %s" << optarg << std::endl;
+ pjinfo_usage(argv[0]);
+ return (1);
+ }
+ break;
+ case O_VERSION:
#ifdef VERSION
- cout << "Version " << VERSION << endl << g_szIdStr << endl;
+ std::cout << "Version " << VERSION << std::endl << g_szIdStr << std::endl;
#else
- cout << "Unknown version number" << endl;
+ std::cout << "Unknown version number\n";
#endif
- return (0);
- case O_HELP:
- case '?':
- pjfinfo_usage(argv[0]);
- return (0);
- default:
- pjfinfo_usage(argv[0]);
- return (1);
- }
+ return (0);
+ case O_HELP:
+ case '?':
+ pjinfo_usage(argv[0]);
+ return (0);
+ default:
+ pjinfo_usage(argv[0]);
+ return (1);
}
+ }
if (argc - optind != 1) {
- pjfinfo_usage(argv[0]);
+ pjinfo_usage(argv[0]);
return (1);
}
-
+
pj_name = argv[optind];
-
- Projections pj;
- if (! pj.read (pj_name)) {
- sys_error (ERR_SEVERE, "Can not open projection file %s", pj_name.c_str());
- return (1);
- }
-
- if (optDump)
- pj.printProjectionData();
+
+ if (optBinaryHeader)
+ Projections::copyHeader (pj_name, std::cout);
+ else if (optBinaryViews)
+ Projections::copyViewData (pj_name, std::cout, optStartView, optEndView);
else {
- ostringstream os;
- pj.printScanInfo (os);
- cout << os.str();
+ Projections pj;
+ if (! pj.read (pj_name)) {
+ sys_error (ERR_SEVERE, "Can not open projection file %s", pj_name.c_str());
+ return (1);
+ }
+
+ if (optDump) {
+ pj.printProjectionData (optStartView, optEndView);
+ } else {
+ std::ostringstream os;
+ pj.printScanInfo (os);
+ std::cout << os.str();
+ }
}
return(0);
main (const int argc, char *const argv[])
{
int retval = 1;
-
+
try {
- retval = pjfinfo_main(argc, argv);
+ retval = pjinfo_main(argc, argv);
} catch (exception e) {
- cerr << "Exception: " << e.what() << endl;
+ std::cerr << "Exception: " << e.what() << std::endl;
} catch (...) {
- cerr << "Unknown exception" << endl;
+ std::cerr << "Unknown exception\n";
}
-
+
return (retval);
}
#endif