diff options
Diffstat (limited to '')
-rw-r--r-- | src/tools/myriad.cpp | 97 |
1 files changed, 75 insertions, 22 deletions
diff --git a/src/tools/myriad.cpp b/src/tools/myriad.cpp index ccf3d3b..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 ); |
@@ -121,14 +168,14 @@ int main( int argc, char *argv[] ) | |||
121 | Myriad m( fIn ); | 168 | Myriad m( fIn ); |
122 | sio << "Myriad info:" << sio.nl | 169 | sio << "Myriad info:" << sio.nl |
123 | << " Block size: " << m.getBlockSize() << sio.nl | 170 | << " Block size: " << m.getBlockSize() << sio.nl |
124 | << " Block count: " << m.getNumBlocks() << sio.nl | 171 | << " Block count: " << m.getTotalBlocks() << sio.nl |
125 | << " Blocks used: " << m.getNumUsedBlocks() << " (" | 172 | << " Blocks used: " << m.getUsedBlocks() << " (" |
126 | << m.getNumUsedBlocks()*100/m.getNumBlocks() << "%)" | 173 | << m.getUsedBlocks()*100/m.getTotalBlocks() << "%)" |
127 | << sio.nl | 174 | << sio.nl |
128 | << " Stream count: " << m.getNumStreams() << sio.nl | 175 | << " Stream count: " << m.getTotalStreams() << sio.nl |
129 | << " Used space: " << m.getTotalUsedBytes() << sio.nl | 176 | << " Used space: " << m.getTotalUsedBytes() << sio.nl |
130 | << " Unused space: " << m.getTotalUnusedBytes() << sio.nl | 177 | << " Unused space: " << m.getTotalUnusedBytes() << sio.nl |
131 | << " % of files: " << (double)(m.getNumBlocks()*m.getBlockSize())/(double)(m.getTotalUsedBytes() + m.getTotalUnusedBytes( 4096 ))*100.0 << sio.nl; | 178 | << " % of files: " << (double)(m.getTotalBlocks()*m.getBlockSize())/(double)(m.getTotalUsedBytes() + m.getTotalUnusedBytes( 4096 ))*100.0 << sio.nl; |
132 | /* Bu::Array<int> aStreams = m.getStreamIds(); | 179 | /* Bu::Array<int> aStreams = m.getStreamIds(); |
133 | sio << " Stream info:" << sio.nl; | 180 | sio << " Stream info:" << sio.nl; |
134 | for( Bu::Array<int>::iterator i = aStreams.begin(); i; i++ ) | 181 | for( Bu::Array<int>::iterator i = aStreams.begin(); i; i++ ) |
@@ -149,7 +196,23 @@ int main( int argc, char *argv[] ) | |||
149 | { | 196 | { |
150 | File fOut( opts.sFile, File::Write|File::Read ); | 197 | File fOut( opts.sFile, File::Write|File::Read ); |
151 | Myriad m( fOut ); | 198 | Myriad m( fOut ); |
152 | m.createStream( opts.iPreallocate ); | 199 | m.create( Bu::Myriad::WriteNew, opts.iPreallocate ); |
200 | } | ||
201 | break; | ||
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() ); | ||
153 | } | 216 | } |
154 | break; | 217 | break; |
155 | 218 | ||
@@ -163,7 +226,7 @@ int main( int argc, char *argv[] ) | |||
163 | { | 226 | { |
164 | File fOut( opts.sFile, File::Read ); | 227 | File fOut( opts.sFile, File::Read ); |
165 | Myriad m( fOut ); | 228 | Myriad m( fOut ); |
166 | MyriadStream s = m.openStream( opts.iStream ); | 229 | MyriadStream s = m.open( opts.iStream, Bu::Myriad::Read ); |
167 | sio << "Stream " << opts.iStream << ":" << sio.nl; | 230 | sio << "Stream " << opts.iStream << ":" << sio.nl; |
168 | char buf[8]; | 231 | char buf[8]; |
169 | int iPos = 0; | 232 | int iPos = 0; |
@@ -210,8 +273,8 @@ int main( int argc, char *argv[] ) | |||
210 | { | 273 | { |
211 | File fOut( opts.sFile, File::Write|File::Read ); | 274 | File fOut( opts.sFile, File::Write|File::Read ); |
212 | Myriad m( fOut ); | 275 | Myriad m( fOut ); |
213 | MyriadStream sOut = m.openStream( | 276 | MyriadStream sOut = m.create( |
214 | m.createStream( opts.iPreallocate ) | 277 | Bu::Myriad::WriteNew, opts.iPreallocate |
215 | ); | 278 | ); |
216 | File fIn( opts.sSrc, File::Read ); | 279 | File fIn( opts.sSrc, File::Read ); |
217 | char buf[1024]; | 280 | char buf[1024]; |
@@ -236,7 +299,7 @@ int main( int argc, char *argv[] ) | |||
236 | { | 299 | { |
237 | File fIn( opts.sFile, File::Write|File::Read ); | 300 | File fIn( opts.sFile, File::Write|File::Read ); |
238 | Myriad m( fIn ); | 301 | Myriad m( fIn ); |
239 | MyriadStream sIn = m.openStream( opts.iStream ); | 302 | MyriadStream sIn = m.open( opts.iStream, Bu::Myriad::Read ); |
240 | File fOut( opts.sDst, File::Write|File::Create|File::Truncate ); | 303 | File fOut( opts.sDst, File::Write|File::Create|File::Truncate ); |
241 | char buf[1024]; | 304 | char buf[1024]; |
242 | while( !sIn.isEos() ) | 305 | while( !sIn.isEos() ) |
@@ -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 | |||