home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.update.uu.se
/
ftp.update.uu.se.2014.03.zip
/
ftp.update.uu.se
/
pub
/
rainbow
/
cpm
/
emacs
/
emacssrc.lzh
/
buffer.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-11
|
2KB
|
88 lines
/*
* Buffer management.
* Some of the functions are internal,
* and some are actually attached to user
* keys. Like everyone else, they set hints
* for the display system.
*/
#include "stdio.h"
#include "ed.h"
/*
* Find a buffer, by name. Return a pointer
* to the BUFFER structure associated with it. If
* the named buffer is found, but is a TEMP buffer (like
* the buffer list) conplain. If the buffer is not found
* and the "cflag" is TRUE, create it. The "bflag" is
* the settings for the flags in in buffer.
*/
BUFFER *
bfind(bname, cflag, bflag)
char *bname;
{
register BUFFER *bp;
register LINE *lp;
bp = bheadp;
while (bp != NULL)
{ if ( ! strcmp( bname, bp->b_bname ))
{ /* if ((bp->b_flag&BFTEMP) != 0) */
/* { mlwrite("Cannot select builtin buffer"); */
/* return (NULL); */
/* } */
return (bp);
}
bp = bp->b_bufp;
}
if (cflag != FALSE)
{ if ((bp=(BUFFER *)malloc(sizeof(BUFFER))) == NULL)
return (NULL);
if ((lp=lalloc(0)) == NULL)
{ free((char *) bp);
return (NULL);
}
bp->b_bufp = bheadp;
bheadp = bp;
lp->l_fp =
lp->l_bp =
bp->b_dotp =
bp->b_linep = lp;
/**** bp->b_doto = ** malloc() already did this. */
/**** bp->b_markp = */
/**** bp->b_marko = */
/**** bp->b_nwnd = 0; */
bp->b_flag = bflag;
/**** strcpy(bp->b_fname, ""); ** malloc() did it. */
strcpy(bp->b_bname, bname);
}
return (bp);
}
/*
* This routine blows away all of the text
* in a buffer. If the buffer is marked as changed
* then we ask if it is ok to blow it away; this is
* to save the user the grief of losing text. The
* window chain is nearly always wrong if this gets
* called; the caller must arrange for the updates
* that are required. Return TRUE if everything
* looks good.
*/
bclear(bp)
BUFFER *bp;
{
register LINE *lp;
if (( bp->b_flag & ( BFTEMP | BFCHG )) == BFCHG
&& mlyesno("Junk changes") != TRUE) return (0);
bp->b_flag &= ~BFCHG; /* Not changed */
while ((lp=lforw(bp->b_linep)) != bp->b_linep)
lfree(lp);
bp->b_dotp = bp->b_linep; /* Fix "." */
bp->b_doto =
bp->b_markp =
bp->b_marko = 0;
return (TRUE);
}