rcsutil.c

来自「This is code tutorial for image processi」· C语言 代码 · 共 224 行

C
224
字号

/*
     rcsutil.c
     The Revision Control System

     Dwayne Phillips
     November 1991

     This file contains functions that are used by
     several of the RCS programs.  They are held here
     to avoid having multiple copies of the same
     function.

     create_rcs_file_name
     rev_number
     replace_slash
     go_to_correct_rev
     copy_rcs_to_source
     copy_latest_rcs_to_source
     get_header_lines
*/

#include "rcs.h"

/*
   create_rcs_file_name(char source_name[],
                       char rcs_name[])
*/

create_rcs_file_name(char *source_name, char *rcs_name)
{
   char *place, temp[80];
   int  i, j, slash, slot;

   slash = 47;
   place = strrchr(source_name, slash);
   slash = 92;
   if(place == '\0')
         place = strrchr(source_name, slash);
   if(place == '\0'){
      strcpy(rcs_name, "RCS/v");
      strcat(rcs_name, source_name);
   }
   else{
      slot = place - source_name;
      strncpy(temp, source_name, slot);
      temp[slot] = '\0';
      strcat(temp, "/RCS/v");
      slot++;
      j = strlen(temp);
      for(i=slot; source_name[i]!='\0'; i++){
         temp[j] = source_name[i];
         j++;
      }

      temp[j] = '\0';
      strcpy(rcs_name, temp);
   }
}



/*
   rev_number(char *string)
*/

rev_number(char *string)
{
   char  *new_string;
   int   doit = 0, i, j, result;

   i = 0;
   while(doit == 0){
      j = string[i];
      doit = isdigit(j);
      i++;
   }
   i--;

   for(j=0; string[i] != '\0'; i++, j++)
         new_string[j] = string[i];
   result = atoi(new_string);
   return(result);

}


/*
   replace_slash(char string[])
*/

replace_slash(char string[])
{
   int  slash      = 47, back_slash = 92, i, j;

   j = strlen(string);
   for(i=0; i<j; i++){
      if(string[i] == slash) string[i] = back_slash;
   }
}




/*
   go_to_correct_rev(FILE *rcs_file, int rev)
*/

go_to_correct_rev(FILE *rcs_file, int rev)
{
   char *result, string[80];
   int  found_it = 0, new_rev, reading = 1, still_reading = 1;

   while(reading){ /* read file */
      result = fgets(string, 80, rcs_file);
      if( strncmp(string, FIRST_LINE, 5) == 0){
         result = fgets(string, 80, rcs_file);
         new_rev = atoi(string);
         if(rev == new_rev){
            while(still_reading){
               result = fgets(string, 80, rcs_file);
               if( strncmp(string, DELIMETER, 5) == 0){
                  still_reading = 0;
                  reading       = 0;
                  found_it      = 1;
               }  /* ends if DELIMETER */
               if(result == '\0') still_reading = 0;
            }  /* ends while still_reading */
         }  /* ends if rev == new_rev */
      }  /* ends if FIRST_LINE */
      if(result == '\0') reading = 0;
   } /* ends while reading */

   if(found_it == 0){
      printf("\n\ncheckout.c> Did not find the"
             " desired revision\n");
      fclose(rcs_file);
      exit(-5);
   }
} 



/*
   copy_rcs_to_source(FILE *rcs_file, FILE *source_file)
*/

copy_rcs_to_source(FILE *rcs_file, FILE *source_file)
{
   char string[80];
   int  reading = 1;

   while(reading){
      fgets(string, 80, rcs_file);
      if( strncmp(string, DELIMETER, 5) == 0)
         reading = 0;
      else
         fputs(string, source_file);
   }
}



/*
   copy_latest_rcs_to_source(FILE *rcs_file, FILE *source_file)
*/

copy_latest_rcs_to_source(FILE *rcs_file, FILE *source_file)
{
   char string[80];
   int  reading = 1;

   while(reading){
      fgets(string, 80, rcs_file);
         if( strncmp(string, DELIMETER, 5) == 0){
            while(reading){
               fgets(string, 80, rcs_file);
                  if(strncmp(string, DELIMETER, 5) == 0)
                     reading = 0;
                  else
                     fputs(string, source_file);
            } /* ends while reading */
         }  /* ends if DELIMETER */
   }  /* ends while reading */
}




/*
   get_header_lines(FILE *the_file, int version)
*/

get_header_lines(FILE *the_file, int version)
{
   char   string[80];
   int    entering = 1;
   time_t ltime;

   time(&ltime);

   fputs(FIRST_LINE, the_file);
   sprintf(string, "%d\n", version);
   fputs(string, the_file);
   sprintf(string, "%s", ctime(&ltime));
   fputs(string, the_file);

   printf("\n\nEnter your header lines");
   printf("\nStop the header lines by entering");
   printf("\na . on a line by itself.");
   printf("\n");
   while(entering){
      printf(">>");
      fgets(string, 80, stdin);
      if(string[0] != '.')
       fputs(string, the_file);
      else
       entering = 0;
   } /* ends while entering */

   fputs(DELIMETER, the_file);

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?