From: Araki K. <j00...@ip...> - 2002-01-08 15:15:08
|
荒木です:-) Subject: [Mlterm-dev-ja] workaround for malformed escape sequence From: MINAMI Hirokazu <mi...@ch...> Message-ID: <200...@ch...> Date: Tue, 8 Jan 2002 23:00:15 +0900 > エスケープシーケンスのきれはしを受け取ってしまうと、たとえば > echo -e "\e];" > とかしてしまうと、何も出力されなくなるようです。 > 現在の "ESC - ] - n ; ... \007" の処理では \007 が現れるまでの端末への出力すべて > をエスケープシーケンスとして解釈しているようなので、 > シーケンスの始まりに見えるもの以降の出力が奪われているのだとおもいます。 なるほど、たしかにそうですね。 > 手元では LF を受け取ったらシーケンスとしての解釈を止めることにして回避しています。 LF だけってのもなんですので、isprint() を使ってみました。 ESC ] Ps ; Pt BEL シーケンスの Pt は、printable character 以外がくるはずがないので、これで も問題はなさそうに思います。いかがでしょうか? では -- kiken j00...@ip... Index: ml_vt100_parser.c =================================================================== RCS file: /home/ken/cvsroot/mlterm/src/ml_vt100_parser.c,v retrieving revision 1.178 diff -u -r1.178 ml_vt100_parser.c --- ml_vt100_parser.c 2002/01/05 09:36:04 1.178 +++ ml_vt100_parser.c 2002/01/08 15:05:04 @@ -7,6 +7,7 @@ #include <stdio.h> #include <string.h> /* memmove */ #include <stdlib.h> /* atoi */ +#include <ctype.h> /* isprint */ #include <kiklib/kik_debug.h> #include <mkf/mkf_ucs4_map.h> /* mkf_map_to_ucs4 */ #include <mkf/mkf_ucs_property.h> @@ -1687,7 +1688,18 @@ } pt = str_p ; + + /* + * XXX hack + * The termination byte of Pt is originally 0x07(BEL) , + * but isprint() is used in case vt100 parser falls into + * infinite loop. + */ + #if 0 while( *str_p != CTLKEY_BEL) + #else + while( isprint( *str_p)) + #endif { if( increment_str( &str_p , &left) == 0) { |