home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-386-Vol-2of3.iso / c / csh4.zip / MV.C < prev    next >
C/C++ Source or Header  |  1985-09-04  |  2KB  |  85 lines

  1. #include <stdio.h>
  2. extern char *me;
  3. extern char *fname_part();
  4. /* mv.c - implements a version of UNIX mv */
  5. mv(argc,argv)
  6.     int argc;
  7.     register char *argv[];
  8. {
  9.     static char *usage = "mv : usage mv file1 [file2 . . fileN] target\r\n";
  10.     static char target_name[128];
  11.     char target[128],*fname_part();
  12.     register int i;
  13.     me = argv[0];
  14.     if (argc < 3)
  15.     {
  16.         write(2,usage,strlen(usage));
  17.         return(-1);
  18.     }
  19.     strcpy(target, argv[argc-1]);
  20.     /* kill trailing backslashes */
  21.     if (target[i = strlen(target) - 1] == '\\')
  22.         target[i] = '\0';
  23.     if (argc == 3)
  24.     {
  25.         /* if the target doesn't exist and it's not a directory then rename */
  26.         if (access(target,0) && !dirp(target))
  27.         {
  28.             fprintf(stderr,"moving %s to %s\n",argv[1],argv[2]);
  29.             rename(argv[1],argv[2]);
  30.         }
  31.         else
  32.         {
  33.             /* if the target is a directory copy to same name that directory */
  34.             if (dirp(target))
  35.             {
  36.                 int len;
  37.                 strcpy(target_name,target);
  38.                 if (target_name[(len = strlen(target_name))-1] != '\\')
  39.                 {
  40.                     target_name[len = strlen(target_name)] = '\\';
  41.                     target_name[len+1] = '\0';
  42.                 }
  43.                 strcat(target_name,fname_part(argv[1]));
  44.                 fprintf(stderr,"moving %s to %s\n",argv[1],target_name);
  45.                 filecopy(target_name,argv[1]);
  46.                 unlink(argv[1]);
  47.             }
  48.             else
  49.             {
  50.                 fprintf(stderr,"moving %s to %s\n",argv[1],target);
  51.                 filecopy(target,argv[1]);
  52.                 unlink(argv[1]);
  53.             }
  54.         }
  55.         return(0);
  56.     }
  57.     /* handle special case of a drive designation */
  58.     if (target[(i = strlen(target))-1] != ':')
  59.         if (!dirp(target))
  60.         {
  61.             fprintf(stderr,"mv : %s isn't a directory\n",target);
  62.             return(-1);
  63.         }
  64.     for (i = 1; i < argc-1; i++)
  65.     {
  66.         int len;
  67.         strcpy(target_name,target);
  68.         if (target_name[(len = strlen(target_name))-1] != '\\')
  69.         {
  70.             target_name[len = strlen(target_name)] = '\\';
  71.             target_name[len+1] = '\0';
  72.         }
  73.         strcat(target_name,fname_part(argv[i]));
  74.         if (!filep(argv[i]))
  75.         {
  76.             fprintf(stderr,"mv : %s isn't a file\n",argv[i]);
  77.             continue;
  78.         }
  79.         fprintf(stderr,"moving %s to %s\n",argv[i],target_name);
  80.         filecopy(target_name,argv[i]);
  81.         unlink(argv[i]);
  82.     }
  83.     return 0;
  84. }
  85.