# vile 9.5i - patch 2006/05/31 - Thomas Dickey # ------------------------------------------------------------------------------ # CHANGES | 13 +++++++ # MANIFEST | 2 - # buffer.c | 12 ++++--- # exec.c | 24 +++++++++++--- # filters/bas-filt.l | 32 +++++++++++++++++- # filters/tc-filt.l | 23 ++++++++++--- # macros/modes.rc | 9 +++-- # patchlev.h | 2 - # revlist | 26 +++++++-------- # trace.c | 5 +- # vile-9.5.spec | 9 ++++- # x11.c | 86 ++++++++++++++++++++++++--------------------------- # x11menu.c | 6 ++- # 13 files changed, 165 insertions(+), 84 deletions(-) # ------------------------------------------------------------------------------ Index: CHANGES --- vile-9.5h+/CHANGES 2006-05-21 23:56:30.000000000 +0000 +++ vile-9.5i/CHANGES 2006-06-01 00:45:03.000000000 +0000 @@ -1,5 +1,18 @@ Changes for vile 9.6 (released ??? ??? ?? ????) + 20060531 (i) + > Tom Dickey: + + fix error-reporting for a "~break" without a preceding "~while" + (report by Clark Morgan). + + minor fixes for tc-filt.l (termcap mode). + + fix x11.c for Motif broken in 9.5f cleanup (reported by Paul Fox). + + improve bas-filt.l by not highlighting incidental matches in the + attribute section of a Visual Basic form-file. + + correct parsing of hexadecimal constants in bas-filt.l + + add .ctl suffix for vbmode + + fix a case in bsizes() which subtracted line-ending from zero-sized + buffer when nonewline mode was set (Debian #368007). + 20060521 (h) > Clark Morgan: + document write-all-buffers command. Index: MANIFEST --- vile-9.5h+/MANIFEST 2006-05-22 00:27:49.000000000 +0000 +++ vile-9.5i/MANIFEST 2006-06-01 00:54:34.000000000 +0000 @@ -1,4 +1,4 @@ -MANIFEST for vile, version v9_5h +MANIFEST for vile, version v9_5i -------------------------------------------------------------------------------- MANIFEST this file CHANGES Change-log for VILE Index: buffer.c Prereq: 1.299 --- vile-9.5h+/buffer.c 2006-04-25 20:14:32.000000000 +0000 +++ vile-9.5i/buffer.c 2006-05-23 00:58:39.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.299 2006/04/25 20:14:32 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/buffer.c,v 1.300 2006/05/23 00:58:39 tom Exp $ * */ @@ -2511,9 +2511,9 @@ if (valid_buffer(curbp) && !b_is_counted(bp)) { LINE *lp; /* current line */ + B_COUNT ending = len_record_sep(bp); B_COUNT numchars = 0; /* # of chars in file */ L_NUM numlines = 0; /* # of lines in file */ - L_NUM ending = len_record_sep(bp); /* count chars and lines */ for_each_line(lp, bp) { @@ -2523,8 +2523,12 @@ lp->l_number = numlines; #endif } - if (!b_val(bp, MDNEWLINE)) - numchars -= ending; + if (!b_val(bp, MDNEWLINE)) { + if (numchars > ending) + numchars -= ending; + else + numchars = 0; + } bp->b_bytecount = numchars; bp->b_linecount = numlines; Index: exec.c Prereq: 1.285 --- vile-9.5h+/exec.c 2006-05-21 19:24:48.000000000 +0000 +++ vile-9.5i/exec.c 2006-06-01 00:42:45.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.285 2006/05/21 19:24:48 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/exec.c,v 1.286 2006/06/01 00:42:45 tom Exp $ * */ @@ -1946,6 +1946,7 @@ break; } + twhp = 0; if (dirnum == D_ENDWHILE) { /* walk back, filling in unfilled * 'there' pointers on the breaks, @@ -1965,24 +1966,39 @@ } twhp = twhp->w_next; } + } else if (dirnum == D_BREAK) { + /* + * Do the same search for break (looking for while), but do not + * modify the pointers. + */ + twhp = whp->w_next; + while (twhp) { + if (!twhp->w_there) { + if (twhp->w_type == D_WHILE) { + break; + } + } + twhp = twhp->w_next; + } + } + if (dirnum != D_WHILE) { if (!twhp) { /* no while for an endwhile */ mlforce("[%s doesn't follow %s in '%s']", - directive_name(D_ENDWHILE), + directive_name(dirnum), directive_name(D_WHILE), bp->b_bname); status = FALSE; break; } } - } } /* no endwhile for a while or break */ if (status == TRUE && whp && whp->w_type != D_ENDWHILE) { mlforce("[%s with no matching %s in '%s']", - directive_name(D_WHILE), + directive_name(whp->w_type), directive_name(D_ENDWHILE), bp->b_bname); status = FALSE; Index: filters/bas-filt.l Prereq: 1.12 --- vile-9.5h+/filters/bas-filt.l 2006-05-21 19:50:19.000000000 +0000 +++ vile-9.5i/filters/bas-filt.l 2006-05-28 00:36:07.000000000 +0000 @@ -2,7 +2,7 @@ %{ /* - * $Header: /usr/build/vile/vile/filters/RCS/bas-filt.l,v 1.12 2006/05/21 19:50:19 tom Exp $ + * $Header: /usr/build/vile/vile/filters/RCS/bas-filt.l,v 1.14 2006/05/28 00:36:07 tom Exp $ * * Filter to add vile "attribution" sequences to selected bits of Basic * input text. @@ -10,6 +10,12 @@ * Notes: * Some dialects of basic allow '_' in IDENT, some do not. * Visual Basic uses UUID's and HEX constants. + * + * This parser is too simple to distinguish between variable names + * and functions which happen to be spelled the same (since it is + * not doing a lookahead for a left parenthesis). It also is not + * distinguishing between class member names (foo.bar) and keywords + * without the "." preceding. The latter is doable. */ #include @@ -22,6 +28,10 @@ static char *String_attr; static char *LineNo_attr; +static int first_token; +static int handle_attrs; +static int within_attr; + static int is_hex(char *s); %} @@ -36,7 +46,7 @@ DATE "#"[ [:alnum:]\,:./]+"#" STRING \"([^"]|(""))*\" -NUMBER {INTEGER}|{REAL}|{UUID}|({INTEGER}{HEX}|("&[Hh]"|\$){HEX}){TYPES} +NUMBER {INTEGER}|{REAL}|{UUID}|({INTEGER}{HEX}|("&"[Hh]|\$){HEX}){TYPES} %% @@ -45,10 +55,23 @@ ? Number_attr : ci_keyword_attr(yytext); if (attr == 0) attr = ""; - WriteToken(attr); if (!strcmp(attr, Comment_attr)) { BEGIN(COMMENT); + } else if (first_token + && !strcmp(yytext, "VERSION")) { + handle_attrs = 1; + } else if (handle_attrs) { + if (!strcmp(yytext, "Begin")) + ++within_attr; + else if (!strcmp(yytext, "End")) + ++within_attr; + else if (!strcmp(yytext, "Attribute")) + within_attr = handle_attrs = 0; + else if (within_attr) + attr = ""; } + WriteToken(attr); + first_token = 0; } "_"$ { WriteToken(Action_attr); } {DATE} | @@ -98,6 +121,9 @@ String_attr = class_attr(NAME_LITERAL); LineNo_attr = class_attr("LineNumber"); + first_token = 1; + handle_attrs = 0; + within_attr = 0; BEGIN(NORMAL); while (yylex() > 0) { } Index: filters/tc-filt.l Prereq: 1.24 --- vile-9.5h+/filters/tc-filt.l 2006-05-21 19:50:48.000000000 +0000 +++ vile-9.5i/filters/tc-filt.l 2006-05-30 20:24:21.000000000 +0000 @@ -3,7 +3,7 @@ %{ /* - * $Header: /usr/build/vile/vile/filters/RCS/tc-filt.l,v 1.24 2006/05/21 19:50:48 tom Exp $ + * $Header: /usr/build/vile/vile/filters/RCS/tc-filt.l,v 1.26 2006/05/30 20:24:21 tom Exp $ * * Filter to add vile "attribution" sequences to selected bits of termcap */ @@ -24,10 +24,11 @@ static void begin_value(char *name); static void write_capname(char *name, int len); +static void write_value(char *name, int len, char *attr); %} -CAPNAME [^\.| \t\r\n:=]+ +CAPNAME [^\.| #\\\t\r\n:=]+ DOTNAME (\.)+{CAPNAME} ALIAS [[:alnum:]_\.+-]+ @@ -49,9 +50,9 @@ WriteToken(Error_attr); } {CAPNAME} { write_capname(yytext, yyleng); begin_value(yytext); } {DOTNAME} { WriteToken(Comment_attr); commented = 1; begin_value(yytext); } -{NUMBER} { WriteToken(commented ? Comment_attr : Number_attr); BEGIN(GAPS); } -{STRING} { WriteToken(commented ? Comment_attr : String_attr); BEGIN(GAPS); } -{STRING} { WriteToken(commented ? Comment_attr : Ident_attr); BEGIN(GAPS); } +{NUMBER} { write_value(yytext, yyleng, Number_attr); } +{STRING} { write_value(yytext, yyleng, String_attr); } +{STRING} { write_value(yytext, yyleng, Ident_attr); } %% @@ -105,6 +106,18 @@ } static void +write_value(char *name, int len, char *attr) +{ + if (commented) { + flt_puts(name, len, Comment_attr); + } else { + flt_puts(name, 1, ""); + flt_puts(name + 1, len - 1, attr); + } + BEGIN(GAPS); +} + +static void begin_value(char *name) { if (!strcmp(name, "tc")) Index: macros/modes.rc Prereq: 1.42 --- vile-9.5h+/macros/modes.rc 2006-05-21 00:44:15.000000000 +0000 +++ vile-9.5i/macros/modes.rc 2006-05-28 17:07:32.000000000 +0000 @@ -1,4 +1,4 @@ -; $Id: modes.rc,v 1.42 2006/05/21 00:44:15 tom Exp $ +; $Id: modes.rc,v 1.44 2006/05/28 17:07:32 tom Exp $ ; majormodes in this file are ordered alphabetically for convenience - the ; precedence used by vile is strictly alphabetic, counting case. Use the ; before and after qualifiers to override the precedence. @@ -774,7 +774,7 @@ define-mode vb ~with define-submode vb before "basic" - suffixes '\.\(bas\|cls\|frm\|dsr\)$' + suffixes '\.\(bas\|cls\|ctl\|frm\|dsr\)$' pre '\(^VERSION\|VB_Name\)' qualifiers=all comment-prefix "^\\s*'" @@ -788,7 +788,10 @@ fence-elif '^\s*elseif\>' fence-else '^\s*else\>' fence-fi '^\s*end\s\+if\>' - sections '^\(Public\|Private\)\s\+\(Sub\|Function\|Property\)' + sections '^\(\(Public\|Private\)\>\)\?\s*\(Sub\|Function\|Property\)' +~elsewith define-submode vb group 'attrs' + fence-if '^\s*begin\>' + fence-fi '^\s*end\>\s*$' ~elsewith define-submode vb group 'for-loop' fence-if '^\s*for\>' fence-fi '^\s*next\>' Index: patchlev.h --- vile-9.5h+/patchlev.h 2006-04-05 14:01:03.000000000 +0000 +++ vile-9.5i/patchlev.h 2006-05-23 01:12:16.000000000 +0000 @@ -1,3 +1,3 @@ #define VILE_VERSION "9.5" /* set to "" for no patches */ -#define VILE_PATCHLEVEL "h" +#define VILE_PATCHLEVEL "i" Index: revlist --- vile-9.5h+/revlist 2006-05-22 00:27:01.000000000 +0000 +++ vile-9.5i/revlist 2006-06-01 00:53:03.000000000 +0000 @@ -1,6 +1,6 @@ -revlist for vile, version v9_5h +revlist for vile, version v9_5i -------------------------------------------------------------------------------- -CHANGES 1.921 +CHANGES 1.926 CHANGES.R3 1.1 CHANGES.R4 1.1 CHANGES.R5 1.1 @@ -22,7 +22,7 @@ borland.c 1.36 btree.c 1.23 btree.h 1.5 -buffer.c 1.299 +buffer.c 1.300 buglist 1.403 builtflt.c 1.47 chgdfunc.h 1.18 @@ -42,7 +42,7 @@ edef.h 1.323 estruct.h 1.597 eval.c 1.353 -exec.c 1.285 +exec.c 1.286 externs.c 1.10 fences.c 1.84 file.c 1.393 @@ -83,7 +83,7 @@ os2keys.h 1.2 os2pipe.c 1.5 os2vio.c 1.35 -patchlev.h 1.344 +patchlev.h 1.345 path.c 1.151 perl.xs 1.104 plugin.c 1.1 @@ -94,7 +94,7 @@ random.c 1.292 regexp.c 1.118 region.c 1.133 -revlist v9_5h +revlist v9_5i search.c 1.138 select.c 1.161 sinstall.sh 1.1 @@ -106,12 +106,12 @@ tcap.h 1.10 termio.c 1.211 test_io.c 1.2 -trace.c 1.53 +trace.c 1.54 trace.h 1.24 ucrypt.c 1.15 undo.c 1.88 version.c 1.59 -vile-9.5.spec 1.9 +vile-9.5.spec 1.10 vile.1 1.31 vile.hlp 1.612 vile.wmconfig 1.1 @@ -141,8 +141,8 @@ word.c 1.80 wordmov.c 1.22 wvwrap.cpp 1.10 -x11.c 1.285 -x11menu.c 1.8 +x11.c 1.286 +x11menu.c 1.9 xshell.sh 1.4 xterm.c 1.2 xtermkeys.h 1.6 @@ -172,7 +172,7 @@ filters/au3.key 1.4 filters/awk-filt.l 1.17 filters/awk.key 1.2 -filters/bas-filt.l 1.12 +filters/bas-filt.l 1.14 filters/basic.key 1.4 filters/bat-filt.l 1.24 filters/bat.key 1.4 @@ -301,7 +301,7 @@ filters/tagsfilt.c 1.8 filters/tbl-filt.l 1.11 filters/tbl.key 1.1 -filters/tc-filt.l 1.24 +filters/tc-filt.l 1.26 filters/tc.key 1.2 filters/tcl-filt.l 1.18 filters/tcl.key 1.10 @@ -345,7 +345,7 @@ macros/gnugpg.rc 1.3 macros/loaderrs.rc 1.1 macros/manpage.rc 1.21 -macros/modes.rc 1.42 +macros/modes.rc 1.44 macros/palettes.rc 1.7 macros/pictmode.rc 1.4 macros/search.rc 1.3 Index: trace.c Prereq: 1.53 --- vile-9.5h+/trace.c 2005-05-22 16:58:55.000000000 +0000 +++ vile-9.5i/trace.c 2006-05-23 00:51:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * debugging support -- tom dickey. * - * $Header: /usr/build/vile/vile/RCS/trace.c,v 1.53 2005/05/22 16:58:55 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/trace.c,v 1.54 2006/05/23 00:51:35 tom Exp $ * */ @@ -669,9 +669,10 @@ void trace_region(REGION * rp, BUFFER *bp) { - Trace("region %d.%d .. %d.%d (%s)\n", + Trace("region %d.%d .. %d.%d (%ld:%s)\n", line_no(bp, rp->r_orig.l), rp->r_orig.o, line_no(bp, rp->r_end.l), rp->r_end.o, + (long) rp->r_size, (regionshape == EXACT ? "exact" : (regionshape == FULLLINE Index: vile-9.5.spec Prereq: 1.9 --- vile-9.5h+/vile-9.5.spec 2006-04-05 13:44:13.000000000 +0000 +++ vile-9.5i/vile-9.5.spec 2006-05-23 01:12:16.000000000 +0000 @@ -1,7 +1,7 @@ Summary: VILE VI Like Emacs editor -# $Header: /usr/build/vile/vile/RCS/vile-9.5.spec,v 1.9 2006/04/05 13:44:13 tom Exp $ +# $Header: /usr/build/vile/vile/RCS/vile-9.5.spec,v 1.10 2006/05/23 01:12:16 tom Exp $ Name: vile -Version: 9.5h +Version: 9.5i # each patch should update the version Release: 1 Copyright: GPL @@ -16,6 +16,7 @@ Patch6: vile-9.5f.patch.gz Patch7: vile-9.5g.patch.gz Patch8: vile-9.5h.patch.gz +Patch9: vile-9.5i.patch.gz # each patch should add itself to this list Packager: Thomas Dickey BuildRoot: %{_tmppath}/%{name}-root @@ -36,6 +37,7 @@ %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 -p1 # each patch should add itself to this list %build @@ -88,6 +90,9 @@ %changelog # each patch should add its ChangeLog entries here +* Mon May 22 2006 Thomas Dickey +- added patch for 9.5i + * Wed Apr 05 2006 Thomas Dickey - added patch for 9.5h Index: x11.c Prereq: 1.285 --- vile-9.5h+/x11.c 2006-01-13 01:31:23.000000000 +0000 +++ vile-9.5i/x11.c 2006-05-30 00:43:52.000000000 +0000 @@ -2,7 +2,7 @@ * X11 support, Dave Lemke, 11/91 * X Toolkit support, Kevin Buettner, 2/94 * - * $Header: /usr/build/vile/vile/RCS/x11.c,v 1.285 2006/01/13 01:31:23 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/x11.c,v 1.286 2006/05/30 00:43:52 tom Exp $ * */ @@ -823,7 +823,7 @@ #if MOTIF_WIDGETS static void -JumpProc(Widget scrollbar, +JumpProc(Widget scrollbar GCC_UNUSED, XtPointer closure, XtPointer call_data) { @@ -842,6 +842,39 @@ } static void +grip_moved(Widget w GCC_UNUSED, + XtPointer unused GCC_UNUSED, + XEvent * ev GCC_UNUSED, + Boolean * continue_to_dispatch GCC_UNUSED) +{ + int i; + WINDOW *wp, *saved_curwp; + Dimension height; + int lines; + + if (!lookfor_sb_resize) + return; + lookfor_sb_resize = FALSE; + saved_curwp = curwp; + + i = 0; + for_each_visible_window(wp) { + XtVaGetValues(cur_win->scrollbars[i], + XtNheight, &height, + NULL); + lines = (height + (cur_win->char_height / 2)) / cur_win->char_height; + if (lines <= 0) { + lines = 1; + } + curwp = wp; + resize(TRUE, lines); + i++; + } + set_curwp(saved_curwp); + (void) update(TRUE); +} + +static void update_scrollbar_sizes(void) { WINDOW *wp; @@ -4776,8 +4809,8 @@ { if (cur_win->have_selection && selection == XA_PRIMARY) { /* local transfer */ - UCHAR *data; - size_t len_st; + UCHAR *data = 0; + size_t len_st = 0; ULONG len_ul; Atom type = XA_STRING; @@ -5608,41 +5641,6 @@ return TRUE; } -#if MOTIF_WIDGETS -static void -grip_moved(Widget w, - XtPointer unused, - XEvent * ev, - Boolean * continue_to_dispatch) -{ - int i; - WINDOW *wp, *saved_curwp; - Dimension height; - int lines; - - if (!lookfor_sb_resize) - return; - lookfor_sb_resize = FALSE; - saved_curwp = curwp; - - i = 0; - for_each_visible_window(wp) { - XtVaGetValues(cur_win->scrollbars[i], - XtNheight, &height, - NULL); - lines = (height + (cur_win->char_height / 2)) / cur_win->char_height; - if (lines <= 0) { - lines = 1; - } - curwp = wp; - resize(TRUE, lines); - i++; - } - set_curwp(saved_curwp); - (void) update(TRUE); -} -#endif - static void configure_bar(Widget w, XEvent * event, @@ -5690,10 +5688,10 @@ #if MOTIF_WIDGETS static void -pane_button(Widget w, - XtPointer unused, - XEvent * ev, - Boolean * continue_to_dispatch) +pane_button(Widget w GCC_UNUSED, + XtPointer unused GCC_UNUSED, + XEvent * ev GCC_UNUSED, + Boolean * continue_to_dispatch GCC_UNUSED) { lookfor_sb_resize = TRUE; } @@ -5701,7 +5699,7 @@ /*ARGSUSED*/ static void -x_change_focus(Widget w, +x_change_focus(Widget w GCC_UNUSED, XtPointer unused GCC_UNUSED, XEvent * ev, Boolean * continue_to_dispatch GCC_UNUSED) Index: x11menu.c Prereq: 1.8 --- vile-9.5h+/x11menu.c 2005-01-18 01:08:06.000000000 +0000 +++ vile-9.5i/x11menu.c 2006-05-30 19:35:21.000000000 +0000 @@ -8,7 +8,7 @@ /************************************************************************/ /* - * $Header: /usr/build/vile/vile/RCS/x11menu.c,v 1.8 2005/01/18 01:08:06 tom Exp $ + * $Header: /usr/build/vile/vile/RCS/x11menu.c,v 1.9 2006/05/30 19:35:21 tom Exp $ */ #define NEED_X_INCLUDES 1 @@ -188,7 +188,9 @@ /* A buffer button takes part from the list tokens (L) */ /************************************************************************/ static void -list_proc_back(Widget w GCC_UNUSED, XtPointer bname, XtPointer call GCC_UNUSED) +list_proc_back(Widget w GCC_UNUSED, + XtPointer bname GCC_UNUSED, + XtPointer call GCC_UNUSED) { int num_buff; int oldflag = im_waiting(-1);