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 | |||