diff --git a/src/conio/ciolib.c b/src/conio/ciolib.c index 061de2ff4ea9847cc659a02b5ea1439075133a34..b62edb88f0b2061b463f8ec0f1653845b5802609 100644 --- a/src/conio/ciolib.c +++ b/src/conio/ciolib.c @@ -57,12 +57,14 @@ void ciolib_delline(void); void ciolib_insline(void); char *ciolib_getpass(const char *prompt); +#define CIOLIB_INIT() { if(!initialized) initciolib(CIOLIB_MODE_AUTO); } + #ifndef _WIN32 #ifndef NO_X int try_x_init(int mode) { if(!console_init()) { - cio_api.mode=CIOLIB_X_MODE; + cio_api.mode=CIOLIB_MODE_X; cio_api.puttext=x_puttext; cio_api.gettext=x_gettext; cio_api.textattr=x_textattr; @@ -87,7 +89,7 @@ int try_x_init(int mode) int try_curses_init(int mode) { if(curs_initciolib(mode)) { - cio_api.mode=CIOLIB_CURSES_IBM_MODE; + cio_api.mode=CIOLIB_MODE_CURSES_IBM; cio_api.puttext=curs_puttext; cio_api.gettext=curs_gettext; cio_api.textattr=curs_textattr; @@ -112,7 +114,7 @@ int try_curses_init(int mode) int try_ansi_init(int mode) { if(ansi_initciolib(mode)) { - cio_api.mode=CIOLIB_ANSI_MODE; + cio_api.mode=CIOLIB_MODE_ANSI; cio_api.puttext=ansi_puttext; cio_api.gettext=ansi_gettext; cio_api.textattr=ansi_textattr; @@ -134,17 +136,18 @@ int try_ansi_init(int mode) } #ifdef _WIN32 +#if defined(__BORLANDC__) + #pragma argsused +#endif int try_conio_init(int mode) { - if(mode==CIOLIB_MODE_AUTO); /* Shut up stupid warning */ /* This should test for something or other */ if(isatty(fileno(stdout))) { - cio_api.mode=CIOLIB_CONIO_MODE; + cio_api.mode=CIOLIB_MODE_CONIO; cio_api.puttext=puttext; cio_api.gettext=gettext; cio_api.textattr=textattr; cio_api.kbhit=kbhit; -// cio_api.delay=delay; cio_api.wherey=wherey; cio_api.wherex=wherex; cio_api.putch=putch; @@ -153,7 +156,6 @@ int try_conio_init(int mode) cio_api.setcursortype=_setcursortype; cio_api.getch=getch; cio_api.getche=getche; -// cio_api.beep=beep; cio_api.textmode=textmode; return(1); } @@ -166,7 +168,7 @@ int try_conio_init(int mode) int initciolib(int mode) { switch(mode) { - case CIOLIB_AUTO_MODE: + case CIOLIB_MODE_AUTO: #ifdef _WIN32 if(!try_conio_init(mode)) #else @@ -176,23 +178,23 @@ int initciolib(int mode) try_ansi_init(mode); break; #ifdef _WIN32 - case CIOLIB_CONIO_MODE: + case CIOLIB_MODE_CONIO: try_conio_init(mode); break; #else - case CIOLIB_CURSES_MODE: - case CIOLIB_CURSES_IBM_MODE: + case CIOLIB_MODE_CURSES: + case CIOLIB_MODE_CURSES_IBM: try_curses_init(mode); break; - case CIOLIB_X_MODE: + case CIOLIB_MODE_X: try_x_init(mode); break; #endif - case CIOLIB_ANSI_MODE: + case CIOLIB_MODE_ANSI: try_ansi_init(mode); break; } - if(cio_api.mode==CIOLIB_AUTO_MODE) { + if(cio_api.mode==CIOLIB_MODE_AUTO) { fprintf(stderr,"CIOLIB initialization failed!"); return(-1); } @@ -209,8 +211,7 @@ int initciolib(int mode) int ciolib_kbhit(void) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); if(ungotch) return(1); return(cio_api.kbhit()); @@ -220,8 +221,8 @@ int ciolib_getch(void) { int ch; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + if(ungotch) { ch=ungotch; ungotch=0; @@ -234,8 +235,8 @@ int ciolib_getche(void) { int ch; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + if(ungotch) { ch=ungotch; ungotch=0; @@ -247,8 +248,8 @@ int ciolib_getche(void) int ciolib_ungetch(int ch) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + if(ungotch) return(EOF); ungotch=ch; @@ -261,8 +262,8 @@ int ciolib_movetext(int sx, int sy, int ex, int ey, int dx, int dy) int height; char *buf; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + width=ex-sx; height=ey-sy; buf=(char *)malloc((width+1)*(height+1)*2); @@ -287,8 +288,8 @@ char *ciolib_cgets(char *str) int chars; int ch; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + maxlen=*(unsigned char *)str; while((ch=ciolib_getche())!='\n') { switch(ch) { @@ -326,8 +327,8 @@ int ciolib_cscanf (char *format , ...) va_list argptr; int ret; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + str[0]=-1; va_start(argptr,format); ret=vsscanf(ciolib_cgets(str),format,argptr); @@ -342,8 +343,8 @@ char *ciolib_getpass(const char *prompt) int chars; int ch; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_cputs((char *)prompt); while((ch=getch())!='\n') { switch(ch) { @@ -374,7 +375,7 @@ char *ciolib_getpass(const char *prompt) void ciolib_gettextinfo(struct text_info *info) { if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + initciolib(CIOLIB_MODE_AUTO); else { cio_api.gettextinfo(&cio_textinfo); } @@ -400,8 +401,8 @@ void ciolib_wscroll(void) int os; struct text_info ti; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&ti); if(!_wscroll) return; @@ -418,8 +419,8 @@ int ciolib_wherex(void) { int x; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + x=cio_api.wherex(); x=x-cio_textinfo.winleft+1; return(x); @@ -429,8 +430,8 @@ int ciolib_wherey(void) { int y; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + y=cio_api.wherey(); y=y-cio_textinfo.wintop+1; return(y); @@ -442,8 +443,8 @@ void ciolib_gotoxy(int x, int y) int ny; struct text_info ti; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&ti); if( x < 1 || x > ti.winright-ti.winleft+1 @@ -457,8 +458,8 @@ void ciolib_gotoxy(int x, int y) void ciolib_textmode(mode) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + if(mode==-1) { ciolib_gettextinfo(&cio_textinfo); cio_api.textmode(lastmode); @@ -478,8 +479,8 @@ void ciolib_textmode(mode) void ciolib_window(int sx, int sy, int ex, int ey) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&cio_textinfo); if( sx < 1 || sy < 1 @@ -504,8 +505,8 @@ void ciolib_clreol(void) int os; struct text_info ti; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&ti); os=_wscroll; _wscroll=0; @@ -521,8 +522,8 @@ void ciolib_clrscr(void) int width,height; struct text_info ti; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&ti); width=ti.winright-ti.winleft+1; @@ -540,8 +541,8 @@ void ciolib_delline(void) { struct text_info ti; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&ti); ciolib_movetext(ti.winleft,ti.cury+1,ti.winright,ti.winbottom,ti.winleft,ti.cury); @@ -554,8 +555,8 @@ void ciolib_insline(void) { struct text_info ti; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&ti); ciolib_movetext(ti.winleft,ti.cury,ti.winright,ti.winbottom,ti.winleft,ti.cury+1); @@ -575,8 +576,8 @@ int ciolib_cprintf(char *fmat, ...) char *str; #endif - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + va_start(argptr,fmat); #ifdef _WIN32 ret=vsnprintf(str,sizeof(str)-1,fmat,argptr); @@ -603,8 +604,8 @@ int ciolib_cputs(char *str) int pos; int ret=0; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + for(pos=0;str[pos];pos++) { ret=str[pos]; @@ -619,8 +620,8 @@ void ciolib_textbackground(int colour) { unsigned char attr; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&cio_textinfo); attr=cio_textinfo.attribute; attr&=143; @@ -632,8 +633,8 @@ void ciolib_textcolor(int colour) { unsigned char attr; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&cio_textinfo); attr=cio_textinfo.attribute; attr&=240; @@ -645,8 +646,8 @@ void ciolib_highvideo(void) { int attr; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&cio_textinfo); attr=cio_textinfo.attribute; attr |= 8; @@ -657,8 +658,8 @@ void ciolib_lowvideo(void) { int attr; - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_gettextinfo(&cio_textinfo); attr=cio_textinfo.attribute; attr &= 0xf7; @@ -667,49 +668,49 @@ void ciolib_lowvideo(void) void ciolib_normvideo(void) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + ciolib_textattr(0x07); } int ciolib_puttext(int a,int b,int c,int d,unsigned char *e) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + return(cio_api.puttext(a,b,c,d,e)); } int ciolib_gettext(int a,int b,int c,int d,unsigned char *e) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + return(cio_api.gettext(a,b,c,d,e)); } void ciolib_textattr(unsigned char a) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + cio_api.textattr(a); } void ciolib_delay(long a) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + cio_api.delay(a); } int ciolib_putch(unsigned char a) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + return(cio_api.putch(a)); } void ciolib_setcursortype(int a) { - if(!initialized) - initciolib(CIOLIB_AUTO_MODE); + CIOLIB_INIT(); + cio_api.setcursortype(a); } diff --git a/src/conio/ciolib.h b/src/conio/ciolib.h index aea28386427185e8b15e067779c695c0df69941d..fa3ae754b1084ca4b5788a6d6dc3257235c3350a 100644 --- a/src/conio/ciolib.h +++ b/src/conio/ciolib.h @@ -4,12 +4,12 @@ #define _CIOLIB_H_ enum { - CIOLIB_AUTO_MODE - ,CIOLIB_CURSES_MODE - ,CIOLIB_CURSES_IBM_MODE - ,CIOLIB_ANSI_MODE - ,CIOLIB_X_MODE - ,CIOLIB_CONIO_MODE + CIOLIB_MODE_AUTO + ,CIOLIB_MODE_CURSES + ,CIOLIB_MODE_CURSES_IBM + ,CIOLIB_MODE_ANSI + ,CIOLIB_MODE_X + ,CIOLIB_MODE_CONIO }; #ifndef __unix__ /* presumably, Win32 */