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