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

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