From: nethack.allison Date: Tue, 25 Apr 2006 01:16:54 +0000 (+0000) Subject: fix W343-1 open win32 bug from known bugs page X-Git-Tag: MOVE2GIT~1047 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3e2f7f946db9758b6a312fb9563d2fe642b93a07;p=nethack fix W343-1 open win32 bug from known bugs page W343-1 Redirecting score output through a pipe doesn't work. --- diff --git a/sys/share/pcmain.c b/sys/share/pcmain.c index 3172cdf5b..a93e5c5b0 100644 --- a/sys/share/pcmain.c +++ b/sys/share/pcmain.c @@ -54,6 +54,7 @@ extern void FDECL(nethack_exit,(int)); #ifdef WIN32 extern boolean getreturn_enabled; /* from sys/share/pcsys.c */ +extern int redirect_stdout; /* from sys/share/pcsys.c */ #endif #if defined(MSWIN_GRAPHICS) @@ -227,14 +228,22 @@ char *argv[]; * may do a prscore(). */ if (!strncmp(argv[1], "-s", 2)) { -#if !defined(MSWIN_GRAPHICS) -# if defined(CHDIR) && !defined(NOCWD_ASSUMPTIONS) - chdirx(hackdir,0); +#if defined(MSWIN_GRAPHICS) || defined(WIN32CON) + int sfd = _fileno(stdout); + redirect_stdout = (sfd >= 0) ? !isatty(sfd) : 0; + +# ifdef MSWIN_GRAPHICS + if (!redirect_stdout) { + raw_printf("-s is not supported for the Graphical Interface\n"); + nethack_exit(EXIT_SUCCESS); + } # endif +#endif + +#if defined(CHDIR) && !defined(NOCWD_ASSUMPTIONS) + chdirx(hackdir,0); +#endif prscore(argc, argv); -#else - raw_printf("-s is not supported for the Graphical Interface\n"); -#endif /*MSWIN_GRAPHICS*/ nethack_exit(EXIT_SUCCESS); } diff --git a/sys/share/pcsys.c b/sys/share/pcsys.c index 23b12e470..fed9de9c1 100644 --- a/sys/share/pcsys.c +++ b/sys/share/pcsys.c @@ -390,6 +390,7 @@ char *name; #ifdef WIN32 boolean getreturn_enabled; +int redirect_stdout; #endif void diff --git a/sys/winnt/nttty.c b/sys/winnt/nttty.c index e71622dbd..fc4be4451 100644 --- a/sys/winnt/nttty.c +++ b/sys/winnt/nttty.c @@ -56,6 +56,7 @@ INPUT_RECORD ir; * from the command line. */ int GUILaunched; +extern int redirect_stdout; static BOOL FDECL(CtrlHandler, (DWORD)); #ifdef PORT_DEBUG @@ -941,8 +942,12 @@ msmsg VA_DECL(const char *, fmt) VA_INIT(fmt, const char *); Vsprintf(buf, fmt, VA_ARGS); VA_END(); - xputs(buf); - if (ttyDisplay) curs(BASE_WINDOW, cursor.X+1, cursor.Y); + if (redirect_stdout) + fprintf(stdout,"%s",buf); + else { + xputs(buf); + if (ttyDisplay) curs(BASE_WINDOW, cursor.X+1, cursor.Y); + } return; } diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index 5248fe0c8..c6c6387dc 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -1290,8 +1290,13 @@ void mswin_raw_print(const char *str) { TCHAR wbuf[255]; logDebug("mswin_raw_print(%s)\n", str); - if( str && *str ) + if( str && *str ) { + extern int redirect_stdout; + if (!redirect_stdout) NHMessageBox(GetNHApp()->hMainWnd, NH_A2W(str, wbuf, sizeof(wbuf)), MB_ICONINFORMATION | MB_OK ); + else + fprintf(stdout,"%s",str); + } } /*