version 1.11, 2003/05/20 03:08:55 |
version 1.12, 2003/10/21 22:48:07 |
|
|
|
|
#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 |
|
|
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; |
|
|
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; |
|
|
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) { |
|
|
nwp->w_wndp = wp->w_wndp; |
nwp->w_wndp = wp->w_wndp; |
break; |
break; |
} |
} |
free((char *)wp); |
free_window(wp); |
return TRUE; |
return TRUE; |
} |
} |
|
|