aboutsummaryrefslogtreecommitdiff
path: root/src/tools/myriad.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/tools/myriad.cpp97
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
97void 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
111void 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
93int main( int argc, char *argv[] ) 140int 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