home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d9xx / d996 / aren.lha / Aren / aren.c < prev    next >
C/C++ Source or Header  |  1994-04-05  |  3KB  |  156 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define ShowError(a) ShowErrorFunc(__LINE__,a)
  6. extern int errno;
  7.  
  8. char *__ver = "$VER: Aren 1.2$";
  9.  
  10.  
  11. void ShowErrorFunc (int line,char *s);
  12. char *StringUpcase(char *s);
  13.  
  14.  
  15. void ShowErrorFunc(int line,char *s)
  16. {
  17.   fprintf(stderr,"%s: Error on line %d, ",s,line);
  18.   perror("");
  19.   exit(errno);
  20. }
  21.  
  22. void usage(char *s)
  23. {
  24.   fprintf(stderr,"%s by MENDEZ Marc. (%s %s) All right reserved. Copyright 1994\n",s,__DATE__,__TIME__);
  25.   fprintf(stderr,"Usage: %s [-i] oldpattern newpattern file [file...]\n",s);
  26.   exit(1);
  27. }
  28.  
  29. char * basename(char *f)
  30. {
  31.   char *p,*t ;
  32.   
  33.   if ((p=strrchr(f,'/'))==NULL)
  34.     p=strrchr(f,':');
  35.   
  36.   p = (p==NULL ? f : p+1);
  37.   if ((t=(char *)malloc(strlen(p)+1))==NULL)
  38.     ShowError("malloc");
  39.   
  40.   strcpy(t,p);
  41.   return t;
  42. }
  43.  
  44. char * dirname(char *f)
  45. {
  46.   char *p;
  47.   
  48.   if ((p=(char *)malloc(strlen(f)-strlen(basename(f)+1)))==NULL)
  49.     ShowError("malloc");
  50.  
  51.   strncpy(p,f,strlen(f)-strlen(basename(f)));
  52.   p[strlen(f)-strlen(basename(f))]='\0';
  53.   
  54.     
  55.   return p;
  56. }
  57.  
  58.  
  59.  
  60. char *StringUpcase(char *s)
  61. {
  62.   char *t,*d;
  63.  
  64.   if ((t=(char*)strdup(s))==NULL)
  65.     ShowError("strdup");
  66.   d=t;
  67.   
  68.   while(*t)
  69.     {
  70.       *t=toupper(*t);
  71.       t++;
  72.     }
  73.   return d;
  74. }
  75.  
  76. int main(int arc, char *arv[])
  77. {
  78.   int i,j;
  79.   char *OldPattern, *NewPattern;
  80.   char Found=0;            /* Flag. 1 if a filename matches the OldPattern */
  81.   char *NewName;
  82.   int argc;
  83.   char **argv;
  84.   char CaseSensitive=1;
  85.   char *directory;
  86.   
  87.   if (arc <4 || (!strcmp(arv[1],"-i") && arc < 5) )
  88.     usage(arv[0]);
  89.   
  90.   
  91. #ifdef _DCC            /* Compatibility with UNIX. */
  92.   if (expand_args(arc, arv, &argc, &argv)!=0)
  93.     ShowError("expand_args");
  94. #else
  95.   argv=arv;
  96.   argc=arc;
  97. #endif
  98.  
  99.   if (!strcmp(argv[1],"-i"))
  100.     {
  101.       CaseSensitive=0;
  102.       OldPattern=argv[2];
  103.       NewPattern=argv[3];
  104.     }
  105.   else
  106.     {
  107.       OldPattern=argv[1]; 
  108.       NewPattern=argv[2];
  109.     }
  110.   
  111.   
  112.   
  113.   for (i=3;i<argc; i++)
  114.     {
  115.       for(j=0;!Found && j<(strlen(basename(argv[i]))-strlen(OldPattern)+1);j++)
  116.     {
  117.       if (!strncmp((CaseSensitive ? basename(argv[i])+j : StringUpcase(basename(argv[i])+j)),
  118.                (CaseSensitive ? OldPattern : StringUpcase(OldPattern)),
  119.                strlen(OldPattern))
  120.           )      
  121.         {
  122.           Found=1;
  123.           
  124.           if ((NewName = (char*)malloc(strlen(argv[i]) -
  125.                        strlen(OldPattern) +
  126.                        strlen(NewPattern) + 1)) ==
  127.           NULL)
  128.         ShowError("malloc");
  129.  
  130.           directory=dirname(argv[i]);
  131.           strcpy(NewName,directory);
  132.           strncat(NewName,basename(argv[i]),j);
  133.           NewName[j+strlen(directory)]='\0';
  134.                             /* Important. If you don't add a '\0', */
  135.                 /* the 'strcat' function will add the */
  136.                 /* text anywhere, just after the first */
  137.                 /* '\0' it finds. */
  138.           strcat(NewName,NewPattern);
  139.           strcat(NewName,argv[i]+strlen(directory)+j+strlen(OldPattern));
  140.           if (rename(argv[i],NewName)<0)
  141.         {
  142.           fprintf(stderr,"Error while renaming '%s' to '%s':",argv[i],NewName);
  143.           perror("");
  144.         }
  145.           else
  146.         fprintf(stderr,"Renaming '%s' to '%s'\n",argv[i],NewName);
  147.         }
  148.     }
  149.       Found=0;
  150.     }
  151.   
  152.   
  153.   return 0;
  154.   
  155. }
  156.