Я тут вроде нашел реализацию буфера, помогите с паскаля на си перевести код
| Код | 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
|
|