[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.11

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