cmd.exe on WIndows - problem with displaying some Unicode characters
Glenn Linderman
v+python at g.nevcal.com
Mon Aug 4 05:53:11 EDT 2014
On 8/4/2014 1:39 AM, Terry Reedy wrote:
> On 8/3/2014 6:52 PM, Wiktor wrote:
>>
>> Hi,
>>
>> as OO programming exercise, I'm trying to port to Python one of my
>> favorite
>> game from early'90 (Atari 65XL/XE) - Kolony (here's video from original
>> version on C64 https://www.youtube.com/watch?v=UFycYOp2cbE, and here's
>
> This appears to be an actual text screen, no graphics.
>
>> video from modern rewritten (for Atari emulators) version: Kolony 2106
>> https://www.youtube.com/watch?v=eX20Qqqm5eg - you get the idea? ;-)).
>
> This appears to be text boxes on a graphics screen.
>
>> OO Design is one thing, but I want to make it look as near as
>> possible to
>> the original (those windows-like menus in console window).
>
> Which original? the C64 or Atari. The important characteristic of
> both is that both have multiple overlapping popup boxes. This means
> that either you or a widget framework much keep track of stacking
> order and how to restore what was hidden when a box goes away or is
> moved down in the stacking order. I would not be surprised if the
> Atari had at least a rudimentary widget framework.
>
> > I tried to use
>> 'standard' Unicode characters (I can see that most of my Windows
>> monospaced
>> fonts have them) to draw frame around menu. Something like this:
>>
>> ┌──────────────╖
>> │ Construction ║
>> │ Production ║
>> │ Research ║
>> │ Exploration ║
>> ├··············╢
>> │ Next turn ║
>> ╘══════════════╝
>>
>> (I like the look of double lines on right and at the bottom)
>> But when I try to print those characters, I get an error:
>>
>> | Traceback (most recent call last):
>> | File "E:\Moje dokumenty\python\kolony\menu.py", line 14, in <module>
>> | """
>> | File "C:\Python34\lib\encodings\cp852.py", line 19, in encode
>> | return codecs.charmap_encode(input,self.errors,encoding_map)[0]
>> | UnicodeEncodeError: 'charmap' codec can't encode character '\u2556'
>> in position 1
>> | 6: character maps to <undefined>
>
> You have two separate problems with running in the windows console.
>
> 1. The character issue. If you run a program to just print the above
> from an Idle editor, so that the output is printed to the Idle shell,
> there should be no problem.
> >>> print('\u2556'*10)
> ╖╖╖╖╖╖╖╖╖╖
> But characters are not your real issue.
>
> 2. The random access issue. The MS console in normal use is like a
> serial printer or terminal. Once a line is printed, it cannot be
> changed. I looked at the video and the program randomly accesses a 24
> or 25 line x 80 column screen, overprinting existing characters at
> will and reversing black on white versus white of black at will.
> MSDOS screens recognized standard ANSI screen control codes once the
> ANSI.SYS driver was installed, which was fairly normal. But cmd.exe is
> actually a regression from MS-DOS in that it apparently will not allow
> this. Or it is a hugh pain.
>
> You could get a program that emulates a full-screen ANSI terminal, and
> learn to use ANSI control codes. Or you could use a tkinter (tk) Text
> widget. People have written at least serial terminal emulators for
> Text, but I did not find a full-screen.
>
> Using tkinter, I would try making each box a separate text box placed
> in a frameand let tkinter worry about displaying them correctly and
> detecting which box get a mouse click or <enter> key.
>
I've never used the API from Python but random console access is
documented at
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687404%28v=vs.85%29.aspx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20140804/ac11075b/attachment.html>
More information about the Python-list
mailing list