home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 206.lha / Flist_v1.2 / Sources / dos.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-12-28  |  4.8 KB  |  250 lines

  1. /* 
  2.     This module contains routines that do things to AmigaDOS. Things
  3.     such as change directory, or parent directory or delete file etc...
  4. */
  5.  
  6. #include "libraries/arpbase.h"
  7. #include "flist.h"
  8.  
  9. struct Window *make_gadget();
  10. extern void refresh();
  11.  
  12. extern struct AnchorPath *ap;
  13. extern struct FileLock *startdir, *lock, *olddir;
  14. extern struct Window *winptr;
  15. extern long (*finfo[MAXDIR])[4];  
  16. extern char (*fname[MAXDIR])[FCHARS];
  17. extern char (*comm[MAXDIR])[FCHARS];
  18. extern char (*fstring[MAXDIR])[LEN_DATSTRING];
  19. extern char (*ftime[MAXDIR])[LEN_DATSTRING];
  20. extern long top, row, line, numfiles, lastsort;
  21. extern char titlestr[80];
  22.  
  23. extern int PathName();
  24. extern struct NewWindow strwin;
  25. extern char strbuf[256];
  26.  
  27. long rename_file(file)
  28. char *file;
  29. {
  30.     char buf[256];
  31.     struct Window *strptr;
  32.  
  33.     strbuf[0] = '\0';
  34.     strptr = make_gadget("Enter string to rename to");
  35.  
  36.     if (strptr == NULL) {
  37.         auto_req("Couldn't open Requestor!");
  38.         return BAD_COMMAND;
  39.     }
  40.  
  41.     drawcur();
  42.  
  43.     wait_for_event(strptr);
  44.  
  45.     blankcur();
  46.  
  47. #ifdef DEBUG
  48.     sprintf(buf,"string gadget is -%s-",strbuf);
  49.     auto_req(buf);
  50. #endif
  51.  
  52.     if (strbuf[0] == '\0')
  53.         return NULL;
  54.  
  55.     if (!Rename(file,strbuf)) {
  56.         auto_req("Couldn't rename file!");
  57.         return 1;
  58.     }
  59.  
  60.     strcpy(&fname[line][0],strbuf);
  61.  
  62.     return NULL;
  63. }
  64.  
  65. long make_dir()
  66. {
  67.     char buf[256];
  68.     long err;
  69.     struct FileLock *newlock;
  70.     struct Window *strptr;
  71.  
  72.     strbuf[0] = '\0';
  73.     strptr = make_gadget("Enter name of Directory ");
  74.  
  75.     if (strptr == NULL) {
  76.         auto_req("Couldn't open Requestor!");
  77.         return BAD_COMMAND;
  78.     }
  79.  
  80.     wait_for_event(strptr);
  81.  
  82.     if (strbuf[0] == '\0')
  83.         return NULL;
  84.  
  85.     newlock = CreateDir(strbuf);
  86.  
  87.     if (newlock == 0) {
  88.         err = IoErr();
  89.         sprintf(buf,"Couldn't Create directory! DOS error %ld",err);
  90.         auto_req(buf);
  91.         return 1;
  92.     } else
  93.         UnLock(newlock);
  94.  
  95.     getdir();
  96.  
  97.     return NULL;
  98. }
  99.  
  100. long changedir(str)
  101. char *str;
  102. {
  103.     char buf[1000], buf1[1000];
  104.     long rc;
  105.     struct FileLock *dummy;
  106.  
  107.     dummy = lock;
  108.     lock = Lock(str,ACCESS_READ);
  109.     if (lock == NULL){
  110.         lock = dummy;
  111.         sprintf(buf,"Can't Lock directory -%s-!",str);
  112.         auto_req(buf);
  113.         return DIR_LOCKED;
  114.     }
  115.  
  116.     strcpy(buf,str);
  117.     TackOn(buf, "*");
  118.  
  119.     rc = FindFirst(buf,ap); /* ARP does all the work getting the directory */
  120.  
  121.     if (rc == NULL){
  122.         Fillarray();    /* fill the arrays with the names and info */
  123.         top = 0;
  124.         row = 0;    
  125.         line = 0;
  126.     }
  127.     else {
  128.         if (rc != ERROR_NO_MORE_ENTRIES){
  129.             sprintf(buf,"Can't find directory -%s- !",str);
  130.             auto_req(buf);
  131.             return BAD_DIR;
  132.         } else
  133.             numfiles = 0;
  134.     }
  135.  
  136.     olddir = CurrentDir(lock);
  137.     
  138.     if (dummy != NULL)
  139.         UnLock(dummy);
  140.  
  141.     return rc;
  142. }
  143.  
  144. /* Go up one directory, saving all the locks */
  145.  
  146. parent()
  147. {
  148.     long rc;
  149.     char buf[1000], buf1[1000];
  150.     struct FileLock *dummy;
  151.  
  152.     if (lock == NULL)   /* if we are at the parent already -> return */
  153.         return;
  154.  
  155.                         /* Also watch for the root of the current volume */
  156.     PathName(lock, buf);
  157.     if (buf[strlen(buf)-1] == ':')
  158.         return;
  159.  
  160.     dummy = ParentDir(lock);
  161.     olddir = CurrentDir(dummy);
  162.  
  163.     if (lock != NULL)
  164.         UnLock(lock);
  165.  
  166.     lock = dummy;
  167.  
  168.     rc = FindFirst("*",ap); 
  169.  
  170.     if (rc == NULL) {
  171.         Fillarray();
  172.         top = 0;
  173.         row = 0;    
  174.         line = 0;
  175.     }
  176.     else 
  177.         auto_req("Can't change to Parent!");
  178. }
  179.  
  180. /* Delete (Kill) a file */
  181.  
  182. long kill(str)
  183. char *str;
  184. {
  185.     long rc,i;
  186.     char buf[1000];
  187.  
  188.     if (strlen(str) == 0 || numfiles == 0)
  189.         return BAD_COMMAND;
  190.  
  191.     rc = DeleteFile(str);
  192.  
  193.     if(rc == NULL) {
  194.         sprintf(buf,"Couldn't delete file %s",str);
  195.         auto_req(buf);
  196.         return BAD_COMMAND;
  197.     } else
  198.         numfiles--;
  199.         
  200.     for (i = line; i < numfiles;i++) {
  201.         swap(&finfo[i], &finfo[i+1]);
  202.         swap(&fname[i], &fname[i+1]);
  203.         swap(&comm[i], &comm[i+1]);
  204.         swap(&fstring[i], &fstring[i+1]);
  205.         swap(&ftime[i], &ftime[i+1]);
  206.     }
  207.     
  208.     return rc;
  209. }
  210.  
  211. /* 
  212.     Re-get the current directory... This is good for when the user renames
  213.     a file and wants to see the change in the list.
  214. */
  215.  
  216. getdir()
  217. {
  218.     long rc,i;
  219.     char buf[1000];
  220.  
  221.     rc = FindFirst("*",ap); 
  222.  
  223.     if (rc == NULL) {
  224.         Fillarray();    /* fill the arrays with the names and info */
  225.         top = 0;
  226.         row = 0;    
  227.         line = 0;
  228.     }
  229.     else {
  230.         if (rc != ERROR_NO_MORE_ENTRIES){
  231.             sprintf(buf,"Can't find current directory!");
  232.             auto_req(buf);
  233.             return BAD_DIR;
  234.         } else
  235.             numfiles = 0;
  236.     }
  237. }
  238.  
  239. /* swap two pointers */
  240.  
  241. swap(ptr1,ptr2)
  242. long *ptr1,*ptr2;
  243. {
  244.     long temp;
  245.     
  246.     temp = *ptr1;
  247.     *ptr1 = *ptr2;
  248.     *ptr2 = temp;
  249. }
  250.