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

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