home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 389.lha / dme_v1.40 / src / filereq.c < prev    next >
C/C++ Source or Header  |  1990-07-03  |  2KB  |  128 lines

  1.  
  2. /*
  3.  *  ARP interface (ARPLOAD, ARPSAVE)
  4.  */
  5.  
  6. #include "defs.h"
  7. #include <libraries/dos.h>
  8.  
  9. void fixfile();
  10. void splitpath();
  11.  
  12. void
  13. do_arpinsfile()
  14. {
  15.     char file[64];
  16.     char dir[64];
  17.     BPTR oldlock = CurrentDir((BPTR)Ep->dirlock);
  18.  
  19.     splitpath(Ep->Name, file, dir);
  20.     if (arpreq("INSERTFILE", file, dir, NULL)) {
  21.     CurrentDir(oldlock);
  22.     fixfile(file, dir);
  23.     av[0] = (ubyte *)"i";
  24.     av[1] = (ubyte *)file;
  25.     do_edit();
  26.     return;
  27.     }
  28.     CurrentDir(oldlock);
  29. }
  30.  
  31. void
  32. do_arpload()
  33. {
  34.     char file[64];
  35.     char dir[64];
  36.     BPTR oldlock = CurrentDir((BPTR)Ep->dirlock);
  37.  
  38.     splitpath(Ep->Name, file, dir);
  39.     if (arpreq("NEWFILE", file, dir, NULL)) {
  40.     BPTR newlock;
  41.     if (newlock = Lock(dir, SHARED_LOCK)) {
  42.         UnLock(CurrentDir(oldlock));
  43.         Ep->dirlock = (long)newlock;
  44.         /*
  45.         fixfile(file,dir);
  46.         */
  47.         av[0] = (ubyte *)"n";
  48.         av[1] = (ubyte *)file;
  49.         do_edit();
  50.         return;
  51.     }
  52.     }
  53.     CurrentDir(oldlock);
  54. }
  55.  
  56. void
  57. do_arpsave()
  58. {
  59.     char file[64];
  60.     char dir[64];
  61.     BPTR oldlock = CurrentDir((BPTR)Ep->dirlock);
  62.  
  63.     splitpath(Ep->Name, file, dir);
  64.     if (arpreq("SAVEAS", file, dir, NULL)) {
  65.     CurrentDir(oldlock);
  66.     fixfile(file,dir);
  67.     av[1] = (ubyte *)file;
  68.     do_saveas();
  69.     } else {
  70.     CurrentDir(oldlock);
  71.     }
  72. }
  73.  
  74. void
  75. fixfile(file,dir)
  76. char *file,*dir;
  77. {
  78.     char *ptr;
  79.     short len = strlen(dir);
  80.     char hasdev = 0;
  81.  
  82.     /*
  83.      *    do we need to add a slash to the directory spec?
  84.      */
  85.  
  86.     if (len && dir[len-1] != '/' && dir[len-1] != ':') {
  87.     dir[len++] = '/';
  88.     dir[len] = 0;
  89.     }
  90.  
  91.     /*
  92.      *    Is file spec really a full path spec?
  93.      */
  94.  
  95.     for (ptr = file; *ptr; ++ptr) {
  96.     if (ptr[0] == ':')
  97.         hasdev = 1;
  98.     }
  99.     if (!hasdev) {
  100.     movmem(file,file+len,strlen(file)+1);
  101.     movmem(dir,file,len);
  102.     }
  103. }
  104.  
  105. /*
  106.  *  Search backwards for first ':' or '/' and split path there.
  107.  *  This subroutine may appear to be coded incorrectly to a novice
  108.  *  programmer.  It isn't [now].
  109.  */
  110.  
  111. void
  112. splitpath(name, file, dir)
  113. char *name;
  114. char *file, *dir;
  115. {
  116.     short i;
  117.  
  118.     for (i = strlen(name); i >= 0; --i) {       /* was (incorrectly) "i > 0" */
  119.     if (name[i] == ':' || name[i] == '/')
  120.         break;
  121.     }
  122.     ++i;
  123.     strcpy(file, name + i);
  124.     movmem(name, dir, i);
  125.     dir[i] = 0;
  126. }
  127.  
  128.