home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / varie / arename / arename.c next >
Encoding:
C/C++ Source or Header  |  2000-06-14  |  9.3 KB  |  322 lines

  1. ;/* Arename v1.0  Mark Weller (c)2000
  2. ; execute to compile -*- DICE -*-
  3. dcc -o Arename Arename.c
  4. quit
  5. */
  6.  
  7. #include <exec/types.h>
  8. #include <dos/dos.h>
  9. #include <sys/dir.h>
  10. #include <sys/types.h>
  11. #include <sys/stat.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. #define AAH_PROGRAM        "Arename v1.0 - Mark Weller (c)2000"
  16. #define AAH_MAXPATH         255
  17. #define AAH_MAXFILE         31
  18. #define AAH_ON              1
  19. #define AAH_OFF             0
  20. #define AAH_EXT             2
  21.  
  22.  
  23. char *extension_types[] =
  24. {
  25.  "scp","SCP",""
  26. };
  27.  
  28. int  IsFileValid(char *,char *,int);
  29. int  IsDir(char *,char *);
  30. void Usage(char *);
  31.  
  32.  
  33. main(int argc,char *argv[])
  34. {
  35.  
  36.  DIR           *dirp;
  37.  struct direct *dp;
  38.  char          *name;
  39.  
  40.  char full_new[AAH_MAXFILE];
  41.  char full_old[AAH_MAXFILE];
  42.  char scp_path[AAH_MAXPATH];
  43.  char rcp_path[AAH_MAXPATH];
  44.  
  45.  int fname_cnt   = 0;
  46.  int temp_cnt    = 0;
  47.  char *fname     = 0;
  48.  char *exten     = 0;
  49.  char *usr_ext   = 0;
  50.  
  51.  FILE *lren;  /*-rename script   -*/
  52.  FILE *oren;  /*-orig_rename script-*/
  53.  
  54. /*-command line switches-*/
  55.  int v_switch   = AAH_OFF; /*-verbose-*/
  56.  int e_switch   = AAH_OFF; /*- by chosen exstension-*/
  57.  
  58.  full_new[0] = '\0';
  59.  full_old[0] = '\0';
  60.  scp_path[0] = '\0'; /*-undo-*/
  61.  rcp_path[0] = '\0'; /*-rename-*/
  62.  
  63.         switch(argc)
  64.               {
  65.                case 6 :
  66.                case 5 : if(argv[1][0] == '-')
  67.                           {
  68.                              for(temp_cnt = 0;temp_cnt != strlen(argv[1]);temp_cnt++)
  69.                                 {
  70.                                  switch(argv[1][temp_cnt])
  71.                                        {
  72.                                         case '-' : break;
  73.                                         case 'v' : v_switch = AAH_ON; break;
  74.                                         case 'e' : if(argc == 6)
  75.                                                      { e_switch = AAH_ON;
  76.                                                        usr_ext = argv[5];
  77.                                                      }
  78.                                                    else { Usage(NULL); }
  79.  
  80.                                        }
  81.                                 }
  82.  
  83.                            name = argv[2];
  84.                           }
  85.                         else
  86.                           {
  87.                            Usage(NULL);
  88.                           }
  89.                         fname = argv[3];
  90.                         exten = argv[4];
  91.                         break;
  92.                case 4:  name  = argv[1];
  93.                         fname = argv[2];
  94.                         exten = argv[3];
  95.                         break;
  96.                case 1 : Usage(NULL);     break;
  97.               }
  98.  
  99.         /*-open rename file (script)-*/
  100.         sprintf(full_old,"%s",name);
  101.         if(full_old[strlen(full_old) -1] == ':')
  102.            { sprintf(rcp_path,"%sAren%s.scp",name,exten); }
  103.         else { sprintf(rcp_path,"%s/Aren%s.scp",name,exten); }
  104.  
  105.         if(!(lren = fopen(rcp_path,"w")))
  106.           { Usage("ERR: Can not create rename script file ?"); }
  107.  
  108.  
  109.         /*-open undo file (script)-*/
  110.         sprintf(full_old,"%s",name);
  111.         if(full_old[strlen(full_old) -1] == ':')
  112.            { sprintf(scp_path,"%sAund%s.scp",name,exten); }
  113.         else { sprintf(scp_path,"%s/Aund%s.scp",name,exten); }
  114.  
  115.         if(!(oren = fopen(scp_path,"w")))
  116.           { fclose(lren); Usage("ERR: Can not create undo script file ?"); }
  117.         full_old[0] = '\0';
  118.  
  119.          fprintf(lren,";Rename Script Created by Arename - Mark Weller (c)2000\n");
  120.          fprintf(oren,";Undo Script Created by Arename - Mark Weller (c)2000\n");
  121.         /*-open directory-*/
  122.  
  123.         if ((dirp = opendir(name)) == NULL) {
  124.                 Usage("Can't open directory ?");
  125.                 }
  126.  
  127.         if(v_switch == AAH_ON)
  128.           {
  129.            printf("------------------------------------------------\n");
  130.            printf("%s\n",AAH_PROGRAM);
  131.            printf("------------------------------------------------\n");
  132.            printf("Directory             :  %s\n",name);
  133.            if(e_switch == AAH_ON)
  134.               printf("User Extension        :  %s\n",usr_ext);
  135.           }
  136.  
  137.  
  138.         for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
  139.              {
  140.               if(IsDir(name,dp->d_name) == 1)  /*-Not Sub Directory-*/
  141.                 {
  142.                  if(IsFileValid(dp->d_name,usr_ext,e_switch) == 1)
  143.                    {
  144.                     sprintf(full_new,"%s%04d.%s",fname,fname_cnt,exten);
  145.                     fprintf(lren,"rename %s %s\n",dp->d_name,full_new);
  146.                     fprintf(oren,"rename %s %s\n",full_new,dp->d_name);
  147.  
  148.                     if(v_switch == AAH_ON)
  149.                       {
  150.                        printf("%-35.35s -> %-35.35s\n",dp->d_name,full_new);
  151.                       }
  152.                     fname_cnt++;
  153.                    }
  154.                  else
  155.                    {
  156.                     /*-script file-*/
  157.                     if(v_switch == AAH_ON)
  158.                       { printf("%-35.35s  = %-35.35s\n",dp->d_name,"Skipped File Not Valid"); }
  159.                    }
  160.                 }
  161.               else
  162.                 {
  163.                 /*-sub directory-*/
  164.  
  165.                  if(v_switch == AAH_ON)
  166.                    {
  167.                     printf("%-35.35s  = %-35.35s\n",dp->d_name,"Skipped Sub Directory");
  168.                    }
  169.  
  170.                 }
  171.              }
  172.  
  173.         closedir(dirp);
  174.  
  175.         if(v_switch == AAH_ON)
  176.           printf("Rename Script Created : %s\n",rcp_path);
  177.           printf("Undo Script Created   : %s\n",scp_path);
  178.           printf("------------------------------------------------\n");
  179.  
  180.  
  181.         if(lren) fclose(lren);
  182.         if(oren) fclose(lren);
  183.         exit(0);
  184. }
  185.  
  186. void Usage(char *mess)
  187. {
  188.  printf("----------------------------------------\n");
  189.  
  190.  if(mess)
  191.    {
  192.     printf("%s\n",AAH_PROGRAM);
  193.     printf("-----------------------------------------------------------\n");
  194.     printf("mess:%s\n",mess);
  195.     printf("---------------------------------------------------------\n");
  196.    }
  197.  else
  198.    {
  199.     printf("%s\n",AAH_PROGRAM);
  200.     printf("Creates Amiga dos scripts to Rename & Undo files\n");
  201.     printf("-----------------------------------------------------------\n");
  202.     printf("USAGE: Arename <-ve> [directory] [name] [ext] <user ext>\n");
  203.     printf(" switches: -\n");
  204.     printf("            v  = verbose - displays output\n");
  205.     printf("            e  = only files with given extension\n");
  206.     printf("    directory  = containing files to rename\n");
  207.     printf("         name  = new file name \n");
  208.     printf("          ext  = extension for new filename\n");
  209.     printf("     user ext  = only files with this extension (use with -e)\n\n");
  210.     printf("example: Arename -v Work:pics holiday jpg\n");
  211.     printf("  this will rename all files in the chosen");
  212.     printf("  directory to:\n");
  213.     printf("  holiday0000.jpg,holiday0001.jpg,...holiday0023.jpg\n");
  214.     printf("example: Arename -v Work:pics %c%c img\n",0x22,0x22);
  215.     printf("  this will rename all files in the chosen");
  216.     printf("  directory to:\n");
  217.     printf("  0000.img,0001.img,0002.img,0003.img,...0023.img\n");
  218.     printf("example: Arename -v Work:pics caves img jpg\n");
  219.     printf("  this will rename all files in the chosen\n");
  220.     printf("  directory with the extension jpg to:");
  221.     printf("  caves0000.img,...caves0023.img\n");
  222.     printf("-----------------------------------------------------------\n");
  223.     printf("See Arename.readme for more information.\n");
  224.     printf("-----------------------------------------------------------\n");
  225.    }
  226.   exit(0);
  227. }
  228.  
  229.  
  230.  
  231. IsFileValid(char *fname,char *usr_ext,int e_switch)
  232. {
  233.  char temp_name[31];
  234.  char ext_buff[31];
  235.  int name_length = 0;
  236.  int len_cnt = 0;
  237.  int ext_cnt = 0;
  238.  int check = 0;
  239.  int result = 1;
  240.  
  241.    temp_name[0] = '\0';
  242.    ext_buff[0] = '\0';
  243.  
  244.    strcpy(temp_name,fname);
  245.    name_length = strlen(temp_name);
  246.  
  247.    /*--get file extension--*/
  248.    for(len_cnt = 0;len_cnt != name_length;len_cnt++)
  249.       {
  250.        if(temp_name[len_cnt] == '.') /*-extension start-*/
  251.          {
  252.           if(check == 1)   /*-reset because file must 'my.file.???'-*/
  253.             {
  254.              ext_buff[0] = '\0';
  255.              ext_cnt = 0;
  256.             }
  257.           else
  258.             {
  259.              check = 1;
  260.             }
  261.          }
  262.        else
  263.          {
  264.           if(check == 1) /* copy extension */
  265.             {
  266.              ext_buff[ext_cnt] = temp_name[len_cnt];
  267.              ext_cnt++;
  268.             }
  269.          }
  270.       }
  271.     ext_buff[ext_cnt] = '\0';
  272.  
  273.     /*-check invalid extensions array (.scp in this program)-*/
  274.     ext_cnt = 0;
  275.     for(ext_cnt = 0;ext_cnt != AAH_EXT;ext_cnt++)
  276.        {
  277.         if(strcmp(ext_buff,extension_types[ext_cnt]) == 0)
  278.            result = 0;
  279.        }
  280.     /*- user defined extension - if result = 1 not a script (.scp)-*/
  281.     if(result == 1 && e_switch == AAH_ON)
  282.       {
  283.         if(strcmp(ext_buff,usr_ext) == 0)
  284.            result = 1; /*-user defined extension-*/
  285.         else result = 0; /*-invalid another file-*/
  286.       }
  287.  
  288.  return(result);
  289. }
  290.  
  291.  
  292. int IsDir(char *dname,char *fname)
  293. {
  294. struct stat load_stat;
  295. char gfile_buff[255];
  296. int tmp_size = 0;
  297.  
  298.    gfile_buff[0]='\0';
  299.    strcpy(gfile_buff,dname);
  300.    tmp_size = strlen(gfile_buff);
  301.  
  302.    if(gfile_buff[tmp_size - 1]  == ':')
  303.      {
  304.       strcat(gfile_buff,fname);
  305.      }
  306.    else
  307.      {
  308.       strcat(gfile_buff,"/");
  309.       strcat(gfile_buff,fname);
  310.      }
  311.  
  312.    stat(gfile_buff,&load_stat);
  313.  
  314.    if(S_ISDIR(load_stat.st_mode) != 0)
  315.      return(0);
  316.    else
  317.      return(1);
  318. }
  319.  
  320.  
  321.  
  322.