* src/tools/apinames.c: Formatting, minor edits.
This commit is contained in:
parent
47ca5cb69d
commit
983a87c6ec
|
@ -1,3 +1,7 @@
|
||||||
|
2019-06-16 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
* src/tools/apinames.c: Formatting, minor edits.
|
||||||
|
|
||||||
2019-06-16 Werner Lemberg <wl@gnu.org>
|
2019-06-16 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
[autofit] Disable hinting if no blue zones are available (#56450).
|
[autofit] Disable hinting if no blue zones are available (#56450).
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
* accepted if you are using GCC for compilation (and probably by
|
* accepted if you are using GCC for compilation (and probably by
|
||||||
* other compilers too).
|
* other compilers too).
|
||||||
*
|
*
|
||||||
* Author: David Turner, 2005, 2006, 2008-2013, 2015
|
* Author: FreeType team, 2005-2019
|
||||||
*
|
*
|
||||||
* This code is explicitly placed into the public domain.
|
* This code is explicitly placed into the public domain.
|
||||||
*
|
*
|
||||||
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#define LINEBUFF_SIZE 1024
|
#define LINEBUFF_SIZE 1024
|
||||||
|
|
||||||
|
|
||||||
typedef enum OutputFormat_
|
typedef enum OutputFormat_
|
||||||
{
|
{
|
||||||
OUTPUT_LIST = 0, /* output the list of names, one per line */
|
OUTPUT_LIST = 0, /* output the list of names, one per line */
|
||||||
|
@ -53,10 +54,12 @@ typedef struct NameRec_
|
||||||
|
|
||||||
} NameRec, *Name;
|
} NameRec, *Name;
|
||||||
|
|
||||||
|
|
||||||
static Name the_names;
|
static Name the_names;
|
||||||
static int num_names;
|
static int num_names;
|
||||||
static int max_names;
|
static int max_names;
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
names_add( const char* name,
|
names_add( const char* name,
|
||||||
const char* end )
|
const char* end )
|
||||||
|
@ -65,14 +68,16 @@ names_add( const char* name,
|
||||||
int nn, len;
|
int nn, len;
|
||||||
Name nm;
|
Name nm;
|
||||||
|
|
||||||
|
|
||||||
if ( end <= name )
|
if ( end <= name )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* compute hash value */
|
/* compute hash value */
|
||||||
len = (int)(end - name);
|
len = (int)( end - name );
|
||||||
h = 0;
|
h = 0;
|
||||||
|
|
||||||
for ( nn = 0; nn < len; nn++ )
|
for ( nn = 0; nn < len; nn++ )
|
||||||
h = h*33 + name[nn];
|
h = h * 33 + name[nn];
|
||||||
|
|
||||||
/* check for an pre-existing name */
|
/* check for an pre-existing name */
|
||||||
for ( nn = 0; nn < num_names; nn++ )
|
for ( nn = 0; nn < num_names; nn++ )
|
||||||
|
@ -88,7 +93,7 @@ names_add( const char* name,
|
||||||
/* add new name */
|
/* add new name */
|
||||||
if ( num_names >= max_names )
|
if ( num_names >= max_names )
|
||||||
{
|
{
|
||||||
max_names += (max_names >> 1) + 4;
|
max_names += ( max_names >> 1 ) + 4;
|
||||||
the_names = (NameRec*)realloc( the_names,
|
the_names = (NameRec*)realloc( the_names,
|
||||||
sizeof ( the_names[0] ) * max_names );
|
sizeof ( the_names[0] ) * max_names );
|
||||||
if ( !the_names )
|
if ( !the_names )
|
||||||
|
@ -97,7 +102,7 @@ names_add( const char* name,
|
||||||
nm = &the_names[num_names++];
|
nm = &the_names[num_names++];
|
||||||
|
|
||||||
nm->hash = h;
|
nm->hash = h;
|
||||||
nm->name = (char*)malloc( len+1 );
|
nm->name = (char*)malloc( len + 1 );
|
||||||
if ( !nm->name )
|
if ( !nm->name )
|
||||||
panic( "not enough memory" );
|
panic( "not enough memory" );
|
||||||
|
|
||||||
|
@ -116,6 +121,7 @@ name_compare( const void* name1,
|
||||||
return strcmp( n1->name, n2->name );
|
return strcmp( n1->name, n2->name );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
names_sort( void )
|
names_sort( void )
|
||||||
{
|
{
|
||||||
|
@ -134,89 +140,95 @@ names_dump( FILE* out,
|
||||||
|
|
||||||
switch ( format )
|
switch ( format )
|
||||||
{
|
{
|
||||||
case OUTPUT_WINDOWS_DEF:
|
case OUTPUT_WINDOWS_DEF:
|
||||||
if ( dll_name )
|
if ( dll_name )
|
||||||
fprintf( out, "LIBRARY %s\n", dll_name );
|
fprintf( out, "LIBRARY %s\n", dll_name );
|
||||||
|
|
||||||
fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
|
fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
|
||||||
fprintf( out, "EXPORTS\n" );
|
fprintf( out, "EXPORTS\n" );
|
||||||
for ( nn = 0; nn < num_names; nn++ )
|
|
||||||
fprintf( out, " %s\n", the_names[nn].name );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OUTPUT_BORLAND_DEF:
|
for ( nn = 0; nn < num_names; nn++ )
|
||||||
if ( dll_name )
|
fprintf( out, " %s\n", the_names[nn].name );
|
||||||
fprintf( out, "LIBRARY %s\n", dll_name );
|
|
||||||
|
|
||||||
fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
|
break;
|
||||||
fprintf( out, "EXPORTS\n" );
|
|
||||||
for ( nn = 0; nn < num_names; nn++ )
|
|
||||||
fprintf( out, " _%s\n", the_names[nn].name );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OUTPUT_WATCOM_LBC:
|
case OUTPUT_BORLAND_DEF:
|
||||||
|
if ( dll_name )
|
||||||
|
fprintf( out, "LIBRARY %s\n", dll_name );
|
||||||
|
|
||||||
|
fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
|
||||||
|
fprintf( out, "EXPORTS\n" );
|
||||||
|
|
||||||
|
for ( nn = 0; nn < num_names; nn++ )
|
||||||
|
fprintf( out, " _%s\n", the_names[nn].name );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OUTPUT_WATCOM_LBC:
|
||||||
|
{
|
||||||
|
const char* dot;
|
||||||
|
char temp[512];
|
||||||
|
|
||||||
|
|
||||||
|
if ( !dll_name )
|
||||||
{
|
{
|
||||||
const char* dot;
|
fprintf( stderr,
|
||||||
char temp[512];
|
"you must provide a DLL name with the -d option!\n" );
|
||||||
|
exit( 4 );
|
||||||
|
|
||||||
if ( !dll_name )
|
|
||||||
{
|
|
||||||
fprintf( stderr,
|
|
||||||
"you must provide a DLL name with the -d option!\n" );
|
|
||||||
exit( 4 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* we must omit the .dll suffix from the library name */
|
|
||||||
dot = strchr( dll_name, '.' );
|
|
||||||
if ( dot )
|
|
||||||
{
|
|
||||||
int len = dot - dll_name;
|
|
||||||
|
|
||||||
|
|
||||||
if ( len > (int)( sizeof ( temp ) - 1 ) )
|
|
||||||
len = sizeof ( temp ) - 1;
|
|
||||||
|
|
||||||
memcpy( temp, dll_name, len );
|
|
||||||
temp[len] = 0;
|
|
||||||
|
|
||||||
dll_name = (const char*)temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( nn = 0; nn < num_names; nn++ )
|
|
||||||
fprintf( out, "++_%s.%s.%s\n", the_names[nn].name, dll_name,
|
|
||||||
the_names[nn].name );
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case OUTPUT_NETWARE_IMP:
|
/* we must omit the `.dll' suffix from the library name */
|
||||||
|
dot = strchr( dll_name, '.' );
|
||||||
|
if ( dot )
|
||||||
{
|
{
|
||||||
if ( dll_name )
|
int len = dot - dll_name;
|
||||||
fprintf( out, " (%s)\n", dll_name );
|
|
||||||
for ( nn = 0; nn < num_names - 1; nn++ )
|
|
||||||
fprintf( out, " %s,\n", the_names[nn].name );
|
|
||||||
fprintf( out, " %s\n", the_names[num_names - 1].name );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OUTPUT_GNU_VERMAP:
|
|
||||||
{
|
|
||||||
fprintf( out, "{\n\tglobal:\n" );
|
|
||||||
for ( nn = 0; nn < num_names; nn++ )
|
|
||||||
fprintf( out, "\t\t%s;\n", the_names[nn].name );
|
|
||||||
fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default: /* LIST */
|
if ( len > (int)( sizeof ( temp ) - 1 ) )
|
||||||
|
len = sizeof ( temp ) - 1;
|
||||||
|
|
||||||
|
memcpy( temp, dll_name, len );
|
||||||
|
temp[len] = 0;
|
||||||
|
|
||||||
|
dll_name = (const char*)temp;
|
||||||
|
}
|
||||||
|
|
||||||
for ( nn = 0; nn < num_names; nn++ )
|
for ( nn = 0; nn < num_names; nn++ )
|
||||||
fprintf( out, "%s\n", the_names[nn].name );
|
fprintf( out, "++_%s.%s.%s\n",
|
||||||
|
the_names[nn].name, dll_name, the_names[nn].name );
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OUTPUT_NETWARE_IMP:
|
||||||
|
if ( dll_name )
|
||||||
|
fprintf( out, " (%s)\n", dll_name );
|
||||||
|
|
||||||
|
for ( nn = 0; nn < num_names - 1; nn++ )
|
||||||
|
fprintf( out, " %s,\n", the_names[nn].name );
|
||||||
|
fprintf( out, " %s\n", the_names[num_names - 1].name );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OUTPUT_GNU_VERMAP:
|
||||||
|
fprintf( out, "{\n\tglobal:\n" );
|
||||||
|
|
||||||
|
for ( nn = 0; nn < num_names; nn++ )
|
||||||
|
fprintf( out, "\t\t%s;\n", the_names[nn].name );
|
||||||
|
|
||||||
|
fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: /* LIST */
|
||||||
|
for ( nn = 0; nn < num_names; nn++ )
|
||||||
|
fprintf( out, "%s\n", the_names[nn].name );
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* states of the line parser */
|
/* states of the line parser */
|
||||||
|
|
||||||
typedef enum State_
|
typedef enum State_
|
||||||
|
@ -226,89 +238,96 @@ typedef enum State_
|
||||||
|
|
||||||
} State;
|
} State;
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
read_header_file( FILE* file, int verbose )
|
read_header_file( FILE* file,
|
||||||
|
int verbose )
|
||||||
{
|
{
|
||||||
static char buff[LINEBUFF_SIZE + 1];
|
static char buff[LINEBUFF_SIZE + 1];
|
||||||
State state = STATE_START;
|
State state = STATE_START;
|
||||||
|
|
||||||
|
|
||||||
while ( !feof( file ) )
|
while ( !feof( file ) )
|
||||||
{
|
{
|
||||||
char* p;
|
char* p;
|
||||||
|
|
||||||
|
|
||||||
if ( !fgets( buff, LINEBUFF_SIZE, file ) )
|
if ( !fgets( buff, LINEBUFF_SIZE, file ) )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
p = buff;
|
p = buff;
|
||||||
|
|
||||||
while ( *p && (*p == ' ' || *p == '\\') ) /* skip leading whitespace */
|
/* skip leading whitespace */
|
||||||
|
while ( *p && ( *p == ' ' || *p == '\\' ) )
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
if ( *p == '\n' || *p == '\r' ) /* skip empty lines */
|
/* skip empty lines */
|
||||||
|
if ( *p == '\n' || *p == '\r' )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
switch ( state )
|
switch ( state )
|
||||||
{
|
{
|
||||||
case STATE_START:
|
case STATE_START:
|
||||||
{
|
if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
|
||||||
if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
|
|
||||||
break;
|
|
||||||
|
|
||||||
p += 10;
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
if ( *p == 0 || *p == '\n' || *p == '\r' )
|
|
||||||
goto NextLine;
|
|
||||||
|
|
||||||
if ( *p == ')' )
|
|
||||||
{
|
|
||||||
p++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
state = STATE_TYPE;
|
|
||||||
|
|
||||||
/* sometimes, the name is just after the FT_EXPORT(...), so
|
|
||||||
* skip whitespace, and fall-through if we find an alphanumeric
|
|
||||||
* character
|
|
||||||
*/
|
|
||||||
while ( *p == ' ' || *p == '\t' )
|
|
||||||
p++;
|
|
||||||
|
|
||||||
if ( !isalpha(*p) )
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* fall-through */
|
|
||||||
|
|
||||||
case STATE_TYPE:
|
|
||||||
{
|
|
||||||
char* name = p;
|
|
||||||
|
|
||||||
while ( isalnum(*p) || *p == '_' )
|
|
||||||
p++;
|
|
||||||
|
|
||||||
if ( p > name )
|
|
||||||
{
|
|
||||||
if ( verbose )
|
|
||||||
fprintf( stderr, ">>> %.*s\n", (int)(p - name), name );
|
|
||||||
|
|
||||||
names_add( name, p );
|
|
||||||
}
|
|
||||||
|
|
||||||
state = STATE_START;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
p += 10;
|
||||||
;
|
for (;;)
|
||||||
|
{
|
||||||
|
if ( *p == 0 || *p == '\n' || *p == '\r' )
|
||||||
|
goto NextLine;
|
||||||
|
|
||||||
|
if ( *p == ')' )
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
state = STATE_TYPE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sometimes, the name is just after `FT_EXPORT(...)', so skip
|
||||||
|
* whitespace and fall-through if we find an alphanumeric character.
|
||||||
|
*/
|
||||||
|
while ( *p == ' ' || *p == '\t' )
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if ( !isalpha( *p ) )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* fall-through */
|
||||||
|
|
||||||
|
case STATE_TYPE:
|
||||||
|
{
|
||||||
|
char* name = p;
|
||||||
|
|
||||||
|
|
||||||
|
while ( isalnum( *p ) || *p == '_' )
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if ( p > name )
|
||||||
|
{
|
||||||
|
if ( verbose )
|
||||||
|
fprintf( stderr, ">>> %.*s\n", (int)( p - name ), name );
|
||||||
|
|
||||||
|
names_add( name, p );
|
||||||
|
}
|
||||||
|
|
||||||
|
state = STATE_START;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
NextLine:
|
NextLine:
|
||||||
;
|
;
|
||||||
}
|
} /* end of while loop */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -318,143 +337,154 @@ static void
|
||||||
usage( void )
|
usage( void )
|
||||||
{
|
{
|
||||||
static const char* const format =
|
static const char* const format =
|
||||||
"%s %s: extract FreeType API names from header files\n\n"
|
"%s %s: extract FreeType API names from header files\n"
|
||||||
"this program is used to extract the list of public FreeType API\n"
|
"\n"
|
||||||
"functions. It receives the list of header files as argument and\n"
|
"This program extracts the list of public FreeType API functions.\n"
|
||||||
"generates a sorted list of unique identifiers\n\n"
|
"It receives a list of header files as an argument and\n"
|
||||||
|
"generates a sorted list of unique identifiers in various formats.\n"
|
||||||
"usage: %s header1 [options] [header2 ...]\n\n"
|
"\n"
|
||||||
|
"usage: %s header1 [options] [header2 ...]\n"
|
||||||
"options: - : parse the content of stdin, ignore arguments\n"
|
"\n"
|
||||||
" -v : verbose mode, output sent to standard error\n"
|
"options: - parse the contents of stdin, ignore arguments\n"
|
||||||
" -oFILE : write output to FILE instead of standard output\n"
|
" -v verbose mode, output sent to standard error\n"
|
||||||
" -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
|
" -oFILE write output to FILE instead of standard output\n"
|
||||||
" -w : output .DEF file for Visual C++ and Mingw\n"
|
" -dNAME indicate DLL file name, 'freetype.dll' by default\n"
|
||||||
" -wB : output .DEF file for Borland C++\n"
|
" -w output .DEF file for Visual C++ and Mingw\n"
|
||||||
" -wW : output Watcom Linker Response File\n"
|
" -wB output .DEF file for Borland C++\n"
|
||||||
" -wN : output NetWare Import File\n"
|
" -wW output Watcom Linker Response File\n"
|
||||||
" -wL : output version map for GNU or Solaris linker\n"
|
" -wN output NetWare Import File\n"
|
||||||
"\n";
|
" -wL output version map for GNU or Solaris linker\n"
|
||||||
|
"\n";
|
||||||
|
|
||||||
fprintf( stderr,
|
fprintf( stderr,
|
||||||
format,
|
format,
|
||||||
PROGRAM_NAME,
|
PROGRAM_NAME,
|
||||||
PROGRAM_VERSION,
|
PROGRAM_VERSION,
|
||||||
PROGRAM_NAME
|
PROGRAM_NAME );
|
||||||
);
|
|
||||||
exit(1);
|
exit( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main( int argc, const char* const* argv )
|
int
|
||||||
|
main( int argc,
|
||||||
|
const char* const* argv )
|
||||||
{
|
{
|
||||||
int from_stdin = 0;
|
int from_stdin = 0;
|
||||||
int verbose = 0;
|
int verbose = 0;
|
||||||
OutputFormat format = OUTPUT_LIST; /* the default */
|
OutputFormat format = OUTPUT_LIST; /* the default */
|
||||||
FILE* out = stdout;
|
FILE* out = stdout;
|
||||||
const char* library_name = NULL;
|
const char* library_name = NULL;
|
||||||
|
|
||||||
|
|
||||||
if ( argc < 2 )
|
if ( argc < 2 )
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
/* '-' used as a single argument means read source file from stdin */
|
/* `-' used as a single argument means read source file from stdin */
|
||||||
while ( argc > 1 && argv[1][0] == '-' )
|
while ( argc > 1 && argv[1][0] == '-' )
|
||||||
{
|
{
|
||||||
const char* arg = argv[1];
|
const char* arg = argv[1];
|
||||||
|
|
||||||
|
|
||||||
switch ( arg[1] )
|
switch ( arg[1] )
|
||||||
{
|
{
|
||||||
case 'v':
|
case 'v':
|
||||||
verbose = 1;
|
verbose = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
if ( arg[2] == 0 )
|
||||||
|
{
|
||||||
|
if ( argc < 2 )
|
||||||
|
usage();
|
||||||
|
|
||||||
|
arg = argv[2];
|
||||||
|
argv++;
|
||||||
|
argc--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
arg += 2;
|
||||||
|
|
||||||
|
out = fopen( arg, "wt" );
|
||||||
|
if ( !out )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "could not open '%s' for writing\n", arg );
|
||||||
|
exit( 3 );
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
if ( arg[2] == 0 )
|
||||||
|
{
|
||||||
|
if ( argc < 2 )
|
||||||
|
usage();
|
||||||
|
|
||||||
|
arg = argv[2];
|
||||||
|
argv++;
|
||||||
|
argc--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
arg += 2;
|
||||||
|
|
||||||
|
library_name = arg;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'w':
|
||||||
|
format = OUTPUT_WINDOWS_DEF;
|
||||||
|
|
||||||
|
switch ( arg[2] )
|
||||||
|
{
|
||||||
|
case 'B':
|
||||||
|
format = OUTPUT_BORLAND_DEF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'o':
|
case 'W':
|
||||||
if ( arg[2] == 0 )
|
format = OUTPUT_WATCOM_LBC;
|
||||||
{
|
|
||||||
if ( argc < 2 )
|
|
||||||
usage();
|
|
||||||
|
|
||||||
arg = argv[2];
|
|
||||||
argv++;
|
|
||||||
argc--;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
arg += 2;
|
|
||||||
|
|
||||||
out = fopen( arg, "wt" );
|
|
||||||
if ( !out )
|
|
||||||
{
|
|
||||||
fprintf( stderr, "could not open '%s' for writing\n", arg );
|
|
||||||
exit(3);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'N':
|
||||||
if ( arg[2] == 0 )
|
format = OUTPUT_NETWARE_IMP;
|
||||||
{
|
|
||||||
if ( argc < 2 )
|
|
||||||
usage();
|
|
||||||
|
|
||||||
arg = argv[2];
|
|
||||||
argv++;
|
|
||||||
argc--;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
arg += 2;
|
|
||||||
|
|
||||||
library_name = arg;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'w':
|
case 'L':
|
||||||
format = OUTPUT_WINDOWS_DEF;
|
format = OUTPUT_GNU_VERMAP;
|
||||||
switch ( arg[2] )
|
|
||||||
{
|
|
||||||
case 'B':
|
|
||||||
format = OUTPUT_BORLAND_DEF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'W':
|
|
||||||
format = OUTPUT_WATCOM_LBC;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'N':
|
|
||||||
format = OUTPUT_NETWARE_IMP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'L':
|
|
||||||
format = OUTPUT_GNU_VERMAP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
usage();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
from_stdin = 1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
from_stdin = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
}
|
|
||||||
|
} /* end of while loop */
|
||||||
|
|
||||||
if ( from_stdin )
|
if ( from_stdin )
|
||||||
{
|
|
||||||
read_header_file( stdin, verbose );
|
read_header_file( stdin, verbose );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for ( --argc, argv++; argc > 0; argc--, argv++ )
|
for ( --argc, argv++; argc > 0; argc--, argv++ )
|
||||||
{
|
{
|
||||||
FILE* file = fopen( argv[0], "rb" );
|
FILE* file = fopen( argv[0], "rb" );
|
||||||
|
|
||||||
|
|
||||||
if ( !file )
|
if ( !file )
|
||||||
fprintf( stderr, "unable to open '%s'\n", argv[0] );
|
fprintf( stderr, "unable to open '%s'\n", argv[0] );
|
||||||
else
|
else
|
||||||
|
@ -469,7 +499,7 @@ int main( int argc, const char* const* argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( num_names == 0 )
|
if ( num_names == 0 )
|
||||||
panic( "could not find exported functions !!\n" );
|
panic( "could not find exported functions\n" );
|
||||||
|
|
||||||
names_sort();
|
names_sort();
|
||||||
names_dump( out, format, library_name );
|
names_dump( out, format, library_name );
|
||||||
|
@ -479,3 +509,6 @@ int main( int argc, const char* const* argv )
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* END */
|
||||||
|
|
Loading…
Reference in New Issue