uiword.asm
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:6k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. page ,132
  2. TITLE uiword.asm - Low level code for delineating words
  3. ;*** 
  4. ;uiword.asm
  5. ;
  6. ; Copyright <C> 1985-1988, Microsoft Corporation
  7. ;
  8. ;Purpose:
  9. ; Interface between CW and and QB for determining characters
  10. ; delineating words.  Contains tables and code that define
  11. ; character set allowed in generic words, and BASIC labels.
  12. ;
  13. ;
  14. ;*******************************************************************************
  15. .xlist
  16. include version.inc
  17. .list
  18. UIWORD_ASM = ON
  19. IncludeOnce uiint
  20. assumes DS,DATA
  21. assumes ES,DATA
  22. assumes SS,DATA
  23. subttl DATA segment definitions.
  24. page
  25. sBegin UI
  26. assumes CS,UI
  27. extrn GetEditWord:near
  28. ; Verify that all the GEW constants have realistic values
  29. ; These must match with the word at wordDot.
  30. .erre GEW_DFLTMASK   EQ 5E03H
  31. .erre GEW_DFLTMASK   EQ GEW_NODOTMASK OR 0002H
  32. .erre GEW_DFLTMASK   EQ GEW_HELPMASK OR 4002H
  33. .erre GEW_VARMASK    EQ 0000H
  34. .erre GEW_VARDOTMASK EQ GEW_VARMASK OR 0002H
  35. wordCharBitMask dw 00000H ; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  36. ; N S S E E E A B B H L V F C S S
  37. ; U O T T O N C E S T F T F R O I
  38. ; L H X X T Q K L
  39. dw 00000H ; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  40. ; D D D D D S E C E S E F G R U S
  41. ; L C C C C Y T A M U S S S S S P
  42. ; E 1 2 3 4 N B N   B C
  43. wordDot  dw 05e03H ; 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 1
  44. ;   ! " # $ % & ' ( ) * + , - . /
  45. dw 0ffC0H ; 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
  46. ; 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
  47. dw 07fffH ; 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  48. ; @ A B C D E F G H I J K L M N O
  49. dw 0ffe0H ; 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
  50. ; P Q R S T U V W X Y Z [  ] ^ _
  51. dw 07fffH ; 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  52. ; ` a b c d e f g h i j k l m n o
  53. dw 0ffe0H ; 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
  54. ; p q r s t u v w x y z { | } ~ D
  55. ;                               E
  56. ;                               L
  57. dw 0ffffH ; 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  58. ; Accented letters (IBM char set)
  59. dw 0ffe0H ; 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
  60. ; Accented letters (IBM char set)
  61. dw 0ff00H ; 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  62. ; Accented letters (IBM char set)
  63. LabelBitMask dw 00040H ; 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
  64. ; N S S E E E A B B H L V F C S S
  65. ; U O T T O N C E S T F T F R O I
  66. ; L H X X T Q K L
  67. dw 00000H ; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  68. ; D D D D D S E C E S E F G R U S
  69. ; L C C C C Y T A M U S S S S S P
  70. ; E 1 2 3 4 N B N   B C
  71. dw 08002H ; 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
  72. ;   ! " # $ % & ' ( ) * + , - . /
  73. dw 0ffc0H ; 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
  74. ; 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
  75. dw 07fffH ; 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  76. ; @ A B C D E F G H I J K L M N O
  77. dw 0ffe0H ; 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
  78. ; P Q R S T U V W X Y Z [  ] ^ _
  79. dw 07fffH ; 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  80. ; ` a b c d e f g h i j k l m n o
  81. dw 0ffe0H ; 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
  82. ; p q r s t u v w x y z { | } ~ D
  83. ;                               E
  84. ;                               L
  85. dw 0ffffH ; 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  86. ; Accented letters (IBM char set)
  87. dw 0ffe0H ; 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
  88. ; Accented letters (IBM char set)
  89. dw 0ff00H ; 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  90. ; Accented letters (IBM char set)
  91. subttl Low level CW interface for chars in defining words/labels
  92. page
  93. ;***
  94. ;IsInTable - checks specified table for presence of character
  95. ;Purpose:
  96. ;  Uses mod arithematic to check of a bit in a mask table
  97. ;  is on for a character. This is used to classify character
  98. ;Entry:
  99. ;  al - character
  100. ;  si - pointer to mask table
  101. ;Exit:
  102. ;  returns - 1 if in table
  103. ;      0 if not
  104. ;Uses:
  105. ;  bx, cx
  106. ;***
  107. cProc IsInTable,<NEAR>
  108. cBegin
  109. cmp al, 0b0H
  110. jae NotInTable
  111. ; See if bit # char is set in the array of bits WordCharBitMask
  112. push ax
  113. and ax, 00f0H
  114. mov cl, 3
  115. shr al, cl
  116. mov bx, ax
  117. mov bx, cs:[si+bx] ; table is FAR to save DGROUP
  118. pop ax
  119. and al, 0fH
  120. inc al
  121. mov cl, al
  122. xor ax, ax
  123. stc
  124. rcr ax, cl
  125. and ax, bx
  126. jz NotInTable
  127. mov ax, 1
  128. jmp short InTableDone
  129. NotInTable:
  130. xor ax, ax
  131. InTableDone:
  132. cEnd
  133. ;***
  134. ;IsWordChar, IsLabelChar - checks if character can be in a word or BASIC label
  135. ;Purpose:
  136. ;  Sets up word table and calls IsInTable to see if specified character
  137. ;  is a valid character in a word/BASIC label.
  138. ;Entry:
  139. ;  parmB char - character to test
  140. ;Exit:
  141. ;  returns - 1 if char can be part of a word
  142. ;      0 if not
  143. ;Uses:
  144. ;  Per Convention
  145. ;*****************************************************************************
  146. cProc IsWordChar,<PUBLIC,FAR>,<SI>
  147. parmB char
  148. cBegin
  149. mov si, UIOFFSET WordCharBitMask
  150. mov al, char
  151. cCall IsInTable
  152. cEnd
  153. cProc IsLabelChar,<PUBLIC,NEAR>,<SI>
  154. parmB char
  155. cBegin
  156. mov si, UIOFFSET LabelBitMask
  157. mov al, char
  158. cCall IsInTable
  159. cEnd
  160. ;***
  161. ;GetEditWordMask - Calls GetEditWord, disallowing certain standard characters
  162. ;
  163. ;Purpose:
  164. ; Added with revision [5].
  165. ; Toggles the bits inthe table that are specified by the mask, then
  166. ; calls GetEditWord.
  167. ;
  168. ;Entry:
  169. ; pBuf - ptr to buffer to receive word (same as GetEditWord)
  170. ; cbMax - maximum size of buffer (same as GetEditWord)
  171. ; wMask  - GEW constant defining what values to mask out for this
  172. ; GetEditWord search.
  173. ;
  174. ;Exit:
  175. ; none
  176. ;
  177. ;Uses:
  178. ; Per Convention
  179. ;*****************************************************************************
  180. cProc GetEditWordMask,<PUBLIC,NEAR>
  181. parmW pBuf
  182. parmW cbMax
  183. parmW wMask
  184. cBegin
  185. mov ax,wMask ; get the new set of legal chars
  186. mov cs:[wordDot],ax ; disable characters in words
  187. cCall GetEditWord,<pBuf,cbMax> ;get word under cursor
  188. or cs:[wordDot],GEW_DFLTMASK ; re-enable proper chars in words
  189. cEnd
  190. sEnd UI
  191. end