www.digitalmars.com Home | Search | C & C++ | D | DMDScript | News Groups | index | prev | next
Archives

D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript

c++ - RCC & Russian resources

↑ ↓ ← Denis Troshin <weiv mail.ru> writes:
Hi!

I have 7.50B5 version of RCC.EXE.
When I compile rc-file with russian strings, RCC incorrectly
converts these strings to Unicode.

rcc -32 test.rc


ANSI range of Russian letters is 0xC0-0xFF,
in Unicode the range should be 0x410-0x4FF.

But RCC converts russian strings the same way as it converts english:

 - the lower byte of every unicode character is the same as it was in ANSI
 - the higher byte is 0x0

LANGUAGE statement in RC-file has no effect in my case, and -l switch of 
RCC.EXE also has no effect.
Dec 21 2003
Denis Troshin <weiv mail.ru> writes:
OK, I solved this problem by myself.

So, those who have problems with RCC & Russian resources,
you can use my PATCH:

if you have RCC.EXE version 7.50B5 (292 864 bytes)

write 0x1 instead of 0x0 at address 0x444EA8 (file offset 0x43aa8).
;====
Explanation
===========
If variable(or constant?) at this address is 0x1, RCC will convert
strings to unicode via MultiByteToWideChar, BUT this variable is always 0, 
and RCC uses another way of converting: it converts every
byte of source ANSI string to word (of course this is WRONG way).

I don't know, maybe this variable and two ways of converting were
intended for debugging purposes and the author forgot to remove this code.

For russian resources(and maybe some others), using MultiByteToWideChar
to convert ANSI to Unicode is the only correct way.
;====
If u don't believe me, see code starting from address 0x437820.
Dec 23 2003
↑ ↓ → "Charles" <sanders-consulting comcast.net> writes:
Woa, did you open this in hex and edit it by hand ?? My hero lol!  Thats
some serious hacking :).

C

"Denis Troshin" <weiv mail.ru> wrote in message
news:opr0m4q3yqan535p pop.mail.ru...
 OK, I solved this problem by myself.

 So, those who have problems with RCC & Russian resources,
 you can use my PATCH:

 if you have RCC.EXE version 7.50B5 (292 864 bytes)

 write 0x1 instead of 0x0 at address 0x444EA8 (file offset 0x43aa8).
 ;====
 Explanation
 ===========
 If variable(or constant?) at this address is 0x1, RCC will convert
 strings to unicode via MultiByteToWideChar, BUT this variable is always 0,
 and RCC uses another way of converting: it converts every
 byte of source ANSI string to word (of course this is WRONG way).

 I don't know, maybe this variable and two ways of converting were
 intended for debugging purposes and the author forgot to remove this code.

 For russian resources(and maybe some others), using MultiByteToWideChar
 to convert ANSI to Unicode is the only correct way.
 ;====
 If u don't believe me, see code starting from address 0x437820.

Dec 25 2003
→ Denis Troshin <weiv mail.ru> writes:
I found out, this problem is because of stupid code in library function
"mbstowcs" in RCC.EXE.
Dec 24 2003