News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Strange Character set in QE

Started by Neil, December 20, 2008, 08:16:51 AM

Previous topic - Next topic

Neil

I've been using extended Ascii characters to draw lines  grids etc. in a console based program. The characters that show in QE are different to what displays when the program is running. A short example :-

                                                            print "ÄÄÄÄÄÄ"

This draws a thin line accross 6 character positions using Ascii character 196. It appears that QE is using an alternative character set possibly 850 instead of the (I think) usual 437. Has anyone else come accross this?

MichaelW

This is normal for extended characters in a gui app. As far as I know most of the fonts do not include the "normal" extended characters.
eschew obfuscation

Neil

Micheal,
Yes it's not QE, I've just tested this in notepad & got the same result. Why a running program shows a different character to one in a text file beats me. I'll run it on a different computer & if I get the same result I'll just ignore it & check whether the running program shows the 'correct' character.

sinsi

The first 128 characters are an ANSI standard, anything 128-255 is basically open.
Your 196 character is the horizontal bar (used for drawing boxes), but it's the "standard" IBM extended character set from the DOS days.
Windows has other characters for 128-255 - that's why .nfo files look weird in notepad...
Light travels faster than sound, that's why some people seem bright until you hear them.

Neil

Quote from: sinsi on December 20, 2008, 08:49:15 AM
it's the "standard" IBM extended character set from the DOS days.


Does this mean console programs use this character set, irrespective of what windows is using?

Neil

I've been doing a little 'digging' on the web, & indeed console programs do by default use (As I thought above) character set 437 which went by the name OEM, probably still does. I can now be sure that my console program will display correctly :bg

MichaelW

Is it the character set, or the font that matters here? The attachment is a quick test app for examining the extended characters of the fonts available in the Font dialog. On my system only two fonts include something close to the extended characters for the default VGA fonts: 8514oem and Terminal.

[attachment deleted by admin]
eschew obfuscation

Neil

Michael,
It's definitely the character set, your characters display exactly the same on my computer but not in a console. I've attached a small program to show this. QE displays Ä whilst the program displays a line.

[attachment deleted by admin]

zooba

Quote from: MichaelW on December 20, 2008, 10:04:27 AM
Is it the character set, or the font that matters here?

Both. The character set determines which character a particular 8/16/24/32-bit value maps to, while a font determines what a particular character looks like.

In Unicode, the 'character' is also known as a code-point, which may or may not be the same as the UTF-8/UTF-16/UTF-32/UCS-2/UCS-4 value for that character.

Cheers,

Zooba :U

MichaelW

After adding this code to my source below the CreateFontIndirect call:

              movzx eax, lf.lfCharSet
              SWITCH eax
                CASE ANSI_CHARSET
                  MsgBox 0, chr$("ANSI_CHARSET"), ADDR lf.lfFaceName, 0
                CASE OEM_CHARSET 
                  MsgBox 0, chr$("OEM_CHARSET"), ADDR lf.lfFaceName, 0
                CASE SYMBOL_CHARSET 
                  MsgBox 0, chr$("SYMBOL_CHARSET"), ADDR lf.lfFaceName, 0
                DEFAULT
                  MsgBox 0, ustr$(eax), ADDR lf.lfFaceName, 0
              ENDSW 


I find that the fonts that do have something close to the extended characters for the default VGA fonts, 8514oem and Terminal, both are OEM_CHARSET, and most of the fonts that do not are ANSI_CHARSET or SYMBOL_CHARSET. But that still leaves three fonts that are OEM_CHARSET and do not: Modern, Roman, and Script.
eschew obfuscation

Mark Jones

Neil, have a play with my codepage-toy here:
http://www.masm32.com/board/index.php?topic=1094.msg13153#msg13153


ASCII table/codepage utility by Mark Jones (gzscuqn02ATsneakemailD0Tcom)

                      Character                         Character
      Country           Sets            Country           Sets
