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