[BACK]Return to window.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Diff for /src/usr.bin/mg/window.c between version 1.11 and 1.12

version 1.11, 2003/05/20 03:08:55 version 1.12, 2003/10/21 22:48:07
Line 6 
Line 6 
   
 #include "def.h"  #include "def.h"
   
   MGWIN *
   new_window(BUFFER *bp)
   {
           MGWIN *wp;
   
           wp = malloc(sizeof(MGWIN));
           if (wp == NULL)
                   return (NULL);
   
           wp->w_bufp = bp;
           wp->w_dotp = NULL;
           wp->w_doto = 0;
           wp->w_markp = NULL;
           wp->w_marko = 0;
           wp->w_flag = 0;
           wp->w_force = 0;
           bp->b_nwnd++;
           LIST_INIT(&wp->w_undo);
           wp->w_undoptr = NULL;
           memset(&wp->w_undopos, 0, sizeof wp->w_undopos);
   
           return (wp);
   }
   
   void
   free_window(MGWIN *wp)
   {
           struct undo_rec *rec, *next;
   
           rec = LIST_FIRST(&wp->w_undo);
           while (rec != NULL) {
                   next = LIST_NEXT(rec, next);
                   free_undo_record(rec);
                   rec = next;
           }
           free(wp);
   }
   
 /*  /*
  * Reposition dot in the current window to line "n".  If the argument is   * Reposition dot in the current window to line "n".  If the argument is
  * positive, it is that line.  If it is negative it is that line from the   * positive, it is that line.  If it is negative it is that line from the
Line 135 
Line 173 
                         wp->w_bufp->b_markp = wp->w_markp;                          wp->w_bufp->b_markp = wp->w_markp;
                         wp->w_bufp->b_marko = wp->w_marko;                          wp->w_bufp->b_marko = wp->w_marko;
                 }                  }
                 free((char *)wp);                  free_window(wp);
         }          }
         while (curwp->w_wndp != NULL) {          while (curwp->w_wndp != NULL) {
                 wp = curwp->w_wndp;                  wp = curwp->w_wndp;
Line 146 
Line 184 
                         wp->w_bufp->b_markp = wp->w_markp;                          wp->w_bufp->b_markp = wp->w_markp;
                         wp->w_bufp->b_marko = wp->w_marko;                          wp->w_bufp->b_marko = wp->w_marko;
                 }                  }
                 free((char *)wp);                  free_window(wp);
         }          }
         lp = curwp->w_linep;          lp = curwp->w_linep;
         i = curwp->w_toprow;          i = curwp->w_toprow;
Line 180 
Line 218 
                 ewprintf("Cannot split a %d line window", curwp->w_ntrows);                  ewprintf("Cannot split a %d line window", curwp->w_ntrows);
                 return (FALSE);                  return (FALSE);
         }          }
         if ((wp = malloc(sizeof(MGWIN))) == NULL) {          wp = new_window(curbp);
                 ewprintf("Can't get %d", sizeof(MGWIN));          if (wp == NULL) {
                   ewprintf("Unable to create a window");
                 return (FALSE);                  return (FALSE);
         }          }
   
         /* displayed twice */          /* use the current dot and mark */
         ++curbp->b_nwnd;  
         wp->w_bufp = curbp;  
         wp->w_dotp = curwp->w_dotp;          wp->w_dotp = curwp->w_dotp;
         wp->w_doto = curwp->w_doto;          wp->w_doto = curwp->w_doto;
         wp->w_markp = curwp->w_markp;          wp->w_markp = curwp->w_markp;
         wp->w_marko = curwp->w_marko;          wp->w_marko = curwp->w_marko;
         wp->w_flag = 0;  
         wp->w_force = 0;          /* figure out which half of the screen we're in */
         ntru = (curwp->w_ntrows - 1) / 2;       /* Upper size            */          ntru = (curwp->w_ntrows - 1) / 2;       /* Upper size */
         ntrl = (curwp->w_ntrows - 1) - ntru;    /* Lower size            */          ntrl = (curwp->w_ntrows - 1) - ntru;    /* Lower size */
   
           for (lp = curwp->w_linep, ntrd = 0; lp != curwp->w_dotp;
               lp = lforw(lp))
                   ntrd++;
   
         lp = curwp->w_linep;          lp = curwp->w_linep;
         ntrd = 0;  
         while (lp != curwp->w_dotp) {  
                 ++ntrd;  
                 lp = lforw(lp);  
         }  
         lp = curwp->w_linep;  
   
         /* old is upper window */          /* old is upper window */
         if (ntrd <= ntru) {          if (ntrd <= ntru) {
Line 385 
Line 421 
                         nwp->w_wndp = wp->w_wndp;                          nwp->w_wndp = wp->w_wndp;
                         break;                          break;
                 }                  }
         free((char *)wp);          free_window(wp);
         return TRUE;          return TRUE;
 }  }
   

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12