===================  ==========   ===================  ==========
Albania               852, 850    Arabia                850, 864
Argentina             850, 437    Australia             437, 850
Austria               850, 437    Belgium               850, 437
Bosnia/Herzegovina    852, 850    Brazil                850, 437
Bulgaria              855, 850    Canada French         850, 863
Canada English        850, 863    Chile                 850, 437
Colombia              850, 437    Croatia               852, 850
Czech Republic        852, 850    Denmark               850, 865
Ecuador               850, 437    Finland               850, 437
France                850, 437    Germany               850, 437
Greece           869, 737, 850    Hong Kong             437, **
Hungary               852, 850    Iceland               850, 861
India                 437, **     International English 437, 850
Ireland               850, 437    Israel                850, 862*
Italy                 850, 437    Japan                 437, 932*
Korea                 437, 934*   Latin America         850, 437
Macedonia             855, 850    Malaysia              437, **
Mexico                850, 437    Netherlands           850, 437
New Zealand           437, 850    Norway                850, 865
China                 437, 936*   Poland                852, 850
Portugal              850, 860    Romania               852, 850
Russia     866/855/852/850/437    Serbia/Montenegro     855, 850
Singapore             437, **     Slovakia              852, 850
Slovenia              852, 850    South Africa          437, 850
Spain                 850, 437    Sweden                850, 437
Switzerland           850, 437    Taiwan                437, 938*
Turkey                857, 850    United Kingdom        850, 437
United States         437, 850    Venezuela             850, 437
Yugoslavia            852, 850    Yugoslavia Cyrillic   855, 850

> Enter a codepage: 437

