# vile 9.5b - patch 2005/10/2 - Thomas Dickey <dickey@invisible-island.net> # ------------------------------------------------------------------------------ # CHANGES | 34 ++++++ # MANIFEST | 2 # bind.c | 8 - # buffer.c | 9 + # config.guess | 52 +-------- # config.sub | 26 ++-- # exec.c | 4 # file.c | 11 +- # filters/filters.c | 13 +- # filters/lex-filt.l | 267 ++++++++++++++++++++++++++++++++++++++++++++++----- # filters/lex.key | 16 ++- # filters/mailfilt.l | 6 - # filters/vb.key | 3 # input.c | 3 # makefile.icc | 6 - # ntconio.c | 7 + # ntwinio.c | 7 + # os2keys.h | 34 ++++++ # os2vio.c | 31 ++++- # patchlev.h | 2 # proto.h | 3 # revlist | 46 ++++---- # vile-9.5.spec | 9 + # 23 files changed, 458 insertions(+), 141 deletions(-) # ------------------------------------------------------------------------------ Index: CHANGES --- vile-9.5a+/CHANGES 2005-09-05 00:34:38.000000000 +0000 +++ vile-9.5b/CHANGES 2005-10-03 00:13:03.000000000 +0000 @@ -1,5 +1,39 @@ Changes for vile 9.6 (released ??? ??? ?? ????) + 20051002 (b) + > Tom Dickey: + + update config.guess, config.sub + + improve os2vio.c, adding a check to distinguish between fullscreen + and VIO to allow using bright background colors in the latter (report + by George Eccles). + + add KEY_xxx definitions to OS/2 and Win32 drivers, defining up to + KEY_F35 for the former and KEY_F24 for the latter (report by George + Eccles). + + several improvements and fixes to lex-filt.l + + expressions for regular expression parsing are more complete, which + allows separating patterns from state lists. That allows some + error-checking in the rules section to flag spurious whitespace + after a regular expression. The more-complete regular expressions + make the parser much larger (about 5 times the original size). + A rewrite in C might be shorter. + + ignore case of "%s" vs "%S" or "%state", etc. + + parse the pattern names, applying highlighting to the names where + they are embedded in regular expressions. + + parse the "%s" (state) lists, applying highlighting to the states. + + handle flex's <<EOF>> token. + + handle character classes in the RANGE pattern. + + remove an update() call from the logic in input.c which decodes + hex/octal input after a ^V. That caused the screen to move the view + according to the address in the command, e.g., + :%s/^Vx12 + would scroll to the bottom on entry of the "x" (report by Daniel L + Ashbrook). + + correct behavior of set-dos command, which did not recompute the + buffer-size. + + make end-of-token test for store-proc consistent with bind-key, + i.e., alphanumerics and hyphen. Amend that test to allow underscore + (report by George Eccles). + 20050905 (a) > Tom Dickey: + review/improve vl-filt.l based on Verilog LRM draft Index: MANIFEST --- vile-9.5a+/MANIFEST 2005-09-05 22:19:13.000000000 +0000 +++ vile-9.5b/MANIFEST 2005-10-03 00:22:06.000000000 +0000 @@ -1,4 +1,4 @@ -MANIFEST for vile, version v9_5a +MANIFEST for vile, version v9_5b -------------------------------------------------------------------------------- MANIFEST this file CHANGES Change-log for VILE Index: bind.c Prereq: 1.284 --- vile-9.5a+/bind.c 2005-07-13 23:25:16.000000000 +0000 +++ vile-9.5b/bind.c 2005-10-02 21:15:05.000000000 +0000 @@ -3,7 +3,7 @@ * * written 11-feb-86 by Daniel Lawrence * - * $Header: /usr/build/vile/vile/RCS/bind.c,v 1.284 2005/07/13 23:25:16 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/bind.c,v 1.285 2005/09/22 22:05:18 tom Exp $ * */ @@ -871,12 +871,12 @@ { KEY_F27, "KEY_F27" }, { KEY_F28, "KEY_F28" }, { KEY_F29, "KEY_F29" }, + { KEY_F30, "KEY_F30" }, { KEY_F31, "KEY_F31" }, { KEY_F32, "KEY_F32" }, { KEY_F33, "KEY_F33" }, { KEY_F34, "KEY_F34" }, { KEY_F35, "KEY_F35" }, - { KEY_F30, "KEY_F30" }, { 0, 0 }, { KEY_KP_F1, "KEY_KP_F1" }, { KEY_KP_F2, "KEY_KP_F2" }, @@ -2796,9 +2796,9 @@ * so it can be picked up by the commands argument getter later. */ -#define ismostpunct(c) (isPunct(c) && (c) != '-') +#define ismostpunct(c) (isPunct(c) && (c) != '-' && (c) != '_') -static int +int eol_command(const char *buffer, unsigned cpos, int c, int eolchar) { /* Index: buffer.c Prereq: 1.294 --- vile-9.5a+/buffer.c 2005-07-17 14:56:19.000000000 +0000 +++ vile-9.5b/buffer.c 2005-09-26 22:50:14.000000000 +0000 @@ -5,7 +5,7 @@ * keys. Like everyone else, they set hints * for the display system. * - * $Header: /usr/build/vile/vile/RCS/buffer.c,v 1.294 2005/07/17 14:56:19 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/buffer.c,v 1.296 2005/09/26 22:50:14 tom Exp $ * */ @@ -2532,6 +2532,13 @@ bp->b_bytecount = numchars; bp->b_linecount = numlines; + + TRACE(("bsizes %s %s %d lines, %lu bytes\n", + bp->b_bname, + b_val(bp, MDDOS) ? "dos" : "unix", + numlines, + (unsigned long) numchars)); + b_set_counted(bp); code = TRUE; } Index: config.guess --- vile-9.5a+/config.guess 2005-06-25 18:48:45.000000000 +0000 +++ vile-9.5b/config.guess 2005-09-24 19:51:40.000000000 +0000 @@ -3,7 +3,7 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. -timestamp='2005-05-27' +timestamp='2005-09-19' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -125,7 +125,7 @@ ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ;' +esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) @@ -199,44 +199,9 @@ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; - amd64:OpenBSD:*:*) - echo x86_64-unknown-openbsd${UNAME_RELEASE} - exit ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit ;; - cats:OpenBSD:*:*) - echo arm-unknown-openbsd${UNAME_RELEASE} - exit ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit ;; - luna88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit ;; - sgi:OpenBSD:*:*) - echo mips64-unknown-openbsd${UNAME_RELEASE} - exit ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit ;; *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} @@ -658,8 +623,7 @@ esac if [ ${HP_ARCH} = "hppa2.0w" ] then - # avoid double evaluation of $set_cc_for_build - test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -830,7 +794,7 @@ i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; - amd64:CYGWIN*:*:*) + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) @@ -909,6 +873,9 @@ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; @@ -1218,7 +1185,6 @@ *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in - *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} Index: config.sub --- vile-9.5a+/config.sub 2005-06-25 18:49:00.000000000 +0000 +++ vile-9.5b/config.sub 2005-09-24 19:51:26.000000000 +0000 @@ -3,7 +3,7 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. -timestamp='2005-06-02' +timestamp='2005-07-08' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -248,6 +248,7 @@ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ @@ -259,11 +260,11 @@ | ms1 \ | msp430 \ | ns16k | ns32k \ - | openrisc | or32 \ + | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ - | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b \ @@ -326,6 +327,7 @@ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ @@ -342,7 +344,7 @@ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ | sparclite-* \ @@ -769,9 +771,8 @@ basic_machine=hppa1.1-oki os=-proelf ;; - or32 | or32-*) + openrisc | openrisc-*) basic_machine=or32-unknown - os=-coff ;; os400) basic_machine=powerpc-ibm @@ -1097,12 +1098,9 @@ we32k) basic_machine=we32k-att ;; - sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sh64) - basic_machine=sh64-unknown - ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; @@ -1189,7 +1187,8 @@ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* | -skyos*) + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1207,7 +1206,7 @@ os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) @@ -1396,6 +1395,9 @@ *-be) os=-beos ;; + *-haiku) + os=-haiku + ;; *-ibm) os=-aix ;; Index: exec.c Prereq: 1.279 --- vile-9.5a+/exec.c 2005-07-17 18:00:32.000000000 +0000 +++ vile-9.5b/exec.c 2005-09-22 22:05:19.000000000 +0000 @@ -4,7 +4,7 @@ * original by Daniel Lawrence, but * much modified since then. assign no blame to him. -pgf * - * $Header: /usr/build/vile/vile/RCS/exec.c,v 1.279 2005/07/17 18:00:32 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/exec.c,v 1.280 2005/09/22 22:05:19 tom Exp $ * */ @@ -1419,7 +1419,7 @@ /* get the name of the procedure */ tb_scopy(&name, ""); if ((status = kbd_reply("Procedure name: ", &name, - eol_history, ' ', KBD_NORMAL, no_completion)) != TRUE) + eol_command, ' ', KBD_NORMAL, no_completion)) != TRUE) return status; return setup_macro_buffer(name, -1); Index: file.c Prereq: 1.385 --- vile-9.5a+/file.c 2005-09-04 18:09:22.000000000 +0000 +++ vile-9.5b/file.c 2005-09-22 23:19:30.000000000 +0000 @@ -5,7 +5,7 @@ * reading and writing of the disk are * in "fileio.c". * - * $Header: /usr/build/vile/vile/RCS/file.c,v 1.385 2005/09/04 18:09:22 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/file.c,v 1.386 2005/09/22 23:19:30 tom Exp $ */ #include "estruct.h" @@ -1200,10 +1200,17 @@ static int modified_record_sep(RECORD_SEP record_sep) { + TRACE((T_CALLED "modified_record_sep(%s)\n", + choice_to_name(fsm_recordsep_choices, record_sep))); + explicit_dosmode(curbp, record_sep); guess_dosmode(curbp); explicit_dosmode(curbp, record_sep); /* ignore the guess - only want to strip CR's */ - return TRUE; + + b_clr_counted(curbp); + bsizes(curbp); + + returnCode(TRUE); } /* Index: filters/filters.c Prereq: 1.98 --- vile-9.5a+/filters/filters.c 2005-03-13 18:00:39.000000000 +0000 +++ vile-9.5b/filters/filters.c 2005-09-30 00:59:45.000000000 +0000 @@ -1,7 +1,7 @@ /* * Common utility functions for vile syntax/highlighter programs * - * $Header: /usr/build/vile/vile/filters/RCS/filters.c,v 1.98 2005/03/13 18:00:39 tom Exp $ + * $Header: /usr/build/vile/vile/filters/RCS/filters.c,v 1.99 2005/09/30 00:59:45 tom Exp $ * */ @@ -403,9 +403,14 @@ { char *save = flt_bfr_attr; - flt_bfr_finish(); - flt_puts(text, length, attr); - flt_bfr_attr = save; + if ((save == 0 && attr == 0) || + (save != 0 && attr != 0 && !strcmp(save, attr))) { + flt_bfr_append(text, length); + } else { + flt_bfr_finish(); + flt_puts(text, length, attr); + flt_bfr_attr = save; + } } void Index: filters/lex-filt.l Prereq: 1.26 --- vile-9.5a+/filters/lex-filt.l 2005-09-03 15:04:26.000000000 +0000 +++ vile-9.5b/filters/lex-filt.l 2005-10-01 00:29:52.000000000 +0000 @@ -1,8 +1,8 @@ -%s RULES RULE1 RULEX ACTIONS ACTION2 ACTION3 CODE COMMENT +%s RULES RULE1 RULEX RULER STATES ACTIONS ACTION1 ACTION2 ACTION3 CODE COMMENT %{ /* - * $Header: /usr/build/vile/vile/filters/RCS/lex-filt.l,v 1.26 2005/09/03 15:04:26 tom Exp $ + * $Header: /usr/build/vile/vile/filters/RCS/lex-filt.l,v 1.41 2005/10/01 00:29:52 tom Exp $ * * Filter to add vile "attribution" sequences to selected bits of LEX program. */ @@ -12,68 +12,124 @@ DefineFilter("lex"); +#define NAME_LEX_PATTERN "LexPattern" +#define NAME_LEX_SECTION "LexSection" +#define NAME_LEX_STATES "LexStates" + static char *Comment_attr; +static char *Error_attr; static char *Ident_attr; static char *Keyword_attr; static char *Number_attr; static char *Preproc_attr; static char *String_attr; +static char *Pattern_attr; +static char *Section_attr; +static char *States_attr; + static int section = 0; static int nesting = 0; static void set_rules(void); static void set_state(void); +static void write_patterns(char *text, int len); static void write_states(char *text, int len); %} SPACE [[:blank:]] -DIRECTIVE ^%[^[:blank:]] - IDENT [[:alpha:]_][[:alnum:]_]* +DIRECTIVE ^%([{}%]|{IDENT}) + INTEGER [-+]?([[:digit:]]+) SSTRING \'(\\.|[^'\\])*\' DSTRING \"(\\.|[^"\\])*\" STRINGS ({SSTRING}|{DSTRING}) -QUOTED \"([^"\r\n]|\\\")+\" -RANGE "["([^\n\r\[\]]|\\\[|\\\])*"]" -PATTERN (\\.|{RANGE}|[^ \t\n])+ +ESCAPED (\\[^\n\r]) + +UNQUOTED0 ([^{}"\\[\][:space:]<>]) +UNQUOTED1 ([^{}"\\[\][:space:]]) + +QUOTED (\"([^"\\\r\n]|{ESCAPED})*\") + +CCLASS ("[:"{IDENT}":]") + +RANGE0 (\^[^\n\r]) +RANGE1 ([^\n\r\]]|{CCLASS}|{ESCAPED}) +RANGE ("["{RANGE0}?{RANGE1}*"]") + +LIMITED ([[:digit:]]+(,[[:digit:]]+)*) +BRACED ("{"({IDENT}|{LIMITED}+)"}") + +PATTERN0 ({ESCAPED}|{BRACED}|{QUOTED}|{RANGE}|{UNQUOTED0}) +PATTERN1 ({ESCAPED}|{BRACED}|{QUOTED}|{RANGE}|{UNQUOTED1}) +PATTERN (({PATTERN0}|"("{PATTERN1}")")+|"<<EOF>>") +PATTERNS (({PATTERN0}|{PATTERN1}|"("{PATTERN1}")")+|"<<EOF>>") + STATES ("<"({IDENT}|\,)+">") -MATCH {STATES}?{PATTERN} %% <INITIAL,RULES,ACTIONS,CODE>{DIRECTIVE} { - WriteToken(Keyword_attr); + WriteToken(Section_attr); switch(yytext[1]) { case '%': - section++; + section++; set_state(); break; case '{': - new_state(CODE); + new_state(CODE); break; case '}': set_state(); break; + case 'S': /* FALLTHRU */ + case 's': /* FALLTHRU */ + case 'X': /* FALLTHRU */ + case 'x': + new_state(STATES); + break; default: break; } } -<RULES>^{IDENT} { WriteToken(Ident_attr); new_state(RULE1); } +<STATES>{IDENT} { insert_keyword(yytext, States_attr, 0); + WriteToken(keyword_attr(yytext)); } +<STATES>{SPACE} { ECHO; } +<STATES>[^\n[:blank:]] { WriteToken(Error_attr); } +<STATES>[\n] { ECHO; set_state(); } + +<RULES>^{IDENT} { + if (set_symbol_table(NAME_LEX_PATTERN)) { + insert_keyword(yytext, Pattern_attr, 0); + WriteToken(keyword_attr(yytext)); + set_symbol_table(filter_def.filter_name); + } else { + WriteToken(Ident_attr); + } + new_state(RULE1); + } <RULE1>{SPACE}+ { ECHO; new_state(RULEX); } -<RULEX>.* { WriteToken(String_attr); new_state(RULES); } - -<ACTIONS>^{MATCH} { write_states(yytext, yyleng); new_state(ACTION2); } +<RULEX>{PATTERNS} { write_patterns(yytext, yyleng); new_state(RULER); } +<RULER>[^\n]* { WriteToken(Error_attr); } +<RULER>[\n] { ECHO; new_state(RULES); } + +<ACTIONS>^{STATES}? { write_states(yytext, yyleng); new_state(ACTION1); } +<ACTIONS>^{PATTERN} { write_patterns(yytext, yyleng); new_state(ACTION2); } +<ACTION1>{PATTERN}? { write_patterns(yytext, yyleng); new_state(ACTION2); } +<ACTION1>[\n] { ECHO; new_state(ACTIONS); } +<ACTION1>{SPACE}+ { ECHO; new_state(ACTION3); } +<ACTION2>[\n] { ECHO; new_state(ACTIONS); } <ACTION2>{SPACE}+ { ECHO; new_state(ACTION3); } <ACTION3>\{ { ECHO; nesting = 1; new_state(CODE); } -<ACTION3>[^\{].*$ { ECHO; new_state(ACTIONS); } +<ACTION3>[^\{/\n].*$ { ECHO; } +<ACTION3>[\n] { ECHO; new_state(ACTIONS); } <CODE>{IDENT} { WriteToken(keyword_attr(yytext)); } <CODE>{STRINGS} { WriteToken(String_attr); } @@ -81,7 +137,8 @@ <CODE>\{ { ECHO; nesting++; } <CODE>\} { ECHO; if (--nesting <= 0) { nesting = 0; set_rules(); } } -<CODE,RULES>"/*" { PushQuote(COMMENT, Comment_attr); } +<ACTION3,CODE,RULES>"//"[^\n]* { WriteToken(Comment_attr); } +<ACTION3,CODE,RULES>"/*" { PushQuote(COMMENT, Comment_attr); } <COMMENT>[^*]* { flt_bfr_append(yytext, yyleng); } <COMMENT>"*"+[^*/]* { flt_bfr_append(yytext, yyleng); } <COMMENT>"*"+"/" { PopQuote(); } @@ -109,23 +166,169 @@ set_state(); } -/* For some reason, I cannot get flex to yield the substrings for <STATES> - * and {PATTERN}, so I merged the two in the actions and split them here. +static void +write_1state(char *text, int len) +{ + char *attr = keyword_attr(text); + if (attr == 0) + attr = Error_attr; + flt_bfr_embed(text, len, attr); +} + +/* + * FIXME: do this with lex states */ static void write_states(char *text, int len) { int n; + char *next; + char *last; + if (text[0] == '<') { /* only happens if we have {STATES} */ - char *next = strchr(text, '>'); - if (next != 0) { /* ...or is confused with a {PATTERN} */ - n = 1 + next - text; - flt_puts(text, n, Keyword_attr); + flt_bfr_begin(Keyword_attr); + flt_bfr_append(text, 1); + ++text; + --len; + + if ((last = strchr(text, '>')) != 0) + *last = 0; + + while ((next = strchr(text, ',')) != 0) { + *next = 0; + write_1state(text, next - text); + *next = ','; + len -= (next - text); + text = next; + + flt_bfr_append(text, 1); + ++text; + --len; + } + if (last != 0) { /* ...or is confused with a {PATTERN} */ + n = 1 + last - text; + write_1state(text, n - 1); + *last = '>'; + flt_bfr_append(last, 1); text += n; len -= n; } + flt_bfr_finish(); } - flt_puts(text, len, String_attr); +} + +static int +ok_to_embed(char *text, int first, int last, int value) +{ + return (value != first + && value < last + && text[value] == R_CURLY) + ? (value + 1) + : -1; +} + +static int +parse_ident(char *text, int first, int last) +{ + int n; + for (n = first; n < last; ++n) { + int ch = CharOf(text[n]); + int ok; + if (n == first) { + ok = isalpha(ch); + } else { + ok = isalnum(ch) || (ch == '_'); + } + if (!ok) + break; + } + return ok_to_embed(text, first, last, n); +} + +static int +parse_limits(char *text, int first, int last) +{ + int n; + for (n = first; n < last; ++n) { + int ch = CharOf(text[n]); + int ok; + if (n == first) { + ok = isdigit(ch); + } else { + ok = isdigit(ch) || (ch == ','); + } + if (!ok) + break; + } + return ok_to_embed(text, first, last, n); +} + +/* + * FIXME: do this with lex states + */ +static void +write_patterns(char *text, int len) +{ + char *attr; + int quoted = 0; + int escape = 0; + int ranges = 0; + int first, last, next; + + set_symbol_table(NAME_LEX_PATTERN); + + flt_bfr_begin(String_attr); + for (first = last = 0; last < len; ++last) { + int ch = CharOf(text[last]); + + if (escape) { + escape = 0; + } else if (quoted) { + if (ch == DQUOTE) + quoted = 0; + } else if (ranges) { + if (ch == L_BLOCK) { + ++ranges; + } else if (ch == R_BLOCK) { + --ranges; + } + } else { + if (ch == '\\') { + escape = 1; + } else if (ch == DQUOTE) { + quoted = 1; + } else if (ch == L_BLOCK) { + ranges = 1; + } else if (ch == L_CURLY) { + flt_bfr_append(text + first, last - first); + if ((next = parse_ident(text, last + 1, len)) > 0) { + int save = text[next - 1]; + text[next - 1] = 0; + /* + * flex accepts forward-references to names, but this + * is a one-pass highlighter and cannot tell if a failure + * is a forward reference. But show an error anyway since + * it is more likely to be useful. + */ + if ((attr = keyword_attr(text + last + 1)) == 0) + attr = Error_attr; + text[next - 1] = save; + flt_bfr_embed(text + last, next - last, attr); + first = next; + } else if ((next = parse_limits(text, last + 1, len)) >= 0) { + flt_bfr_embed(text + last, next - last, Number_attr); + first = next; + } else { + flt_bfr_embed(text + last, len - last, Error_attr); + break; + } + } + } + } + flt_bfr_append(text + first, len - first); + flt_bfr_finish(); + + set_symbol_table(filter_def.filter_name); } static void @@ -137,15 +340,31 @@ do_filter(FILE *inputs) { yyin = inputs; + section = 0; nesting = 0; + Comment_attr = class_attr(NAME_COMMENT); + Error_attr = class_attr(NAME_ERROR); Ident_attr = class_attr(NAME_IDENT); Keyword_attr = class_attr(NAME_KEYWORD); Number_attr = class_attr(NAME_NUMBER); Preproc_attr = class_attr(NAME_PREPROC); String_attr = class_attr(NAME_LITERAL); + if ((Section_attr = class_attr(NAME_LEX_SECTION)) == 0) + Section_attr = Keyword_attr; + + if ((States_attr = class_attr(NAME_LEX_STATES)) == 0) + States_attr = Keyword_attr; + + flt_make_symtab(NAME_LEX_PATTERN); + set_symbol_table(NAME_LEX_PATTERN); + if ((Pattern_attr = class_attr(NAME_LEX_PATTERN)) == 0) + Pattern_attr = String_attr; + + set_symbol_table(filter_def.filter_name); + begin_state(RULES); while (yylex() > 0) { } Index: filters/lex.key Prereq: 1.4 --- vile-9.5a+/filters/lex.key 1999-03-08 11:49:05.000000000 +0000 +++ vile-9.5b/filters/lex.key 2005-09-30 22:40:26.000000000 +0000 @@ -1,6 +1,20 @@ -: $Id: lex.key,v 1.4 1999/03/08 11:49:05 tom Exp $ +: $Id: lex.key,v 1.8 2005/09/30 22:40:26 tom Exp $ : LEX Macros BEGIN ECHO REJECT +: +: Display section-markers such as "%{" and "%%" as an action. +: The filter will default to "Keyword" otherwise. +.class LexSection:Action +: +: The filter colors state-names with "LexStates", which defaults to "Keyword". +.class LexStates +INITIAL:LexStates +: .include c +: +: Define a separate table for pattern names. It contains one class, which +: is given the same name "LexPattern". +.table LexPattern +.class LexPattern:Ident2 Index: filters/mailfilt.l Prereq: 1.16 --- vile-9.5a+/filters/mailfilt.l 2005-09-05 01:31:56.000000000 +0000 +++ vile-9.5b/filters/mailfilt.l 2005-09-30 22:32:32.000000000 +0000 @@ -5,7 +5,7 @@ %{ /* - * $Header: /usr/build/vile/vile/filters/RCS/mailfilt.l,v 1.16 2005/09/05 01:31:56 tom Exp $ + * $Header: /usr/build/vile/vile/filters/RCS/mailfilt.l,v 1.17 2005/09/30 22:32:32 tom Exp $ * * Filter to add vile "attribution" sequences to selected bits of mail */ @@ -25,14 +25,14 @@ BLANK [ \t] -BEGIN_HEADER ^"From "{EMAIL} - LABEL ^[[:alpha:]]([[:alpha:]-]+): NAME [[:alnum:]_+.#-]+ ADDRESS ({NAME}|\.)+ EMAIL {NAME}@{ADDRESS} +BEGIN_HEADER ^"From "{EMAIL} + URL [[:alpha:]]+"://"[[:alnum:]%/.~_#?=-]+ %% Index: filters/vb.key Prereq: 1.5 --- vile-9.5a+/filters/vb.key 2005-06-25 15:30:31.000000000 +0000 +++ vile-9.5b/filters/vb.key 2005-10-02 23:37:39.000000000 +0000 @@ -1,4 +1,4 @@ -: $Id: vb.key,v 1.5 2005/06/25 15:30:31 tom Exp $ +: $Id: vb.key,v 1.6 2005/10/02 23:37:39 tom Exp $ : statements: alias appactivate @@ -730,3 +730,4 @@ rtrim$ ucase$ .default +.class LineNumber:Comment Index: input.c Prereq: 1.283 --- vile-9.5a+/input.c 2005-05-27 01:44:55.000000000 +0000 +++ vile-9.5b/input.c 2005-09-26 23:01:43.000000000 +0000 @@ -44,7 +44,7 @@ * tgetc_avail() true if a key is avail from tgetc() or below. * keystroke_avail() true if a key is avail from keystroke() or below. * - * $Header: /usr/build/vile/vile/RCS/input.c,v 1.283 2005/05/27 01:44:55 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/input.c,v 1.284 2005/09/26 23:01:43 tom Exp $ * */ @@ -1538,7 +1538,6 @@ if (i >= digs) break; - (void) update(FALSE); c = keystroke_raw8(); } while (isbackspace(c) || (isDigit(c) && base >= 10) || Index: makefile.icc Prereq: 1.13 --- vile-9.5a+/makefile.icc 1999-03-26 00:26:04.000000000 +0000 +++ vile-9.5b/makefile.icc 2005-10-02 23:26:34.000000000 +0000 @@ -1,6 +1,6 @@ # # 'vile' and 'mktbls' makefile for IBM C Set ++ 2.x (OS/2) -# $Header: /usr/build/vile/vile/RCS/makefile.icc,v 1.13 1999/03/26 00:26:04 tom Exp $ +# $Header: /usr/build/vile/vile/RCS/makefile.icc,v 1.14 2005/10/02 23:26:34 tom Exp $ # # @@ -111,7 +111,7 @@ version: @-del version$O -$(TARGET) : version $(VILE_DEPS) +$(TARGET) : $(VILE_DEPS) $(CC) $(CFLAGS) $(VILE_DEPS) /Fe$@ # *Individual File Dependencies* @@ -211,7 +211,7 @@ main$O: $(VILE_CFG) main.c nevars.h -$(SCREEN)$O: $(VILE_CFG) $(SCREEN).c +$(SCREEN)$O: $(VILE_CFG) $(SCREEN).c os2keys.h nebind.h \ nefunc.h \ Index: ntconio.c Prereq: 1.82 --- vile-9.5a+/ntconio.c 2005-01-20 11:58:44.000000000 +0000 +++ vile-9.5b/ntconio.c 2005-10-02 21:47:00.000000000 +0000 @@ -1,7 +1,7 @@ /* * Uses the Win32 console API. * - * $Header: /usr/build/vile/vile/RCS/ntconio.c,v 1.82 2005/01/20 11:58:44 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/ntconio.c,v 1.83 2005/10/02 21:47:00 tom Exp $ * */ @@ -648,6 +648,11 @@ { VK_F18, KEY_F18 }, { VK_F19, KEY_F19 }, { VK_F20, KEY_F20 }, + { VK_F21, KEY_F21 }, + { VK_F22, KEY_F22 }, + { VK_F23, KEY_F23 }, + { VK_F24, KEY_F24 }, + /* winuser.h stops with VK_F24 */ /* Allow ^-6 to invoke the alternate-buffer command, a la Unix. */ { '6', '6' }, /* Support recognition of ^@ */ Index: ntwinio.c Prereq: 1.148 --- vile-9.5a+/ntwinio.c 2005-07-17 18:15:25.000000000 +0000 +++ vile-9.5b/ntwinio.c 2005-10-02 21:47:00.000000000 +0000 @@ -1,7 +1,7 @@ /* * Uses the Win32 screen API. * - * $Header: /usr/build/vile/vile/RCS/ntwinio.c,v 1.148 2005/07/17 18:15:25 cmorgan Exp $ + * $Header: /usr/build/vile/vile/RCS/ntwinio.c,v 1.149 2005/10/02 21:47:00 tom Exp $ * Written by T.E.Dickey for vile (october 1997). * -- improvements by Clark Morgan (see w32cbrd.c, w32pipe.c). */ @@ -1763,6 +1763,11 @@ { VK_F18, KEY_F18 }, { VK_F19, KEY_F19 }, { VK_F20, KEY_F20 }, + { VK_F21, KEY_F21 }, + { VK_F22, KEY_F22 }, + { VK_F23, KEY_F23 }, + { VK_F24, KEY_F24 }, + /* winuser.h stops with VK_F24 */ /* Allow ^-6 to invoke the alternate-buffer command, a la Unix. */ { '6', '6' }, /* Support recognition of ^@ */ Index: os2keys.h Prereq: 1.1 --- vile-9.5a+/os2keys.h 1997-11-30 23:51:25.000000000 +0000 +++ vile-9.5b/os2keys.h 2005-10-02 21:56:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * $Header: /usr/build/vile/vile/RCS/os2keys.h,v 1.1 1997/11/30 23:51:25 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/os2keys.h,v 1.2 2005/10/02 21:56:00 tom Exp $ * * Function-key definitions used for OS/2 VIO driver, as well as OS/2 EMX * driver. @@ -45,6 +45,38 @@ { K00(133), KEY_F11 }, { K00(134), KEY_F12 }, + /* Additional function keys on a normal keyboard are obtained by + * shift and control modifiers. These are as documented in ncurses' + * emx.src, and stop with KEY_F35, since that corresponds to the + * limit for X11. + */ + { K00('T'), KEY_F13 }, /* shifted F1 */ + { K00('U'), KEY_F14 }, + { K00('V'), KEY_F15 }, + { K00('W'), KEY_F16 }, + { K00('X'), KEY_F17 }, + { K00('Y'), KEY_F18 }, + { K00('Z'), KEY_F19 }, + { K00('['), KEY_F20 }, + { K00('\\'), KEY_F21 }, + { K00(']'), KEY_F22 }, + { K00(135), KEY_F23 }, + { K00(136), KEY_F24 }, /* shifted F12 */ + { K00('^'), KEY_F25 }, /* control F1 */ + { K00('_'), KEY_F26 }, + { K00('`'), KEY_F27 }, + { K00('a'), KEY_F28 }, + { K00('b'), KEY_F29 }, + { K00('c'), KEY_F30 }, + { K00('d'), KEY_F31 }, + { K00('e'), KEY_F32 }, + { K00('f'), KEY_F33 }, + { K00('g'), KEY_F34 }, + { K00(137), KEY_F35 }, /* control F11 */ + + /* shift-tab */ + { K00(15), KEY_BackTab }, + /* Keypad codes (with Num Lock off): */ { K00('G'), KEY_Home }, { K00('H'), KEY_Up }, Index: os2vio.c Prereq: 1.31 --- vile-9.5a+/os2vio.c 2005-01-18 01:40:09.000000000 +0000 +++ vile-9.5b/os2vio.c 2005-10-02 23:13:25.000000000 +0000 @@ -3,7 +3,7 @@ * Modified from a really old version of "borland.c" (before the VIO * stuff went in there.) * - * $Header: /usr/build/vile/vile/RCS/os2vio.c,v 1.31 2005/01/18 01:40:09 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/os2vio.c,v 1.32 2005/10/02 23:13:25 tom Exp $ */ #include "estruct.h" @@ -35,7 +35,7 @@ #define NPAUSE 200 /* # times thru update to pause */ #define SPACE 32 /* space character */ -#define AttrColor(b, f) ((((UINT)ctrans[b] & 7) << 4) | ((UINT)ctrans[f] & 15)) +#define AttrColor(b, f) ((((UINT)ctrans[b] & (blinking ? 7 : 15)) << 4) | ((UINT)ctrans[f] & 15)) int cfcolor = -1; /* current foreground color */ int cbcolor = -1; /* current background color */ @@ -56,6 +56,7 @@ static int MaxRows, MaxColumns; static int TextFree; static int TextRow, TextColumn; +static int blinking = 1; #define blank_cell() ( BlankCell[1] = TextAttr, BlankCell ) @@ -69,6 +70,7 @@ vinfo.cb = sizeof(vinfo); (void) VioGetMode(&vinfo, 0); + TRACE(("scinit VioGetMode %dx%d\n", vinfo.row, vinfo.col)); MaxRows = vinfo.row; MaxColumns = vinfo.col; @@ -393,9 +395,9 @@ #endif static void -vio_beep() +vio_beep(void) { -#if OPT_FLASH +#if OPT_FLASH if (global_g_val(GMDFLASH)) { flash_display(); return; @@ -408,6 +410,10 @@ static void vio_open(void) { +#if OPT_COLOR + PTIB ptib; + PPIB ppib; +#endif int i; /* Initialize output buffer. */ @@ -421,12 +427,21 @@ } #if OPT_COLOR - { + blinking = 1; /* nonzero if "bright" background would blink */ + DosGetInfoBlocks(&ptib, &ppib); + TRACE(("DosGetInfoBlocks pib_ultype = %d\n", ppib->pib_ultype)); + /* 0=FS, 1=DOS, 2=VIO, 3=PM */ + if (ppib->pib_ultype == 2) { + blinking = 0; /* VIO won't blink */ + } else if (ppib->pib_ultype == 0) { VIOINTENSITY intense; intense.cb = sizeof(intense); intense.type = 2; intense.fs = 1; /* ask for bright colors, not blink */ - VioSetState(&intense, 0); + if (VioSetState(&intense, 0) == 0) { + blinking = 0; + TRACE(("vio_open VioSetState\n")); + } } set_palette(initpalettestr); vio_fcol(gfcolor); @@ -454,7 +469,7 @@ } static void -vio_kopen() +vio_kopen(void) { /* open the keyboard */ MouOpen(NULL, &hmou); MouDrawPtr(hmou); @@ -462,7 +477,7 @@ } static void -vio_kclose() +vio_kclose(void) { /* close the keyboard */ MouClose(hmou); return; Index: patchlev.h --- vile-9.5a+/patchlev.h 2005-08-30 00:25:11.000000000 +0000 +++ vile-9.5b/patchlev.h 2005-09-22 22:09:07.000000000 +0000 @@ -1,3 +1,3 @@ #define VILE_VERSION "9.5" /* set to "" for no patches */ -#define VILE_PATCHLEVEL "a" +#define VILE_PATCHLEVEL "b" Index: proto.h Prereq: 1.552 --- vile-9.5a+/proto.h 2005-06-03 00:38:55.000000000 +0000 +++ vile-9.5b/proto.h 2005-09-22 22:05:19.000000000 +0000 @@ -4,7 +4,7 @@ * * Created: Thu May 14 15:44:40 1992 * - * $Header: /usr/build/vile/vile/RCS/proto.h,v 1.552 2005/06/03 00:38:55 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/proto.h,v 1.553 2005/09/22 22:05:19 tom Exp $ * */ @@ -123,6 +123,7 @@ extern char *kcod2pstr (int c, char *seq, int limit); extern const CMDFUNC *engl2fnc (const char *fname); extern const CMDFUNC *kcod2fnc (BINDINGS *bs, int c); +extern int eol_command (EOL_ARGS); extern int fnc2kcod (const CMDFUNC *); extern int fnc2kins (const CMDFUNC *); extern int kbd_complete (DONE_ARGS, const char *table, size_t size_entry); Index: revlist --- vile-9.5a+/revlist 2005-09-05 22:17:05.000000000 +0000 +++ vile-9.5b/revlist 2005-10-03 00:21:01.000000000 +0000 @@ -1,6 +1,6 @@ -revlist for vile, version v9_5a +revlist for vile, version v9_5b -------------------------------------------------------------------------------- -CHANGES 1.861 +CHANGES 1.867 CHANGES.R3 1.1 CHANGES.R4 1.1 CHANGES.R5 1.1 @@ -18,18 +18,18 @@ api.c 1.37 api.h 1.13 basic.c 1.122 -bind.c 1.284 +bind.c 1.286 borland.c 1.32 btree.c 1.21 btree.h 1.4 -buffer.c 1.294 +buffer.c 1.296 buglist 1.402 builtflt.c 1.47 chgdfunc.h 1.17 cmdtbl 1.238 config.emx 1.2 -config.guess 1.1 -config.sub 1.1 +config.guess 1.2 +config.sub 1.2 config_h.in 1.2 configure 1.2 configure.in 1.220 @@ -43,10 +43,10 @@ edef.h 1.320 estruct.h 1.584 eval.c 1.348 -exec.c 1.279 +exec.c 1.280 externs.c 1.10 fences.c 1.83 -file.c 1.385 +file.c 1.386 filec.c 1.121 fileio.c 1.179 finderr.c 1.130 @@ -55,7 +55,7 @@ gppconio.c 1.2 history.c 1.82 ibmpc.c 1.97 -input.c 1.283 +input.c 1.284 insert.c 1.143 install.sh 1.7 isearch.c 1.60 @@ -66,7 +66,7 @@ makefile.blc 1.18 makefile.djg 1.32 makefile.emx 1.5 -makefile.icc 1.13 +makefile.icc 1.14 makefile.in 1.195 makefile.tbc 1.24 makefile.wat 1.26 @@ -80,25 +80,25 @@ modetbl 1.235 msgs.c 1.26 npopen.c 1.92 -ntconio.c 1.82 -ntwinio.c 1.148 +ntconio.c 1.83 +ntwinio.c 1.149 oneliner.c 1.108 opers.c 1.90 -os2keys.h 1.1 +os2keys.h 1.2 os2pipe.c 1.5 -os2vio.c 1.31 -patchlev.h 1.337 +os2vio.c 1.32 +patchlev.h 1.338 path.c 1.150 perl.xs 1.104 plugin.c 1.1 plugin.h 1.1 -proto.h 1.552 +proto.h 1.553 pscreen.h 1.2 ptypemap 1.7 random.c 1.287 regexp.c 1.110 region.c 1.132 -revlist v9_5a +revlist v9_5b search.c 1.137 select.c 1.158 sinstall.sh 1.1 @@ -114,7 +114,7 @@ ucrypt.c 1.15 undo.c 1.88 version.c 1.57 -vile-9.5.spec 1.2 +vile-9.5.spec 1.3 vile.1 1.30 vile.hlp 1.602 vile.wmconfig 1.1 @@ -202,7 +202,7 @@ filters/fdl-filt.l 1.10 filters/fdl.key 1.4 filters/filterio.c 1.28 -filters/filters.c 1.98 +filters/filters.c 1.99 filters/filters.h 1.94 filters/filters.rc 1.202 filters/flt_defs.h 1.1 @@ -223,14 +223,14 @@ filters/key-filt.c 1.19 filters/latex.key 1.2 filters/latexflt.l 1.41 -filters/lex-filt.l 1.26 -filters/lex.key 1.4 +filters/lex-filt.l 1.41 +filters/lex.key 1.8 filters/lisp.key 1.2 filters/lispfilt.l 1.11 filters/m4-filt.c 1.25 filters/m4.key 1.3 filters/mail.key 1.3 -filters/mailfilt.l 1.16 +filters/mailfilt.l 1.17 filters/make.key 1.8 filters/makefile.2nd 1.11 filters/makefile.djg 1.3 @@ -308,7 +308,7 @@ filters/txt-filt.l 1.19 filters/unfilter.c 1.8 filters/unfilter.h 1.1 -filters/vb.key 1.5 +filters/vb.key 1.6 filters/vile.key 1.8 filters/vilefilt.l 1.31 filters/vim.key 1.2 Index: vile-9.5.spec Prereq: 1.2 --- vile-9.5a+/vile-9.5.spec 2005-08-30 00:40:38.000000000 +0000 +++ vile-9.5b/vile-9.5.spec 2005-09-22 22:09:45.000000000 +0000 @@ -1,7 +1,7 @@ Summary: VILE VI Like Emacs editor -# $Header: /usr/build/vile/vile/RCS/vile-9.5.spec,v 1.2 2005/08/30 00:40:38 tom Exp $ +# $Header: /usr/build/vile/vile/RCS/vile-9.5.spec,v 1.3 2005/09/22 22:09:45 tom Exp $ Name: vile -Version: 9.5a +Version: 9.5b # each patch should update the version Release: 1 Copyright: GPL @@ -9,6 +9,7 @@ URL: ftp://invisible-island.net/vile Source0: vile-9.5.tgz Patch1: vile-9.5a.patch.gz +Patch2: vile-9.5b.patch.gz # each patch should add itself to this list Packager: Thomas Dickey <dickey@invisible-island.net> BuildRoot: %{_tmppath}/%{name}-root @@ -22,6 +23,7 @@ %prep %setup -q -n vile-9.5 %patch1 -p1 +%patch2 -p1 # each patch should add itself to this list %build @@ -74,6 +76,9 @@ %changelog # each patch should add its ChangeLog entries here +* Thu Sep 22 2005 Thomas Dickey +- added patch for 9.5b + * Sun Aug 29 2005 Thomas Dickey - added patch for 9.5a