version 1.53, 2006/04/06 05:28:17 |
version 1.54, 2006/05/02 17:10:25 |
|
|
* File commands. |
* File commands. |
*/ |
*/ |
|
|
#include "def.h" |
|
|
|
#include <libgen.h> |
#include <libgen.h> |
|
|
|
#include "def.h" |
|
|
/* |
/* |
* Insert a file into the current buffer. Real easy - just call the |
* Insert a file into the current buffer. Real easy - just call the |
* insertfile routine with the file name. |
* insertfile routine with the file name. |
|
|
{ |
{ |
char fname[NFILEN], *bufp, *adjf; |
char fname[NFILEN], *bufp, *adjf; |
|
|
bufp = eread("Insert file: ", fname, NFILEN, EFNEW | EFCR | EFFILE); |
if (getbufcwd(fname, sizeof(fname)) != TRUE) |
|
fname[0] = '\0'; |
|
bufp = eread("Insert file: ", fname, NFILEN, |
|
EFNEW | EFCR | EFFILE | EFDEF); |
if (bufp == NULL) |
if (bufp == NULL) |
return (ABORT); |
return (ABORT); |
else if (bufp[0] == '\0') |
else if (bufp[0] == '\0') |
|
|
filevisit(int f, int n) |
filevisit(int f, int n) |
{ |
{ |
struct buffer *bp; |
struct buffer *bp; |
char fname[NFILEN], *bufp, *adjf, *slash; |
char fname[NFILEN], *bufp, *adjf; |
int status; |
int status; |
|
|
if (curbp->b_fname && curbp->b_fname[0] != '\0') { |
if (getbufcwd(fname, sizeof(fname)) != TRUE) |
if (strlcpy(fname, curbp->b_fname, sizeof(fname)) >= sizeof(fname)) |
|
return (FALSE); |
|
if ((slash = strrchr(fname, '/')) != NULL) { |
|
*(slash + 1) = '\0'; |
|
} |
|
} |
|
else |
|
fname[0] = '\0'; |
fname[0] = '\0'; |
|
|
bufp = eread("Find file: ", fname, NFILEN, |
bufp = eread("Find file: ", fname, NFILEN, |
EFNEW | EFCR | EFFILE | EFDEF); |
EFNEW | EFCR | EFFILE | EFDEF); |
if (bufp == NULL) |
if (bufp == NULL) |
|
|
filevisitalt(int f, int n) |
filevisitalt(int f, int n) |
{ |
{ |
struct buffer *bp; |
struct buffer *bp; |
char fname[NFILEN], *bufp, *adjf, *slash; |
char fname[NFILEN], *bufp, *adjf; |
int status; |
int status; |
|
|
if (curbp->b_fname && curbp->b_fname[0] != '\0') { |
if (getbufcwd(fname, sizeof(fname)) != TRUE) |
if (strlcpy(fname, curbp->b_fname, sizeof(fname)) >= sizeof(fname)) |
|
return (FALSE); |
|
if ((slash = strrchr(fname, '/')) != NULL) { |
|
*(slash + 1) = '\0'; |
|
} |
|
} else |
|
fname[0] = '\0'; |
fname[0] = '\0'; |
|
|
bufp = eread("Find alternate file: ", fname, NFILEN, |
bufp = eread("Find alternate file: ", fname, NFILEN, |
EFNEW | EFCR | EFFILE | EFDEF); |
EFNEW | EFCR | EFFILE | EFDEF); |
if (bufp == NULL) |
if (bufp == NULL) |
|
|
char fname[NFILEN], *adjf, *bufp; |
char fname[NFILEN], *adjf, *bufp; |
int status; |
int status; |
|
|
|
if (getbufcwd(fname, sizeof(fname)) != TRUE) |
|
fname[0] = '\0'; |
if ((bufp = eread("Find file in other window: ", fname, NFILEN, |
if ((bufp = eread("Find file in other window: ", fname, NFILEN, |
EFNEW | EFCR | EFFILE)) == NULL) |
EFNEW | EFCR | EFFILE | EFDEF)) == NULL) |
return (ABORT); |
return (ABORT); |
else if (bufp[0] == '\0') |
else if (bufp[0] == '\0') |
return (FALSE); |
return (FALSE); |
|
|
return (bp); |
return (bp); |
} |
} |
/* Not found. Create a new one, adjusting name first */ |
/* Not found. Create a new one, adjusting name first */ |
if (baugname(bname, fname, sizeof(bname)) == FALSE) |
if (augbname(bname, fname, sizeof(bname)) == FALSE) |
return (NULL); |
return (NULL); |
|
|
bp = bfind(bname, TRUE); |
bp = bfind(bname, TRUE); |
|
|
|
|
/* cheap */ |
/* cheap */ |
bp = curbp; |
bp = curbp; |
if (newname != NULL) |
if (newname != NULL) { |
(void)strlcpy(bp->b_fname, newname, sizeof bp->b_fname); |
(void)strlcpy(bp->b_fname, newname, sizeof(bp->b_fname)); |
|
(void)strlcpy(bp->b_cwd, dirname(newname), |
|
sizeof(bp->b_cwd)); |
|
(void)strlcat(bp->b_cwd, "/", sizeof(bp->b_cwd)); |
|
} |
|
|
/* hard file open */ |
/* hard file open */ |
if ((s = ffropen(fname, (replacebuf == TRUE) ? bp : NULL)) == FIOERR) |
if ((s = ffropen(fname, (replacebuf == TRUE) ? bp : NULL)) == FIOERR) |
|
|
undo_enable(x); |
undo_enable(x); |
curbp = bp; |
curbp = bp; |
return (showbuffer(bp, curwp, WFHARD | WFMODE)); |
return (showbuffer(bp, curwp, WFHARD | WFMODE)); |
|
} else { |
|
(void)strlcpy(bp->b_cwd, dirname(fname), sizeof(bp->b_cwd)); |
|
(void)strlcat(bp->b_cwd, "/", sizeof(bp->b_cwd)); |
} |
} |
opos = curwp->w_doto; |
opos = curwp->w_doto; |
|
|
|
|
char fname[NFILEN], bn[NBUFN]; |
char fname[NFILEN], bn[NBUFN]; |
char *adjfname, *bufp; |
char *adjfname, *bufp; |
|
|
|
if (getbufcwd(fname, sizeof(fname)) != TRUE) |
|
fname[0] = '\0'; |
if ((bufp = eread("Write file: ", fname, NFILEN, |
if ((bufp = eread("Write file: ", fname, NFILEN, |
EFNEW | EFCR | EFFILE)) == NULL) |
EFDEF | EFNEW | EFCR | EFFILE)) == NULL) |
return (ABORT); |
return (ABORT); |
else if (bufp[0] == '\0') |
else if (bufp[0] == '\0') |
return (FALSE); |
return (FALSE); |
|
|
bzero(&curbp->b_fi, sizeof(curbp->b_fi)); |
bzero(&curbp->b_fi, sizeof(curbp->b_fi)); |
if ((s = writeout(curbp, adjfname)) == TRUE) { |
if ((s = writeout(curbp, adjfname)) == TRUE) { |
(void)strlcpy(curbp->b_fname, adjfname, sizeof(curbp->b_fname)); |
(void)strlcpy(curbp->b_fname, adjfname, sizeof(curbp->b_fname)); |
|
if (getbufcwd(curbp->b_cwd, sizeof(curbp->b_cwd)) != TRUE) |
|
(void)strlcpy(curbp->b_cwd, "/", sizeof(curbp->b_cwd)); |
free(curbp->b_bname); |
free(curbp->b_bname); |
if (baugname(bn, basename(curbp->b_fname), sizeof(bn)) |
if (augbname(bn, basename(curbp->b_fname), sizeof(bn)) |
== FALSE) |
== FALSE) |
return (FALSE); |
return (FALSE); |
if ((curbp->b_bname = strdup(bn)) == NULL) |
if ((curbp->b_bname = strdup(bn)) == NULL) |