6fc8c23af72344f4fba52a087a704ad6833b4a43
[ginac.git] / tools / viewgar.cpp
1 /** @file viewgar.cpp
2  *
3  *  GiNaC archive file viewer
4  *
5  *  GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <fstream>
25 #include <stdexcept>
26
27 #include "ginac.h"
28 using namespace GiNaC;
29
30 int main(int argc, char **argv)
31 {
32         if (argc < 2) {
33                 fprintf(stderr, "Usage: %s [-d] file...", argv[0]);
34                 exit(1);
35         }
36         argc--; argv++;
37
38         bool dump_mode = false;
39         try {
40                 lst l;
41                 while (argc) {
42                         if (strcmp(*argv, "-d") == 0) {
43                                 dump_mode = true;
44                                 argc--; argv++;
45                         }
46                         ifstream f(*argv);
47                         archive ar;
48                         f >> ar;
49                         if (dump_mode) {
50                                 ar.printraw(cout);
51                                 cout << endl;
52                         } else {
53                                 for (unsigned int i=0; i<ar.num_expressions(); i++) {
54                                         string name;
55                                         ex e = ar.unarchive_ex(l, name, i);
56                                         cout << name << " = " << e << endl;
57                                 }
58                         }
59                         argc--; argv++;
60                 }
61         } catch (exception &e) {
62                 cerr << *argv << ": " << e.what() << endl;
63         }
64 }