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 }
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
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_...
A program to read a X file and output an essentially similar X file.
Definition: xFileTrans.h:26
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
bool read(Filename filename)
Opens and reads the indicated .x file by name.
Definition: xFile.cxx:73
This is the bare functionality (intended to be inherited from along with ProgramBase or some derivati...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This represents the complete contents of an X file (file.x) in memory.
Definition: xFile.h:32
std::ostream & get_output()
Returns an output stream that corresponds to the user's intended egg file output–either stdout,...