Skip to content
Snippets Groups Projects
Commit 9ad0d0ff authored by deuce's avatar deuce
Browse files

A few autosavnum fixups... should be working much better now... also, you

no longer need to re-display previous WIN_SAV|WIN_ACT menus for them to be
erased properly.
parent 0c921ec6
No related branches found
No related tags found
No related merge requests found
...@@ -242,6 +242,7 @@ enum { ...@@ -242,6 +242,7 @@ enum {
typedef struct { typedef struct {
int left,top,right,bot; int left,top,right,bot;
int *cur,*bar;
uchar* buf; uchar* buf;
} win_t; } win_t;
......
...@@ -488,7 +488,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -488,7 +488,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
int height,y; int height,y;
int i,j,opts=0,s=0; /* s=search index into options */ int i,j,opts=0,s=0; /* s=search index into options */
int is_redraw=0; int is_redraw=0;
int is_lastwin=0;
int s_top=SCRN_TOP; int s_top=SCRN_TOP;
int s_left=SCRN_LEFT; int s_left=SCRN_LEFT;
int s_right=SCRN_RIGHT; int s_right=SCRN_RIGHT;
...@@ -505,8 +504,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -505,8 +504,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
int a,b,c,longopt; int a,b,c,longopt;
int optheight=0; int optheight=0;
uchar hclr,lclr,bclr,cclr,lbclr; uchar hclr,lclr,bclr,cclr,lbclr;
static int *oldcur=NULL;
static int *oldbar=NULL;
hclr=api->hclr; hclr=api->hclr;
lclr=api->lclr; lclr=api->lclr;
...@@ -617,12 +614,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -617,12 +614,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
&& save_menu_opts==opts) { && save_menu_opts==opts) {
is_redraw=1; is_redraw=1;
} }
if(mode&WIN_SAV) {
if(cur==oldcur && bar==oldbar)
is_lastwin=1;
oldcur=cur;
oldbar=bar;
}
if(mode&WIN_DYN && mode&WIN_REDRAW) if(mode&WIN_DYN && mode&WIN_REDRAW)
is_redraw=1; is_redraw=1;
...@@ -632,34 +623,61 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -632,34 +623,61 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
if(mode&WIN_ORG) { /* Clear all save buffers on WIN_ORG */ if(mode&WIN_ORG) { /* Clear all save buffers on WIN_ORG */
for(i=0; i< MAX_BUFS; i++) for(i=0; i< MAX_BUFS; i++)
FREE_AND_NULL(sav[i].buf); FREE_AND_NULL(sav[i].buf);
api->savnum=0;
} }
if(mode&WIN_SAV) { if(mode&WIN_SAV) {
if(is_lastwin && api->savnum>0 && sav[api->savnum].buf==NULL) /* Check if this screen (by cur/bar) is already saved */
api->savnum--; for(i=0; i<MAX_BUFS; i++) {
if(sav[api->savnum].buf==NULL) { if(sav[i].buf!=NULL) {
if((sav[api->savnum].buf=(char *)malloc((width+3)*(height+2)*2))==NULL) { if(cur==sav[i].cur && bar==sav[i].bar) {
cprintf("UIFC line %d: error allocating %u bytes." /* Yes, it is... */
,__LINE__,(width+3)*(height+2)*2); for(j=api->savnum-1; j>i; j--) {
free(title); /* Retore old screens */
uifc_mouse_enable(); puttext(sav[j].left,sav[j].top,sav[j].right,sav[j].bot
return(-1); ,sav[j].buf); /* put original window back */
FREE_AND_NULL(sav[j].buf);
}
api->savnum=i;
}
}
}
/* savnum not the next one - must be a dynamic window or we popped back up the stack */
if(sav[api->savnum].buf != NULL) {
/* Is this even the right window? */
if(sav[api->savnum].cur==cur
&& sav[api->savnum].bar==bar) {
if((sav[api->savnum].left!=s_left+left
|| sav[api->savnum].top!=s_top+top
|| sav[api->savnum].right!=s_left+left+width+1
|| sav[api->savnum].bot!=s_top+top+height)) { /* dimensions have changed */
puttext(sav[api->savnum].left,sav[api->savnum].top,sav[api->savnum].right,sav[api->savnum].bot
,sav[api->savnum].buf); /* put original window back */
FREE_AND_NULL(sav[api->savnum].buf);
if((sav[api->savnum].buf=(char *)malloc((width+3)*(height+2)*2))==NULL) {
cprintf("UIFC line %d: error allocating %u bytes."
,__LINE__,(width+3)*(height+2)*2);
free(title);
uifc_mouse_enable();
return(-1);
}
gettext(s_left+left,s_top+top,s_left+left+width+1
,s_top+top+height,sav[api->savnum].buf); /* save again */
sav[api->savnum].left=s_left+left;
sav[api->savnum].top=s_top+top;
sav[api->savnum].right=s_left+left+width+1;
sav[api->savnum].bot=s_top+top+height;
sav[api->savnum].cur=cur;
sav[api->savnum].bar=bar;
}
}
else {
/* Find something available... */
while(sav[api->savnum].buf!=NULL)
api->savnum++;
} }
gettext(s_left+left,s_top+top,s_left+left+width+1
,s_top+top+height,sav[api->savnum].buf);
sav[api->savnum].left=s_left+left;
sav[api->savnum].top=s_top+top;
sav[api->savnum].right=s_left+left+width+1;
sav[api->savnum].bot=s_top+top+height;
} }
else if(sav[api->savnum].buf != NULL else {
&& (sav[api->savnum].left!=s_left+left
|| sav[api->savnum].top!=s_top+top
|| sav[api->savnum].right!=s_left+left+width+1
|| sav[api->savnum].bot!=s_top+top+height)) { /* dimensions have changed */
puttext(sav[api->savnum].left,sav[api->savnum].top,sav[api->savnum].right,sav[api->savnum].bot
,sav[api->savnum].buf); /* put original window back */
FREE_AND_NULL(sav[api->savnum].buf);
if((sav[api->savnum].buf=(char *)malloc((width+3)*(height+2)*2))==NULL) { if((sav[api->savnum].buf=(char *)malloc((width+3)*(height+2)*2))==NULL) {
cprintf("UIFC line %d: error allocating %u bytes." cprintf("UIFC line %d: error allocating %u bytes."
,__LINE__,(width+3)*(height+2)*2); ,__LINE__,(width+3)*(height+2)*2);
...@@ -668,11 +686,13 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -668,11 +686,13 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
return(-1); return(-1);
} }
gettext(s_left+left,s_top+top,s_left+left+width+1 gettext(s_left+left,s_top+top,s_left+left+width+1
,s_top+top+height,sav[api->savnum].buf); /* save again */ ,s_top+top+height,sav[api->savnum].buf);
sav[api->savnum].left=s_left+left; sav[api->savnum].left=s_left+left;
sav[api->savnum].top=s_top+top; sav[api->savnum].top=s_top+top;
sav[api->savnum].right=s_left+left+width+1; sav[api->savnum].right=s_left+left+width+1;
sav[api->savnum].bot=s_top+top+height; sav[api->savnum].bot=s_top+top+height;
sav[api->savnum].cur=cur;
sav[api->savnum].bar=bar;
} }
} }
...@@ -990,8 +1010,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -990,8 +1010,6 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
,sav[api->savnum].buf); ,sav[api->savnum].buf);
uifc_mouse_enable(); uifc_mouse_enable();
FREE_AND_NULL(sav[api->savnum].buf); FREE_AND_NULL(sav[api->savnum].buf);
if(api->savnum)
api->savnum--;
} }
if(mode&WIN_XTR && (*cur)==opts-1) if(mode&WIN_XTR && (*cur)==opts-1)
return(MSK_INS|*cur); return(MSK_INS|*cur);
...@@ -1533,16 +1551,15 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -1533,16 +1551,15 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
,sav[api->savnum].right,sav[api->savnum].bot ,sav[api->savnum].right,sav[api->savnum].bot
,sav[api->savnum].buf); ,sav[api->savnum].buf);
FREE_AND_NULL(sav[api->savnum].buf); FREE_AND_NULL(sav[api->savnum].buf);
if(api->savnum)
api->savnum--;
} }
if(mode&WIN_XTR && (*cur)==opts-1) if(mode&WIN_XTR && (*cur)==opts-1)
return(MSK_INS|*cur); return(MSK_INS|*cur);
return(*cur); return(*cur);
case 3: case 3:
case ESC: case ESC:
if((mode&WIN_ESC || (mode&WIN_CHE && api->changes)) if(mode&WIN_SAV)
&& !(mode&WIN_SAV)) { api->savnum++;
if(mode&WIN_ESC || (mode&WIN_CHE && api->changes)) {
gettext(s_left+left,s_top+top,s_left gettext(s_left+left,s_top+top,s_left
+left+width-1,s_top+top+height-1,tmp_buffer); +left+width-1,s_top+top+height-1,tmp_buffer);
for(i=1;i<(width*height*2);i+=2) for(i=1;i<(width*height*2);i+=2)
...@@ -1551,12 +1568,11 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ...@@ -1551,12 +1568,11 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
+left+width-1,s_top+top+height-1,tmp_buffer); +left+width-1,s_top+top+height-1,tmp_buffer);
} }
else if(mode&WIN_SAV) { else if(mode&WIN_SAV) {
api->savnum--;
puttext(sav[api->savnum].left,sav[api->savnum].top puttext(sav[api->savnum].left,sav[api->savnum].top
,sav[api->savnum].right,sav[api->savnum].bot ,sav[api->savnum].right,sav[api->savnum].bot
,sav[api->savnum].buf); ,sav[api->savnum].buf);
FREE_AND_NULL(sav[api->savnum].buf); FREE_AND_NULL(sav[api->savnum].buf);
if(api->savnum)
api->savnum--;
} }
return(-1); return(-1);
default: default:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment