aboutsummaryrefslogtreecommitdiff
path: root/src/tools/myriad.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/myriad.cpp')
-rw-r--r--src/tools/myriad.cpp66
1 files changed, 44 insertions, 22 deletions
diff --git a/src/tools/myriad.cpp b/src/tools/myriad.cpp
index 73ceba1..b6e435d 100644
--- a/src/tools/myriad.cpp
+++ b/src/tools/myriad.cpp
@@ -22,6 +22,7 @@ enum Mode
22 modeStreamNew, 22 modeStreamNew,
23 modeStreamDump, 23 modeStreamDump,
24 modeStreamPut, 24 modeStreamPut,
25 modeStreamGet,
25 26
26 modeNone 27 modeNone
27}; 28};
@@ -43,9 +44,11 @@ public:
43 addOption( eMode, 'n', "new", 44 addOption( eMode, 'n', "new",
44 "Create a new sub-stream in a Myriad file."); 45 "Create a new sub-stream in a Myriad file.");
45 addOption( eMode, 'd', "dump", 46 addOption( eMode, 'd', "dump",
46 "Read a stream from a Myriad file."); 47 "Display a hexdump of a stream from a Myriad file.");
48 addOption( eMode, "get",
49 "Get a file out of a Myriad stream (use --dst).");
47 addOption( eMode, "put", 50 addOption( eMode, "put",
48 "Put a file into a Myriad stream."); 51 "Put a file into a Myriad stream (usr --src).");
49 addHelpOption(); 52 addHelpOption();
50 53
51 addHelpBanner("\nGeneral options:"); 54 addHelpBanner("\nGeneral options:");
@@ -55,12 +58,15 @@ public:
55 addOption( sFile, 'f', "file", "Set the Myriad filename." ); 58 addOption( sFile, 'f', "file", "Set the Myriad filename." );
56 addOption( iStream, 's', "stream", "Substream to work with."); 59 addOption( iStream, 's', "stream", "Substream to work with.");
57 addOption( sSrc, "src", "Source file for copying into a Myriad file."); 60 addOption( sSrc, "src", "Source file for copying into a Myriad file.");
61 addOption( sDst, "dst",
62 "Destination file for copying out of a Myriad file.");
58 63
59 setOverride( "create", "create" ); 64 setOverride( "create", modeCreate );
60 setOverride( "info", "info" ); 65 setOverride( "info", modeInfo );
61 setOverride( "new", "new" ); 66 setOverride( "new", modeStreamNew );
62 setOverride( "dump", "dump" ); 67 setOverride( "dump", modeStreamDump );
63 setOverride( "put", "put" ); 68 setOverride( "put", modeStreamPut );
69 setOverride( "get", modeStreamGet );
64 70
65 parse( argc, argv ); 71 parse( argc, argv );
66 } 72 }
@@ -71,23 +77,12 @@ public:
71 int iStream; 77 int iStream;
72 Bu::FString sFile; 78 Bu::FString sFile;
73 Bu::FString sSrc; 79 Bu::FString sSrc;
80 Bu::FString sDst;
74}; 81};
75 82
76Bu::Formatter &operator>>( Bu::Formatter &f, Mode &m ) 83Bu::Formatter &operator>>( Bu::Formatter &f, Mode &e )
77{ 84{
78 Bu::FString sTok = f.readToken(); 85 sio << "Uh oh, the formatter was called..." << sio.nl;
79 if( sTok == "create" )
80 m = modeCreate;
81 else if( sTok == "info" )
82 m = modeInfo;
83 else if( sTok == "new" )
84 m = modeStreamNew;
85 else if( sTok == "dump" )
86 m = modeStreamDump;
87 else if( sTok == "put" )
88 m = modeStreamPut;
89 else
90 m = modeNone;
91 return f; 86 return f;
92} 87}
93 88
@@ -126,7 +121,10 @@ int main( int argc, char *argv[] )
126 << " Blocks used: " << m.getNumUsedBlocks() << " (" 121 << " Blocks used: " << m.getNumUsedBlocks() << " ("
127 << m.getNumUsedBlocks()*100/m.getNumBlocks() << "%)" 122 << m.getNumUsedBlocks()*100/m.getNumBlocks() << "%)"
128 << sio.nl 123 << sio.nl
129 << " Stream count: " << m.getNumStreams() << sio.nl; 124 << " Stream count: " << m.getNumStreams() << sio.nl
125 << " Used space: " << m.getTotalUsedBytes() << sio.nl
126 << " Unused space: " << m.getTotalUnusedBytes() << sio.nl
127 << " % of files: " << (double)(m.getNumBlocks()*m.getBlockSize())/(double)(m.getTotalUsedBytes() + m.getTotalUnusedBytes( 4096 ))*100.0 << sio.nl;
130 Bu::Array<int> aStreams = m.getStreamIds(); 128 Bu::Array<int> aStreams = m.getStreamIds();
131 sio << " Stream info:" << sio.nl; 129 sio << " Stream info:" << sio.nl;
132 for( Bu::Array<int>::iterator i = aStreams.begin(); i; i++ ) 130 for( Bu::Array<int>::iterator i = aStreams.begin(); i; i++ )
@@ -220,6 +218,30 @@ int main( int argc, char *argv[] )
220 } 218 }
221 break; 219 break;
222 220
221 case modeStreamGet:
222 if( !opts.sFile.isSet() )
223 {
224 sio << "Please specify a file manipulate." << sio.nl;
225 return 0;
226 }
227 else if( !opts.sDst.isSet() )
228 {
229 sio << "Please specify a destination file to write." << sio.nl;
230 }
231 else
232 {
233 File fIn( opts.sFile, File::Write|File::Read );
234 Myriad m( fIn );
235 MyriadStream sIn = m.openStream( opts.iStream );
236 File fOut( opts.sDst, File::Write|File::Create|File::Truncate );
237 char buf[1024];
238 while( !sIn.isEos() )
239 {
240 fOut.write( buf, sIn.read( buf, 1024 ) );
241 }
242 }
243 break;
244
223 case modeNone: 245 case modeNone:
224 sio << "Please select a mode, for more info, try --help." 246 sio << "Please select a mode, for more info, try --help."
225 << sio.nl << sio.nl; 247 << sio.nl << sio.nl;