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 >
C/C++ Source or Header  |  1992-03-11  |  2KB  |  88 lines

  1.  /*
  2.  * Buffer management.
  3.  * Some of the functions are internal,
  4.  * and some are actually attached to user
  5.  * keys. Like everyone else, they set hints
  6.  * for the display system.
  7.  */
  8. #include    "stdio.h"
  9. #include    "ed.h"
  10.  
  11. /*
  12.  * Find a buffer, by name. Return a pointer
  13.  * to the BUFFER structure associated with it. If
  14.  * the named buffer is found, but is a TEMP buffer (like
  15.  * the buffer list) conplain. If the buffer is not found
  16.  * and the "cflag" is TRUE, create it. The "bflag" is
  17.  * the settings for the flags in in buffer.
  18.  */
  19. BUFFER    *
  20. bfind(bname, cflag, bflag)
  21. char    *bname;
  22. {
  23.     register BUFFER    *bp;
  24.     register LINE    *lp;
  25.  
  26.     bp = bheadp;
  27.     while (bp != NULL)
  28.     {    if ( ! strcmp( bname, bp->b_bname ))
  29.         {    /* if ((bp->b_flag&BFTEMP) != 0) */
  30.             /* {    mlwrite("Cannot select builtin buffer"); */
  31.             /*    return (NULL); */
  32.             /* } */
  33.             return (bp);
  34.         }
  35.         bp = bp->b_bufp;
  36.     }
  37.     if (cflag != FALSE)
  38.     {    if ((bp=(BUFFER *)malloc(sizeof(BUFFER))) == NULL)
  39.             return (NULL);
  40.         if ((lp=lalloc(0)) == NULL)
  41.         {    free((char *) bp);
  42.             return (NULL);
  43.         }
  44.         bp->b_bufp = bheadp;
  45.         bheadp = bp;
  46.         lp->l_fp =
  47.         lp->l_bp =
  48.         bp->b_dotp  =
  49.         bp->b_linep = lp;
  50. /****        bp->b_doto  = ** malloc() already did this. */
  51. /****        bp->b_markp = */
  52. /****        bp->b_marko = */
  53. /****        bp->b_nwnd  = 0; */
  54.         bp->b_flag  = bflag;
  55.  
  56. /****        strcpy(bp->b_fname, ""); ** malloc() did it. */
  57.         strcpy(bp->b_bname, bname);
  58.     }
  59.     return (bp);
  60. }
  61.  
  62. /*
  63.  * This routine blows away all of the text
  64.  * in a buffer. If the buffer is marked as changed
  65.  * then we ask if it is ok to blow it away; this is
  66.  * to save the user the grief of losing text. The
  67.  * window chain is nearly always wrong if this gets
  68.  * called; the caller must arrange for the updates
  69.  * that are required. Return TRUE if everything
  70.  * looks good.
  71.  */
  72. bclear(bp)
  73. BUFFER    *bp;
  74. {
  75.     register LINE    *lp;
  76.     
  77.     if (( bp->b_flag & ( BFTEMP | BFCHG )) == BFCHG
  78.     && mlyesno("Junk changes") != TRUE) return (0);
  79.     bp->b_flag  &= ~BFCHG;            /* Not changed        */
  80.     while ((lp=lforw(bp->b_linep)) != bp->b_linep)
  81.         lfree(lp);
  82.     bp->b_dotp  = bp->b_linep;        /* Fix "."        */
  83.     bp->b_doto  =
  84.     bp->b_markp =
  85.     bp->b_marko = 0;
  86.     return (TRUE);
  87. }
  88.