Нужно сделать, чтобы раскладка клавиатуры менялась не только левым SHIFT+CTRL, но и правым. Тому кто поможет большое человеческое спасибо, вознаграждение на пиво. В аську 5000870. | Код | uses crt;
var rusChars:array[1..102] of char; engChars:array[1..102] of char; rusLang:boolean;
function int2str(int:integer):string; var sint:string; begin str(int, sint); int2str:=sint; end;
procedure initRusChars; begin rusChars[16]:='©'; rusChars[17]:='ж'; rusChars[18]:='г'; rusChars[19]:='Є'; rusChars[20]:='Ґ'; rusChars[21]:=''; rusChars[22]:='Ј'; rusChars[23]:='и'; rusChars[24]:='й'; rusChars[25]:='§'; rusChars[26]:='е'; rusChars[27]:='к';
rusChars[30]:='д'; rusChars[31]:='л'; rusChars[32]:='ў'; rusChars[33]:=' '; rusChars[34]:='Ї'; rusChars[35]:='а'; rusChars[36]:='®'; rusChars[37]:='«'; rusChars[38]:='¤'; rusChars[39]:='¦'; rusChars[40]:='н'; rusChars[41]:='с';
rusChars[44]:='п'; rusChars[45]:='з'; rusChars[46]:='б'; rusChars[47]:='¬'; rusChars[48]:='Ё'; rusChars[49]:='в'; rusChars[50]:='м'; rusChars[51]:='Ў'; rusChars[52]:='о'; end;
procedure initEngChars; begin engChars[16]:='q'; engChars[17]:='w'; engChars[18]:='e'; engChars[19]:='r'; engChars[20]:='t'; engChars[21]:='y'; engChars[22]:='u'; engChars[23]:='i'; engChars[24]:='o'; engChars[25]:='p';
engChars[30]:='a'; engChars[31]:='s'; engChars[32]:='d'; engChars[33]:='f'; engChars[34]:='g'; engChars[35]:='h'; engChars[36]:='j'; engChars[37]:='k'; engChars[38]:='l';
engChars[44]:='z'; engChars[45]:='x'; engChars[46]:='c'; engChars[47]:='v'; engChars[48]:='b'; engChars[49]:='n'; engChars[50]:='m'; end;
procedure asmReadChar(var posChar,codeChar);assembler; asm mov AH,00H int 16H push AX xor AH,AH les DI,codeChar stosw
pop AX mov AL,AH xor AH,AH les DI,posChar stosw end;
function _asmIsCharEnabled:integer;assembler; asm mov AH,01H int 16H jz @@1 xor AH,AH mov AL,01H ret @@1:xor AH,AH mov AL,00H ret
end;
function isCharEnabled:boolean; var charEnabled:integer; begin charEnabled:=_asmIsCharEnabled; {writeln('charEnabled = '+int2str(charEnabled));} isCharEnabled:=charEnabled<>0; end;
function _asmIsCtrlShift:integer;assembler; asm mov AH,02H int 16H and AL,6H cmp AL,6H jz @@1 mov AL,00H ret @@1:mov AL,01H ret
end;
function isCtrlShift:boolean; begin isCtrlShift:=_asmIsCtrlShift<>0; end;
procedure _drawWindow(x1,y1,x2,y2,bgcolor,txtcolor:integer); begin window(x1,y1,x2,y2); textBackGround(bgcolor); textColor(txtcolor); clrscr; end;
procedure _drawLangWindow(rusLang:boolean); begin _drawWindow(75,1,80,1,red,black); if rusLang then write('rus') else write('eng'); end;
procedure _drawMainWindow; begin _drawWindow(1,1,59,25,black,lightgray); end;
procedure _drawAllWindows(rusLang:boolean); begin textBackGround(black); clrscr; _drawLangWindow(rusLang); _drawMainWindow; end;
procedure writeChar(codeChar, posChar:integer); var currentChar:char; begin if rusLang then currentChar:=rusChars[posChar] else currentChar:=engChars[posChar]; if currentChar<>#0 then begin write(int2str(codeChar)+' - '+int2str(posChar)+' = '); write('"'); write(currentChar); writeln('"'); end; end;
const Esc=27; var codeChar, posChar:integer;
begin initRusChars; initEngChars; rusLang:=false; _drawAllWindows(rusLang); repeat repeat if isCtrlShift then begin rusLang:= not rusLang; _drawAllWindows(rusLang); repeat until not isCtrlShift; end; until isCharEnabled;
asmReadChar(posChar, codeChar);
writeChar(codeChar, posChar); until codeChar=Esc; end.
|
|