Dec Hx Oct Chr   Dec Hx Oct Chr   Dec Hx Oct Chr   Dec Hx Oct Chr
-----------------------------------------------------------------
0  00  0  NUL    64 40 100  @    128 80 200  Ç    192 C0 300  └
1  01  1   ☺     65 41 101  A    129 81 201  ü    193 C1 301  ┴
2  02  2   ☻     66 42 102  B    130 82 202  é    194 C2 302  ┬
3  03  3   ♥     67 43 103  C    131 83 203  â    195 C3 303  ├
4  04  4   ♦     68 44 104  D    132 84 204  ä    196 C4 304  ─
5  05  5   ♣     69 45 105  E    133 85 205  à    197 C5 305  ┼
6  06  6   ♠     70 46 106  F    134 86 206  å    198 C6 306  ╞
7  07  7  BEL    71 47 107  G    135 87 207  ç    199 C7 307  ╟
8  08  10 BS     72 48 110  H    136 88 210  ê    200 C8 310  ╚
9  09  11 TAB    73 49 111  I    137 89 211  ë    201 C9 311  ╔
10 0A  12 LF     74 4A 112  J    138 8A 212  è    202 CA 312  ╩
11 0B  13  ♂     75 4B 113  K    139 8B 213  ï    203 CB 313  ╦
12 0C  14  ♀     76 4C 114  L    140 8C 214  î    204 CC 314  ╠
13 0D  15 CR     77 4D 115  M    141 8D 215  ì    205 CD 315  ═
14 0E  16  ♫     78 4E 116  N    142 8E 216  Ä    206 CE 316  ╬
15 0F  17  ☼     79 4F 117  O    143 8F 217  Å    207 CF 317  ╧
16 10  20  ►     80 50 120  P    144 90 220  É    208 D0 320  ╨
17 11  21  ◄     81 51 121  Q    145 91 221  æ    209 D1 321  ╤
18 12  22  ↕     82 52 122  R    146 92 222  Æ    210 D2 322  ╥
19 13  23  ‼     83 53 123  S    147 93 223  ô    211 D3 323  ╙
20 14  24  ¶     84 54 124  T    148 94 224  ö    212 D4 324  ╘
21 15  25  §     85 55 125  U    149 95 225  ò    213 D5 325  ╒
22 16  26  ▬     86 56 126  V    150 96 226  û    214 D6 326  ╓
23 17  27  ↨     87 57 127  W    151 97 227  ù    215 D7 327  ╫
24 18  30  ↑     88 58 130  X    152 98 230  ÿ    216 D8 330  ╪
25 19  31  ↓     89 59 131  Y    153 99 231  Ö    217 D9 331  ┘
26 1A  32  →     90 5A 132  Z    154 9A 232  Ü    218 DA 332  ┌
27 1B  33  ←     91 5B 133  [    155 9B 233  ¢    219 DB 333  █
28 1C  34  ∟     92 5C 134  \    156 9C 234  £    220 DC 334  ▄
29 1D  35  ↔     93 5D 135  ]    157 9D 235  ¥    221 DD 335  ▌
30 1E  36  ▲     94 5E 136  ^    158 9E 236  ₧    222 DE 336  ▐
31 1F  37  ▼     95 5F 137  _    159 9F 237  ƒ    223 DF 337  ▀
32 20  40        96 60 140  `    160 A0 240  á    224 E0 340  α
33 21  41  !     97 61 141  a    161 A1 241  í    225 E1 341  ß
34 22  42  "     98 62 142  b    162 A2 242  ó    226 E2 342  Γ
35 23  43  #     99 63 143  c    163 A3 243  ú    227 E3 343  π
36 24  44  $    100 64 144  d    164 A4 244  ñ    228 E4 344  Σ
37 25  45  %    101 65 145  e    165 A5 245  Ñ    229 E5 345  σ
38 26  46  &    102 66 146  f    166 A6 246  ª    230 E6 346  µ
39 27  47  '    103 67 147  g    167 A7 247  º    231 E7 347  τ
40 28  50  (    104 68 150  h    168 A8 250  ¿    232 E8 350  Φ
41 29  51  )    105 69 151  i    169 A9 251  ⌐    233 E9 351  Θ
42 2A  52  *    106 6A 152  j    170 AA 252  ¬    234 EA 352  Ω
43 2B  53  +    107 6B 153  k    171 AB 253  ½    235 EB 353  δ
44 2C  54  ,    108 6C 154  l    172 AC 254  ¼    236 EC 354  ∞
45 2D  55  -    109 6D 155  m    173 AD 255  ¡    237 ED 355  φ
46 2E  56  .    110 6E 156  n    174 AE 256  «    238 EE 356  ε
47 2F  57  /    111 6F 157  o    175 AF 257  »    239 EF 357  ∩
48 30  60  0    112 70 160  p    176 B0 260  ░    240 F0 360  ≡
49 31  61  1    113 71 161  q    177 B1 261  ▒    241 F1 361  ±
50 32  62  2    114 72 162  r    178 B2 262  ▓    242 F2 362  ≥
51 33  63  3    115 73 163  s    179 B3 263  │    243 F3 363  ≤
52 34  64  4    116 74 164  t    180 B4 264  ┤    244 F4 364  ⌠
53 35  65  5    117 75 165  u    181 B5 265  ╡    245 F5 365  ⌡
54 36  66  6    118 76 166  v    182 B6 266  ╢    246 F6 366  ÷
55 37  67  7    119 77 167  w    183 B7 267  ╖    247 F7 367  ≈
56 38  70  8    120 78 170  x    184 B8 270  ╕    248 F8 370  °
57 39  71  9    121 79 171  y    185 B9 271  ╣    249 F9 371  ∙
58 3A  72  :    122 7A 172  z    186 BA 272  ║    250 FA 372  ·
59 3B  73  ;    123 7B 173  {    187 BB 273  ╗    251 FB 373  √
60 3C  74  <    124 7C 174  |    188 BC 274  ╝    252 FC 374  ⁿ
61 3D  75  =    125 7D 175  }    189 BD 275  ╜    253 FD 375  ²
62 3E  76  >    126 7E 176  ~    190 BE 276  ╛    254 FE 376  ■
63 3F  77  ?    127 7F 177  ⌂    191 BF 277  ┐    255 FF 377   

> Display another codepage? (y/n):
"To deny our impulses... foolish; to revel in them, chaos." MCJ 2003.08

Neil

Thanks Mark,
very interesting & very informative :U