[BACK]Return to dired.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Annotation of src/usr.bin/mg/dired.c, Revision 1.4

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