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

  1. ; FKEY for TurboDOS
  2. ; By ESKAY 4/85 No Lefts Reversed
  3. ;
  4. .z80
  5. ;
  6.     dseg
  7. ;
  8. leadin:: db    'A'-40h        ; lead-in character
  9. lastc:    db    0        ; previous char
  10. infk:    db    0        ; ff=in sequence
  11. fkptr:    dw    0        ; points to current fkey
  12. fkeys::    db    0
  13.     ds    255
  14. ;
  15.     cseg
  16. ;
  17. fkey::    ld    hl,leadin
  18.     cp    (hl)
  19.     jr    z,isli        ; jump if it is leadin
  20.     inc    hl
  21.     ld    (hl),a
  22.     ret
  23. ;
  24. ; come here if we just received a leadin character
  25. ;
  26. isli:    push    af
  27.     ld    a,(fkeys)
  28.     or    a
  29.     jr    nz,dofk        ; fkeys are enabled
  30.     pop    af        ; no fkeys enabled - let's split
  31.     ret
  32. ;
  33. dofk:    inc    hl
  34.     pop    af
  35.     ld    (hl),a        ; set previous char
  36.     push    de
  37.     ld    e,1        ; get char
  38.     call    serial##
  39. ;
  40. ; this char is the fkey
  41. ;
  42.     push    bc
  43.     ld    hl,fkeys    ; hl points to fkeys
  44.     ld    b,255        ; 255 chars to check
  45.     ld    c,a
  46. begofk:    cp    (hl)
  47.     jr    z,fndfk
  48.     dec    b
  49.     inc    hl
  50. nxtfk:    ld    a,(hl)
  51.     or    a
  52.     inc    hl
  53.     ld    a,c
  54.     jr    z,begofk
  55.     djnz    nxtfk
  56. pdex:    pop    bc
  57.     pop    de
  58.     ret            ; fkey not in table
  59. ;
  60. fndfk:    inc    hl
  61.     ld    a,0ffh
  62.     ld    (infk),a
  63.     ld    a,(hl)
  64.     inc    hl
  65.     ld    (fkptr),hl
  66.     jr    pdex
  67. ;
  68. getfk::    ld    a,(infk)
  69.     or    a
  70.     ret    z        ; no fkey sequence
  71.     ld    hl,(fkptr)
  72.     ld    a,(hl)
  73.     inc    hl
  74.     ld    (fkptr),hl
  75.     or    a
  76.     jr    nz,retfk
  77.     ld    (infk),a    ; reset in-fk flag
  78.     ret            ; return (continue normally)
  79. ;
  80. retfk:    pop    hl        ; kill ret addr
  81.     ret            ; return to previous caller
  82.     end
  83.