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

  1. #include    "stdio.h"
  2. #include    "ed.h"
  3.  
  4. /*
  5.  * Shrink the current window.
  6.  * Find the window that gains space. Hack at
  7.  * the window descriptions. Ask the redisplay to
  8.  * do all the hard work. Bound to "C-X C-Z".
  9.  */
  10. ovmain(x, f, n)
  11. {
  12.     register WINDOW    *adjwp;
  13.     register LINE    *lp;
  14.     register int    i;
  15.  
  16.     if (n < 0) { ctrlg(); return (FALSE); }
  17. /*        return (enlargewind(f, -n));*/
  18.  
  19.     if (wheadp->w_wndp == NULL) {
  20.         mlwrite("Only one window");
  21.         return (FALSE);
  22.     }
  23.     if ((adjwp=curwp->w_wndp) == NULL) {
  24.         adjwp = wheadp;
  25.         while (adjwp->w_wndp != curwp)
  26.             adjwp = adjwp->w_wndp;
  27.     }
  28.     if (curwp->w_ntrows <= n) {
  29.         mlwrite("Impossible change");
  30.         return (FALSE);
  31.     }
  32.     if (curwp->w_wndp == adjwp) {        /* Grow below.        */
  33.         lp = adjwp->w_linep;
  34.         for (i=0; i<n && lback(lp)!=adjwp->w_bufp->b_linep; ++i)
  35.             lp = lback(lp);
  36.         adjwp->w_linep  = lp;
  37.         adjwp->w_toprow -= n;
  38.     } else {                /* Grow above.        */
  39.         lp = curwp->w_linep;
  40.         for (i=0; i<n && lp!=curbp->b_linep; ++i)
  41.             lp = lforw(lp);
  42.         curwp->w_linep  = lp;
  43.         curwp->w_toprow += n;
  44.     }
  45.     curwp->w_ntrows -= n;
  46.     adjwp->w_ntrows += n;
  47.     curwp->w_flag |= WFMODE|WFHARD;
  48.     adjwp->w_flag |= WFMODE|WFHARD;
  49.     return (TRUE);
  50. }
  51.