home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d3xx / d352 / mg.lha / MG / src.LZH / mg / dired.c < prev    next >
C/C++ Source or Header  |  1990-05-23  |  4KB  |  223 lines

  1. /* dired module for mg 2a     */
  2. /* by Robert A. Larson         */
  3.  
  4. #include "no_dired.h"
  5.  
  6. #ifndef NO_DIRED
  7.  
  8. #include "def.h"
  9. #include "line.h"
  10. #include "buffer.h"
  11. #include "window.h"
  12.  
  13. #ifdef    ANSI
  14. #undef EOF
  15. #include <stdio.h>
  16. #include <fcntl.h>
  17. #endif
  18.  
  19. struct buffer  *dired_ PROTO((char *));
  20.  
  21. /* ARGSUSED */
  22. dired(f, n)
  23.     int             f, n;
  24. {
  25.     char            dirname[NFILEN];
  26.     struct buffer  *bp;
  27.  
  28.     dirname[0] = '\0';
  29.     if (eread("Dired: ", dirname, NFILEN, EFNEW | EFCR) == ABORT)
  30.         return ABORT;
  31.     if ((bp = dired_(dirname)) == NULL)
  32.         return FALSE;
  33.     curbp = bp;
  34.     return showbuffer(bp, curwp, WFHARD | WFMODE);
  35. }
  36.  
  37. /* ARGSUSED */
  38. d_otherwindow(f, n)
  39.     int             f, n;
  40. {
  41.     char            dirname[NFILEN];
  42.     struct buffer  *bp;
  43.     struct window  *wp;
  44.  
  45.     dirname[0] = '\0';
  46.     if (eread("Dired other window: ", dirname, NFILEN, EFNEW | EFCR) == ABORT)
  47.         return ABORT;
  48.     if ((bp = dired_(dirname)) == NULL)
  49.         return FALSE;
  50.     if ((wp = popbuf(bp)) == NULL)
  51.         return FALSE;
  52.     curbp = bp;
  53.     curwp = wp;
  54.     return TRUE;
  55. }
  56.  
  57. /* ARGSUSED */
  58. d_del(f, n)
  59.     int             f, n;
  60. {
  61.     if (n < 0)
  62.         return FALSE;
  63.     while (n--) {
  64.         if (llength(curwp->w_dotp) > 0)
  65.             lputc(curwp->w_dotp, 0, 'D');
  66.         if (lforw(curwp->w_dotp) != curbp->b_linep)
  67.             curwp->w_dotp = lforw(curwp->w_dotp);
  68.     }
  69.     curwp->w_flag |= WFEDIT | WFMOVE;
  70.     curwp->w_doto = 0;
  71.     return TRUE;
  72. }
  73.  
  74. /* ARGSUSED */
  75. d_undel(f, n)
  76.     int             f, n;
  77. {
  78.     if (n < 0)
  79.         return d_undelbak(f, -n);
  80.     while (n--) {
  81.         if (llength(curwp->w_dotp) > 0)
  82.             lputc(curwp->w_dotp, 0, ' ');
  83.         if (lforw(curwp->w_dotp) != curbp->b_linep)
  84.             curwp->w_dotp = lforw(curwp->w_dotp);
  85.     }
  86.     curwp->w_flag |= WFEDIT | WFMOVE;
  87.     curwp->w_doto = 0;
  88.     return TRUE;
  89. }
  90.  
  91. /* ARGSUSED */
  92. d_undelbak(f, n)
  93.     int             f, n;
  94. {
  95.     if (n < 0)
  96.         return d_undel(f, -n);
  97.     while (n--) {
  98.         if (llength(curwp->w_dotp) > 0)
  99.             lputc(curwp->w_dotp, 0, ' ');
  100.         if (lback(curwp->w_dotp) != curbp->b_linep)
  101.             curwp->w_dotp = lback(curwp->w_dotp);
  102.     }
  103.     curwp->w_doto = 0;
  104.     curwp->w_flag |= WFEDIT | WFMOVE;
  105.     return TRUE;
  106. }
  107.  
  108. /* ARGSUSED */
  109. d_findfile(f, n)
  110.     int             f, n;
  111. {
  112.     char            fname[NFILEN];
  113.     register struct buffer *bp;
  114.     register int    s;
  115.     struct buffer  *findbuffer();
  116.  
  117.     if ((s = d_makename(curwp->w_dotp, fname)) == ABORT)
  118.         return FALSE;
  119.     if ((bp = (s ? dired_(fname) : findbuffer(fname))) == NULL)
  120.         return FALSE;
  121.     curbp = bp;
  122.     if (showbuffer(bp, curwp, WFHARD) != TRUE)
  123.         return FALSE;
  124.     if (bp->b_fname[0] != 0)
  125.         return TRUE;
  126.     return readin(fname);
  127. }
  128.  
  129. /* ARGSUSED */
  130. d_ffotherwindow(f, n)
  131.     int             f, n;
  132. {
  133.     char            fname[NFILEN];
  134.     register struct buffer *bp;
  135.     register int    s;
  136.     register struct window *wp;
  137.     struct buffer  *findbuffer();
  138.  
  139.     if ((s = d_makename(curwp->w_dotp, fname)) == ABORT)
  140.         return FALSE;
  141.     if ((bp = (s ? dired_(fname) : findbuffer(fname))) == NULL)
  142.         return FALSE;
  143.     if ((wp = popbuf(bp)) == NULL)
  144.         return FALSE;
  145.     curbp = bp;
  146.     curwp = wp;
  147.     if (bp->b_fname[0] != 0)
  148.         return TRUE;    /* never true for dired buffers */
  149.     return readin(fname);
  150. }
  151.  
  152. /* ARGSUSED */
  153. d_expunge(f, n)
  154.     int             f, n;
  155. {
  156.     register struct line *lp, *nlp;
  157.     char            fname[NFILEN];
  158.     VOID            lfree();
  159.  
  160.     for (lp = lforw(curbp->b_linep); lp != curbp->b_linep; lp = nlp) {
  161.         nlp = lforw(lp);
  162.         if (llength(lp) && lgetc(lp, 0) == 'D') {
  163.             switch (d_makename(lp, fname)) {
  164.             case ABORT:
  165.                 ewprintf("Bad line in dired buffer");
  166.                 return FALSE;
  167.             case FALSE:
  168.                 if (unlink(fname)) {
  169.                     ewprintf("Could not delete '%s'", fname);
  170.                     return FALSE;
  171.                 }
  172.                 break;
  173.             case TRUE:
  174.                 if (unlinkdir(fname)) {
  175.                     ewprintf("Could not delete directory '%s'", fname);
  176.                     return FALSE;
  177.                 }
  178.                 break;
  179.             }
  180.             lfree(lp);
  181.             curwp->w_flag |= WFHARD;
  182.         }
  183.     }
  184.     return TRUE;
  185. }
  186.  
  187. /* ARGSUSED */
  188. d_copy(f, n)
  189.     int             f, n;
  190. {
  191.     char            frname[NFILEN], toname[NFILEN];
  192.     int             stat;
  193.  
  194.     if (d_makename(curwp->w_dotp, frname) != FALSE) {
  195.         ewprintf("Not a file");
  196.         return FALSE;
  197.     }
  198.     if ((stat = eread("Copy %s to: ", toname, NFILEN, EFNEW | EFCR, frname))
  199.         != TRUE)
  200.         return stat;
  201.     return copy(frname, toname) >= 0;
  202. }
  203.  
  204. /* ARGSUSED */
  205. d_rename(f, n)
  206.     int             f, n;
  207. {
  208.     char            frname[NFILEN], toname[NFILEN];
  209.     int             stat;
  210.  
  211.     if (d_makename(curwp->w_dotp, frname) != FALSE) {
  212.         ewprintf("Not a file");
  213.         return FALSE;
  214.     }
  215.     if ((stat = eread("Rename %s to: ", toname, NFILEN, EFNEW | EFCR, frname))
  216.         != TRUE)
  217.         return stat;
  218.     return rename(frname, toname) >= 0;
  219. }
  220. #else
  221. #include "nullfile.h"
  222. #endif
  223.