home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / cpm68k / arc68k.arc / ARCDEL.C < prev    next >
Encoding:
Text File  |  1987-11-27  |  2.9 KB  |  87 lines

  1.  
  2. /*
  3.  *      arcdel.c        1.1
  4.  *
  5.  *      Author: Thom Henderson
  6.  *      Original System V port: Mike Stump
  7.  *      Enhancements, Bug fixes, and cleanup: Chris Seaman
  8.  *      Date: Fri Mar 20 09:57:02 1987
  9.  *      Last Mod.       3/21/87
  10.  *
  11.  */
  12.  
  13. /*
  14.  * ARC - Archive utility - ARCDEL
  15.  * 
  16.  * Version 2.09, created on 02/03/86 at 22:53:27
  17.  * 
  18.  * (C) COPYRIGHT 1985 by System Enhancement Associates; ALL RIGHTS RESERVED
  19.  * 
  20.  *     Description:
  21.  *          This file contains the routines used to delete entries
  22.  *          in an archive.
  23.  */
  24.  
  25. #include "arc.h"
  26.  
  27. INT delarc(argc,argv)                  /* remove files from archive */
  28. INT argc;                              /* number of arguments */
  29. char *argv[];                          /* pointers to arguments */
  30. {
  31.     struct heads hdr;                  /* header data */
  32.     INT del;                           /* true to delete a file */
  33.     INT did[MAXARG];                   /* true when argument used */
  34.     INT n;                             /* index */
  35.  
  36.     if (!argc)                         /* she must specify which */
  37.         abort("You must tell me which files to delete!");
  38.  
  39.     for (n=0; n<argc; n++)             /* for each argument */
  40.         did[n] = 0;                    /* reset usage flag */
  41.     rempath(argc,argv);                /* strip off paths */
  42.  
  43.     openarc(1);                        /* open archive for changes */
  44.  
  45.     while (readhdr(&hdr,arc))          /* while more entries in archive */
  46.     {
  47.         del = 0;                       /* reset delete flag */
  48.         for (n=0; n<argc; n++)         /* for each template given */
  49.         {
  50.             if (match(hdr.name,argv[n]))
  51.             {
  52.                 del = 1;               /* turn on delete flag */
  53.                 did[n] = 1;            /* turn on usage flag */
  54.                 break;                 /* stop looking */
  55.             }
  56.         }
  57.  
  58.         if (del)                       /* skip over unwanted files */
  59.         {
  60.             fseek(arc,hdr.size,1);
  61.             if (note)
  62.                 printf("Deleting file: %s\n",hdr.name);
  63.         }
  64.         else                           /* else copy over file data */
  65.         {
  66.             writehdr(&hdr,new);        /* write out header and file */
  67.             filecopy(arc,new,hdr.size);
  68.         }
  69.     }
  70.  
  71.     hdrver = 0;                        /* special end of archive type */
  72.     writehdr(&hdr,new);                /* write out archive end marker */
  73.     closearc(1);                       /* close archive after changes */
  74.  
  75.     if (note)
  76.     {
  77.         for (n=0; n<argc; n++)         /* report unused arguments */
  78.         {
  79.             if (!did[n])
  80.             {
  81.                 printf("File not found: %s\n",argv[n]);
  82.                 nerrs++;
  83.             }
  84.         }
  85.     }
  86. }
  87.