mirror of https://github.com/lianthony/NT4.0
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.
205 lines
3.7 KiB
205 lines
3.7 KiB
page ,132
|
|
title ismbbyte - Function versions of MBCS ctype macros
|
|
;***
|
|
;ismbbyte.asm - Function versions of MBCS ctype macros.
|
|
;
|
|
; Copyright (c) 1988-1992, Microsoft Corporation. All rights reserved.
|
|
;
|
|
;Purpose:
|
|
; This files provides function versions of the character
|
|
; classification and conversion macros in mbctype.h.
|
|
;
|
|
;Revision History:
|
|
; 06-12-90 YSO Created
|
|
; 06-13-90 YSO Added support for model-independent function
|
|
; (internal function)
|
|
; 04-24-91 JCR MBCS generalization/enhancement
|
|
; 07-17-91 JLM Generalized _MK (Kana moji bit mask) to _MS (MBCS
|
|
; single byte symbol).
|
|
; 08-09-91 JLM Changed file name from _mbctype.asm to mbscfcn.asm
|
|
; 08-15-91 JLM Standardized ifdefs for model-independent function.
|
|
; 08-20-91 JLM Changed ismb* to ismbb*.
|
|
; 08-28-91 JLM Changed file/function names to MBCS spec.
|
|
;
|
|
;*******************************************************************************
|
|
|
|
.xlist
|
|
include version.inc
|
|
include cmacros.inc
|
|
.list
|
|
|
|
|
|
; Define masks
|
|
|
|
; set bit masks for the possible kanji character types
|
|
; (all MBCS bit masks start with "_M")
|
|
|
|
_MS equ 01h ; MBCS non-ascii single byte char
|
|
_MP equ 02h ; MBCS punct
|
|
_M1 equ 04h ; MBCS 1st (lead) byte
|
|
_M2 equ 08h ; MBCS 2nd byte
|
|
|
|
; set bit masks for the possible character types
|
|
|
|
_UPPER equ 01h ; upper case letter
|
|
_LOWER equ 02h ; lower case letter
|
|
_DIGIT equ 04h ; digit[0-9]
|
|
_SPACE equ 08h ; tab, carriage return, newline,
|
|
; vertical tab or form feed
|
|
_PUNCT equ 10h ; punctuation character
|
|
_CONTROL equ 20h ; control character
|
|
_BLANK equ 40h ; space char
|
|
_HEX equ 80h ; hexadecimal digit
|
|
|
|
sBegin data
|
|
assumes ds,data
|
|
extrn __mbctype:byte ; MBCS ctype table
|
|
extrn __ctype_:byte ; ANSI/ASCII ctype table
|
|
sEnd
|
|
|
|
|
|
sBegin code
|
|
|
|
assumes cs,code
|
|
assumes ds,data
|
|
|
|
page
|
|
;***
|
|
; ismbbyte - Function versions of mbctype macros
|
|
;
|
|
;Purpose:
|
|
;
|
|
;Entry:
|
|
; int = character to be tested
|
|
;Exit:
|
|
; ax = non-zero = character is of the requested type
|
|
; = 0 = character is NOT of the requested type
|
|
;
|
|
;Uses:
|
|
;
|
|
;Exceptions:
|
|
;
|
|
;*******************************************************************************
|
|
|
|
ifndef MODELINDEP
|
|
|
|
ifdef _KANJI
|
|
|
|
public __ismbbkalnum
|
|
__ismbbkalnum:
|
|
mov ax, _MS
|
|
jmp short mbctype
|
|
|
|
public __ismbbkpunct
|
|
__ismbbkpunct:
|
|
mov ax, _MP
|
|
jmp short mbctype
|
|
|
|
public __ismbbkana
|
|
__ismbbkana:
|
|
mov ax, (_MS OR _MP)
|
|
jmp short mbctype
|
|
|
|
endif
|
|
|
|
|
|
public __ismbbalpha
|
|
__ismbbalpha:
|
|
mov ah, (_UPPER OR _LOWER)
|
|
mov al, _MS
|
|
jmp short mbctype
|
|
|
|
public __ismbbpunct
|
|
__ismbbpunct:
|
|
mov ah, _PUNCT
|
|
mov al, _MP
|
|
jmp short mbctype
|
|
|
|
public __ismbbalnum
|
|
__ismbbalnum:
|
|
mov ah, (_UPPER OR _LOWER OR _DIGIT)
|
|
mov al, _MS
|
|
jmp short mbctype
|
|
|
|
public __ismbbprint
|
|
__ismbbprint:
|
|
mov ah, (_BLANK OR _PUNCT OR _UPPER OR _LOWER OR _DIGIT)
|
|
mov al, (_MS OR _MP)
|
|
jmp short mbctype
|
|
|
|
public __ismbbgraph
|
|
__ismbbgraph:
|
|
mov ah, (_PUNCT OR _UPPER OR _LOWER OR _DIGIT)
|
|
mov al, (_MS OR _MP)
|
|
jmp short mbctype
|
|
|
|
public __ismbblead
|
|
__ismbblead:
|
|
mov ax,_M1
|
|
jmp short mbctype
|
|
|
|
public __ismbbtrail
|
|
__ismbbtrail:
|
|
mov ax,_M2
|
|
jmp short mbctype
|
|
|
|
else ; MODELINDEP
|
|
|
|
public __fismbblead
|
|
__fismbblead:
|
|
mov ax,_M1
|
|
jmp short mbctype
|
|
|
|
public __fismbbtrail
|
|
__fismbbtrail:
|
|
mov ax,_M2
|
|
jmp short mbctype
|
|
|
|
endif ; MODELINDEP
|
|
|
|
;
|
|
; Common code
|
|
;
|
|
; ax = character mask
|
|
;
|
|
; al = mask for _mbctype[] table
|
|
; ah = mask for _ctype[] table
|
|
;
|
|
|
|
cProc mbctype,<LOCAL>,<>
|
|
|
|
parmW char
|
|
|
|
cBegin
|
|
|
|
ifdef _LOAD_DGROUP
|
|
push ds
|
|
mov bx,DGROUP
|
|
mov ds,bx
|
|
else
|
|
ifdef MODELINDEP
|
|
push ds
|
|
mov bx,DGROUP
|
|
mov ds,bx
|
|
endif
|
|
endif
|
|
|
|
mov bx,[char] ; get input character
|
|
cmp ah, 0 ; any non-MBCS comparison?
|
|
jz @F ; jump, if not
|
|
and ah, [bx + __ctype_ + 1] ; test _ctype[] entry
|
|
@@:
|
|
and al, [bx + __mbctype + 1] ; test _mbctype[] entry
|
|
ifdef _LOAD_DGROUP
|
|
pop ds
|
|
else
|
|
ifdef MODELINDEP
|
|
pop ds
|
|
endif
|
|
endif
|
|
|
|
cEnd <nolocals>
|
|
|
|
sEnd
|
|
|
|
end
|