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