diff options
Diffstat (limited to '')
| -rw-r--r-- | src/tools/myriad.cpp | 77 |
1 files changed, 65 insertions, 12 deletions
diff --git a/src/tools/myriad.cpp b/src/tools/myriad.cpp index 1dc73ec..0dd9840 100644 --- a/src/tools/myriad.cpp +++ b/src/tools/myriad.cpp | |||
| @@ -20,6 +20,7 @@ enum Mode | |||
| 20 | modeCreate, | 20 | modeCreate, |
| 21 | modeInfo, | 21 | modeInfo, |
| 22 | modeStreamNew, | 22 | modeStreamNew, |
| 23 | modeStreamErase, | ||
| 23 | modeStreamDump, | 24 | modeStreamDump, |
| 24 | modeStreamPut, | 25 | modeStreamPut, |
| 25 | modeStreamGet, | 26 | modeStreamGet, |
| @@ -44,6 +45,8 @@ public: | |||
| 44 | "Display some info about a Myriad file." ); | 45 | "Display some info about a Myriad file." ); |
| 45 | addOption( eMode, 'n', "new", | 46 | addOption( eMode, 'n', "new", |
| 46 | "Create a new sub-stream in a Myriad file."); | 47 | "Create a new sub-stream in a Myriad file."); |
| 48 | addOption( eMode, 'e', "erase", | ||
| 49 | "Erase sub-stream in a Myriad file."); | ||
| 47 | addOption( eMode, 'd', "dump", | 50 | addOption( eMode, 'd', "dump", |
| 48 | "Display a hexdump of a stream from a Myriad file."); | 51 | "Display a hexdump of a stream from a Myriad file."); |
| 49 | addOption( eMode, "get", | 52 | addOption( eMode, "get", |
| @@ -67,6 +70,7 @@ public: | |||
| 67 | setOverride( "create", modeCreate ); | 70 | setOverride( "create", modeCreate ); |
| 68 | setOverride( "info", modeInfo ); | 71 | setOverride( "info", modeInfo ); |
| 69 | setOverride( "new", modeStreamNew ); | 72 | setOverride( "new", modeStreamNew ); |
| 73 | setOverride( "erase", modeStreamErase ); | ||
| 70 | setOverride( "dump", modeStreamDump ); | 74 | setOverride( "dump", modeStreamDump ); |
| 71 | setOverride( "put", modeStreamPut ); | 75 | setOverride( "put", modeStreamPut ); |
| 72 | setOverride( "get", modeStreamGet ); | 76 | setOverride( "get", modeStreamGet ); |
| @@ -90,6 +94,49 @@ Bu::Formatter &operator>>( Bu::Formatter &f, Mode & /*e*/ ) | |||
| 90 | return f; | 94 | return f; |
| 91 | } | 95 | } |
| 92 | 96 | ||
| 97 | void printMap( const Bu::BitString &bs ) | ||
| 98 | { | ||
| 99 | for( int j = 0; j < bs.getSize(); j++ ) | ||
| 100 | { | ||
| 101 | if( j>0 && (j%50) == 0 ) | ||
| 102 | Bu::println(""); | ||
| 103 | if( bs.getBit( j ) ) | ||
| 104 | Bu::print("#"); | ||
| 105 | else | ||
| 106 | Bu::print("-"); | ||
| 107 | } | ||
| 108 | Bu::println("\n"); | ||
| 109 | } | ||
| 110 | |||
| 111 | void printMap( const Bu::Array<int32_t> &bm ) | ||
| 112 | { | ||
| 113 | int iBigest = 0; | ||
| 114 | for( int j = 0; j < bm.getSize(); j++ ) | ||
| 115 | { | ||
| 116 | if( iBigest < bm[j] ) | ||
| 117 | iBigest = bm[j]; | ||
| 118 | } | ||
| 119 | int iWidth = Bu::String("%1").arg( iBigest ).end().getSize(); | ||
| 120 | Bu::String sEmpty; | ||
| 121 | for( int j = 0; j < iWidth; j++ ) | ||
| 122 | { | ||
| 123 | sEmpty += '-'; | ||
| 124 | } | ||
| 125 | int iBreakAt = 60/(iWidth+1); | ||
| 126 | for( int j = 0; j < bm.getSize(); j++ ) | ||
| 127 | { | ||
| 128 | if( j>0 && (j%iBreakAt) == 0 ) | ||
| 129 | Bu::println(""); | ||
| 130 | |||
| 131 | if( bm[j] < 0 ) | ||
| 132 | Bu::print("%1 ").arg( sEmpty, Bu::Fmt(2).right().fill(' ')); | ||
| 133 | else | ||
| 134 | Bu::print("%1 ").arg( bm[j], Bu::Fmt(2).right().fill(' ')); | ||
| 135 | |||
| 136 | } | ||
| 137 | Bu::println("\n"); | ||
| 138 | } | ||
| 139 | |||
| 93 | int main( int argc, char *argv[] ) | 140 | int main( int argc, char *argv[] ) |
| 94 | { | 141 | { |
| 95 | Options opts( argc, argv ); | 142 | Options opts( argc, argv ); |
| @@ -153,6 +200,22 @@ int main( int argc, char *argv[] ) | |||
| 153 | } | 200 | } |
| 154 | break; | 201 | break; |
| 155 | 202 | ||
| 203 | case modeStreamErase: | ||
| 204 | if( !opts.sFile.isSet() ) | ||
| 205 | { | ||
| 206 | sio << "Please specify a file manipulate." << sio.nl; | ||
| 207 | return 0; | ||
| 208 | } | ||
| 209 | else | ||
| 210 | { | ||
| 211 | File fOut( opts.sFile, File::Write|File::Read ); | ||
| 212 | Myriad m( fOut ); | ||
| 213 | m.erase( opts.iStream ); | ||
| 214 | printMap( m.buildBlockUseMap() ); | ||
| 215 | printMap( m.buildBlockMap() ); | ||
| 216 | } | ||
| 217 | break; | ||
| 218 | |||
| 156 | case modeStreamDump: | 219 | case modeStreamDump: |
| 157 | if( !opts.sFile.isSet() ) | 220 | if( !opts.sFile.isSet() ) |
| 158 | { | 221 | { |
| @@ -255,17 +318,8 @@ int main( int argc, char *argv[] ) | |||
| 255 | { | 318 | { |
| 256 | File fIn( opts.sFile, File::Write|File::Read ); | 319 | File fIn( opts.sFile, File::Write|File::Read ); |
| 257 | Myriad m( fIn ); | 320 | Myriad m( fIn ); |
| 258 | /* Bu::BitString bs = m.getBlocksUsed(); | 321 | printMap( m.buildBlockUseMap() ); |
| 259 | for( int j = 0; j < bs.getSize(); j++ ) | 322 | printMap( m.buildBlockMap() ); |
| 260 | { | ||
| 261 | if( j>0 && (j%50) == 0 ) | ||
| 262 | Bu::println(""); | ||
| 263 | if( bs.getBit( j ) ) | ||
| 264 | Bu::print("#"); | ||
| 265 | else | ||
| 266 | Bu::print("-"); | ||
| 267 | }*/ | ||
| 268 | Bu::println("\n"); | ||
| 269 | } | 323 | } |
| 270 | break; | 324 | break; |
| 271 | 325 | ||
| @@ -277,4 +331,3 @@ int main( int argc, char *argv[] ) | |||
| 277 | 331 | ||
| 278 | return 0; | 332 | return 0; |
| 279 | } | 333 | } |
| 280 | |||
