home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #2 / RBBS_vol1_no2.iso / add2 / dkey120.zip / KEYLIB.ASM < prev    next >
Assembly Source File  |  1988-04-09  |  3KB  |  204 lines

  1.  
  2. PAGE    60,132
  3. TITLE    KEYLIB  -  C INTERFACE ROUTINES FOR DKEY
  4.  
  5. COMMENT !
  6.  
  7.     ret = dk_reset();        clear entire macro table
  8.     ret = dk_disable();        disable translation
  9.     ret = dk_enable();        enable translation
  10.     ret = dk_set(keycode,def);    install or alter key definition
  11.     ret = dk_get(keycode,def);    retrieve definition by keycode
  12.     kc = dk_gnum(num,def);        retrieve definition by sequence #
  13.     bytes = dk_size();        retrieve size of macro table
  14.  
  15.     int ret;        return value.     0 = success
  16.                         -1 = DK not resident
  17.                          1 = other failure
  18.  
  19.     int keycode;        BIOS keycode.  Key scan code in upper 8 bits
  20.     char *def;        string for definition.  Length of destination
  21.                   NOT checked for dk_get() and dk_gnum()
  22.     int kc;            keycode returned from dk_gnum()
  23.                     -1 = DK not resident
  24.                     -2 = requested definition not found
  25.                     otherwise is BIOS keycode
  26.     unsigned num;        sequence number for definition.  0 = lowest
  27.     unsigned bytes;        length of macro table.
  28.                                         65535 = DK not resident
  29.  
  30.     The assembly language routines in DKEY are 'allowed' to (but might not)
  31.     trash the the following registers:
  32.     
  33.             AX,BX,CX,DX,DI,SI,ES
  34.  
  35. !
  36.  
  37. INCLUDE DOS.MAC
  38. INCLUDE STRUCT.MAC
  39.  
  40. DKEY    MACRO    func
  41.     MOV    AH,&0func&H
  42.     INT    16H
  43.     ENDM
  44.  
  45. save    macro
  46.     push    si
  47.     push    di
  48.     endm
  49.  
  50. unsave    macro
  51.     pop    di
  52.     pop    si
  53.     endm
  54.  
  55. _TEXT   SEGMENT BYTE PUBLIC 'CODE'
  56.         ASSUME  CS:_TEXT
  57.  
  58.  
  59.     PROCEDURE _dk_reset
  60.  
  61.     save
  62.     CALL    _dk_resident
  63.     JNZ    END1
  64.     DKEY    80
  65. END1:    unsave
  66.     RET
  67.  
  68. _dk_reset    ENDP
  69.  
  70.  
  71.  
  72.     PROCEDURE _dk_disable
  73.     
  74.     save
  75.     CALL    _dk_resident
  76.     JNZ    END4
  77.     DKEY    81
  78. END4:    unsave
  79.     RET
  80.  
  81. _dk_disable    ENDP
  82.  
  83.  
  84.  
  85.     PROCEDURE _dk_enable
  86.     
  87.     save
  88.     CALL    _dk_resident
  89.     JNZ    END5
  90.     DKEY    82
  91. END5:    unsave
  92.     RET
  93.  
  94. _dk_enable    ENDP
  95.  
  96.  
  97.  
  98.     PROCEDURE _dk_set
  99.     
  100.     ENTER
  101.     PASSW    KEYCODE
  102.     PASSA    DEF
  103.     
  104.     save
  105.     CALL    _dk_resident
  106.     JNZ    END6
  107.     PUSH    DS
  108.     MOV    CX,KEYCODE
  109.     IF LDATA
  110.     LES    DI,DEF
  111.     ELSE
  112.     MOV    DI,DS
  113.     MOV    ES,DI
  114.     MOV    DI,DEF
  115.     ENDIF
  116.     DKEY    83
  117.     POP    DS
  118. END6:    unsave
  119.     RETURN
  120.  
  121. _dk_set    ENDP
  122.  
  123.  
  124.  
  125.     PROCEDURE _dk_get
  126.     
  127.     ENTER
  128.     PASSW    KEYCODE
  129.     PASSA    DEF
  130.     
  131.     save
  132.     CALL    _dk_resident
  133.     JNZ    END7
  134.     PUSH    DS
  135.     MOV    CX,KEYCODE
  136.     IF LDATA
  137.     LES    DI,DEF
  138.     ELSE
  139.     MOV    DI,DS
  140.     MOV    ES,DI
  141.     MOV    DI,DEF
  142.     ENDIF
  143.     DKEY    84
  144.     POP    DS
  145. END7:    unsave
  146.     RETURN
  147.  
  148. _dk_get    ENDP
  149.  
  150.  
  151.  
  152.     PROCEDURE _dk_gnum
  153.     
  154.     ENTER
  155.     PASSW    NUM
  156.     PASSA    DEF
  157.     
  158.     save
  159.     CALL    _dk_resident
  160.     JNZ    END8
  161.     PUSH    DS
  162.     MOV    CX,NUM
  163.     IF LDATA
  164.     LES    DI,DEF
  165.     ELSE
  166.     MOV    DI,DS
  167.     MOV    ES,DI
  168.     MOV    DI,DEF
  169.     ENDIF
  170.     DKEY    85
  171.     POP    DS
  172. END8:    unsave
  173.     RETURN
  174.  
  175. _dk_gnum    ENDP
  176.  
  177.  
  178.  
  179.     PROCEDURE _dk_size 
  180.     
  181.     save
  182.     CALL    _dk_resident
  183.     JNZ    END9
  184.     DKEY    86
  185. END9:    unsave
  186.     RET
  187.  
  188. _dk_size    ENDP
  189.  
  190.  
  191.  
  192. PUBLIC    _dk_resident
  193. _dk_resident    PROC
  194.  
  195.         DKEY    87
  196.         CMP     AX,'JW'                 ;ZERO SET IF DKEY resident
  197.         MOV     AX,0FFFFH               ;JUST IN CASE
  198.         RET
  199.  
  200. _dk_resident    ENDP
  201.  
  202. _TEXT   ENDS
  203.     END
  204.