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