napms() should be the core delay routine, rather than delay_output().

Rationale: Per the standard, napms() always waits a given interval,
while delay_output() sends pad characters until the interval is reached;
if pad characters are unavailable, its behavior is undefined. Some
implementations call napms() in that case; ncurses, sadly, does not, at
least not for the Linux console. So the use of delay_output() should be
discouraged, in general; and if everything is using napms(), it ought to
be the function that's used most directly.
This commit is contained in:
William McBrine
2006-01-03 08:32:12 +00:00
parent a82b25ae79
commit 0d0617fab3
8 changed files with 53 additions and 54 deletions

View File

@@ -18,7 +18,7 @@
***************************************************************************
*/
/*
$Id: curses.h,v 1.61 2006/01/03 07:42:28 wmcbrine Exp $
$Id: curses.h,v 1.62 2006/01/03 08:32:11 wmcbrine Exp $
*/
/*
*----------------------------------------------------------------------
@@ -1667,7 +1667,6 @@ int PDC_CDECL copywin Args(( const WINDOW*, WINDOW*, int, int, int, int, int
int PDC_CDECL curs_set Args(( int ));
int PDC_CDECL def_prog_mode Args(( void ));
int PDC_CDECL def_shell_mode Args(( void ));
int PDC_CDECL delay_output Args(( int ));
void PDC_CDECL delscreen Args(( SCREEN * ));
int PDC_CDECL delwin Args(( WINDOW* ));
WINDOW* PDC_CDECL derwin Args(( WINDOW*, int, int, int, int ));
@@ -1720,6 +1719,7 @@ int PDC_CDECL mvwinsertln Args(( WINDOW*, int, int ));
int PDC_CDECL mvwprintw Args(( WINDOW*, int, int, char*,... ));
int PDC_CDECL mvwscanw Args(( WINDOW*, int, int, char*,... ));
#endif
int PDC_CDECL napms Args(( int ));
WINDOW* PDC_CDECL newpad Args(( int, int ));
SCREEN* PDC_CDECL newterm Args(( char*, FILE*, FILE* ));
WINDOW* PDC_CDECL newwin Args(( int, int, int, int ));
@@ -1919,10 +1919,11 @@ int PDC_CDECL PDC_set_line_color Args(( short ));
#define clrtobot() wclrtobot( stdscr )
#define clrtoeol() wclrtoeol( stdscr )
#define color_set(a,b) wcolor_set( stdscr, a, b )
#define delay_output(ms) napms( ms )
#define delch() wdelch( stdscr )
#define deleteln() wdeleteln( stdscr )
#define derwin(w,nl,nc,by,bx) subwin((w),(nl),(nc),(by+(w)->_begy),(bx+(w)->_begx))
#define draino(ms) delay_output(ms)
#define draino(ms) napms( ms )
#define echochar(c) (addch((chtype)c)==ERR?ERR:refresh())
#define erase() werase( stdscr )
#define fixterm() reset_prog_mode()
@@ -1996,7 +1997,6 @@ int PDC_CDECL PDC_set_line_color Args(( short ));
#define mvwinsnstr(w,y,x,s,n) (wmove( w, y, x )==ERR?ERR:winsnstr(w,s,n))
#define mvwinsstr(w,y,x,s) (wmove( w, y, x )==ERR?ERR:winsnstr(w,s,(-1)))
#define mvwvline(w,y,x,c,n) (wmove( w, y, x )==ERR?ERR:wvline( w, c, n ))
#define napms(ms) delay_output(ms)
#define nl() (SP->autocr = TRUE, OK)
#define nonl() (SP->autocr = FALSE, OK)
#define redrawwin(w) wredrawln((w),0,(w)->_maxy)

View File

@@ -39,7 +39,7 @@
#endif
#ifdef PDCDEBUG
char *rcsid_newdemo = "$Id: newdemo.c,v 1.14 2005/12/08 17:27:08 wmcbrine Exp $";
char *rcsid_newdemo = "$Id: newdemo.c,v 1.15 2006/01/03 08:32:12 wmcbrine Exp $";
#endif
#if defined(HAVE_PROTO) && !defined(__STDC__)
@@ -410,7 +410,7 @@ chtype save[80], ch;
stop = 1;
break;
}
delay_output(100);
napms(100);
}
free(scrollbuf);
if (stop)

View File

@@ -115,7 +115,7 @@
#endif
#ifdef PDCDEBUG
char *rcsid_xmas = "$Id: xmas.c,v 1.7 2005/12/07 01:37:43 wmcbrine Exp $";
char *rcsid_xmas = "$Id: xmas.c,v 1.8 2006/01/03 08:32:12 wmcbrine Exp $";
#endif
#include <curses.h>
@@ -475,25 +475,25 @@ char **argv;
werase(treescrn8);
touchwin(treescrn8);
refresh();
delay_output(1000);
napms(1000);
boxit();
del_msg();
delay_output(1000);
napms(1000);
seas();
del_msg();
delay_output(1000);
napms(1000);
greet();
del_msg();
delay_output(1000);
napms(1000);
fromwho();
del_msg();
delay_output(1000);
napms(1000);
tree();
delay_output(1000);
napms(1000);
balls();
delay_output(1000);
napms(1000);
star();
delay_output(1000);
napms(1000);
strng1();
strng2();
strng3();
@@ -668,14 +668,14 @@ char **argv;
mvwaddch(treescrn7, 12, 14, ' ');
delay_output(1000);
napms(1000);
reindeer();
touchwin(w_holiday);
wrefresh(w_holiday);
wrefresh(w_del_msg);
delay_output(1000);
napms(1000);
for(loopy = 0;loopy < 50;loopy++)
{
blinkit();
@@ -1209,7 +1209,7 @@ int reindeer Args((void))
}
}
delay_output(2000);
napms(2000);
y_pos = 1;

View File

@@ -34,12 +34,11 @@
/* undefine any macros for functions called by this module if in debug mode */
#ifdef PDCDEBUG
# undef delay_output
# undef wrefresh
#endif
#ifdef PDCDEBUG
char *rcsid_beep = "$Id: beep.c,v 1.2 2006/01/03 07:34:43 wmcbrine Exp $";
char *rcsid_beep = "$Id: beep.c,v 1.3 2006/01/03 08:32:12 wmcbrine Exp $";
#endif
/*man-start*********************************************************************
@@ -110,7 +109,7 @@ int PDC_CDECL flash()
#if defined(DOS) || defined(OS2) || defined(WIN32)
PDC_scroll(0, 0, LINES - 1, COLS - 1, 0, A_NORMAL);
delay_output( 50 );
napms( 50 );
PDC_scroll(0, 0, LINES - 1, COLS - 1, 0, A_REVERSE);
wrefresh(curscr);
return( OK );

View File

@@ -55,7 +55,7 @@
#endif
#ifdef PDCDEBUG
char *rcsid_kernel = "$Id: kernel.c,v 1.9 2006/01/03 07:34:43 wmcbrine Exp $";
char *rcsid_kernel = "$Id: kernel.c,v 1.10 2006/01/03 08:32:12 wmcbrine Exp $";
#endif
RIPPEDOFFLINE linesripped[5];
@@ -472,9 +472,33 @@ int ms;
#endif
/***********************************************************************/
{
PDC_LOG(("napms() - called: ms=%d\n",ms));
PDC_LOG(("napms() - called: ms=%d\n",ms));
return(delay_output(ms));
#if defined(WIN32)
Sleep(ms);
#elif (defined(TC) || defined(__WATCOMC__)) && defined(DOS)
delay( ms );
#elif defined(PC)
PDC_usleep( ms );
#elif defined(OS2)
# if defined(EMX)
_sleep2(ms);
# else
DosSleep(ms);
# endif
#elif defined(DOS) && defined(MSC)
PDC_usleep((clock_t)ms);
#elif defined(DOS) && defined(NDP)
clock_t goal;
goal = ms + (float)( (float)clock()/(float)CLOCKS_PER_SEC )*1000;
while (goal > (float)( (float)clock()/(float)CLOCKS_PER_SEC )*1000)
;
#elif defined(UNIX) || defined(__DJGPP__)
usleep(1000*ms);
#elif defined(XCURSES)
PDC_usleep(ms*1000);
#endif
return OK;
}
/***********************************************************************/
#ifdef HAVE_PROTO
@@ -485,7 +509,7 @@ int ms;
#endif
/***********************************************************************/
{
PDC_LOG(("draino() - called: ms=%d\n",ms));
PDC_LOG(("draino() - called: ms=%d\n",ms));
return(delay_output(ms));
return napms(ms);
}

