2015-11-28 07:03:46 +00:00
|
|
|
|
#!/usr/bin/env python
|
2015-11-30 05:52:20 +00:00
|
|
|
|
# vim:set sw=4 ts=8 et fileencoding=utf8::Кодировка:UTF-8[АБЁЪЯабёъя]
|
2015-11-28 07:03:46 +00:00
|
|
|
|
#
|
|
|
|
|
# Авторское право (с) 2015, Сергей Леонтьев, leo@sai.msu.ru
|
|
|
|
|
#
|
|
|
|
|
# Разрешается повторное распространение и использование как в виде
|
|
|
|
|
# исходника так и в двоичной форме, с модификациями или без, при
|
|
|
|
|
# соблюдении следующих условий:
|
|
|
|
|
#
|
|
|
|
|
# 1. При повторном распространении исходного кода должно оставаться
|
|
|
|
|
# указанное выше уведомление об авторском праве, этот список условий и
|
|
|
|
|
# нижеследующий отказ от гарантий.
|
|
|
|
|
#
|
|
|
|
|
# 2. При повторном распространении двоичного кода должно
|
|
|
|
|
# воспроизводиться указанное выше уведомление об авторском праве, этот
|
|
|
|
|
# список условий и нижеследующий отказ от гарантий в документации
|
|
|
|
|
# и/или в других материалах, поставляемых при распространении.
|
|
|
|
|
#
|
|
|
|
|
# 3. Ни название Крипто-Про, ни имена его сотрудников не могут быть
|
|
|
|
|
# использованы в качестве поддержки или продвижения продуктов,
|
|
|
|
|
# основанных на этом ПО без предварительного письменного разрешения.
|
|
|
|
|
#
|
|
|
|
|
# ЭТО ПРОГРАММА ПРЕДОСТАВЛЕНА БЕСПЛАТНО ДЕРЖАТЕЛЯМИ АВТОРСКИХ ПРАВ
|
|
|
|
|
# И/ИЛИ ДРУГИМИ СТОРОНАМИ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА
|
|
|
|
|
# ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ
|
|
|
|
|
# ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И
|
|
|
|
|
# ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. НИ В КОЕМ СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ
|
|
|
|
|
# СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСТАНОВЛЕНО В УСТНОЙ ФОРМЕ, НИ ОДИН
|
|
|
|
|
# ДЕРЖАТЕЛЬ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ МОЖЕТ
|
|
|
|
|
# ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО РАЗРЕШЕНО
|
|
|
|
|
# ВЫШЕ, НЕ ОТВЕТСТВЕННЫ ПЕРЕД ВАМИ ЗА УБЫТКИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ,
|
|
|
|
|
# СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ПРОИСТЕКАЮЩИЕ ИЗ
|
|
|
|
|
# ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО
|
|
|
|
|
# НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ, ИЛИ ДАННЫМИ, СТАВШИМИ
|
|
|
|
|
# НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ ПРИНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ ТРЕТЬИХ ЛИЦ,
|
|
|
|
|
# ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ),
|
|
|
|
|
# ДАЖЕ ЕСЛИ ТАКОЙ ДЕРЖАТЕЛЬ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О
|
|
|
|
|
# ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ.
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Простое тестирование терминала на соответствие terminfo
|
|
|
|
|
#
|
|
|
|
|
|
2015-11-30 19:48:47 +00:00
|
|
|
|
import locale
|
|
|
|
|
import sys
|
|
|
|
|
import traceback
|
|
|
|
|
|
|
|
|
|
import curses
|
2015-11-28 07:03:46 +00:00
|
|
|
|
from curses import *
|
|
|
|
|
|
|
|
|
|
def test(y, x, ukey, ckeys, lckey=1):
|
|
|
|
|
m = 2
|
2015-11-30 19:48:47 +00:00
|
|
|
|
of = 15
|
2015-11-28 07:03:46 +00:00
|
|
|
|
mysc.addstr(y,x,ukey+": ");
|
|
|
|
|
mysc.addstr(y+m,m,"Press character 'n' twice with pause to next test")
|
|
|
|
|
n = 0
|
|
|
|
|
while n < 2:
|
2015-11-30 05:52:20 +00:00
|
|
|
|
key = mysc.getkey()
|
|
|
|
|
for i in range(lckey):
|
|
|
|
|
mysc.timeout(300)
|
|
|
|
|
try:
|
|
|
|
|
key += mysc.getkey()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
mysc.timeout(-1)
|
|
|
|
|
found = False
|
|
|
|
|
for k in ckeys:
|
|
|
|
|
if k == key:
|
|
|
|
|
found = True
|
|
|
|
|
if found:
|
|
|
|
|
mysc.addstr(y,x+of," ")
|
|
|
|
|
mysc.addstr(y,x+of,"Ok: " + key)
|
|
|
|
|
break
|
|
|
|
|
elif "n" == key:
|
|
|
|
|
n += 1
|
|
|
|
|
else:
|
|
|
|
|
mysc.timeout(300)
|
|
|
|
|
keys = "'" + key
|
|
|
|
|
try:
|
|
|
|
|
while 1:
|
|
|
|
|
key = mysc.getkey()
|
|
|
|
|
keys += key
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
keys += "'"
|
|
|
|
|
mysc.timeout(-1)
|
|
|
|
|
mysc.addstr(y,x+of," ")
|
|
|
|
|
mysc.addstr(y,x+of,"Fail: " + keys)
|
2015-11-28 07:03:46 +00:00
|
|
|
|
mysc.addstr(y+m,m," ")
|
|
|
|
|
|
|
|
|
|
#==========================================================
|
|
|
|
|
# MAIN LOOP
|
|
|
|
|
#==========================================================
|
2015-11-30 19:48:47 +00:00
|
|
|
|
locale.setlocale(locale.LC_ALL, '')
|
|
|
|
|
mysc = initscr()
|
2015-11-28 07:03:46 +00:00
|
|
|
|
try:
|
|
|
|
|
noecho()
|
2015-11-30 05:52:20 +00:00
|
|
|
|
term = termname().decode("ascii")
|
2015-11-28 07:03:46 +00:00
|
|
|
|
shift = 12
|
|
|
|
|
shift2 = 12
|
|
|
|
|
for t in [ "xterm-old", "xterm-r5", "xterm-r6", "screen.xterm-r6",
|
2015-11-30 05:52:20 +00:00
|
|
|
|
"rxvt", "screen.rxvt", "putty", "screen.putty", "linux",
|
|
|
|
|
"screen.linux" ]:
|
|
|
|
|
if t == term[0:len(t)]:
|
|
|
|
|
shift = 10
|
2015-11-28 07:03:46 +00:00
|
|
|
|
mysc.keypad(1)
|
|
|
|
|
mysc.clear()
|
|
|
|
|
mysc.border(0)
|
2015-11-30 19:48:47 +00:00
|
|
|
|
mysc.addstr(1,2, str(sys.version_info))
|
|
|
|
|
mysc.addstr(3,8,term + " " + str(mysc.getmaxyx()))
|
|
|
|
|
mysc.addstr(3,45,str(locale.getlocale()))
|
|
|
|
|
y = 5
|
|
|
|
|
xl = 3
|
|
|
|
|
xr = 40
|
|
|
|
|
if 'KOI8' == locale.nl_langinfo(locale.CODESET)[0:4]:
|
|
|
|
|
mysc.addstr(y,xl, "Ok: " + locale.nl_langinfo(locale.CODESET))
|
|
|
|
|
mysc.addstr(y,xr, "Test output: \364\305\323\324 '\312'")
|
|
|
|
|
else:
|
|
|
|
|
mysc.addstr(y,xl, "Fail: "+locale.nl_langinfo(locale.CODESET))
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"F3",["KEY_F(3)"])
|
|
|
|
|
test(y,xr,"Shift+F3",["KEY_F(" + str(3+shift) + ")"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"F5",["KEY_F(5)"])
|
|
|
|
|
test(y,xr,"Ctrl+F5",["KEY_F(" + str(5+shift+shift2) + ")"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"F9",["KEY_F(9)"])
|
|
|
|
|
test(y,xr,"Alt-F9",["KEY_F(" + str(9+2*(shift+shift2)) + ")"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"Left",["KEY_LEFT"])
|
|
|
|
|
test(y,xr,"Shift+Left",["KEY_SLEFT"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"Ctrl+Left",["kLFT5"])
|
|
|
|
|
test(y,xr,"Alt+Left",["kLFT3"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"Up",["KEY_UP"])
|
|
|
|
|
test(y,xr,"Shift+Up",["KEY_SR"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"Ctrl+Up",["kUP5"])
|
|
|
|
|
test(y,xr,"Alt+Up",["kUP3"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"PgUp",["KEY_PPAGE"])
|
|
|
|
|
test(y,xr,"Shift+PgUp",["KEY_SPREVIOUS"])
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"Shift+Tab",["KEY_BTAB"])
|
|
|
|
|
test(y,xr,"Alt+Tab",["\033\t"], 2)
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"Alt+Backspace",["\033\177","\033\b","\033KEY_BACKSPACE"],2)
|
|
|
|
|
test(y,xr,"Alt+Enter",["\033\n","\033KEY_ENTER"],2)
|
|
|
|
|
y = y + 1
|
|
|
|
|
test(y,xl,"Alt+z",["\033z","\033Z"],2)
|
|
|
|
|
test(y,xr,"Alt+\312",["\033q","\033Q","\033\312","\033\352"],2)
|
|
|
|
|
y = y + 1
|
2015-11-28 07:03:46 +00:00
|
|
|
|
|
|
|
|
|
mysc.addstr(23,2,"Press <CR> to exit")
|
|
|
|
|
mysc.getch()
|
2015-11-30 19:48:47 +00:00
|
|
|
|
except:
|
2015-11-28 07:03:46 +00:00
|
|
|
|
endwin()
|
|
|
|
|
traceback.print_exc()
|
2015-11-30 19:48:47 +00:00
|
|
|
|
exit(2)
|
|
|
|
|
endwin()
|