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 / mvupwin.c < prev    next >
C/C++ Source or Header  |  1992-03-11  |  2KB  |  89 lines

  1. #include    "stdio.h"
  2. #include    "ed.h"
  3.  
  4. /*
  5.  * Move the current window up by "arg"
  6.  * lines. Recompute the new top line of the window.
  7.  * Look to see if "." is still on the screen. If it is,
  8.  * you win. If it isn't, then move "." to center it
  9.  * in the new framing of the window (this command does
  10.  * not really move "."; it moves the frame). Bound
  11.  * to "C-X C-P".
  12.  */
  13. ovmain(x, f, n)
  14. register int    n;
  15. {
  16.     register LINE    *lp;
  17.     register int    i;
  18.     if (x == 1) { n = -n; x = 0; }
  19.     if (x == 3) return ( prevwind( f, n ));
  20.     if (x == 2) return ( nextwind( f, n ));
  21.     lp = curwp->w_linep;
  22.     if (n < 0)
  23.     {    while (n++ && lp!=curbp->b_linep)
  24.             lp = lforw(lp);
  25.     }
  26.     else
  27.     {    while (n-- && lback(lp)!=curbp->b_linep)
  28.             lp = lback(lp);
  29.     }
  30.     curwp->w_linep = lp;
  31.     curwp->w_flag |= WFHARD;        /* Mode line is OK.    */
  32.     for (i=0; i<curwp->w_ntrows; ++i)
  33.     {    if (lp == curwp->w_dotp)
  34.             return (TRUE);
  35.         if (lp == curbp->b_linep)
  36.             break;
  37.         lp = lforw(lp);
  38.     }
  39.     lp = curwp->w_linep;
  40.     i  = curwp->w_ntrows/2;
  41.     while (i-- && lp!=curbp->b_linep)
  42.         lp = lforw(lp);
  43.     curwp->w_dotp  = lp;
  44.     curwp->w_doto  = 0;
  45.     return (TRUE);
  46. }
  47.  
  48. /*
  49.  * The command make the next
  50.  * window (next => down the screen)
  51.  * the current window. There are no real
  52.  * errors, although the command does
  53.  * nothing if there is only 1 window on
  54.  * the screen. Bound to "C-X C-N".
  55.  */
  56. nextwind(f, n)
  57. {
  58.     register WINDOW    *wp;
  59.  
  60.     if ((wp=curwp->w_wndp) == NULL)
  61.         wp = wheadp;
  62.     curwp = wp;
  63.     curbp = wp->w_bufp;
  64.     return (TRUE);
  65. }
  66.  
  67. /*
  68.  * This command makes the previous
  69.  * window (previous => up the screen) the
  70.  * current window. There arn't any errors,
  71.  * although the command does not do a lot
  72.  * if there is 1 window.
  73.  */
  74. prevwind(f, n)
  75. {
  76.     register WINDOW    *wp1;
  77.     register WINDOW    *wp2;
  78.  
  79.     wp1 = wheadp;
  80.     wp2 = curwp;
  81.     if (wp1 == wp2)
  82.         wp2 = NULL;
  83.     while (wp1->w_wndp != wp2)
  84.         wp1 = wp1->w_wndp;
  85.     curwp = wp1;
  86.     curbp = wp1->w_bufp;
  87.     return (TRUE);
  88. }
  89.