ericksen@unc.cs.unc.edu (Jim Ericksen) (10/14/89)
A while ago there was a question on how to get control-space to work
as a set-mark key in uemacs 3.10 running on PC's. I have written
ctlspace.com, a simple TSR which intercepts the BIOS keyboard
interrupts, translating the space key to ^@ whenever the control key
is pressed at the time. Put the command CTLSPACE into your autoexec
file, add the line
bind-to-key set-mark ^@
to your emacs.rc file, and you're in business. Attached is the source
and uuencoded executable.
--------------------------------------------------------------------------
title ctlspace.asm
page 62,132
; Translate control-space into ^@ (null, like shift-ctrl-2) for emacs use
; Public Domain software by Jim Ericksen
code segment
assume cs:code,ds:nothing,es:nothing
org 100H
; .com entry point
start: jmp install
; program variables
vector$16 dd 4*016h
old$16 dd ? ; save original intr entry addr
; interrupt entry point
wedge$16 proc far
or ah,ah ; check function requested
jz readit
jmp [old$16] ; if not read-next-key then exit
readit: pushf
call [old$16] ; do normal intr routine
cmp al,20h
jne exit$16 ; if not space key then exit
isaspace: push ax
mov ah,2
pushf
call [old$16] ; use BIOS to read shift status
test al,04h
pop ax
jz exit$16 ; if ctrl key not pressed then exit
ctrlspace: mov ax,0300h ; change to null char
exit$16: iret
wedge$16 endp
; installation code
install proc near
cli
lds si,vector$16 ; load addr of vector tbl entry
les di,dword ptr [si] ; read entry from vector table
mov word ptr old$16,di
mov word ptr old$16+2,es ; save original vector
mov word ptr [si],offset wedge$16
mov word ptr [si+2],cs ; set new vector
sti
mov dx,offset install
int 27h ; terminate & remain resident
install endp
code ends
end start
---------------------------- CUT HERE ----------------------------------
begin 644 ctlspace.com
MZRZ06``````````*Y'0%+O\N!P&<+O\>!P$\('414+0"G"[_'@<!J`18=`.X
B``//^B[%-@,!Q#PNB3X'`2Z,!@D!QP0+`8Q,`ONZ,`'-)R[_
`
end