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