Panda3D
xFileTrans.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file xFileTrans.cxx
10  * @author drose
11  * @date 2004-10-03
12  */
13 
14 #include "xFileTrans.h"
15 #include "xFile.h"
16 
17 /**
18  *
19  */
20 XFileTrans::
21 XFileTrans() :
22  WithOutputFile(true, false, true)
23 {
24  // Indicate the extension name we expect the user to supply for output
25  // files.
26  _preferred_extension = ".x";
27 
28  set_program_brief("reads and writes DirectX .x files");
29  set_program_description
30  ("This program reads a DirectX retained-mode file (.x) and writes an "
31  "essentially equivalent .x file. It is primarily useful for "
32  "debugging the X file parser that is part of the Pandatool library.");
33 
34  clear_runlines();
35  add_runline("[opts] input.x output.x");
36  add_runline("[opts] -o output.x input.x");
37 
38  add_option
39  ("o", "filename", 0,
40  "Specify the filename to which the resulting .x file will be written. "
41  "If this option is omitted, the last parameter name is taken to be the "
42  "name of the output file.",
43  &XFileTrans::dispatch_filename, &_got_output_filename, &_output_filename);
44 }
45 
46 
47 /**
48  *
49  */
50 void XFileTrans::
51 run() {
52  nout << "Reading " << _input_filename << "\n";
53 
54  XFile file;
55  if (!file.read(_input_filename)) {
56  nout << "Unable to read.\n";
57  exit(1);
58  }
59 
60  if (!file.write(get_output())) {
61  nout << "Unable to write.\n";
62  exit(1);
63  }
64 }
65 
66 
67 /**
68  *
69  */
70 bool XFileTrans::
71 handle_args(ProgramBase::Args &args) {
72  if (!check_last_arg(args, 1)) {
73  return false;
74  }
75 
76  if (args.empty()) {
77  nout << "You must specify the .x file to read on the command line.\n";
78  return false;
79 
80  } else if (args.size() != 1) {
81  nout << "You must specify only one .x file to read on the command line.\n";
82  return false;
83  }
84 
85  _input_filename = args[0];
86 
87  return true;
88 }
89 
90 
91 int main(int argc, char *argv[]) {
92  XFileTrans prog;
93  prog.parse_command_line(argc, argv);
94  prog.run();
95  return 0;
96 }
virtual void parse_command_line(int argc, char **argv)
Dispatches on each of the options on the command line, and passes the remaining parameters to handle_...
This is the bare functionality (intended to be inherited from along with ProgramBase or some derivati...
std::ostream & get_output()
Returns an output stream that corresponds to the user's intended egg file output–either stdout,...
A program to read a X file and output an essentially similar X file.
Definition: xFileTrans.h:26
This represents the complete contents of an X file (file.x) in memory.
Definition: xFile.h:32
bool read(Filename filename)
Opens and reads the indicated .x file by name.
Definition: xFile.cxx:73
bool write(Filename filename) const
Opens the indicated filename for output and writes a parseable description of all the known distribut...
Definition: xFile.cxx:130
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.