home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / emacs / src / usebuf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-07  |  1.5 KB  |  59 lines

  1. #include    "stdio.h"
  2. #include    "ed.h"
  3.  
  4. /*
  5.  * Attach a buffer to a window. The
  6.  * values of dot and mark come from the buffer
  7.  * if the use count is 0. Otherwise, they come
  8.  * from some other window.
  9.  */
  10. ovmain( x, f, n)
  11. {
  12.     register BUFFER    *bp;
  13.     register WINDOW    *wp;
  14.     register int    s;
  15.     char        bufn[NBUFN];
  16.  
  17.     if ( x )
  18.     {    /* "next buffer" */
  19.         bp = curbp->b_bufp;
  20.         if ( bp == NULL ) bp = bheadp;
  21.     }
  22.     else
  23.     {    /* normal usebuffer() routine. */
  24.         if ((s=mlreply("Use buffer: ", bufn, NBUFN)) != TRUE)
  25.             return (s);
  26.         if ((bp=bfind(bufn, TRUE, 0)) == NULL)
  27.             return (FALSE);
  28.     }
  29.     if (--curbp->b_nwnd == 0) {        /* Last use.        */
  30.         curbp->b_dotp  = curwp->w_dotp;
  31.         curbp->b_doto  = curwp->w_doto;
  32.         curbp->b_markp = curwp->w_markp;
  33.         curbp->b_marko = curwp->w_marko;
  34.     }
  35.     curbp = bp;                /* Switch.        */
  36.     curwp->w_bufp  = bp;
  37.     curwp->w_linep = bp->b_linep;        /* For macros, ignored.    */
  38.     curwp->w_flag |= WFMODE|WFFORCE|WFHARD;    /* Quite nasty.        */
  39.     if (bp->b_nwnd++ == 0) {        /* First use.        */
  40.         curwp->w_dotp  = bp->b_dotp;
  41.         curwp->w_doto  = bp->b_doto;
  42.         curwp->w_markp = bp->b_markp;
  43.         curwp->w_marko = bp->b_marko;
  44.         return (TRUE);
  45.     }
  46.     wp = wheadp;                /* Look for old.    */
  47.     while (wp != NULL) {
  48.         if (wp!=curwp && wp->w_bufp==bp) {
  49.             curwp->w_dotp  = wp->w_dotp;
  50.             curwp->w_doto  = wp->w_doto;
  51.             curwp->w_markp = wp->w_markp;
  52.             curwp->w_marko = wp->w_marko;
  53.             break;
  54.         }
  55.         wp = wp->w_wndp;
  56.     }
  57.     return (TRUE);
  58. }
  59.