home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / lisp / utils / append.c next >
Encoding:
C/C++ Source or Header  |  1984-01-21  |  1.9 KB  |  94 lines

  1. static char *rcsid =
  2.   "$Header: append.c,v 1.2 84/01/22 04:07:25 sklower Exp $";
  3.   
  4. /*
  5.  * append:  append a tail to a list of roots or prepend a head to a list
  6.  *        of tails. 
  7.  * use:
  8.  *    append tail root1 root2 ... rootn
  9.  * result:
  10.  *    root1tail root2tail ... rootntail
  11.  * or
  12.  *     append -p root tail1 tail2 ... tailn
  13.  *  result:
  14.  *        roottail1 roottail2 ... roottailn
  15.  *
  16.  * or
  17.  *    append -s xtail root1xoldt root2xoldt ...
  18.  *  result:
  19.  *    root1xtail  root2xtail ...
  20.  *   that is, each root is tested for the presence of 'x', the first character
  21.  *   in the tail.  If it is present, then all characters beyond it are thrown
  22.  *   away before merging.  This is useful for things like
  23.  *    append -s .c foo.o bar.o baz.o =>> foo.c bar.c baz.c
  24.  *
  25.  * Useful in Makefiles due to the lack of such facilities in make.
  26.  * 
  27. */
  28. #include <stdio.h>
  29. #include "lconf.h"
  30. #include "config.h"
  31. #if os_unix_ts || os_masscomp
  32. #define rindex strrchr
  33. #endif
  34.  
  35. char buffer[2000];    /* nice and big */
  36. char *rindex();
  37.  
  38.  main(argc,argv)
  39.  char **argv;
  40.  {
  41.      int i, base;
  42.      int prepend = 0,
  43.          append = 0,
  44.      strip = 0;
  45.      char stripchar;
  46.      char *chp;
  47.      
  48.      if(argc <= 2)
  49.      {
  50.      fprintf(stderr,"use: append tail root1 root2 ... rootn\n");
  51.      exit(1);
  52.      }
  53.      if(argv[1][0] == '-')
  54.      {
  55.      switch(argv[1][1])
  56.      {
  57.          case 'p' : prepend = 1;
  58.                  break;
  59.          case 's' : strip = 1;
  60.                  append = 1;
  61.             stripchar = argv[2][0];    /* first char of tail */
  62.             break;
  63.          default:  fprintf(stderr,"append: illegal switch %s\n",argv[1]);
  64.                  exit(1);
  65.      }
  66.      base = 2;
  67.      }
  68.      else {
  69.      append = 1;
  70.      base = 1;
  71.      }
  72.      
  73.      for(i = base +1; i < argc ; i++)
  74.      {
  75.      if(append)
  76.      {
  77.         strcpy(buffer,argv[i]);
  78.         if(strip && (chp = rindex(buffer,stripchar)))
  79.         {
  80.         *chp = '\0';
  81.         }
  82.         strcat(buffer,argv[base]);
  83.      }
  84.      else {
  85.          strcpy(buffer,argv[base]);
  86.          strcat(buffer,argv[i]);
  87.      }
  88.      printf("%s ",buffer);
  89.      }
  90.      printf("\n");
  91.      exit(0);
  92.  }
  93.  
  94.