diff options
Diffstat (limited to '')
| -rw-r--r-- | src/tools/myriad.cpp | 112 |
1 files changed, 92 insertions, 20 deletions
diff --git a/src/tools/myriad.cpp b/src/tools/myriad.cpp index b3067d2..95b4503 100644 --- a/src/tools/myriad.cpp +++ b/src/tools/myriad.cpp | |||
| @@ -19,6 +19,8 @@ enum Mode | |||
| 19 | { | 19 | { |
| 20 | modeCreate, | 20 | modeCreate, |
| 21 | modeInfo, | 21 | modeInfo, |
| 22 | modeStreamNew, | ||
| 23 | modeStreamRead, | ||
| 22 | 24 | ||
| 23 | modeNone | 25 | modeNone |
| 24 | }; | 26 | }; |
| @@ -29,22 +31,32 @@ public: | |||
| 29 | Options( int argc, char *argv[] ) : | 31 | Options( int argc, char *argv[] ) : |
| 30 | eMode( modeNone ), | 32 | eMode( modeNone ), |
| 31 | iBlockSize( 64 ), | 33 | iBlockSize( 64 ), |
| 32 | iPreallocate( 0 ) | 34 | iPreallocate( 0 ), |
| 35 | iStream( 0 ) | ||
| 33 | { | 36 | { |
| 34 | addHelpBanner("Mode of operation:"); | 37 | addHelpBanner("Mode of operation:"); |
| 35 | addOption( eMode, 'c', "create", "Create a new NIDS file." ); | 38 | addOption( eMode, 'c', "create", |
| 36 | addOption( eMode, "info", "Display some info about a NIDS file." ); | 39 | "Create a new Myriad file." ); |
| 40 | addOption( eMode, 'i', "info", | ||
| 41 | "Display some info about a Myriad file." ); | ||
| 42 | addOption( eMode, 'n', "new", | ||
| 43 | "Create a new sub-stream in a Myriad file."); | ||
| 44 | addOption( eMode, 'r', "read", | ||
| 45 | "Read a stream from a Myriad file."); | ||
| 37 | addHelpOption(); | 46 | addHelpOption(); |
| 38 | 47 | ||
| 39 | addHelpBanner("\nGeneral options:"); | 48 | addHelpBanner("\nGeneral options:"); |
| 40 | addOption( iBlockSize, 'b', "block-size", "Set the block size." ); | 49 | addOption( iBlockSize, 'b', "block-size", "Set the block size." ); |
| 41 | addOption( iPreallocate, 'p', "preallocate", | 50 | addOption( iPreallocate, 'p', "preallocate", |
| 42 | "Number of blocks to preallocate." ); | 51 | "Number of blocks to preallocate." ); |
| 43 | addOption( sOutput, 'o', "output", "Set the output filename." ); | 52 | addOption( sFile, 'f', "file", "Set the Myriad filename." ); |
| 44 | addOption( sInput, 'i', "input", "Set the input filename." ); | 53 | addOption( iStream, 's', "stream", "Substream to work with."); |
| 54 | addOption( sSrc, "src", "Source file for copying into a Myriad file."); | ||
| 45 | 55 | ||
| 46 | setOverride( "create", "create" ); | 56 | setOverride( "create", "create" ); |
| 47 | setOverride( "info", "info" ); | 57 | setOverride( "info", "info" ); |
| 58 | setOverride( "new", "new" ); | ||
| 59 | setOverride( "read", "read" ); | ||
| 48 | 60 | ||
| 49 | parse( argc, argv ); | 61 | parse( argc, argv ); |
| 50 | } | 62 | } |
| @@ -52,17 +64,22 @@ public: | |||
| 52 | Mode eMode; | 64 | Mode eMode; |
| 53 | int iBlockSize; | 65 | int iBlockSize; |
| 54 | int iPreallocate; | 66 | int iPreallocate; |
| 55 | Bu::FString sOutput; | 67 | int iStream; |
| 56 | Bu::FString sInput; | 68 | Bu::FString sFile; |
| 69 | Bu::FString sSrc; | ||
| 57 | }; | 70 | }; |
| 58 | 71 | ||
| 59 | Bu::Formatter &operator>>( Bu::Formatter &f, Mode &m ) | 72 | Bu::Formatter &operator>>( Bu::Formatter &f, Mode &m ) |
| 60 | { | 73 | { |
| 61 | Bu::FString sTok = f.readToken(); | 74 | Bu::FString sTok = f.readToken(); |
| 62 | if( sTok == "create" || sTok == "c" ) | 75 | if( sTok == "create" ) |
| 63 | m = modeCreate; | 76 | m = modeCreate; |
| 64 | else if( sTok == "info" ) | 77 | else if( sTok == "info" ) |
| 65 | m = modeInfo; | 78 | m = modeInfo; |
| 79 | else if( sTok == "new" ) | ||
| 80 | m = modeStreamNew; | ||
| 81 | else if( sTok == "read" ) | ||
| 82 | m = modeStreamRead; | ||
| 66 | else | 83 | else |
| 67 | m = modeNone; | 84 | m = modeNone; |
| 68 | return f; | 85 | return f; |
| @@ -75,32 +92,87 @@ int main( int argc, char *argv[] ) | |||
| 75 | switch( opts.eMode ) | 92 | switch( opts.eMode ) |
| 76 | { | 93 | { |
| 77 | case modeCreate: | 94 | case modeCreate: |
| 78 | if( !opts.sOutput.isSet() ) | 95 | if( !opts.sFile.isSet() ) |
| 79 | { | 96 | { |
| 80 | sio << "Please specify an output file to create a stream for." | 97 | sio << "Please specify a file to create." << sio.nl; |
| 81 | << sio.nl; | ||
| 82 | return 0; | 98 | return 0; |
| 83 | } | 99 | } |
| 84 | else | 100 | else |
| 85 | { | 101 | { |
| 86 | File fOut( opts.sOutput, File::WriteNew ); | 102 | File fOut( opts.sFile, File::WriteNew ); |
| 87 | Myriad n( fOut ); | 103 | Myriad m( fOut ); |
| 88 | n.initialize( opts.iBlockSize, opts.iPreallocate ); | 104 | m.initialize( opts.iBlockSize, opts.iPreallocate ); |
| 89 | } | 105 | } |
| 90 | break; | 106 | break; |
| 91 | 107 | ||
| 92 | case modeInfo: | 108 | case modeInfo: |
| 93 | if( !opts.sInput.isSet() ) | 109 | if( !opts.sFile.isSet() ) |
| 94 | { | 110 | { |
| 95 | sio << "Please specify an input file to display info about." | 111 | sio << "Please specify a file to display info about." << sio.nl; |
| 96 | << sio.nl; | ||
| 97 | return 0; | 112 | return 0; |
| 98 | } | 113 | } |
| 99 | else | 114 | else |
| 100 | { | 115 | { |
| 101 | File fIn( opts.sInput, File::Read ); | 116 | File fIn( opts.sFile, File::Read ); |
| 102 | Myriad n( fIn ); | 117 | Myriad m( fIn ); |
| 103 | n.initialize(); | 118 | m.initialize(); |
| 119 | } | ||
| 120 | break; | ||
| 121 | |||
| 122 | case modeStreamNew: | ||
| 123 | if( !opts.sFile.isSet() ) | ||
| 124 | { | ||
| 125 | sio << "Please specify a file manipulate." << sio.nl; | ||
| 126 | return 0; | ||
| 127 | } | ||
| 128 | else | ||
| 129 | { | ||
| 130 | File fOut( opts.sFile, File::Write|File::Read ); | ||
| 131 | Myriad m( fOut ); | ||
| 132 | m.initialize(); | ||
| 133 | m.createStream( opts.iPreallocate ); | ||
| 134 | } | ||
| 135 | break; | ||
| 136 | |||
| 137 | case modeStreamRead: | ||
| 138 | if( !opts.sFile.isSet() ) | ||
| 139 | { | ||
| 140 | sio << "Please specify a file manipulate." << sio.nl; | ||
| 141 | return 0; | ||
| 142 | } | ||
| 143 | else | ||
| 144 | { | ||
| 145 | File fOut( opts.sFile, File::Read ); | ||
| 146 | Myriad m( fOut ); | ||
| 147 | m.initialize(); | ||
| 148 | MyriadStream s = m.openStream( opts.iStream ); | ||
| 149 | sio << "Stream " << opts.iStream << ":" << sio.nl; | ||
| 150 | char buf[8]; | ||
| 151 | int iPos = 0; | ||
| 152 | while( !s.isEos() ) | ||
| 153 | { | ||
| 154 | size_t sAmnt = s.read( buf, 8 ); | ||
| 155 | sio << Fmt(5) << iPos << ": "; | ||
| 156 | iPos += sAmnt; | ||
| 157 | for( size_t j = 0; j < sAmnt; j++ ) | ||
| 158 | { | ||
| 159 | sio << Fmt::hex(2) << (int)((unsigned char)buf[j]) | ||
| 160 | << " "; | ||
| 161 | } | ||
| 162 | for( size_t j = sAmnt; j < 8; j++ ) | ||
| 163 | { | ||
| 164 | sio << "-- "; | ||
| 165 | } | ||
| 166 | sio << "| "; | ||
| 167 | for( size_t j = 0; j < sAmnt; j++ ) | ||
| 168 | { | ||
| 169 | if( buf[j] >= 32 && buf[j] <= 126 ) | ||
| 170 | sio << buf[j] << " "; | ||
| 171 | else | ||
| 172 | sio << " "; | ||
| 173 | } | ||
| 174 | sio << sio.nl; | ||
| 175 | } | ||
| 104 | } | 176 | } |
| 105 | break; | 177 | break; |
| 106 | 178 | ||
