[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]

{
SEAN PALMER

>> I am assuming you already have a buffer-stuffer that takes a char and a
>> scan code as input, so I won't post mine.

>No, I don't have a keyboard buffer-stuffer.

You said you wanted one that DIDN'T need you to tell it what a char's
scancode was. Well, this would basically require a lookup table of
possible scancodes for each ascii char... Plus some that don't have
corresponding scancodes. What you could try is to just send a null (#0)
to the routine as a scan code, I believe that's what happens when you
enter a keystroke using the Alt-Numeric Keypad method... so it'd work as
long as the program you're sending the keys to doesn't need the
scancode.

Here's an untested version of the method that other guy sent to you...:
}

procedure stuffKey(c : char; scan : byte); assembler;
asm
  mov cl, c
  mov ch, scan
  mov ah, 5
  int $16
  {al=0 if success, 1 if failed, but we just ignore that here}
end;

so here's a call that just assumes a 0 scan code

procedure stuffChar(c : char); assembler;
asm
  mov cl,c
  xor ch,ch
  mov ah,5
  int $16
end;

{
If you don't wanna go through the BIOS you can do it directly like this:
(plus this is 'pure' Turbo Pascal code.. 8) }

var
  head     : word absolute $40 : $1A;
  tail     : word absolute $40 : $1C;
  bufStart : word absolute $40 : $80;
  bufEnd   : word absolute $40 : $82;

procedure stuffKey(c : char; scan : byte);
begin
  memW[$40 : tail] := word(scan) shl 8 + byte(c);
  inc(tail, 2);
  if tail = bufEnd then
    tail := bufStart;
end;

procedure clearBuffer;
begin
  tail := head;
end;



[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]