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 / growwin.c < prev    next >
C/C++ Source or Header  |  1992-03-11  |  1KB  |  52 lines

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