/[svn]/libgig/trunk/src/rifftree.cpp
ViewVC logotype

Annotation of /libgig/trunk/src/rifftree.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 518 - (hide annotations) (download)
Sun May 8 16:19:34 2005 UTC (18 years, 11 months ago) by schoenebeck
File size: 5054 byte(s)
* added functions libraryName() and libraryVersion() to each of the three
  library units (RIFF,DLS,gig)
* all tools now offer a command line switch -v to show the tools revision
  and the used libgig version
* man pages are now auto generated with the correct libgig version

1 schoenebeck 2 /***************************************************************************
2     * *
3     * libgig - C++ cross-platform Gigasampler format file loader library *
4     * *
5 schoenebeck 518 * Copyright (C) 2003-2005 by Christian Schoenebeck *
6     * <cuse@users.sourceforge.net> *
7 schoenebeck 2 * *
8     * This program is free software; you can redistribute it and/or modify *
9     * it under the terms of the GNU General Public License as published by *
10     * the Free Software Foundation; either version 2 of the License, or *
11     * (at your option) any later version. *
12     * *
13     * This program is distributed in the hope that it will be useful, *
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16     * GNU General Public License for more details. *
17     * *
18     * You should have received a copy of the GNU General Public License *
19     * along with this program; if not, write to the Free Software *
20     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21     * MA 02111-1307 USA *
22     ***************************************************************************/
23 schoenebeck 55
24 schoenebeck 2 #ifdef HAVE_CONFIG_H
25     #include <config.h>
26     #endif
27    
28     #include <stdio.h>
29     #include <iostream>
30 schoenebeck 518 #include <string>
31 schoenebeck 2 #include <cstdlib>
32    
33     #include "RIFF.h"
34    
35     using namespace std;
36    
37 schoenebeck 518 string Revision();
38     void PrintVersion();
39 schoenebeck 2 void PrintUsage();
40     void PrintChunkList(RIFF::List* list, bool PrintSize);
41    
42     int main(int argc, char *argv[])
43     {
44     int FileArgIndex = 1;
45     bool bPrintSize = false;
46    
47     if (argc <= 1) {
48     PrintUsage();
49     return EXIT_FAILURE;
50     }
51 schoenebeck 518 if (argv[1][0] == '-') {
52     switch (argv[1][1]) {
53     case 's':
54     bPrintSize = true;
55     break;
56     case 'v':
57     PrintVersion();
58     return EXIT_SUCCESS;
59     default:
60     cerr << "Unknown option -" << argv[1][1] << endl;
61     cerr << endl;
62     PrintUsage();
63     return EXIT_FAILURE;
64 schoenebeck 2 }
65 schoenebeck 518 FileArgIndex++;
66 schoenebeck 2 }
67 schoenebeck 518 if (FileArgIndex >= argc) {
68     PrintUsage();
69     return EXIT_FAILURE;
70     }
71 schoenebeck 2 FILE* hFile = fopen(argv[FileArgIndex], "r");
72     if (!hFile) {
73     cout << "Invalid file argument!" << endl;
74     return EXIT_FAILURE;
75     }
76     fclose(hFile);
77     try {
78     RIFF::File* riff = new RIFF::File(argv[FileArgIndex]);
79     cout << "RIFF(" << riff->GetListTypeString() << ")->";
80     if (bPrintSize) cout << " (" << riff->GetSize() << " Bytes)";
81     cout << endl;
82     PrintChunkList(riff, bPrintSize);
83     delete riff;
84     }
85     catch (RIFF::Exception e) {
86     e.PrintMessage();
87     return EXIT_FAILURE;
88     }
89     catch (...) {
90     cout << "Unknown exception while trying to parse file." << endl;
91     return EXIT_FAILURE;
92     }
93    
94     return EXIT_SUCCESS;
95     }
96    
97     void PrintChunkList(RIFF::List* list, bool PrintSize) {
98     RIFF::Chunk* ck = list->GetFirstSubChunk();
99     while (ck != NULL) {
100     RIFF::Chunk* ckParent = ck;
101     while (ckParent->GetParent() != NULL) {
102     cout << " "; // e.g. 'LIST(INFO)->'
103     ckParent = ckParent->GetParent();
104     }
105     cout << ck->GetChunkIDString();
106     switch (ck->GetChunkID()) {
107     case CHUNK_ID_LIST: case CHUNK_ID_RIFF:
108     {
109     RIFF::List* l = (RIFF::List*) ck;
110     cout << "(" << l->GetListTypeString() << ")->";
111     if (PrintSize) cout << " (" << l->GetSize() << " Bytes)";
112     cout << endl;
113     PrintChunkList(l, PrintSize);
114     break;
115     }
116     default:
117     cout << ";";
118     if (PrintSize) cout << " (" << ck->GetSize() << " Bytes)";
119     cout << endl;
120     }
121     ck = list->GetNextSubChunk();
122     }
123     }
124    
125 schoenebeck 518 string Revision() {
126     string s = "$Revision: 1.3 $";
127     return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword
128     }
129    
130     void PrintVersion() {
131     cout << "rifftree revision " << Revision() << endl;
132     cout << "using " << RIFF::libraryName() << " " << RIFF::libraryVersion() << endl;
133     }
134    
135 schoenebeck 2 void PrintUsage() {
136     cout << "rifftree - parses an arbitrary RIFF file and prints out the RIFF tree structure." << endl;
137     cout << endl;
138 schoenebeck 518 cout << "Usage: rifftree [-s|-v] FILE" << endl;
139 schoenebeck 2 cout << endl;
140     cout << " -s Print the size of each chunk." << endl;
141 schoenebeck 518 cout << " -v Print version and exit." << endl;
142 schoenebeck 2 cout << endl;
143     }

  ViewVC Help
Powered by ViewVC