home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / rainbow / msdos / decus / RB140 / grlibfor.arj / GETKEY.ASM < prev    next >
Assembly Source File  |  1988-12-11  |  3KB  |  227 lines

  1. PAGE ,132
  2. TITLE GETKEY.ASM
  3. ;UPDATE HISTORY
  4. ;==============
  5. ; 3-dec-1984
  6.      convert from c to assembler
  7.  
  8. include asmc.h
  9. include asmk.h
  10.  
  11.  
  12.     public    CAPITAL
  13.     public    INKEY
  14.     public    GETKEY
  15.     extr
  16. n    KBD16:near, KBDIN:near
  17. ; convert character to uppercase if lower c
  18. ase */
  19. ;  if('a'<=c && c<='z')c+=('A'-'a');
  20. ;  return c;
  21. ucase    
  22. PROC    NEAR
  23.     push    BP
  24.     mov    BP,SP
  25.     mov    AL,+4[BP]
  26.     cbw
  27.  
  28.     cmp    AX,97
  29.     jl    ucasex
  30.     mov    AL,+4[BP]
  31.     cbw
  32.     cmp    AX,1
  33. 22
  34.     jg    ucasex
  35.     mov    AX,-32
  36.     push    AX
  37.     pop    DX
  38.     mov    
  39. AL,+4[BP]
  40.     cbw
  41.     add    AX,DX
  42.     mov    +4[BP],AL
  43. ucasex:
  44.     m
  45. ov    AL,+4[BP]
  46.     cbw
  47.     mov    SP,BP
  48.     pop    BP
  49.     ret
  50. ucase    E
  51. NDP
  52.  
  53.  
  54. ;******************************************************
  55. ;convert non-function key to upper case               *
  56. ;c
  57. apital(key_pressed)                                 *
  58. ;unsigned int key_pressed;                            *
  59. ;******************************************************
  60.     P
  61. ROCDEF CAPITAL
  62.     push    BP
  63.     mov    BP,SP
  64.  
  65. ;    if ( !FUNKEY(key
  66. _pressed) )
  67.     mov    AX,+4[BP]
  68.     and    AX,256
  69.     or    AX,AX
  70.     je    
  71. .012
  72.     mov    AX,1
  73.     jmp    SHORT .014
  74. .012:            ;11
  75.     xor    AX,AX
  76.  
  77. .014:            ;11
  78.     or    AX,AX
  79.     je    .01A
  80.     jmp    SHORT .027
  81.  
  82.  
  83. ;    return(toupper(key_pressed));
  84. .01A:            ;11
  85.     push    WORD PTR +
  86. 4[BP]
  87.     call    ucase
  88.     add    SP,2
  89.  
  90.     mov    SP,BP
  91.     pop    BP
  92.  
  93.     ret
  94.  
  95. ;     else
  96. ;    return(key_pressed);
  97. .027:            ;13
  98.     
  99. mov    AX,+4[BP]
  100.     mov    SP,BP
  101.     pop    BP
  102.     ret
  103.     PROCEND CAPITA
  104. L
  105.  
  106. ;******************************************************
  107. ;wait for a key to be pressed and return it to caller *
  108.  
  109. ; inkey()                                             *
  110. ;******************************************************
  111.  
  112.  
  113. INKEY    PROC    NEAR
  114. .032:            ;19
  115.  
  116.     push    BP
  117.     mov    BP,SP
  118.     sub    SP,2
  119.  
  120. ;    while ((key = get
  121. key()) == 0);
  122. .038:            ;22
  123.     call    GETKEY
  124.     mov    -2[BP],AX
  125.     
  126. cmp    AX,0
  127.     jne    .045
  128.     jmp    SHORT .038
  129.  
  130. ;    return(key);
  131.  
  132. .045:            ;22
  133.     mov    AX,-2[BP]
  134.     mov    SP,BP
  135.     pop    BP
  136.     ret
  137.  
  138. INKEY    ENDP
  139.  
  140. ;***********************************************************
  141. ;see if a key was pressed and return 16-bit
  142.  char to caller *
  143. ;if function key, bit 0x0100 = 1                           *
  144. ;           else, b
  145. it 0x0100 = 0                           *
  146. ;return 0 if no key pressed                                *
  147. ;getkey()                                                  *
  148.  
  149. ;***********************************************************
  150. ;    };
  151. ;}
  152. GETKEY    PROC    NEAR
  153. .04C:            ;27
  154.     push    BP
  155.  
  156.     mov    BP,SP
  157.     sub    SP,6
  158.  
  159. ;    j = kbd16(&i);
  160.     lea    SI,-6[
  161. BP]
  162.     push    SI
  163.     call    KBD16
  164.     add    SP,2
  165.  
  166. ;    while (j ==
  167.  LEV2) {            /* lose L2 chars */
  168. ;    j = kbdin(k);
  169. ;    j = kbd16(&i);
  170.  
  171.     mov    -4[BP],AX
  172. .05F:            ;31
  173.     cmp    WORD PTR -4[BP],1
  174.     jn
  175. e    .081
  176.     push    WORD PTR -2[BP]
  177.     call    KBDIN
  178.     add    SP,2
  179.     
  180. mov    -4[BP],AX
  181.     lea    SI,-6[BP]
  182.     push    SI
  183.     call    KBD16
  184.     a
  185. dd    SP,2
  186.     mov    -4[BP],AX
  187.     jmp    SHORT .05F
  188.  
  189. ;    if (j == AK
  190. EY) return(i & FUNCTION ? i & FUNMASK : i & 0xFF);
  191. .081:            ;34
  192.     
  193. cmp    WORD PTR -4[BP],-1
  194.     jne    .0A4
  195.     mov    AX,-6[BP]
  196.     and    AX,
  197. 256
  198.     or    AX,AX
  199.     je    .09A
  200.     mov    AX,-6[BP]
  201.     and    AX,319
  202.  
  203.     jmp    SHORT .0A0
  204. .09A:            ;35
  205.     mov    AX,-6[BP]
  206.     and    AX,255
  207.  
  208. .0A0:            ;35
  209.     mov    SP,BP
  210.     pop    BP
  211.     ret
  212.  
  213. ;    return(0
  214. );
  215. .0A4:            ;36
  216.     xor    AX,AX
  217.     mov    SP,BP
  218.     pop    BP
  219.     ret
  220.  
  221. GETKEY    ENDP
  222.  
  223.  
  224. include epilogue.h
  225.     END
  226. 
  227.