home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / tdossigi / fkey.a < prev    next >
Text File  |  1986-07-05  |  1KB  |  79 lines

  1. ; FKEY for TurboDOS
  2. ; By ESKAY 4/85 No Lefts Reversed
  3. ;
  4.     LOC    Data#
  5. ;
  6. LEADIN:: BYTE    0X01        ; LEAD-IN CHARACTER
  7. LASTC:    BYTE    0        ; PREVIOUS CHAR
  8. INFK:    BYTE    0        ; FF=IN SEQUENCE
  9. FKPTR:    WORD    0        ; POINTS TO CURRENT FKEY
  10. FKEYS::    BYTE    0
  11.     RES    4095
  12. ;
  13.     LOC    Code#
  14. ;
  15. FKEY::    MOV    BX,&LEADIN
  16.     CMP    AL,[BX]
  17.     JZ    ISLI        ; JUMP IF IT IS LEADIN
  18.     INC    BX
  19.     MOV    [BX],AL
  20.     RET
  21. ;
  22. ; COME HERE IF WE JUST RECEIVED A LEADIN CHARACTER
  23. ;
  24. ISLI:    CMP    FKEYS,=0
  25.     JNZ    DOFK        ; FKEYS ARE ENABLED
  26.     RET
  27. ;
  28. DOFK:    INC    BX
  29.     MOV    [BX],AL        ; SET PREVIOUS CHAR
  30.     PUSH    DX
  31.     MOV    DL,=1        ; GET CHAR
  32.     CALL    SERIAL#
  33. ;
  34. ; THIS CHAR IS THE FKEY
  35. ;
  36.     PUSH    CX
  37.     MOV    BX,&FKEYS-1    ; HL POINTS TO FKEYS
  38.     MOV    CX,=4095    ; 4095 CHARS TO CHECK
  39.     MOV    AH,AL        ; SAVE CHAR
  40. BEGOFK:    INC    BX
  41.     CMP    [BX],AH
  42.     JZ    FNDFK
  43.     CMP    BYTE [BX],=0XFF    ;EOF?
  44.     JZ    PDEX
  45.     INC    BX
  46.     DEC    CX
  47. NXTFK:    CMP    BYTE [BX],=0
  48.     JZ    BEGOFK
  49.     CMP    BYTE [BX],=0XFF
  50.     JZ    PDEX
  51.     INC    BX
  52.     LOOP    NXTFK
  53. PDEX:    POP    CX
  54.     POP    DX
  55.     RET            ; FKEY NOT IN TABLE
  56. ;
  57. FNDFK:    INC    BX
  58.     MOV    BYTE INFK,=0XFF
  59.     MOV    AL,[BX]
  60.     INC    BX
  61.     MOV    FKPTR,BX
  62.     JMPS    PDEX
  63. ;
  64. GETFK::    CMP    BYTE INFK,=0
  65.     JNZ    __X
  66.     RET            ; NO FKEY SEQUENCE
  67. ;
  68. __X:    MOV    BX,FKPTR
  69.     MOV    AL,[BX]
  70.     INC    FKPTR
  71.     OR    AL,AL
  72.     JNZ    RETFK
  73.     MOV    BYTE INFK,=0    ; RESET IN-FK FLAG
  74.     RET            ; RETURN (CONTINUE NORMALLY)
  75. ;
  76. RETFK:    POP    BX        ; KILL RET ADDR
  77.     RET            ; RETURN TO PREVIOUS CALLER
  78.     END
  79.