home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <ctype.h>
- #include <stdlib.h>
- #include <string.h>
- #include <exec/types.h>
- #include <dos/dos.h>
- #include <dos/rdargs.h>
- #include <clib/dos_protos.h>
-
- #define TEMPLATE "FILES/A/M,INCPATH/K,INCSUFFIX/K,SKIPPREFIX/K,OUTPATH/K,OUTSUFFIX/K"
- #define OPT_FILES 0
- #define OPT_INCPATH 1
- #define OPT_INCPREFIX 2
- #define OPT_SKIPPREFIX 3
- #define OPT_OUTPATH 4
- #define OPT_OUTPREFIX 5
- #define OPT_COUNT 6
-
- LONG opts[OPT_COUNT];
- char *ver="\0$VER: makeoffsets Snoopy Support Tool 1.0 (01.01.94)";
- char *includePath = "include:";
- char *includeSuffix = ".i";
- char *skipPrefix = "_LVO";
- char *outputPath = "";
- char *outputSuffix = "";
-
- extern struct Library *DOSBase;
-
- void BuildOffsets( char *filename )
- {
- char buffer[256];
- FILE *source,*target;
-
- sprintf( buffer, "%s%s%s", includePath, filename, includeSuffix );
-
- if( ( source = fopen( buffer, "r" ) ) != NULL )
- {
- sprintf( buffer, "%s%s%s", outputPath, filename, outputSuffix );
-
- if( ( target = fopen( buffer, "w" ) ) != NULL )
- {
- char *cp,*result,*code;
-
- printf("Creating SNOOPY Includefile \"%s\"....", buffer );
-
- while( !feof( source ) )
- {
- fgets( buffer, 256, source );
- result = NULL;
-
- // note: this code my look stupid, but kids, I can do it!
- for( cp=buffer; *cp && !isspace( *cp ); cp++ );
- if( *cp )
- {
- for( *(cp++)=0; *cp && isspace( *cp ); cp++ );
- if( *cp )
- {
- for( ++cp; *cp && !isspace( *cp ); cp++ );
- if( *cp )
- {
- for( ++cp; *cp && isspace( *cp ); cp++ );
- if( *cp && (*(cp++)=='-') )
- {
- for( result=cp; *cp && isdigit( *cp ); cp++ ); *cp=0;
- if( !strncmp( buffer, skipPrefix, strlen(skipPrefix) ) )
- code = buffer+strlen(skipPrefix);
- else
- code = buffer;
-
- fprintf( target, "define=%s,-%s\n",code,result);
- }
- }
- }
- }
- }
- printf( "Done!\n");
- fclose( target );
- }
- else printf( "ERROR, cannot open target \"%s\"\n", buffer );
-
- fclose( source );
- }
- else printf( "ERROR, cannot open source \"%s\"\n", buffer );
- } // BuildOffsets()
-
- int main( void )
- {
- struct RDArgs *argsptr;
-
- if( ( argsptr = ReadArgs( TEMPLATE, opts, NULL ) ) != NULL )
- {
- char **sptr;
-
- if( opts[OPT_INCPATH] ) includePath = (char *)(opts[OPT_INCPATH ]);
- if( opts[OPT_INCPREFIX] ) includeSuffix = (char *)(opts[OPT_INCPREFIX]);
- if( opts[OPT_SKIPPREFIX]) skipPrefix = (char *)(opts[OPT_SKIPPREFIX]);
- if( opts[OPT_OUTPATH] ) outputPath = (char *)(opts[OPT_OUTPATH ]);
- if( opts[OPT_OUTPREFIX] ) outputSuffix = (char *)(opts[OPT_OUTPREFIX]);
-
- sptr = (char **)(opts[OPT_FILES]);
- while( *sptr ) BuildOffsets( *(sptr++) );
-
- FreeArgs( argsptr );
- }
- else
- {
- PrintFault( IoErr(), NULL );
- return RETURN_ERROR;
- }
- return RETURN_OK;
- }
-