home *** CD-ROM | disk | FTP | other *** search
- ; FKEY for TurboDOS
- ; By ESKAY 4/85 No Lefts Reversed
- ;
- .z80
- ;
- dseg
- ;
- leadin:: db 'A'-40h ; lead-in character
- lastc: db 0 ; previous char
- infk: db 0 ; ff=in sequence
- fkptr: dw 0 ; points to current fkey
- fkeys:: db 0
- ds 255
- ;
- cseg
- ;
- fkey:: ld hl,leadin
- cp (hl)
- jr z,isli ; jump if it is leadin
- inc hl
- ld (hl),a
- ret
- ;
- ; come here if we just received a leadin character
- ;
- isli: push af
- ld a,(fkeys)
- or a
- jr nz,dofk ; fkeys are enabled
- pop af ; no fkeys enabled - let's split
- ret
- ;
- dofk: inc hl
- pop af
- ld (hl),a ; set previous char
- push de
- ld e,1 ; get char
- call serial##
- ;
- ; this char is the fkey
- ;
- push bc
- ld hl,fkeys ; hl points to fkeys
- ld b,255 ; 255 chars to check
- ld c,a
- begofk: cp (hl)
- jr z,fndfk
- dec b
- inc hl
- nxtfk: ld a,(hl)
- or a
- inc hl
- ld a,c
- jr z,begofk
- djnz nxtfk
- pdex: pop bc
- pop de
- ret ; fkey not in table
- ;
- fndfk: inc hl
- ld a,0ffh
- ld (infk),a
- ld a,(hl)
- inc hl
- ld (fkptr),hl
- jr pdex
- ;
- getfk:: ld a,(infk)
- or a
- ret z ; no fkey sequence
- ld hl,(fkptr)
- ld a,(hl)
- inc hl
- ld (fkptr),hl
- or a
- jr nz,retfk
- ld (infk),a ; reset in-fk flag
- ret ; return (continue normally)
- ;
- retfk: pop hl ; kill ret addr
- ret ; return to previous caller
- end
-