Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] Кольцевой буфер клавиатуры


Автор: fenwer 16.9.2008, 21:16
Здравствуйте. У меня заданиеЖ разработать кольцевой буфер клавиатуры smile Поделитесь пожалуйста мыслями или кодом с чего начинать и как это должно выглядеть примерно. Заранее огромное спасибо.

Автор: Annihilator 16.9.2008, 23:16
http://www.google.ru/search?complete=1&hl=ru&newwindow=1&q=%D0%9A%D0%BE%D0%BB%D1%8C%D1%86%D0%B5%D0%B2%D0%BE%D0%B9+%D0%B1%D1%83%D1%84%D0%B5%D1%80+%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D1%8B&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq=

Автор: fenwer 18.9.2008, 17:58
исчерпывающе...

Автор: fenwer 23.9.2008, 11:42
Я тут вроде нашел реализацию буфера, помогите с паскаля на си перевести код

Код

program Code;

uses
  Crt;

var
  KStart: Word absolute $40:$1A;
    { адрес начала (откуда считывается) очереди данных клавиатуры }
  KEnd: Word absolute $40:$1C;
    { адрес конца (куда записывается) очереди данных клавиатуры }
  KBuf: array[0..15] of Word absolute $40:$1E;
    { собственно, буфер - 16 записей по 2 байта (ASCII-, Scan-код) }

  { - если очередь пуста, то KStart = KEnd }
  { - если очередь переполнена, то KEnd указывает на запись перед KStart }

var
  i, is, ie: Integer;

begin
  ClrScr;
  repeat
    is := (KStart - Ofs(KBuf)) shr 1;
    ie := (KEnd - Ofs(KBuf)) shr 1;
    GotoXY(1, 1);
    Writeln('ASCII':14, ' Scan');
    Writeln;
    for i := 0 to 15 do
      begin
        if i = ie then
          Write('KEnd ->  ')
        else if i = is then
          Write('KStart ->')
        else
          Write('         ');
        Writeln(Lo(KBuf[i]):4, Hi(KBuf[i]):4);
      end;
  until Lo(KBuf[(ie - 1) and $F]) = 27;
end

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)