TITLE "String support routines" ; Copyright (c) 1989 Microsoft Corporation ; Module Name: ; stringsup.asm ; Abstract: ; This module implements suplimentary routines for performing string ; operations. ; Author: ; Larry Osterman (larryo) 18-Sep-1991 ; Environment: ; Any mode. ; Revision History: .386p include callconv.inc ; calling convention macros _TEXT SEGMENT DWORD PUBLIC 'CODE' ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING page ,132 subttl "RtlAnsiCharToUnicodeChar" ; WCHAR ;RtlAnsiCharToUnicodeChar( ; IN OUT PCHAR *SourceCharacter ; ) ; Routine Description: ; This function translates the specified ansi character to unicode and ; returns the unicode value. The purpose for this routine is to allow ; for character by character ansi to unicode translation. The ; translation is done with respect to the current system locale ; information. ; Arguments: ; (TOS+4) = SourceCharacter - Supplies a pointer to an ansi character pointer. ; Through two levels of indirection, this supplies an ansi ; character that is to be translated to unicode. After ; translation, the ansi character pointer is modified to point to ; the next character to be converted. This is done to allow for ; dbcs ansi characters. ; Return Value: ; Returns the unicode equivalent of the specified ansi character. ; Note: ; This routine will have to be converted to use the proper unicode mapping ; tables. cPublicProc _RtlAnsiCharToUnicodeChar ,1 cPublicFpo 1,2 push esi mov esi, [esp+8] push dword ptr [esi] ; Save the old input string inc dword ptr [esi] ; Bump the input string pop esi ; (ESI) = input string xor eax, eax ; Zero out the EAX register. lodsb ; Grab the first character from string pop esi stdRET _RtlAnsiCharToUnicodeChar stdENDP _RtlAnsiCharToUnicodeChar page subttl "RtlpAnsiPszToUnicodePsz" ; VOID ; RtlpAnsiPszToUnicodePsz( ; IN PCHAR AnsiString, ; IN PWCHAR UnicodeString, ; IN USHORT AnsiStringLength ; ) ; Routine Description: ; This function translates the specified ansi character to unicode and ; returns the unicode value. The purpose for this routine is to allow ; for character by character ansi to unicode translation. The ; translation is done with respect to the current system locale ; information. ; Arguments: ; (ESP+4) = AnsiString - Supplies a pointer to the ANSI string to convert to unicode. ; (ESP+8) = UnicodeString - Supplies a pointer to a buffer to hold the unicode string ; (ESP+12) = AnsiStringLength - Supplies the length of the ANSI string. ; Return Value: ; None. ; Note: ; This routine will have to be converted to use the proper unicode mapping ; tables. cPublicProc _RtlpAnsiPszToUnicodePsz ,3 cPublicFpo 3,2 push esi push edi xor ecx, ecx mov cx, [esp]+12+8 jecxz raptup9 mov esi, [esp]+4+8 mov edi, [esp]+8+8 xor ah, ah @@: lodsb stosw loop @b xor eax, eax stosw ; Don't forget to stick the null at end raptup9:pop edi pop esi stdRET _RtlpAnsiPszToUnicodePsz stdENDP _RtlpAnsiPszToUnicodePsz _TEXT ends end