home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / c / condor40.zip / CONDOR / src / condor_lib / ToUpper.c < prev    next >
C/C++ Source or Header  |  1989-09-01  |  2KB  |  139 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. FILE *InFP, *OutFP;
  5.  
  6. int FoundIt = 0;
  7. int EndOfFile = 0;
  8.  
  9. char InBuf[ BUFSIZ ];
  10. int Index;
  11.  
  12. char *Name;
  13. int NameLen;
  14.  
  15. main( argc, argv )
  16. int argc;
  17. char **argv;
  18. {
  19.     int i;
  20.  
  21.     if( argc != 4 ) {
  22.         fprintf(stderr, "Usage: %s infile outfile name\n", *argv );
  23.         exit( 1 );
  24.     }
  25.  
  26.     InFP = fopen(argv[1], "r");
  27.     if( InFP == NULL ) {
  28.         perror(argv[1]);
  29.         exit( 1 );
  30.     }
  31.  
  32.     OutFP = fopen(argv[2], "w");
  33.     if( OutFP == NULL ) {
  34.         perror(argv[2]);
  35.         exit( 1 );
  36.     }
  37.  
  38.     Name = argv[3];
  39.     NameLen = strlen(Name);
  40.  
  41.     InitInBuf();
  42.  
  43.     for(;;) {
  44.         if( IsName() ) {
  45.             for( i = 0; i < NameLen; i++ ) {
  46.                 if( islower(Name[i]) ) {
  47.                     put_one( Name[i] - ' ' );
  48.                 } else {
  49.                     put_one( Name[i] );
  50.                 }
  51.             }
  52.             FoundIt = 1;
  53.             InitInBuf();
  54.         } else {
  55.             NextChar();
  56.         }
  57.     }
  58. }
  59.  
  60. DoCleanup()
  61. {
  62.     (void) fclose( InFP );
  63.     (void) fclose( OutFP );
  64.  
  65.     if( ! FoundIt ) {
  66.         fprintf(stderr, "Could not find 'main'\n");
  67.         exit( 1 );
  68.     }
  69.  
  70.     exit( 0 );
  71. }
  72.  
  73. char
  74. get_one()
  75. {
  76.     int ch = fgetc(InFP);
  77.  
  78.     if( ch == EOF ) {
  79.         EndOfFile = 1;
  80.         return( (char) NULL );
  81.     }
  82.  
  83.     return( (char) ch );
  84. }
  85.  
  86. put_one( ch )
  87. char ch;
  88. {
  89.     (void) fputc( (int) ch, OutFP );
  90. }
  91.  
  92. InitInBuf()
  93. {
  94.     int i;
  95.  
  96.     for( Index = 0; Index < NameLen; Index++ ) {
  97.         InBuf[Index] = get_one();
  98.         if( EndOfFile ) {
  99.             for( i = 0; i < Index; i++ ) {
  100.                 put_one( InBuf[i] );
  101.             }
  102.             DoCleanup();
  103.         }
  104.     }
  105.  
  106.     Index = 0;
  107. }
  108.  
  109. NextChar()
  110. {
  111.     int i;
  112.  
  113.     put_one( InBuf[Index] );
  114.  
  115.     InBuf[Index] = get_one();
  116.     if( EndOfFile ) {
  117.         for( i = (Index+1) % NameLen; i != Index; i = (i+1) % NameLen ) {
  118.             put_one( InBuf[i] );
  119.         }
  120.  
  121.         DoCleanup();
  122.     }
  123.  
  124.     Index = (Index + 1) % NameLen;
  125. }
  126.  
  127. IsName()
  128. {
  129.     int i;
  130.  
  131.     for( i = 0; i < NameLen; i++ ) {
  132.         if( InBuf[(Index+i) % NameLen] != Name[i] ) {
  133.             return( 0 );
  134.         }
  135.     }
  136.  
  137.     return( 1 );
  138. }
  139.