home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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);
- }