home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 6 File / 06-File.zip / rencse.zip / rencase.c next >
C/C++ Source or Header  |  1994-09-11  |  3KB  |  130 lines

  1. /*
  2.  * rencase
  3.  *
  4.  * renames files to same name but different case (all upper, all lower or
  5.  * mixed case).
  6.  *
  7.  * released to public domain by M. Kimes 04/21/94
  8.  */
  9.  
  10. #define INCL_DOS
  11.  
  12. #include <os2.h>
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <ctype.h>
  17.  
  18. #ifndef _tolower
  19.   #define _tolower( c )  ( (c) + 'a' - 'A' )
  20. #endif
  21. #ifndef _toupper
  22.   #define _toupper( c )  ( (c) + 'A' - 'a' )
  23. #endif
  24.  
  25.  
  26. void rename_mask (char *mask,int lowercase,int silence) {
  27.  
  28.   FILEFINDBUF3   f;
  29.   HDIR           hdir = HDIR_CREATE;
  30.   ULONG          nm = 1L;
  31.   CHAR           dir[CCHMAXPATH],casecopy[CCHMAXPATH];
  32.   register CHAR *p,*enddir;
  33.   APIRET         rc;
  34.  
  35.   if(DosQueryPathInfo(mask,FIL_QUERYFULLNAME,dir,sizeof(dir)))
  36.     strcpy(dir,mask);
  37.   enddir = dir;
  38.   while(*enddir) {
  39.     if(*enddir == '/')
  40.       *enddir = '\\';
  41.     enddir++;
  42.   }
  43.   enddir = strrchr(dir,'\\');
  44.   if(enddir == dir || *(enddir - 1) != ':')
  45.     *enddir = '\\';
  46.   enddir++;
  47.   if(!DosFindFirst(mask,&hdir,FILE_NORMAL | FILE_ARCHIVED | FILE_DIRECTORY |
  48.                    FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM,&f,sizeof(f),
  49.                    &nm,FIL_STANDARD)) {
  50.     do {
  51.       if(*f.achName != '.' || !(f.attrFile & FILE_DIRECTORY)) {
  52.         strcpy(enddir,f.achName);
  53.         strcpy(casecopy,dir);
  54.         p = f.achName;
  55.         while(*p) {
  56.           if(lowercase == 1) {
  57.             if(*p > 'A' - 1 && *p < 'Z' + 1)
  58.               *p = _tolower(*p);
  59.           }
  60.           else if(lowercase == 2) {
  61.             if(p == f.achName || *(p - 1) == ' ' || *(p - 1) == '.' ||
  62.                *(p - 1) == '_') {
  63.               if(*p > 'a' - 1 && *p < 'z' + 1)
  64.                 *p = _toupper(*p);
  65.             }
  66.             else {
  67.               if(*p > 'A' - 1 && *p < 'Z' + 1)
  68.                 *p = _tolower(*p);
  69.             }
  70.           }
  71.           else {
  72.             if(*p > 'a' - 1 && *p < 'z' + 1)
  73.               *p = _toupper(*p);
  74.           }
  75.           p++;
  76.         }
  77.         strcpy(casecopy + (enddir - dir),f.achName);
  78.         if(!silence)
  79.           printf("\"%s\" -=> \"%s\"",dir,casecopy);
  80.         rc = DosMove(dir,casecopy);
  81.         if(rc && !silence)
  82.           printf("  **Failed (SYS%04d)",rc);
  83.         if(!silence)
  84.           printf("\n");
  85.       }
  86.     } while(nm && !DosFindNext(hdir,&f,sizeof(f),&nm));
  87.     DosFindClose(hdir);
  88.   }
  89. }
  90.  
  91.  
  92. int main (int argc,char *argv[]) {
  93.  
  94.   int   lowercase,silence = 0,x;
  95.   char *p;
  96.  
  97.   if(argc < 3) {
  98. Help:
  99.     printf("\nusage:  rencase <-u -l or -m> <mask> [<mask>...]\n"
  100.            "renames file system objects matching <mask>s to same name but\n"
  101.            "all upper (-u), lower (-l) or \"mixed\" (-m) case.\n"
  102.            " Hector wuz here.\n");
  103.     return 1;
  104.   }
  105.   else {
  106.     p = argv[1];
  107.     if(*p == '-' || *p == '/')
  108.       p++;
  109.     if(*p == 'u' || *p == 'U') {
  110.       lowercase = 0;
  111.       if(*p == 'U')
  112.         silence = 1;
  113.     }
  114.     else if(*p == 'l' || *p == 'L') {
  115.       lowercase = 1;
  116.       if(*p == 'L')
  117.         silence = 1;
  118.     }
  119.     else if(*p == 'm' || *p == 'M') {
  120.       lowercase = 2;
  121.       if(*p == 'M')
  122.         silence = 1;
  123.     }
  124.     else
  125.       goto Help;
  126.     for(x = 2;x < argc;x++)
  127.       rename_mask(argv[x],lowercase,silence);
  128.   }
  129. }
  130.