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

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