From eb6f0e3ba4302ae111ae979be030e53451300292 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 3 May 2002 00:12:27 +0000 Subject: [PATCH] Added programmable escape delay and forced IBM-charset (by Deuce). --- src/sbbs3/scfg/scfg.c | 16 +- src/uifc/uifc.h | 5 + src/uifc/uifcc.c | 341 ++++++++++++++++++++++-------------------- 3 files changed, 196 insertions(+), 166 deletions(-) diff --git a/src/sbbs3/scfg/scfg.c b/src/sbbs3/scfg/scfg.c index e2c9a682ac..17d608e513 100644 --- a/src/sbbs3/scfg/scfg.c +++ b/src/sbbs3/scfg/scfg.c @@ -90,6 +90,8 @@ int main(int argc, char **argv) else getcwd(cfg.ctrl_dir,sizeof(cfg.ctrl_dir)); + uifc.esc_delay=25; + for(i=1;i<argc;i++) { if(argv[i][0]=='-' #ifndef __unix__ @@ -126,11 +128,17 @@ int main(int argc, char **argv) case 'L': uifc.scrn_len=atoi(argv[i]+2); break; -#if !defined(__unix__) + case 'E': + uifc.esc_delay=atoi(argv[i]+2); + break; + case 'I': + uifc.mode|=UIFC_IBM; + break; case 'V': +#if !defined(__unix__) textmode(atoi(argv[i]+2)); - break; #endif + break; default: printf("\nusage: scfg [ctrl_dir] [options]" "\n\noptions:\n\n" @@ -140,6 +148,10 @@ int main(int argc, char **argv) "-h = don't update message base status headers\r\n" "-d = run in standard input/output/door mode\r\n" "-c = force color mode\r\n" +#ifdef USE_CURSES + "-e# = set escape delay to #msec\r\n" + "-i = force IBM charset\r\n" +#endif #if !defined(__unix__) "-v# = set video mode to #\r\n" #endif diff --git a/src/uifc/uifc.h b/src/uifc/uifc.h index 53ceef7fb6..c76ba75e45 100644 --- a/src/uifc/uifc.h +++ b/src/uifc/uifc.h @@ -143,6 +143,7 @@ #define UIFC_MOUSE (1<<1) /* Mouse installed and available */ #define UIFC_MONO (1<<2) /* Force monochrome mode */ #define UIFC_COLOR (1<<3) /* Force color mode */ +#define UIFC_IBM (1<<4) /* Force use of IBM charset */ /* Bits in uifcapi_t.list mode */ #define WIN_ORG (1<<0) /* Original menu - destroy valid screen area */ @@ -262,6 +263,10 @@ typedef struct { /****************************************************************************/ uint scrn_len; /****************************************************************************/ +/* ESC key delay for curses */ +/****************************************************************************/ + uint esc_delay; +/****************************************************************************/ /* Alternative method of setting current help text. */ /****************************************************************************/ char* helpbuf; diff --git a/src/uifc/uifcc.c b/src/uifc/uifcc.c index 45a904ecb2..d3abd889cb 100644 --- a/src/uifc/uifcc.c +++ b/src/uifc/uifcc.c @@ -86,7 +86,7 @@ enum { #define SH_DENYRW 2 #define O_BINARY 0 -static char hclr,lclr,bclr,cclr,show_free_mem=0; +static char hfclr,hbclr,hclr,lclr,bclr,cclr,show_free_mem=0; static char* helpfile=0; static uint helpline=0; static char blk_scrn[MAX_BFLN]; @@ -174,6 +174,7 @@ int uifcinic(uifcapi_t* uifcapi) keypad(stdscr, TRUE); scrollok(stdscr,FALSE); raw(); + ESCDELAY=api->esc_delay; // Set up color pairs for(bg=0;bg<8;bg++) { @@ -181,6 +182,7 @@ int uifcinic(uifcapi_t* uifcapi) init_pair(++pair,curses_color(fg),curses_color(bg)); } } + clear(); refresh(); getmaxyx(stdscr,height,width); @@ -222,11 +224,15 @@ int uifcinic(uifcapi_t* uifcapi) hclr=WHITE; lclr=LIGHTGRAY; cclr=LIGHTGRAY; + hbclr=BLACK; /* Highlight Background Colour */ + hfclr=WHITE; /* Highlight Foreground Colour */ } else { bclr=BLUE; hclr=YELLOW; lclr=WHITE; cclr=CYAN; + hbclr=LIGHTGRAY; + hfclr=YELLOW; } for(i=0;i<MAX_BFLN;i+=2) { blk_scrn[i]='°'; @@ -538,7 +544,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar *(ptr++)='ł'; *(ptr++)=lclr|(bclr<<4); if(i==(*cur)) - a=bclr|(LIGHTGRAY<<4); + a=hfclr|(hbclr<<4); else a=lclr|(bclr<<4); b=strlen(option[i]); @@ -613,7 +619,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar if(inkey(1)) { i=inkey(0); - if(i==KEY_BACKSPACE) + if(i==KEY_BACKSPACE || i==BS) i=ESC; if(i>255) { s=0; @@ -630,7 +636,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2); putch(31); /* put the down arrow */ uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3 - ,bclr|(LIGHTGRAY<<4) + ,hfclr|(hbclr<<4) ,"%-*.*s",width-4,width-4,option[0]); for(i=1;i<height-4;i++) /* re-display options */ uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+i @@ -656,7 +662,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gettext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); for(i=1;i<width*2;i+=2) - line[i]=bclr|(LIGHTGRAY<<4); + line[i]=hfclr|(hbclr<<4); puttext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); showmouse(); @@ -673,7 +679,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar putch(' '); /* delete the down arrow */ for(i=(opts+4)-height,j=0;i<opts;i++,j++) uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j - ,i==opts-1 ? bclr|(LIGHTGRAY<<4) + ,i==opts-1 ? hfclr|(hbclr<<4) : lclr|(bclr<<4) ,"%-*.*s",width-4,width-4,option[i]); (*cur)=opts-1; @@ -714,7 +720,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar scroll_text(SCRN_LEFT+left+2,SCRN_TOP+top+3 ,SCRN_LEFT+left+width-3,SCRN_TOP+top+height-2,1); uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3 - ,bclr|(LIGHTGRAY<<4) + ,hfclr|(hbclr<<4) ,"%-*.*s",width-4,width-4,option[*cur]); showmouse(); } else { @@ -722,7 +728,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gettext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); for(i=1;i<width*2;i+=2) - line[i]=bclr|(LIGHTGRAY<<4); + line[i]=hfclr|(hbclr<<4); puttext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); showmouse(); } @@ -746,7 +752,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar for(i=(opts+4)-height,j=0;i<opts;i++,j++) uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j - ,i==(*cur) bclr|(LIGHTGRAY<<4) : lclr|(bclr<<4) + ,i==(*cur) hfclr|(hbclr<<4) : lclr|(bclr<<4) ,"%-*.*s",width-4,width-4,option[i]); y=top+height-2; if(bar) @@ -754,7 +760,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gettext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); for(i=1;i<148;i+=2) - line[i]=bclr|(LIGHTGRAY<<4); + line[i]=hfclr|(hbclr<<4); puttext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); showmouse(); @@ -772,7 +778,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar putch(' '); /* delete the down arrow */ for(i=(opts+4)-height,j=0;i<opts;i++,j++) uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j - ,i==opts-1 ? bclr|(LIGHTGRAY<<4) + ,i==opts-1 ? hfclr|(hbclr<<4) : lclr|(bclr<<4) ,"%-*.*s",width-4,width-4,option[i]); (*cur)=opts-1; @@ -795,7 +801,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gettext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); for(i=1;i<148;i+=2) - line[i]=bclr|(LIGHTGRAY<<4); + line[i]=hfclr|(hbclr<<4); puttext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); showmouse(); @@ -811,7 +817,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2); putch(31); /* put the down arrow */ uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3 - ,bclr|(LIGHTGRAY<<4) + ,hfclr|(hbclr<<4) ,"%-*.*s",width-4,width-4,option[0]); for(i=1;i<height-4;i++) /* re-display options */ uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+i @@ -859,7 +865,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ,SCRN_LEFT+left+width-3,SCRN_TOP+top+height-2,0); /* gotoxy(1,1); cprintf("\rdebug: %4d ",__LINE__); */ uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+height-2 - ,bclr|(LIGHTGRAY<<4) + ,hfclr|(hbclr<<4) ,"%-*.*s",width-4,width-4,option[*cur]); showmouse(); } else { @@ -868,7 +874,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ,SCRN_LEFT+left+width-2,SCRN_TOP+y ,line); for(i=1;i<width*2;i+=2) - line[i]=bclr|(LIGHTGRAY<<4); + line[i]=hfclr|(hbclr<<4); puttext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y ,line); @@ -954,7 +960,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar putch(' '); } /* delete the down arrow */ for(i=((*cur)+5)-height,j=0;i<(*cur)+1;i++,j++) uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j - ,i==(*cur) ? bclr|(LIGHTGRAY<<4) + ,i==(*cur) ? hfclr|(hbclr<<4) : lclr|(bclr<<4) ,"%-*.*s",width-4,width-4,option[i]); y=top+height-2; @@ -970,7 +976,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2); putch(31); /* put the down arrow */ uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3 - ,bclr|(LIGHTGRAY<<4) + ,hfclr|(hbclr<<4) ,"%-*.*s",width-4,width-4,option[(*cur)]); for(i=1;i<height-4;i++) /* re-display options */ uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+i @@ -1001,7 +1007,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar gettext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); for(i=1;i<width*2;i+=2) - line[i]=bclr|(LIGHTGRAY<<4); + line[i]=hfclr|(hbclr<<4); puttext(SCRN_LEFT+3+left,SCRN_TOP+y ,SCRN_LEFT+left+width-2,SCRN_TOP+y,line); showmouse(); @@ -1191,7 +1197,7 @@ static int ugetstr(char *outstr, int max, long mode) truncsp(outstr); ***/ outstr[max]=0; - textattr(bclr|(LIGHTGRAY<<4)); + textattr(hfclr|(hbclr<<4)); cputs(outstr); textattr(lclr|(bclr<<4)); strcpy(str,outstr); @@ -1321,7 +1327,7 @@ static int ugetstr(char *outstr, int max, long mode) j--; } continue; - case 03: + case 3: case ESC: { curs_set(0); @@ -1441,8 +1447,8 @@ void bottomline(int line) i+=4; uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Delete Item "); i+=13; } - uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"BACKSP "); - i+=7; + uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"ESC "); /* Backspace is no good no way to abort editing */ + i+=4; uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Exit"); i+=4; gotoxy(i,api->scrn_len+1); @@ -1794,7 +1800,7 @@ static int gettext(int sx, int sy, int ex, int ey, unsigned char *fill) for(x=sx-1;x<=ex-1;x++) { attr=mvinch(y, x); - if(attr&A_ALTCHARSET){ + if(attr&A_ALTCHARSET && !(api->mode&UIFC_IBM)){ ext_char=A_ALTCHARSET|(attr&255); /* likely ones */ if (ext_char == ACS_CKBOARD) @@ -2064,148 +2070,155 @@ static void _putch(unsigned char ch, BOOL refresh_now) { int cha; - switch(ch) + if(!(api->mode&UIFC_IBM)) { - case 30: - cha=ACS_UARROW; - break; - case 31: - cha=ACS_DARROW; - break; - case 176: - cha=ACS_CKBOARD; - break; - case 177: - cha=ACS_BOARD; - break; - case 178: - cha=ACS_BOARD; - break; - case 179: - cha=ACS_SBSB; - break; - case 180: - cha=ACS_SBSS; - break; - case 181: - cha=ACS_SBSD; - break; - case 182: - cha=ACS_DBDS; - break; - case 183: - cha=ACS_BBDS; - break; - case 184: - cha=ACS_BBSD; - break; - case 185: - cha=ACS_DBDD; - break; - case 186: - cha=ACS_DBDB; - break; - case 187: - cha=ACS_BBDD; - break; - case 188: - cha=ACS_DBBD; - break; - case 189: - cha=ACS_DBBS; - break; - case 190: - cha=ACS_SBBD; - break; - case 191: - cha=ACS_BBSS; - break; - case 192: - cha=ACS_SSBB; - break; - case 193: - cha=ACS_SSBS; - break; - case 194: - cha=ACS_BSSS; - break; - case 195: - cha=ACS_SSSB; - break; - case 196: - cha=ACS_BSBS; - break; - case 197: - cha=ACS_SSSS; - break; - case 198: - cha=ACS_SDSB; - break; - case 199: - cha=ACS_DSDB; - break; - case 200: - cha=ACS_DDBB; - break; - case 201: - cha=ACS_BDDB; - break; - case 202: - cha=ACS_DDBD; - break; - case 203: - cha=ACS_BDDD; - break; - case 204: - cha=ACS_DDDB; - break; - case 205: - cha=ACS_BDBD; - break; - case 206: - cha=ACS_DDDD; - break; - case 207: - cha=ACS_SDBD; - break; - case 208: - cha=ACS_DSBS; - break; - case 209: - cha=ACS_BDSD; - break; - case 210: - cha=ACS_BSDS; - break; - case 211: - cha=ACS_DSBB; - break; - case 212: - cha=ACS_SDBB; - break; - case 213: - cha=ACS_BDSB; - break; - case 214: - cha=ACS_BSDB; - break; - case 215: - cha=ACS_DSDS; - break; - case 216: - cha=ACS_SDSD; - break; - case 217: - cha=ACS_SBBS; - break; - case 218: - cha=ACS_BSSB; - break; - case 219: - cha=ACS_BLOCK; - break; - default: - cha=ch; + switch(ch) + { + case 30: + cha=ACS_UARROW; + break; + case 31: + cha=ACS_DARROW; + break; + case 176: + cha=ACS_CKBOARD; + break; + case 177: + cha=ACS_BOARD; + break; + case 178: + cha=ACS_BOARD; + break; + case 179: + cha=ACS_SBSB; + break; + case 180: + cha=ACS_SBSS; + break; + case 181: + cha=ACS_SBSD; + break; + case 182: + cha=ACS_DBDS; + break; + case 183: + cha=ACS_BBDS; + break; + case 184: + cha=ACS_BBSD; + break; + case 185: + cha=ACS_DBDD; + break; + case 186: + cha=ACS_DBDB; + break; + case 187: + cha=ACS_BBDD; + break; + case 188: + cha=ACS_DBBD; + break; + case 189: + cha=ACS_DBBS; + break; + case 190: + cha=ACS_SBBD; + break; + case 191: + cha=ACS_BBSS; + break; + case 192: + cha=ACS_SSBB; + break; + case 193: + cha=ACS_SSBS; + break; + case 194: + cha=ACS_BSSS; + break; + case 195: + cha=ACS_SSSB; + break; + case 196: + cha=ACS_BSBS; + break; + case 197: + cha=ACS_SSSS; + break; + case 198: + cha=ACS_SDSB; + break; + case 199: + cha=ACS_DSDB; + break; + case 200: + cha=ACS_DDBB; + break; + case 201: + cha=ACS_BDDB; + break; + case 202: + cha=ACS_DDBD; + break; + case 203: + cha=ACS_BDDD; + break; + case 204: + cha=ACS_DDDB; + break; + case 205: + cha=ACS_BDBD; + break; + case 206: + cha=ACS_DDDD; + break; + case 207: + cha=ACS_SDBD; + break; + case 208: + cha=ACS_DSBS; + break; + case 209: + cha=ACS_BDSD; + break; + case 210: + cha=ACS_BSDS; + break; + case 211: + cha=ACS_DSBB; + break; + case 212: + cha=ACS_SDBB; + break; + case 213: + cha=ACS_BDSB; + break; + case 214: + cha=ACS_BSDB; + break; + case 215: + cha=ACS_DSDS; + break; + case 216: + cha=ACS_SDSD; + break; + case 217: + cha=ACS_SBBS; + break; + case 218: + cha=ACS_BSSB; + break; + case 219: + cha=ACS_BLOCK; + break; + default: + cha=ch; + } + } + else + { + cha=ch; } -- GitLab