// // This file is part of the SDTS++ toolkit, written by the U.S. // Geological Survey. It is experimental software, written to support // USGS research and cartographic data production. // // SDTS++ is public domain software. It may be freely copied, // distributed, and modified. The USGS welcomes user feedback, but makes // no committment to any level of support for this code. See the SDTS // web site at http://mcmcweb.er.usgs.gov/sdts for more information, // including points of contact. // #ifdef WIN32 #include "../Windows/getopt.h" #pragma warning( disable : 4786 ) #else #include #ifdef HAVE_UNISTD_H #include #endif #endif #include #include #include #ifdef WIN32 using namespace std; #endif #include #include // stooopid IRIX has non-standard getopt() behavior; it returns -1 // instead of EOF when the last command line argument is processed #ifdef _SGIAPI #include #else const int GETOPTDONE = EOF; #endif #include #include #include #include void assign_converter( sio_8211_converter_dictionary & cd, string const & mnemonic, string const & converter_type ) { if ( mnemonic.empty() ) { cerr << "binary type without a subfield\n"; } cd[ mnemonic ] = sio_ConverterFactory::instance()->get( converter_type ); if ( ! cd[ mnemonic ] ) { cerr << converter_type << " unknown binary type\n"; exit( -9 ); } } // assign_converter void usage( const char * name ) { cerr << name << ": [flags] cell-module\n" << "flags:\n" << "\t-s\tmnemonic -b (b(u)?i(8|16|24|32))|(bfp(32|64))\n" << "\t\tassign binary converter to subfield mnemonic\n"; } // usage() int main( int argc, char** argv ) { string last_mnemonic; string subfield_mnemonic; sio_8211_converter_dictionary converters; // hints for reader for binary data extern char *optarg; extern int optind; int ch; char * ifs_name = "-"; // use BI16 converter by default converters["ELEVATION"] = sio_ConverterFactory::instance()->get( "BI16" ); while((ch = getopt(argc, argv, "s:b:h")) != GETOPTDONE) switch(ch) { case 's': converters[optarg] = '\0'; // Set to null last_mnemonic = optarg; break; case 'b': assign_converter( converters, last_mnemonic, optarg ); break; case 'h': usage( argv[0] ); break; case '?': default: break; } if (optind == argc ) { cerr << "must specify an SDTS module file name\n"; exit(1); } ifs_name = argv[optind]; ifstream ifs; // module to be read from #ifdef WIN32 ifs.open( ifs_name, ios::binary ); #else ifs.open( ifs_name ); #endif if ( ! ifs ) { cerr << "unable to open " << ifs_name << "\n"; exit(-1); } sio_8211Reader reader( ifs, &converters ); sio_8211ForwardIterator i( reader ); sc_Record record; vector elevations; { sb_Cell< vector > cell; while ( i ) { if ( ! i.get( record ) ) { cerr << "unable to read from " << ifs_name << "\n"; exit( 42 ); } cell.setRecord( record ); cout << "\nand what the CELL object says it is:\n"; cout << cell << endl; cout << "\nand what the record build from the CELL object says it is:\n"; cell.getRecord( record ); cout << record << endl; ++i; } } #ifdef NOT_IMPLEMENTED_YET // test building an CELL from scratch { sb_Cell cell; assert( cell.setCOMT( "This is not a comment." ) ); assert( cell.setRDOC("Reference Documentation") ); assert( cell.setRSNM("UTM") ); // assert( cell.setVDAT("Vertical Datum") ); // assert( cell.setSDAT("MLLW") ); assert( cell.setHDAT("Horizontal Datum") ); assert( cell.setZONE("UTM Zone") ); assert( cell.setPROJ("Projection") ); cout << cell << endl; } #endif exit( 0 ); }