This is imfile.c in view mode; [Download] [Up]
/**
** $Header: /import/dev-vis/image/imtools/v2.0/imtools/src/RCS/imfile.c,v 1.3 91/10/03 13:20:21 nadeau Exp $
** Copyright (c) 1989, 1990 San Diego Supercomputer Center (SDSC)
** San Diego, California, USA
**
** Users and possessors of this source code are hereby granted a
** nonexclusive, royalty-free copyright and design patent license to
** use this code in individual software. License is not granted for
** commercial resale, in whole or in part, without prior written
** permission from SDSC. This source is provided "AS IS" without express
** or implied warranty of any kind.
**
** For further information contact:
** E-Mail: info@sds.sdsc.edu
**
** Surface Mail: Information Center
** San Diego Supercomputer Center
** P.O. Box 85608
** San Diego, CA 92138-5608
** (619) 534-5000
**/
#define HEADER " $Header: /import/dev-vis/image/imtools/v2.0/imtools/src/RCS/imfile.c,v 1.3 91/10/03 13:20:21 nadeau Exp $"
/**
** FILE
** imfile.c - Image file known format query
**
** PROJECT
** IM - Image Manipulation Tools
**
** DESCRIPTION
** imfile opens the file or files and tries to figure out what kind of
** image file they are.
**
** PUBLIC CONTENTS
** d =defined constant
** f =function
** m =defined macro
** t =typedef/struct/union
** v =variable
** ? =other
**
** main f main program
**
** PRIVATE CONTENTS
** toolCommand g command info for arg parsing pkg
** toolOptions g option info for arg parsing pkg
**
** HISTORY
** $Log: imfile.c,v $
** Revision 1.3 91/10/03 13:20:21 nadeau
** Update to version 2.0 of the Arg parsing package.
**
** Revision 1.2 91/03/11 14:38:43 nadeau
** Updated comments and updated to use new file formats table.
**
** Revision 1.1 90/07/02 13:16:37 nadeau
** Initial revision
**
** Revision 1.5 90/05/11 14:27:18 nadeau
** Removed old ifdefed dispatch table stuff and added more comments.
**
**/
#include "imtools.h"
/*
* GLOBALS
* toolCommand - command info for arg parsing pkg
* toolOptions - option info for arg parsing pkg
*
* DESCRIPTION
* toolCommand describes the command and gives the help text.
*
* toolOptions lists the arg options accepted.
*/
private ArgCommand toolCommand =
{
/* command name */ "imfile",
/* major version # */ IMTOOLSMAJOR,
/* minor version # */ IMTOOLSMINOR,
/* subminor version # */ IMTOOLSSUBMINOR,
/* -help pre-option list information */
"%command determines the type of image file format used by each file on its\n\
command line and prints it to stdout.\n\
",
/* -help post-option list information */
NULL, /* Filled in later on */
/* -fullhelp pre-option list information */
NULL, /* Use same message as for -help*/
/* -fullhelp post-option list information */
NULL, /* Use same message as for -help*/
ARGFNONE, /* No special flags */
"[options...] filenames...",
"[options...] filenames...",
"SDSC Image Tools, October 1991.",
"Copyright (c) 1989-1991 San Diego Supercomputer Center (SDSC), CA, USA",
NULL, /* filled in later on */
NULL, /* filled in later on */
};
private char *toolHelp = "\n\
Typical Invocations:\n\
List file formats for all files in the current directory:\n\
%command *\n\
";
private char *toolFullHelp = "\n\
Output:\n\
Output is a table giving the file name, its format name, and a description\n\
of that format. If %command cannot figure out the type of image file, the\n\
words 'Unknown image file format' are printed beside the file name.\n\
";
private char *toolNote = "\n\
Additional Help:\n\
This is an abbreviated help listing. For a full listing of options,\n\
including a list of image file formats supported, type:\n\
%command -fullhelp\n\
";
#define TOOLNOPTIONS 1
private ArgOption toolOptions[TOOLNOPTIONS] =
{
{ "infile", "filenames...", "Names of files to query",
ARGFIMPKEYWORD|ARGFREQUIRED, 1, ARGVNOMAX, ARGTSTRING },
};
#define TOOLNEQUIVS 0
#if TOOLNEQUIVS == 0
private ArgEquiv *toolEquivs;
#else
private ArgEquiv toolEquivs[TOOLNEQUIVS] =
{
};
#endif
/*
* FUNCTION
* main - main program
*
* DESCRIPTION
* The incomming argument list is walked and each file checked
* to see what kind of image file format it uses.
*/
main( argc, argv )
int argc; /* Argument count */
char *argv[]; /* Argument vector */
{
int i; /* Counter */
int numFiles; /* Number of file names */
char *fileName; /* Input file name */
char *formatName; /* Input file's format */
char **pNames; /* Format name list pointer */
ImFileFormat *pFmt; /* Format list pointer */
int fd; /* File descriptor */
char buffer[1024]; /* Output buffer */
char *tmp; /* Temp string */
/*
* Use the standard Image Tools user registration and feedback forms.
*/
toolCommand.arg_register = ImToolsRegister;
toolCommand.arg_feedback = ImToolsFeedback;
/*
* Allocate space for the total help string for the tool. Copy the
* tool-specific help in, then concatenate on the generic help text
* used by most of the image tools.
*/
if ( (tmp = (char *)malloc( sizeof( char ) * (strlen( toolNote ) +
strlen( toolHelp ) + 1) )) == NULL )
{
perror( ImToolsProgram );
exit( 1 );
}
strcpy( tmp, toolHelp );
strcat( tmp, toolNote );
toolCommand.arg_help2 = tmp;
if ( (tmp = (char *)malloc( sizeof( char ) * ( strlen( toolHelp ) +
strlen( toolFullHelp ) + 1) )) == NULL )
{
perror( ImToolsProgram );
exit( 1 );
}
strcpy( tmp, toolHelp );
strcat( tmp, toolFullHelp );
toolCommand.arg_fullhelp2 = tmp;
/*
* Parse arguments.
*/
ImToolsProgram = argv[0];
ArgParse( argc, argv, &toolCommand, TOOLNOPTIONS, toolOptions,
TOOLNEQUIVS, toolEquivs );
numFiles = ArgQNValue( "infile", 0 );
/*
* List the files and the formats they use.
*/
for ( i = 0; i < numFiles; i++ )
{
fileName = ArgQValue( "infile", 0, i )->arg_s;
sprintf( buffer, "%s:", fileName );
if ( (fd = open( fileName, O_RDONLY )) == -1 )
{
printf( "%-16ss Cannot open file\n", buffer );
continue;
}
formatName = ImFileQFormat( fd, fileName );
if ( formatName == NULL )
{
printf( "%-16s Unknown image file format\n", buffer );
close( fd );
continue;
}
for ( pFmt = ImFileFormats; pFmt->format_names; pFmt++ )
if ( strcmp( pFmt->format_names[0], formatName ) == 0 )
break;
printf( "%-16s '%s', %s, %s\n", buffer, formatName,
pFmt->format_help, pFmt->format_creator );
close( fd );
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.