133 lines
2.8 KiB
Plaintext
133 lines
2.8 KiB
Plaintext
; flags.z - code to handle trivial flag toggles
|
||
|
||
.incl "c:termcap"
|
||
|
||
.var ipbuf 0x80
|
||
|
||
.extern msbtog
|
||
msbtog: call force ; go see what we're doing to the flag
|
||
ld hl,bmask ; address where mask lives
|
||
jr z,domsbt ; zero => straight toggle
|
||
sub '0' ; was it a '0'?
|
||
res 7,(hl)
|
||
jr z,domsbt ; bit 7 off (so it gets turned on) if so
|
||
set 7,(hl) ; else bit 7 on, so it gets turned off
|
||
domsbt: ld a,(hl)
|
||
xor 0x80 ; toggle the bit
|
||
ld (hl),a
|
||
inc a ; now 0xff => no mask becomes zero
|
||
ld de,bit7ms ; point de at the "label"
|
||
.dseg
|
||
bit7ms: db 'Bit 7 masking\0'
|
||
.cseg
|
||
jr pdisen ; and print whether we turned it on or off
|
||
|
||
.extern echo
|
||
echo: ld hl,eflg ; point at echo flag
|
||
ld de,ecomsg ; and message
|
||
.dseg
|
||
ecomsg: db 'Remote echo\0'
|
||
.cseg
|
||
jr toggle ; go do the toggle
|
||
|
||
.extern hdxtog
|
||
hdxtog: ld hl,hflg ; same as echo
|
||
ld de,hdxmsg
|
||
.dseg
|
||
hdxmsg: db 'Half duplex\0'
|
||
.cseg
|
||
jr toggle
|
||
|
||
.extern jctog
|
||
jctog: ld hl,jflg ; same as echo
|
||
ld de,jcmsg
|
||
.dseg
|
||
jcmsg: db 'Control character discard\0'
|
||
.cseg
|
||
jr toggle
|
||
|
||
.extern lftog
|
||
lftog: ld hl,lflg ; same as echo
|
||
ld de,lfmsg
|
||
.dseg
|
||
lfmsg: db 'Line feed in print\0'
|
||
.cseg
|
||
jr toggle
|
||
|
||
.extern optog
|
||
optog: ld hl,oflg ; same as echo
|
||
ld de,opmsg
|
||
.dseg
|
||
opmsg: db 'Output to printer\0'
|
||
.cseg
|
||
jr toggle
|
||
|
||
.extern vttog
|
||
vttog: call initv
|
||
ld hl,vflg
|
||
ld de,vtmsg
|
||
.dseg
|
||
vtmsg: db 'VT-100 emulation\0'
|
||
.cseg
|
||
toggle: call togflg ; flip the flag as needed
|
||
pdisen: push af ; save flag state
|
||
push de ; and message
|
||
call crlf ; throw a new line
|
||
call dim ; go into dim mode
|
||
pop hl
|
||
call prtslp ; print the message
|
||
pop af ; restore the flag state
|
||
jr z,pdis ; zero - it got disabled
|
||
call ilprt
|
||
db ' enabled\0' ; print the enabled message
|
||
jr finis
|
||
pdis: call ilprt
|
||
db ' disabled\0' ; or disabled
|
||
finis: jp crlf
|
||
|
||
.extern togflg
|
||
togflg: push hl
|
||
push de ; save some registers
|
||
call force ; get input state depending on if we're in
|
||
pop de ; a chat script
|
||
pop hl
|
||
jr z,doftog ; zero => straight toggle
|
||
sub '0' ; '0' => turn it off
|
||
set 0,(hl) ; turn the bit on so the xor turns it off
|
||
jr z,doftog
|
||
res 0,(hl) ; else clear bit - xor will set it
|
||
doftog: ld a,(hl)
|
||
xor 1 ; flip the bit
|
||
ld (hl),a
|
||
ret
|
||
|
||
force: ld a,(prmpfl)
|
||
or a
|
||
ret z ; return zero if we're not in a chat script
|
||
call areabp ; get the character
|
||
or a ; see if one was given
|
||
ret
|
||
|
||
.dseg
|
||
.extern bmask
|
||
bmask: db 0xff
|
||
.extern jflg
|
||
jflg: db 0
|
||
.extern lflg
|
||
lflg: db 0
|
||
.extern oflg
|
||
oflg: db 0
|
||
|
||
; These next to _MUST_ remain adjacent, and in this order
|
||
|
||
.extern vflg
|
||
vflg: db 0
|
||
.extern wflg
|
||
wflg: db 0
|
||
|
||
.extern hflg
|
||
hflg: db 0
|
||
|
||
.extern eflg
|
||
eflg: db 0
|
||
|