> Есть сервер Debian, на нем лежит DOS-ая бухгалтерская программа, запускается из
>консоли с помощью DOSEmu. В бухг. проге не срабатывают функциональные клавиши,
>т.е: Ctrl+F1 интерпретируется как F1 и т.д, так-же и Alt.
>escchar в конфиге dosemu = 30. Я так понимаю
>это влияет на сочетание клавиш.
>Да спасибо nrvalex за помощь насчет печати - выручил. Есть такой хитрый режим: PC Scancode - так вот в PuTTY его нет ;)
В свое время я с подобной проблемой обращался к разработчикам - тихо.
В общем пришлось самому сваять
Патч:
diff -Naur putty-0.57.orig/putty.h putty-0.57/putty.h
--- putty-0.57.orig/putty.h 2005-02-20 13:51:44.000000000 +0300
+++ putty-0.57/putty.h 2005-02-24 09:48:46.322440640 +0300
@@ -494,6 +494,8 @@
int shadowboldoffset;
};
+GLOBAL int scan_mode;
+
/*
* Some global flags denoting the type of application.
*
diff -Naur putty-0.57.orig/terminal.c putty-0.57/terminal.c
--- putty-0.57.orig/terminal.c 2005-02-20 13:51:44.000000000 +0300
+++ putty-0.57/terminal.c 2005-02-24 09:48:46.326440032 +0300
@@ -2130,6 +2130,12 @@
term->termstate = SEEN_CSI;
} else
switch (ANSI(c, term->esc_query)) {
+ case 'Q':
+ scan_mode = TRUE;
+ break;
+ case 'W':
+ scan_mode = 0;
+ break;
case 'A': /* CUU: move up N lines */
move(term, term->curs.x,
term->curs.y - def(term->esc_args[0], 1), 1);
diff -Naur putty-0.57.orig/window.c putty-0.57/window.c
--- putty-0.57.orig/window.c 2005-02-20 13:51:44.000000000 +0300
+++ putty-0.57/window.c 2005-02-24 09:48:46.331439272 +0300
@@ -3296,6 +3296,54 @@
static int compose_char = 0;
static WPARAM compose_key = 0;
+ int num_key = 0;
+
+ if (scan_mode == TRUE) {
+ if (lParam & 0x1000000) {
+ *p++ = (unsigned char) 0xE0;
+ } else {
+ if (GetKeyState(VK_NUMLOCK) & 1) {
+ switch ((lParam & 0xFF0000) >> 16) {
+ case 0x47:
+ num_key = 0x08;
+ break;
+ case 0x48:
+ num_key = 0x09;
+ break;
+ case 0x49:
+ num_key = 0x0A;
+ break;
+ case 0x4B:
+ num_key = 0x05;
+ break;
+ case 0x4C:
+ num_key = 0x06;
+ break;
+ case 0x4D:
+ num_key = 0x07;
+ break;
+ case 0x4F:
+ num_key = 0x02;
+ break;
+ case 0x50:
+ num_key = 0x03;
+ break;
+ case 0x51:
+ num_key = 0x04;
+ break;
+ case 0x52:
+ num_key = 0x0B;
+ break;
+ case 0x53:
+ num_key = 0x34;
+ break;
+ }
+ }
+ }
+ *p++ = (unsigned char)(((lParam & 0x80000000) >> 24) | (num_key ? num_key : ((lParam
& 0xFF0000) >> 16)));
+ return p - output;
+ }
+
r = GetKeyboardState(keystate);
if (!r)
memset(keystate, 0, sizeof(keystate));
Правда моя программулина, которая работает на сервере умеет выдавать команды для PuTTY для перехода в такой режим. Соответственно я и файл terminfo немного поправил, чтобы режим PC Scancode был виден другим программам
cat putty-terminfo.src
putty|xterm clone (win32),
am, bw, ccc, km, mir, msgr, xenl,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, enacs=\E)0, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L,
ind=^J,
initc=\E]P%?%p1%{9}%>%t%p1%{10}%-%'a'%+%c%e%p1%d%;%p2%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%p3%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%p4%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;,
is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>,
kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
kcuu1=\EOA, kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~,
kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
kf9=\E[20~, kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~,
kpp=\E[5~, kslt=\E[4~, oc=\E]R, op=\E[39;49m, rc=\E8,
rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l,
rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>,
rmso=\E[27m, rmul=\E[24m,
rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>, sc=\E7,
setab=\E[4%p1%dm,setaf=\E[3%p1%dm,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
sgr0=\E[m, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h, smsc=\EQ, rmsc=\EW,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
vpa=\E[%i%p1%dd,