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


>> 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

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

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

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

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

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

  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);
  memW[$40 : tail] := word(scan) shl 8 + byte(c);
  inc(tail, 2);
  if tail = bufEnd then
    tail := bufStart;

procedure clearBuffer;
  tail := head;

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