View File

@@ -66,7 +66,7 @@
#endif
#ifdef PDCDEBUG
char *rcsid_util = "$Id: util.c,v 1.11 2006/01/03 08:07:33 wmcbrine Exp $";
char *rcsid_util = "$Id: util.c,v 1.12 2006/01/03 08:32:12 wmcbrine Exp $";
#endif
/*man-start*********************************************************************
@@ -322,31 +322,7 @@ int ms;
{
PDC_LOG(("delay_output() - called: ms %d\n",ms));
#if defined(WIN32)
Sleep(ms);
#elif (defined(TC) || defined(__WATCOMC__)) && defined(DOS)
delay( ms );
#elif defined(PC)
PDC_usleep( ms );
#elif defined(OS2)
# if defined(EMX)
_sleep2(ms);
# else
DosSleep(ms);
# endif
#elif defined(DOS) && defined(MSC)
PDC_usleep((clock_t)ms);
#elif defined(DOS) && defined(NDP)
clock_t goal;
goal = ms + (float)( (float)clock()/(float)CLOCKS_PER_SEC )*1000;
while (goal > (float)( (float)clock()/(float)CLOCKS_PER_SEC )*1000)
;
#elif defined(UNIX) || defined(__DJGPP__)
usleep(1000*ms);
#elif defined(XCURSES)
PDC_usleep(ms*1000);
#endif
return OK;
return napms(ms);
}
/***********************************************************************/
#ifdef HAVE_PROTO

View File

@@ -236,7 +236,7 @@ XtInputId *id;
say("CURSES_FLASH received from child\n");
#if 0
XFillRectangle(XCURSESDISPLAY,XCURSESWIN,normal_highlight_gc,10,10,XCursesWindowWidth-10,XCursesWindowHeight-10);
delay_output(50);
napms(50);
XFillRectangle(XCURSESDISPLAY,XCURSESWIN,normal_highlight_gc,10,10,XCursesWindowWidth-10,XCursesWindowHeight-10);
XCursesDisplayCursor(SP->cursrow,SP->curscol,
SP->cursrow,SP->curscol);

View File

@@ -211,7 +211,7 @@ XtInputId *id;
say("CURSES_FLASH received from child\n");
#if 0
XFillRectangle(XCURSESDISPLAY,XCURSESWIN,normal_highlight_gc,10,10,XCursesWindowWidth-10,XCursesWindowHeight-10);
delay_output(50);
napms(50);
XFillRectangle(XCURSESDISPLAY,XCURSESWIN,normal_highlight_gc,10,10,XCursesWindowWidth-10,XCursesWindowHeight-10);
XCursesDisplayCursor(SP->cursrow,SP->curscol,
SP->cursrow,SP->curscol);