home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_11_07 / 1107048a < prev    next >
Text File  |  1993-04-30  |  3KB  |  141 lines

  1. /*
  2.    prunerev.c
  3.    The Revision Control System
  4.  
  5.    Dwayne Phillips
  6.    November 1991
  7. */
  8.  
  9. #include "rcs.h"
  10.  
  11. main(argc, argv)
  12.    int argc;
  13.    char *argv[];
  14. {
  15.    char rcs_name[80], source_name[80], string[80];
  16.    FILE *rcs_file, *source_file, *xxx_file;
  17.    int  prune = 0, leave_source = 0, one = 1, result,
  18.         rev;
  19.  
  20.    if(argc < 3    ||   argc > 3){
  21.       printf("\n\n\tusage: "
  22.              "prunerev source-file rev-number\n");
  23.       exit(-1);
  24.    }
  25.  
  26.    prune = print_warning();
  27.    if(prune == 0){
  28.       printf("\nExiting prunerev\n");
  29.       exit(1);
  30.    }
  31.  
  32.    strcpy(source_name, argv[1]);
  33.    strcpy(string, argv[2]);
  34.    rev = rev_number(string);
  35.  
  36.    create_rcs_file_name(source_name, rcs_name);
  37.  
  38.    if((rcs_file = fopen(rcs_name, "r")) == '\0'){
  39.       printf("\nprunerev>> "
  40.              "cannot open the rcs file >>%s<<",
  41.         rcs_name);
  42.       exit(-1);
  43.    }
  44.  
  45.    if((xxx_file = fopen("((((", "w")) == '\0'){
  46.       printf("\nprunerev>> "
  47.              "cannot open the temp file ((((");
  48.       exit(-1);
  49.    }
  50.  
  51.    copy_wanted_revs_to_temp_file(rcs_file, xxx_file, rev);
  52.  
  53.    fclose(rcs_file);
  54.    fclose(xxx_file);
  55.  
  56.    unlink(rcs_name);
  57.    sprintf(string, "copy (((( %s", rcs_name);
  58.    replace_slash(string);
  59.    system(string);
  60.    unlink("((((");
  61.  
  62. }
  63.  
  64. /*
  65.    copy_wanted_revs_to_temp_file(rcs_file, xxx_file, rev)
  66. */
  67.  
  68. copy_wanted_revs_to_temp_file(FILE *rcs_file,
  69.                FILE *xxx_file,
  70.                int rev)
  71. {
  72.    char *result, second_string[80], string[80];
  73.    int  found_it = 0, new_rev, reading = 1, 
  74.         still_reading = 1;
  75.  
  76.    reading = 1;
  77.    while(reading){ /* read file */
  78.       result = fgets(string, 80, rcs_file);
  79.  
  80.       if( strncmp(string, FIRST_LINE, 5) == 0){
  81.          result  = fgets(second_string, 80, rcs_file);
  82.          new_rev = atoi(second_string);
  83.  
  84.          if(rev == new_rev){
  85.             still_reading = 1;
  86.  
  87.             while(still_reading){
  88.                found_it = 1;
  89.                result   = fgets(string, 80, rcs_file);
  90.                if( strncmp(string, FIRST_LINE, 5) == 0){
  91.                   fputs(string, xxx_file);
  92.                   still_reading = 0;
  93.                   found_it      = 1;
  94.                }  /* ends if FIRST_LINE*/
  95.                if(result == '\0') still_reading = 0;
  96.             }  /* ends while still_reading */
  97.  
  98.          }  /* ends if rev == new_rev */
  99.          else{ /* else rev != new_rev */
  100.             fputs(string, xxx_file);
  101.             fputs(second_string, xxx_file);
  102.          }
  103.  
  104.       }  /* ends if FIRST_LINE */
  105.       else /* not FIRST_LINE so fputs it out */
  106.          fputs(string, xxx_file);
  107.  
  108.       if(result == '\0') reading = 0;
  109.    } /* ends while reading */
  110.  
  111.    if(found_it == 0){
  112.       printf("\n\nprunerev>> Did not find the"
  113.         " desired revision\n");
  114.       fclose(rcs_file);
  115.       exit(-5);
  116.    }
  117.  
  118. }  /* ends copy_wanted_revs_to_temp_file */
  119.  
  120. /*
  121.          print_warning()
  122. */
  123.  
  124. print_warning()
  125. {
  126.    char *string;
  127.    printf("\n"
  128.    "\nWARNING: If you continue, you will delete part of"
  129.    "\n         your RCS file.  You will never be able to"
  130.    "\n         retrieve those deleted revisions."
  131.    "\n"
  132.    "\n         Do you want to continue (y/n) ? _\b");
  133.    fgets(string, 10, stdin);
  134.    if(string[0] == 'y'  || string[0] == 'Y')
  135.       return(1);
  136.    else
  137.       return(0);
  138. }
  139.  
  140.  
  141.