Viewing Issue Simple Details Jump to Notes ] Wiki ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0008773 [DCSS] Bug Report major always 2014-07-09 04:51 2014-08-05 03:40
Reporter johnnyzero View Status public  
Assigned To neil
Priority normal Resolution done  
Status closed   Product Branch 0.15 ancient branch
Summary 0008773: Cannot view stdout/stderr output on Windows
Description When something goes wrong during Crawl's initialization, typically the error is handled gracefully with Crawl printing an error message and prompting for input before exit. However, under Windows, no text is output to the console. On my Windows test machine (Vista x64) this error message and prompt is not displayed, although pressing enter will cause crawl to exit. Even after setting the console's current codepage to UTF-8, no output appears.
Active code page: 437

C:\%CRAWL%>chcp 65001
Active code page: 65001

For example, moving the contents of %CRAWL%\data\des causes the following error to be printed to the console after starting Crawl:
Cannot find data file 'des/sprint/meat.des' anywhere, aborting
Hit Enter to continue...

This is a big issue, as Windows users cannot report many startup issues they encounter. Instead, the best report a Windows user can give is, "Well, after I start Crawl the window leaves a blinking cursor until I hit enter".

Commenting out lines 273-274 from source/ (or removing the whole block from 262-275) allows these stdout/stderr messages to appear.

263     // No documentation about resetting this, nor about which versions of
264     // Windows is required.  Previous ones can't handle writing to the console
265     // outside ancient locales AT ALL via standard means.
266     // Even with _O_U8TEXT, output tends to fail unless the user manually
267     // switches the terminal to a truetype font.  And even that fails for
268     // anything not directly in the font, above U+FFFF, or within Arabic or
269     // any complex scripts.
270 # ifndef _O_U8TEXT
271 #  define _O_U8TEXT 0x40000
272 # endif
273     _setmode(_fileno(stdout), _O_U8TEXT);
274     _setmode(_fileno(stderr), _O_U8TEXT);
275 #endif

This issue affects the current windows trunk builds posted on CDO, as well as my personal builds using the i686-w64-mingw32 toolchain. I have not tested a build compiled with MSVC. Removing these stdout/stderr mode sets does not seem to affect the crawl console gameplay, although I've only tested against Vista x64. Unicode console mode still works fine, for example, as Crawl's console mode implementation in source/ uses the Windows Console API.

For more reading: [^]
Additional Information
Tags No tags attached.
Attached Files

- Relationships
has duplicate 0007308closedneil Vault errors don't print messages 

-  Notes
johnnyzero (reporter)
2014-07-10 03:33

Relevant commits:

(Thanks Grunt!)
neil (administrator)
2014-08-05 02:36

Fixed in trunk (0.16-a0-46-ge5829e7) and prerelease (0.15-b1-33-g66304f2), thanks!
johnnyzero (reporter)
2014-08-05 03:39

Confirmed. Tested a git e5829e7 console build (i686-w64-mingw32 toolchain) under Vista x64. I renamed des/sprint/meat.des to des/sprint/meat.des.bak and tried running crawl after clearing out the saves subdirectory. Crawl successfully printed the expected error message to console. Unicode char_set mode still works fine, as do character + crash log dumps.

- Issue History
Date Modified Username Field Change
2014-07-09 04:51 johnnyzero New Issue
2014-07-10 03:33 johnnyzero Note Added: 0026719
2014-08-05 01:42 neil Relationship added has duplicate 0007308
2014-08-05 02:36 neil Note Added: 0026949
2014-08-05 02:36 neil Status new => resolved
2014-08-05 02:36 neil Fixed in Branch => 0.15 prerelease branch
2014-08-05 02:36 neil Resolution open => done
2014-08-05 02:36 neil Assigned To => neil
2014-08-05 03:39 johnnyzero Note Added: 0026950
2014-08-05 03:39 johnnyzero Status resolved => closed

Mantis 1.1.8[^]
Copyright © 2000 - 2009 Mantis Group
Powered by Mantis Bugtracker