Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

146 lines
3.6 KiB

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