home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / debug / Snooper / Snoopy / Support / makeoffsets.c < prev    next >
C/C++ Source or Header  |  1995-06-25  |  4KB  |  112 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <exec/types.h>
  6. #include <dos/dos.h>
  7. #include <dos/rdargs.h>
  8. #include <clib/dos_protos.h>
  9.  
  10. #define TEMPLATE "FILES/A/M,INCPATH/K,INCSUFFIX/K,SKIPPREFIX/K,OUTPATH/K,OUTSUFFIX/K"
  11. #define OPT_FILES           0
  12. #define OPT_INCPATH         1
  13. #define OPT_INCPREFIX       2
  14. #define OPT_SKIPPREFIX      3
  15. #define OPT_OUTPATH         4
  16. #define OPT_OUTPREFIX       5
  17. #define OPT_COUNT           6
  18.  
  19. LONG opts[OPT_COUNT];
  20. char *ver="\0$VER: makeoffsets Snoopy Support Tool 1.0 (01.01.94)";
  21. char *includePath = "include:";
  22. char *includeSuffix = ".i";
  23. char *skipPrefix = "_LVO";
  24. char *outputPath = "";
  25. char *outputSuffix = "";
  26.  
  27. extern struct Library *DOSBase;
  28.  
  29. void BuildOffsets( char *filename )
  30. {
  31.     char buffer[256];
  32.     FILE *source,*target;
  33.  
  34.     sprintf( buffer, "%s%s%s", includePath, filename, includeSuffix );
  35.     
  36.     if( ( source = fopen( buffer, "r" ) ) != NULL )
  37.     {
  38.         sprintf( buffer, "%s%s%s", outputPath, filename, outputSuffix );
  39.         
  40.         if( ( target = fopen( buffer, "w" ) ) != NULL )
  41.         {
  42.             char *cp,*result,*code;
  43.             
  44.             printf("Creating SNOOPY Includefile \"%s\"....", buffer );
  45.  
  46.             while( !feof( source ) )
  47.             {
  48.                 fgets( buffer, 256, source );
  49.                 result = NULL;
  50.             
  51.                 // note: this code my look stupid, but kids, I can do it! 
  52.                 for( cp=buffer; *cp && !isspace( *cp ); cp++ );
  53.                 if( *cp )
  54.                 {       
  55.                     for( *(cp++)=0; *cp && isspace( *cp ); cp++ );
  56.                     if( *cp )
  57.                     {
  58.                         for( ++cp; *cp && !isspace( *cp ); cp++ );
  59.                         if( *cp )
  60.                         {
  61.                             for( ++cp; *cp && isspace( *cp ); cp++ );
  62.                             if( *cp && (*(cp++)=='-') )
  63.                             {
  64.                                 for( result=cp; *cp && isdigit( *cp ); cp++ ); *cp=0;
  65.                                 if( !strncmp( buffer, skipPrefix, strlen(skipPrefix) ) )
  66.                                     code = buffer+strlen(skipPrefix);
  67.                                 else
  68.                                     code = buffer;
  69.  
  70.                                 fprintf( target, "define=%s,-%s\n",code,result);
  71.                             }
  72.                         }
  73.                     }
  74.                 }
  75.             }
  76.             printf( "Done!\n");
  77.             fclose( target );
  78.         }
  79.         else printf( "ERROR, cannot open target \"%s\"\n", buffer );
  80.         
  81.         fclose( source );
  82.     }
  83.     else printf( "ERROR, cannot open source \"%s\"\n", buffer );
  84. } // BuildOffsets()
  85.  
  86. int main( void )
  87. {
  88.     struct RDArgs *argsptr;
  89.  
  90.     if( ( argsptr = ReadArgs( TEMPLATE, opts, NULL ) ) != NULL )
  91.     {
  92.         char **sptr;
  93.  
  94.         if( opts[OPT_INCPATH]   ) includePath   = (char *)(opts[OPT_INCPATH  ]);
  95.         if( opts[OPT_INCPREFIX] ) includeSuffix = (char *)(opts[OPT_INCPREFIX]);
  96.         if( opts[OPT_SKIPPREFIX]) skipPrefix    = (char *)(opts[OPT_SKIPPREFIX]);
  97.         if( opts[OPT_OUTPATH]   ) outputPath    = (char *)(opts[OPT_OUTPATH  ]);
  98.         if( opts[OPT_OUTPREFIX] ) outputSuffix  = (char *)(opts[OPT_OUTPREFIX]);
  99.  
  100.         sptr = (char **)(opts[OPT_FILES]);
  101.         while( *sptr ) BuildOffsets( *(sptr++) );
  102.         
  103.         FreeArgs( argsptr );
  104.     }
  105.     else
  106.     {
  107.         PrintFault( IoErr(), NULL );
  108.         return RETURN_ERROR;
  109.     }
  110.     return RETURN_OK;
  111. }
  112.