diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 84 |
1 files changed, 48 insertions, 36 deletions
@@ -1,6 +1,6 @@ /* Pdlzip - Data compressor based on the LZMA algorithm
2009-08-14 : Igor Pavlov : Public domain
- Copyright (C) 2010, 2011 Antonio Diaz Diaz.
+ Copyright (C) 2010, 2011, 2012 Antonio Diaz Diaz.
This program is free software: you have unlimited permission
to copy, distribute and modify it.
@@ -19,8 +19,11 @@ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#if defined(__OS2__)
+#include <io.h>
+#endif
-#include "carg_parser.h"
+#include "pdarg_parser.h"
#include "pdlzip.h"
#include "Alloc.h"
#include "7zFile.h"
@@ -50,7 +53,7 @@ static ISzAlloc g_Alloc = { SzAlloc, SzFree }; const char * const Program_name = "Pdlzip";
const char * const program_name = "pdlzip";
-const char * const program_year = "2011";
+const char * const program_year = "2012";
const char * invocation_name = 0;
@@ -70,7 +73,7 @@ enum Mode { m_compress, m_decompress, m_test }; char * output_filename = 0;
-/* assure at least a minimum size for buffer `buf' */
+/* assure at least a minimum size for buffer 'buf' */
inline void * resize_buffer( void * buf, const int min_size )
{
if( buf ) buf = realloc( buf, min_size );
@@ -82,29 +85,33 @@ inline void * resize_buffer( void * buf, const int min_size ) static void show_help()
{
printf( "%s - A \"public domain\" version of the lzip data compressor\n", Program_name );
- printf( "also able to decompress legacy lzma-alone (.lzma) files.\n" );
- printf( "\nUsage: %s [options] [file]\n", invocation_name );
- printf( "\nOptions:\n" );
- printf( " -h, --help display this help and exit\n" );
- printf( " -V, --version output version information and exit\n" );
- printf( " -c, --stdout send output to standard output\n" );
- printf( " -d, --decompress decompress\n" );
-/* printf( " -f, --force overwrite existing output files\n" ); */
-/* printf( " -k, --keep keep (don't delete) input files\n" ); */
- printf( " -m, --match-length=<n> set match length limit in bytes [36]\n" );
- printf( " -q, --quiet suppress all messages\n" );
- printf( " -s, --dictionary-size=<n> set dictionary size limit in bytes [8MiB]\n" );
- printf( " -t, --test test compressed file integrity\n" );
- printf( " -v, --verbose be verbose (a 2nd -v gives more)\n" );
- printf( " -1 .. -9 set compression level [default 6]\n" );
- printf( " --fast alias for -1\n" );
- printf( " --best alias for -9\n" );
- printf( "If no file name is given, %s compresses or decompresses\n", program_name );
- printf( "from standard input to standard output.\n" );
- printf( "Numbers may be followed by a multiplier: k = kB = 10^3 = 1000,\n" );
- printf( "Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc...\n" );
- printf( "\nReport bugs to lzip-bug@nongnu.org\n" );
- printf( "Pdlzip home page: http://www.nongnu.org/lzip/pdlzip.html\n" );
+ printf( "also able to decompress legacy lzma-alone (.lzma) files.\n"
+ "\nUsage: %s [options] [file]\n", invocation_name );
+ printf( "\nOptions:\n"
+ " -h, --help display this help and exit\n"
+ " -V, --version output version information and exit\n"
+ " -c, --stdout send output to standard output\n"
+ " -d, --decompress decompress\n"
+/* " -f, --force overwrite existing output files\n" */
+/* " -k, --keep keep (don't delete) input files\n" */
+ " -m, --match-length=<bytes> set match length limit in bytes [36]\n"
+ " -q, --quiet suppress all messages\n"
+ " -s, --dictionary-size=<bytes> set dictionary size limit in bytes [8MiB]\n"
+ " -t, --test test compressed file integrity\n"
+ " -v, --verbose be verbose (a 2nd -v gives more)\n"
+ " -1 .. -9 set compression level [default 6]\n"
+ " --fast alias for -1\n"
+ " --best alias for -9\n"
+ "If no file name is given, pdlzip compresses or decompresses\n"
+ "from standard input to standard output.\n"
+ "Numbers may be followed by a multiplier: k = kB = 10^3 = 1000,\n"
+ "Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc...\n"
+ "The bidimensional parameter space of LZMA can't be mapped to a linear\n"
+ "scale optimal for all files. If your files are large, very repetitive,\n"
+ "etc, you may need to use the --match-length and --dictionary-size\n"
+ "options directly to achieve optimal performance.\n"
+ "\nReport bugs to lzip-bug@nongnu.org\n"
+ "Pdlzip home page: http://www.nongnu.org/lzip/pdlzip.html\n" );
}
@@ -112,9 +119,9 @@ static void show_version() {
printf( "%s %s\n", Program_name, PROGVERSION );
printf( "Copyright (C) %s Antonio Diaz Diaz.\n", program_year );
- printf( "Public Domain 2009 Igor Pavlov.\n" );
- printf( "This is free software: you are free to change and redistribute it.\n" );
- printf( "There is NO WARRANTY, to the extent permitted by law.\n" );
+ printf( "Public Domain 2009 Igor Pavlov.\n"
+ "This is free software: you are free to change and redistribute it.\n"
+ "There is NO WARRANTY, to the extent permitted by law.\n" );
}
@@ -125,11 +132,12 @@ static const char * format_num( long long num ) enum { buf_size = 16, factor = 1024 };
static char buf[buf_size];
const char *p = "";
+ bool exact = ( num % factor == 0 );
int i;
for( i = 0; i < 8 && ( llabs( num ) > 9999 ||
- ( llabs( num ) >= factor && num % factor == 0 ) ); ++i )
- { num /= factor; p = prefix[i]; }
+ ( exact && llabs( num ) >= factor ) ); ++i )
+ { num /= factor; if( num % factor != 0 ) exact = false; p = prefix[i]; }
snprintf( buf, buf_size, "%lld %s", num, p );
return buf;
}
@@ -537,7 +545,7 @@ void show_error( const char * const msg, const int errcode, const bool help ) fprintf( stderr, "\n" );
}
if( help && invocation_name && invocation_name[0] )
- fprintf( stderr, "Try `%s --help' for more information.\n",
+ fprintf( stderr, "Try '%s --help' for more information.\n",
invocation_name );
}
}
@@ -593,8 +601,8 @@ static void set_d_outname( const char * const name ) output_filename = resize_buffer( output_filename, strlen( name ) + 4 + 1 );
strcpy( output_filename, name );
strcat( output_filename, ".out" );
- if( verbosity >= 0 )
- fprintf( stderr, "%s: can't guess original name for `%s' -- using `%s'.\n",
+ if( verbosity >= 1 )
+ fprintf( stderr, "%s: Can't guess original name for '%s' -- using '%s'.\n",
program_name, name, output_filename );
}
@@ -644,7 +652,6 @@ int main( const int argc, const char * const argv[] ) { 'b', "member-size", ap_yes },
{ 'c', "stdout", ap_no },
{ 'd', "decompress", ap_no },
- { 'e', "extreme", ap_no },
{ 'f', "force", ap_no },
{ 'h', "help", ap_no },
{ 'k', "keep", ap_no },
@@ -699,6 +706,11 @@ int main( const int argc, const char * const argv[] ) }
} /* end process options */
+#if defined(__OS2__)
+ _fsetmode( stdin, "b" );
+ _fsetmode( stdout, "b" );
+#endif
+
if( ap_arguments( &parser ) > argind &&
strcmp( ap_argument( &parser, argind ), "-" ) )
input_filename = ap_argument( &parser, argind );
|