home *** CD-ROM | disk | FTP | other *** search
- From: mool@oce.nl (Bram Moolenaar)
- Newsgroups: comp.sources.misc
- Subject: v44i041: vim - Vi IMproved editor, v3.0, Part22/26
- Date: 18 Aug 1994 14:03:38 -0500
- Organization: Sterling Software
- Sender: kent@sparky.sterling.com
- Approved: kent@sparky.sterling.com
- Message-ID: <330baa$e8a@sparky.sterling.com>
- X-Md4-Signature: 254dc41cb343615556e26666c40f9dd6
-
- Submitted-by: mool@oce.nl (Bram Moolenaar)
- Posting-number: Volume 44, Issue 41
- Archive-name: vim/part22
- Environment: UNIX, AMIGA, MS-DOS, Windows NT
- Supersedes: vim: Volume 41, Issue 50-75
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: vim/.exrc vim/doc/index vim/src/cmdcmds.c vim/src/cmdtab.h
- # vim/src/digraph.c.UU vim/src/makefile.nt vim/src/tag.c
- # Wrapped by kent@sparky on Mon Aug 15 21:44:13 1994
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 22 (of 26)."'
- if test -f 'vim/.exrc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vim/.exrc'\"
- else
- echo shar: Extracting \"'vim/.exrc'\" \(30 characters\)
- sed "s/^X//" >'vim/.exrc' <<'END_OF_FILE'
- Xset ai bs=2 shell=csh nojs ru
- END_OF_FILE
- if test 30 -ne `wc -c <'vim/.exrc'`; then
- echo shar: \"'vim/.exrc'\" unpacked with wrong size!
- fi
- # end of 'vim/.exrc'
- fi
- if test -f 'vim/doc/index' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vim/doc/index'\"
- else
- echo shar: Extracting \"'vim/doc/index'\" \(12449 characters\)
- sed "s/^X//" >'vim/doc/index' <<'END_OF_FILE'
- Xindex of vim commands for
- X 1. insert mode
- X 2. VI commands (normal mode)
- X 3. command line editing
- X 4. EX commands
- X
- X(for an overview of options see the end of reference.doc)
- X
- X1. INSERT MODE
- X==============
- X
- Xchar action
- X-----------------------------------------------------------------------
- X^@ insert previously inserted text and stop insert {vi: up to 128
- X chars}
- X^A insert previously inserted text {not in Vi}
- X^B toggle 'revins' option.
- X^C quit insert mode, without checking for abbreviation.
- X^D delete one shiftwidth of indent in the current line {vi:
- X only after auto-indent}
- X when preceded with <0> or <^>, delete all indent, with <^>
- X restore it in the next line
- X^E insert the character which is below the cursor
- X^H <BS> delete character before the cursor {vi: does not cross lines,
- X does not delete autoindents}
- X^J <LF> begin new line
- X^K {char1} {char2} enter digraph (only when compiled with it) {vi: no digraphs}
- X^M <CR> begin new line
- X^N find next match for keyword in front of the cursor
- X^O execute a single command and return to insert mode
- X^P find previous match for keyword in front of the cursor
- X^R <0-9a-z"%:> insert contents of register <0-9a-z"%:> {not in vi}
- X^T insert one shiftwidth of indent in current line {vi: only in
- X autoindent}
- X^U delete all entered characters in the current line
- X^V insert next non-digit literally, insert three digit decimal
- X number as a single byte.
- X^W delete word before the cursor
- X^Y insert the character which is above the cursor
- X^[ <ESC> end insert mode
- X<DEL> same as ^H <BS>
- X<C_UP> cursor one line up
- X<C_DOWN> cursor one line down
- X<C_LEFT> cursor one character left
- X<C_RIGHT> cursor one character right
- X<SC_UP> one screenfull backward
- X<SC_DOWN> one screenfull forward
- X<SC_LEFT> cursor one word left
- X<SC_RIGHT> cursor one word right
- X{char1}<BS>{char2} enter digraph (only when compiled with it and 'digraph'
- X option set) {vi: no digraphs}
- X
- X
- X2. VI COMMANDS
- X==============
- X
- XCHAR means non-blank char
- XWORD means sequences of non-blank chars
- XN is number entered before the command
- X<move> is a cursor movement command
- XNmove is the text that is moved over with a cursor movement command
- XSECTION is a section that possibly starts with '}' instead of '{'
- X
- Xnote: 1 = cursor movement command; 2 = can be undone/redone
- X
- Xchar note vim normal mode (vi: what the unix vi does)
- X------------------------------------------------------------------------------
- X^@ error
- X^A 2 add N to number at/after cursor {vi: no ^A}
- X^B 1 scroll N screens Backwards
- X^C interrupt current (search) command
- X^D scroll Down N lines (default: half a screen)
- X^E scroll N lines upwards (N lines Extra)
- X^F 1 scroll N screens Forward
- X^G display current file name and position
- X^H <BS> 1 cursor N chars to the left
- X^I <TAB> 1 go to N newer entry in jump list
- X^J <LF> 1 cursor N lines downward
- X^K error
- X^L redraw screen
- X^M <CR> 1 cursor to the first CHAR N lines lower
- X^N 1 cursor N lines downward
- X^O 1 go to N older entry in jump list
- X^P 1 cursor N lines upward
- X^Q error (used for xon/xoff)
- X^R 2 redo changes which were undone with 'u' (vi: retype
- X the screen)
- X^S error (used for xon/xoff)
- X^T jump to N older Tag in tag list
- X^U scroll N lines Upwards (default: half a screen)
- X^V start blockwise Visual (vi: no Visual)
- X^W window commands, followed by another character (vi: not)
- X^X 2 subtract N from number at/after cursor {vi: no ^X}
- X^Y scroll N lines downwards
- X^Z suspend program (or start new shell)
- X^[ <ESC> error
- X^\ error
- X^] :ta to ident under cursor
- X^^ edit Nth alternate file (equivalent to :e #N)
- X^_ error
- X
- X<SPACE> 1 cursor N chars to the right
- X!<move><filter> filter Nmove text through the "filter" command
- X!!<filter> filter N lines through the "filter" command
- X"<a-zA-Z0-9.> use buffer <a-zA-Z0-9.> for next delete, yank or put
- X (upper case to append)(<.> only works for put)
- X# 1 search backward for the Nth occurrence of the ident under
- X the cursor {not in vi}
- X$ 1 cursor to the end of line N from the cursor
- X% 1 find the next (curly/square) bracket on this line and go
- X to its match. With count: go to N percentage in the file.
- X& 2 repeat last :s
- X'<a-zA-Z> 1 cursor to the first CHAR on the line with mark <a-zA-Z>
- X'[ 1 cursor to the first CHAR on the line of the start of
- X last operated text or start of putted text
- X'] 1 cursor to the first CHAR on the line of the end of
- X last operated text or end of putted text
- X'' 1 cursor to the first CHAR of the line where the cursor was
- X before the latest jump.
- X( 1 cursor N sentences backward
- X) 1 cursor N sentences forward
- X* 1 search forward for the Nth occurrence of the ident under
- X the cursor {not in vi}
- X+ 1 cursor to the first CHAR N lines lower
- X, 1 repeat latest f, t, F or T in opposite direction N times
- X- 1 cursor to the first CHAR N lines higher
- X. 2 repeat last change with count replaced by N
- X/<pattern> 1 search forward for the Nth occurrence of <pattern>
- X0 1 cursor to the first char of the line
- X1 prepend to command to give a count
- X2 "
- X3 "
- X4 "
- X5 "
- X6 "
- X7 "
- X8 "
- X9 "
- X: Ex command (see below)
- X; 1 repeat latest f, t, F or T N times
- X<<move> 2 shift the Nmove lines one shiftwidth leftwards
- X<< 2 shift N lines one shiftwidth leftwards
- X=<move> 2 filter Nmove lines through "indent" (vi: when option
- X 'lisp' is set autoindent Nmove lines)
- X== 2 filter N lines through "indent"
- X><move> 2 shift Nmove lines one shiftwidth rightwards
- X>> 2 shift N lines one shiftwidth rightwards
- X?<pattern> 1 search backward for the Nth previous occurrence of
- X <pattern>
- X@<a-z> 2 execute the contents of named buffer <a-z> N times
- X@@ 2 repeat the previous @<a-z> N times
- XA 2 append text at the end of the line N times
- XB 1 cursor N WORDS backward
- X<"x>C 2 change from the cursor position to the end of the line,
- X and N-1 more lines [into buffer x]; synonym for c$
- X<"x>D 2 delete the characters under the cursor until the end of
- X the line and N-1 more lines [into buffer x]; synonym for d$
- XE 1 cursor forward to the end of WORD N
- XF<char> cursor to the Nth occurrence of <char> to the left
- XG 1 cursor to line N, default last line
- XH 1 cursor to line N from top of screen
- XI 2 insert text before the first CHAR on the line N times
- XJ 2 Join N lines; default is 2
- XK lookup Keyword under the cursor with 'keywordprg'
- XL 1 cursor to line N from bottom of screen
- XM 1 cursor to middle line of screen
- XN 1 repeat the latest '/' or '?' N times in opposite
- X direction
- XO 2 begin a new line above the cursor and insert text, repeat
- X N times (vi: blank N screen lines)
- X<"x>P 2 put the text [from buffer x] before the cursor N times
- XV start Visual mode on lines (vi: go to Ex mode)
- XR 2 enter replace mode: overtype existing characters, repeat the
- X entered text N-1 times
- X<"x>S 2 delete N lines [into buffer x] and start insert; synonym
- X for ^cc or 0cc, depending on autoindent
- XT<char> 1 cursor till after Nth occurrence of <char> to the left
- XU 2 undo all latest changes on one line (vi: while not moved
- X off of it)
- X While in Visual mode: make uppercase
- XQ<move> 2 Join N lines and re-format them
- XW 1 cursor N WORDS forward
- X<"x>X 2 delete N characters before the cursor [into buffer x]
- X<"x>Y yank N lines [into buffer x]; synonym for yy
- XZZ store current file, if modified, and exit
- X[[ 1 cursor N sections backward
- X[] 1 cursor N SECTIONS backward
- X[{ 1 cursor N times back to unmatched '{' (vi: not)
- X[( 1 cursor N times back to unmatched '(' (vi: not)
- X[f edit file name under the cursor
- X[p 2 like "p", but adjust indent to current line
- X\ error
- X]] 1 cursor N sections forward
- X][ 1 cursor N SECTIONS forward
- X]} 1 cursor N times forward to unmatched '}' (vi: not)
- X]) 1 cursor N times forward to unmatched ')' (vi: not)
- X]f edit file name under the cursor
- X]p 2 like "P", but adjust indent to current line
- X^ 1 cursor to the first CHAR of the line
- X_ 1 cursor to the first CHAR N - 1 lines lower
- X`<a-zA-Z> 1 cursor to the mark <a-zA-Z>
- X`[ 1 cursor to the start of last operated text or start of
- X putted text
- X`] 1 cursor to the end of last operated text or end of
- X putted text
- X`` 1 cursor to the position before latest jump
- Xa 2 append text after the cursor N times
- Xb 1 cursor N words backward
- X<"x>c<move> 2 delete Nmove text [into buffer x] and start insert
- X<"x>cc 2 delete N lines [into buffer x] and start insert
- X<"x>d<move> 2 delete Nmove text [into buffer x]
- X<"x>dd 2 delete N lines [into buffer x]
- Xe 1 cursor forward to the end of word N
- Xf<char> 1 cursor to Nth occurrence of <char> to the right
- Xgs goto sleep for N seconds (default 1) (vi: not)
- Xgf edit file name under the cursor
- Xh 1 cursor N chars to the left
- Xi 2 insert text before the cursor N times
- Xj 1 cursor N lines downward
- Xk 1 cursor N lines upward
- Xl 1 cursor N chars to the right
- Xm<a-z> set mark <a-z> at cursor position
- Xn 1 repeat the latest '/' or '?' N times
- Xo 2 begin a new line below the cursor and insert text, repeat
- X N times (vi: blank N screen lines)
- X While Visual: cursor moves other end
- X<"x>p 2 put the text [from buffer x] after the cursor N times
- Xv start Visual mode with characters (vi: no Visual)
- Xr<char> 2 replace N chars by <char>
- X<"x>s 2 (substitute) delete N characters [into buffer x] and
- X start insert
- Xt<char> 1 cursor till before Nth occurrence of <char> to the right
- Xu 2 undo changes (vi: only one level)
- X With Visual: make lowercase (vi: no Visual)
- Xq<a-zA-Z> record typed characters into named buffer <a-zA-Z>
- X (upper case to append)
- Xq stops recording (vi: no recording)
- Xw 1 cursor N words forward
- X<"x>x 2 delete N characters under and after the cursor [into
- X buffer x]
- X<"x>y<move> yank Nmove text [into buffer x]
- X<"x>yy yank N lines [into buffer x]
- Xz<CR> redraw, cursor line to top of window, first non-blank
- Xz. redraw, cursor line to center of window, first non-blank
- Xz- redraw, cursor line at bottom of window, first non-blank
- Xzb redraw, cursor line at bottom of window
- Xzt redraw, cursor line at top of window
- Xzz redraw, cursor line at center of window
- X{ 1 cursor N paragraphs backward
- X| 1 cursor to column N
- X} 1 cursor N paragraphs forward
- X~ 2 option notildeop: switch case of N characters under
- X cursor and move the cursor N characters to the right
- X (vi: no count)
- X~<move> option tildeop: switch case of Nmove text (vi: no tildeop
- X option)
- X<DEL> when entering a number: remove the last digit
- X<HELP> show the file vim:vim.hlp page by page (vi: no help)
- X<C_UP> 1 move cursor N lines upwards
- X<C_DOWN> 1 move cursor N lines downwards
- X<C_LEFT> 1 move cursor N chars to the left
- X<C_RIGHT> 1 move cursor N chars to the right
- X<SC_UP> 1 scroll N screens Backwards (same as ^B)
- X<SC_DOWN> 1 scroll N screens Forwards (same as ^F)
- X<SC_LEFT> 1 cursor N words backward (same as b)
- X<SC_RIGHT> 1 cursor N words forward (same as w)
- X
- X
- X3. command line editing
- X=======================
- X
- XGet to the command line with the ':', '!', '/' or '?' commands.
- XNormal characters are inserted at the current cursor position.
- X(vi: can only alter last character in the line)
- X
- X^A do filename completion on the pattern in front of the cursor
- X and insert all matches
- X^B cursor to begin of command line
- X^D list filenames that match the pattern in front of the cursor
- X^E cursor to end of command line
- X^H delete the character in front of the cursor
- X^L do filename completion on the pattern in front of the cursor
- X and insert the longest common part
- X^N after an <ESC> with multiple matches: go to next match
- X otherwise: same as <C_DOWN>
- X^P after an <ESC> with multiple matches: go to previous match
- X otherwise: same as <C_UP>
- X^U remove all characters
- X^V insert next non-digit literally, insert three digit decimal
- X number as a single byte. {Vi: type the CTRL-V twice to get one}
- X^W delete the word in front of the cursor
- X'wildchar' option (default <TAB>)
- X do filename completion on the pattern in front of the cursor
- X<DEL> delete the character under the cursor
- X<C_UP> recall previous command line from history
- X<C_DOWN> recall next command line from history
- X<C_LEFT> cursor left
- X<C_RIGHT> cursor right
- X<SC_LEFT> cursor one word left
- X<SC_RIGHT> cursor one word right
- X<SC_UP> recall previous command line that matches pattern in front of
- X the cursor
- X<SC_DOWN> recall next command line that matches pattern in front of the
- X cursor
- X
- X
- X4. EX commands
- X==============
- X
- XFor an index of EX commands, type CTRL-D at the ex command prompt.
- XOr look in "src/cmdtab.tab".
- X
- END_OF_FILE
- if test 12449 -ne `wc -c <'vim/doc/index'`; then
- echo shar: \"'vim/doc/index'\" unpacked with wrong size!
- fi
- # end of 'vim/doc/index'
- fi
- if test -f 'vim/src/cmdcmds.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vim/src/cmdcmds.c'\"
- else
- echo shar: Extracting \"'vim/src/cmdcmds.c'\" \(11550 characters\)
- sed "s/^X//" >'vim/src/cmdcmds.c' <<'END_OF_FILE'
- X/* vi:ts=4:sw=4
- X *
- X * VIM - Vi IMproved by Bram Moolenaar
- X *
- X * Read the file "credits.txt" for a list of people who contributed.
- X * Read the file "uganda.txt" for copying and usage conditions.
- X */
- X
- X/*
- X * cmdcmds.c: functions for command line commands
- X */
- X
- X#include "vim.h"
- X#include "globals.h"
- X#include "proto.h"
- X#include "param.h"
- X
- X#if defined(LATTICE) || defined(NT)
- X# define mktemp(a) tmpnam(a)
- X#endif
- X
- Xextern char *mktemp __ARGS((char *));
- X
- X/*
- X * align text:
- X * type = -1 left aligned
- X * type = 0 centered
- X * type = 1 right aligned
- X */
- X void
- Xdo_align(start, end, width, type)
- X linenr_t start;
- X linenr_t end;
- X int width;
- X int type;
- X{
- X FPOS pos;
- X int len;
- X int indent = 0;
- X
- X pos = curwin->w_cursor;
- X if (type == -1) /* left align: width is used for new indent */
- X {
- X if (width >= 0)
- X indent = width;
- X }
- X else
- X {
- X /*
- X * if 'textwidth' set, use it
- X * else if 'wrapmargin' set, use it
- X * if invalid value, use 80
- X */
- X if (width <= 0)
- X width = curbuf->b_p_tw;
- X if (width == 0 && curbuf->b_p_wm > 0)
- X width = Columns - curbuf->b_p_wm;
- X if (width <= 0)
- X width = 80;
- X }
- X
- X if (!u_save((linenr_t)(start - 1), (linenr_t)(end + 1)))
- X return;
- X for (curwin->w_cursor.lnum = start; curwin->w_cursor.lnum <= end; ++curwin->w_cursor.lnum)
- X {
- X set_indent(indent, TRUE); /* remove existing indent */
- X if (type == -1) /* left align */
- X continue;
- X len = strsize(ml_get(curwin->w_cursor.lnum)); /* get line lenght */
- X if (len < width)
- X switch (type)
- X {
- X case 0: set_indent((width - len) / 2, FALSE); /* center */
- X break;
- X case 1: set_indent(width - len, FALSE); /* right */
- X break;
- X }
- X }
- X curwin->w_cursor = pos;
- X beginline(TRUE);
- X updateScreen(NOT_VALID);
- X}
- X
- X/*
- X * :move command - move lines line1-line2 to line n
- X *
- X * return FAIL for failure, OK otherwise
- X */
- X int
- Xdo_move(line1, line2, n)
- X linenr_t line1;
- X linenr_t line2;
- X linenr_t n;
- X{
- X char_u *q;
- X int has_mark;
- X
- X if (n >= line1 && n < line2 && line2 > line1)
- X {
- X EMSG("Move lines into themselves");
- X return FAIL;
- X }
- X
- X /*
- X * adjust line marks (global marks done below)
- X * if the lines are moved down, the marks in the moved lines
- X * move down and the marks in the lines between the old and
- X * new position move up.
- X * If the lines are moved up it is just the other way round
- X */
- X if (n >= line2) /* move down */
- X {
- X mark_adjust(line1, line2, n - line2);
- X mark_adjust(line2 + 1, n, -(line2 - line1 + 1));
- X }
- X else /* move up */
- X {
- X mark_adjust(line1, line2, -(line1 - n - 1));
- X mark_adjust(n + 1, line1 - 1, line2 - line1 + 1);
- X }
- X
- X if (n >= line1)
- X {
- X --n;
- X curwin->w_cursor.lnum = n - (line2 - line1) + 1;
- X }
- X else
- X curwin->w_cursor.lnum = n + 1;
- X while (line1 <= line2)
- X {
- X /* this undo is not efficient, but it works */
- X u_save(line1 - 1, line1 + 1);
- X q = strsave(ml_get(line1));
- X if (q != NULL)
- X {
- X /*
- X * marks from global command go with the line
- X */
- X has_mark = ml_has_mark(line1);
- X ml_delete(line1);
- X u_save(n, n + 1);
- X ml_append(n, q, (colnr_t)0, FALSE);
- X free(q);
- X if (has_mark)
- X ml_setmarked(n + 1);
- X }
- X if (n < line1)
- X {
- X ++n;
- X ++line1;
- X }
- X else
- X --line2;
- X }
- X CHANGED;
- X return OK;
- X}
- X
- X/*
- X * :copy command - copy lines line1-line2 to line n
- X */
- X void
- Xdo_copy(line1, line2, n)
- X linenr_t line1;
- X linenr_t line2;
- X linenr_t n;
- X{
- X linenr_t lnum;
- X char_u *p;
- X
- X mark_adjust(n + 1, MAXLNUM, line2 - line1 + 1);
- X
- X /*
- X * there are three situations:
- X * 1. destination is above line1
- X * 2. destination is between line1 and line2
- X * 3. destination is below line2
- X *
- X * n = destination (when starting)
- X * curwin->w_cursor.lnum = destination (while copying)
- X * line1 = start of source (while copying)
- X * line2 = end of source (while copying)
- X */
- X u_save(n, n + 1);
- X curwin->w_cursor.lnum = n;
- X lnum = line2 - line1 + 1;
- X while (line1 <= line2)
- X {
- X /* need to use strsave() because the line will be unlocked
- X within ml_append */
- X p = strsave(ml_get(line1));
- X if (p != NULL)
- X {
- X ml_append(curwin->w_cursor.lnum, p, (colnr_t)0, FALSE);
- X free(p);
- X }
- X /* situation 2: skip already copied lines */
- X if (line1 == n)
- X line1 = curwin->w_cursor.lnum;
- X ++line1;
- X if (curwin->w_cursor.lnum < line1)
- X ++line1;
- X if (curwin->w_cursor.lnum < line2)
- X ++line2;
- X ++curwin->w_cursor.lnum;
- X }
- X CHANGED;
- X msgmore((long)lnum);
- X}
- X
- X/*
- X * handle the :! command.
- X * We replace the extra bangs by the previously entered command and remember
- X * the command.
- X */
- X void
- Xdobang(addr_count, line1, line2, forceit, arg)
- X int addr_count;
- X linenr_t line1, line2;
- X int forceit;
- X char_u *arg;
- X{
- X static char_u *prevcmd = NULL; /* the previous command */
- X char_u *t;
- X char_u *trailarg;
- X int len;
- X
- X /*
- X * Disallow shell commands from .exrc and .vimrc in current directory for
- X * security reasons.
- X */
- X if (secure)
- X {
- X secure = 2;
- X emsg(e_curdir);
- X return;
- X }
- X len = STRLEN(arg) + 1;
- X
- X autowrite_all();
- X /*
- X * try to find an embedded bang, like in :!<cmd> ! [args]
- X * (:!! is indicated by the 'forceit' variable)
- X */
- X trailarg = arg;
- X skiptospace(&trailarg);
- X skipspace(&trailarg);
- X if (*trailarg == '!')
- X *trailarg++ = NUL;
- X else
- X trailarg = NULL;
- X
- X if (forceit || trailarg != NULL) /* use the previous command */
- X {
- X if (prevcmd == NULL)
- X {
- X emsg(e_noprev);
- X return;
- X }
- X len += STRLEN(prevcmd) * (trailarg != NULL && forceit ? 2 : 1);
- X }
- X
- X if (len > CMDBUFFSIZE)
- X {
- X emsg(e_toolong);
- X return;
- X }
- X if ((t = alloc(len)) == NULL)
- X return;
- X *t = NUL;
- X if (forceit)
- X STRCPY(t, prevcmd);
- X STRCAT(t, arg);
- X if (trailarg != NULL)
- X {
- X STRCAT(t, prevcmd);
- X STRCAT(t, trailarg);
- X }
- X free(prevcmd);
- X prevcmd = t;
- X
- X if (bangredo) /* put cmd in redo buffer for ! command */
- X {
- X AppendToRedobuff(prevcmd);
- X AppendToRedobuff((char_u *)"\n");
- X bangredo = FALSE;
- X }
- X /* echo the command */
- X msg_start();
- X msg_outchar(':');
- X if (addr_count) /* :range! */
- X {
- X msg_outnum((long)line1);
- X msg_outchar(',');
- X msg_outnum((long)line2);
- X }
- X msg_outchar('!');
- X msg_outtrans(prevcmd, -1);
- X msg_ceol();
- X
- X if (addr_count == 0) /* :! */
- X doshell(prevcmd);
- X else /* :range! */
- X dofilter(line1, line2, prevcmd, TRUE, TRUE);
- X}
- X
- X/*
- X * call a shell to execute a command
- X */
- X void
- Xdoshell(cmd)
- X char_u *cmd;
- X{
- X BUF *buf;
- X
- X /*
- X * Disallow shell commands from .exrc and .vimrc in current directory for
- X * security reasons.
- X */
- X if (secure)
- X {
- X secure = 2;
- X emsg(e_curdir);
- X msg_end();
- X return;
- X }
- X stoptermcap();
- X msg_outchar('\n'); /* may shift screen one line up */
- X
- X /* warning message before calling the shell */
- X if (p_warn)
- X for (buf = firstbuf; buf; buf = buf->b_next)
- X if (buf->b_changed)
- X {
- X msg_outstr((char_u *)"[No write since last change]\n");
- X break;
- X }
- X
- X windgoto((int)Rows - 1, 0);
- X cursor_on();
- X (void)call_shell(cmd, 0, TRUE);
- X
- X#ifdef AMIGA
- X wait_return(term_console ? -1 : TRUE); /* see below */
- X#else
- X wait_return(TRUE); /* includes starttermcap() */
- X#endif
- X
- X /*
- X * In an Amiga window redrawing is caused by asking the window size.
- X * If we got an interrupt this will not work. The chance that the window
- X * size is wrong is very small, but we need to redraw the screen.
- X * Don't do this if ':' hit in wait_return().
- X * THIS IS UGLY but it save an extra redraw.
- X */
- X#ifdef AMIGA
- X if (skip_redraw) /* ':' hit in wait_return() */
- X must_redraw = CLEAR;
- X else if (term_console)
- X {
- X OUTSTR("\033[0 q"); /* get window size */
- X if (got_int)
- X must_redraw = CLEAR; /* if got_int is TRUE we have to redraw */
- X else
- X must_redraw = 0; /* no extra redraw needed */
- X }
- X#endif /* AMIGA */
- X}
- X
- X/*
- X * dofilter: filter lines through a command given by the user
- X *
- X * We use temp files and the call_shell() routine here. This would normally
- X * be done using pipes on a UNIX machine, but this is more portable to
- X * the machines we usually run on. The call_shell() routine needs to be able
- X * to deal with redirection somehow, and should handle things like looking
- X * at the PATH env. variable, and adding reasonable extensions to the
- X * command name given by the user. All reasonable versions of call_shell()
- X * do this.
- X * We use input redirection if do_in is TRUE.
- X * We use output redirection if do_out is TRUE.
- X */
- X void
- Xdofilter(line1, line2, buff, do_in, do_out)
- X linenr_t line1, line2;
- X char_u *buff;
- X int do_in, do_out;
- X{
- X#ifdef LATTICE
- X char_u itmp[L_tmpnam]; /* use tmpnam() */
- X char_u otmp[L_tmpnam];
- X#else
- X char_u itmp[TMPNAMELEN];
- X char_u otmp[TMPNAMELEN];
- X#endif
- X linenr_t linecount;
- X
- X /*
- X * Disallow shell commands from .exrc and .vimrc in current directory for
- X * security reasons.
- X */
- X if (secure)
- X {
- X secure = 2;
- X emsg(e_curdir);
- X return;
- X }
- X if (*buff == NUL) /* no filter command */
- X return;
- X linecount = line2 - line1 + 1;
- X curwin->w_cursor.lnum = line1;
- X curwin->w_cursor.col = 0;
- X /* cursupdate(); */
- X
- X /*
- X * 1. Form temp file names
- X * 2. Write the lines to a temp file
- X * 3. Run the filter command on the temp file
- X * 4. Read the output of the command into the buffer
- X * 5. Delete the original lines to be filtered
- X * 6. Remove the temp files
- X */
- X
- X#ifndef LATTICE
- X /* for lattice we use tmpnam(), which will make its own name */
- X STRCPY(itmp, TMPNAME1);
- X STRCPY(otmp, TMPNAME2);
- X#endif
- X
- X if ((do_in && *mktemp((char *)itmp) == NUL) || (do_out && *mktemp((char *)otmp) == NUL))
- X {
- X emsg(e_notmp);
- X return;
- X }
- X
- X/*
- X * ! command will be overwritten by next mesages
- X * This is a trade off between showing the command and not scrolling the
- X * text one line up (problem on slow terminals).
- X */
- X must_redraw = CLEAR; /* screen has been shifted up one line */
- X ++no_wait_return; /* don't call wait_return() while busy */
- X if (do_in && buf_write(curbuf, itmp, NULL, line1, line2, FALSE, 0, FALSE) == FAIL)
- X {
- X msg_outchar('\n'); /* keep message from writeit() */
- X --no_wait_return;
- X (void)emsg2(e_notcreate, itmp); /* will call wait_return */
- X return;
- X }
- X if (!do_out)
- X outchar('\n');
- X
- X#if defined(UNIX) && !defined(ARCHIE)
- X/*
- X * put braces around the command (for concatenated commands)
- X */
- X sprintf((char *)IObuff, "(%s)", (char *)buff);
- X if (do_in)
- X {
- X STRCAT(IObuff, " < ");
- X STRCAT(IObuff, itmp);
- X }
- X if (do_out)
- X {
- X STRCAT(IObuff, " > ");
- X STRCAT(IObuff, otmp);
- X }
- X#else
- X/*
- X * for shells that don't understand braces around commands, at least allow
- X * the use of commands in a pipe.
- X */
- X STRCPY(IObuff, buff);
- X if (do_in)
- X {
- X char_u *p;
- X /*
- X * If there is a pipe, we have to put the '<' in front of it
- X */
- X p = STRCHR(IObuff, '|');
- X if (p)
- X *p = NUL;
- X STRCAT(IObuff, " < ");
- X STRCAT(IObuff, itmp);
- X p = STRCHR(buff, '|');
- X if (p)
- X STRCAT(IObuff, p);
- X }
- X if (do_out)
- X {
- X STRCAT(IObuff, " > ");
- X STRCAT(IObuff, otmp);
- X }
- X#endif
- X
- X windgoto((int)Rows - 1, 0);
- X cursor_on();
- X /* errors are ignored, so you can see the error
- X messages from the command; use 'u' to fix the text */
- X (void)call_shell(IObuff, 1, FALSE);
- X
- X if (do_out)
- X {
- X if (!u_save((linenr_t)(line2), (linenr_t)(line2 + 1)))
- X {
- X linecount = 0;
- X goto error;
- X }
- X if (readfile(otmp, NULL, line2, FALSE, (linenr_t)0, MAXLNUM) == FAIL)
- X {
- X outchar('\n');
- X emsg2(e_notread, otmp);
- X linecount = 0;
- X goto error;
- X }
- X
- X if (do_in)
- X {
- X curwin->w_cursor.lnum = line1;
- X dellines(linecount, TRUE, TRUE);
- X }
- X --no_wait_return;
- X }
- X else
- X {
- Xerror:
- X --no_wait_return;
- X wait_return(FALSE);
- X }
- X updateScreen(CLEAR); /* do this before messages below */
- X
- X if (linecount > p_report)
- X {
- X if (!do_in && do_out)
- X msgmore(linecount);
- X else
- X smsg((char_u *)"%ld lines filtered", (long)linecount);
- X }
- X remove((char *)itmp);
- X remove((char *)otmp);
- X}
- END_OF_FILE
- if test 11550 -ne `wc -c <'vim/src/cmdcmds.c'`; then
- echo shar: \"'vim/src/cmdcmds.c'\" unpacked with wrong size!
- fi
- # end of 'vim/src/cmdcmds.c'
- fi
- if test -f 'vim/src/cmdtab.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vim/src/cmdtab.h'\"
- else
- echo shar: Extracting \"'vim/src/cmdtab.h'\" \(11638 characters\)
- sed "s/^X//" >'vim/src/cmdtab.h' <<'END_OF_FILE'
- X/* vi:ts=4
- X *
- X * VIM - Vi IMproved
- X *
- X * Code Contributions By: Bram Moolenaar mool@oce.nl
- X * Tim Thompson twitch!tjt
- X * Tony Andrews onecom!wldrdg!tony
- X * G. R. (Fred) Walter watmath!watcgl!grwalter
- X */
- X
- X/*
- X * THIS FILE IS AUTOMATICALLY PRODUCED - DO NOT EDIT
- X */
- X
- X#define RANGE 0x01 /* allow a linespecs */
- X#define BANG 0x02 /* allow a ! after the command name */
- X#define EXTRA 0x04 /* allow extra args after command name */
- X#define XFILE 0x08 /* expand wildcards in extra part */
- X#define NOSPC 0x10 /* no spaces allowed in the extra part */
- X#define DFLALL 0x20 /* default file range is 1,$ */
- X#define NODFL 0x40 /* do not default to the current file name */
- X#define NEEDARG 0x80 /* argument required */
- X#define TRLBAR 0x100 /* check for trailing vertical bar */
- X#define REGSTR 0x200 /* allow "x for register designation */
- X#define COUNT 0x400 /* allow count in argument, after command */
- X#define NOTRLCOM 0x800 /* no trailing comment allowed */
- X#define ZEROR 0x1000 /* zero line number allowed */
- X#define USECTRLV 0x2000 /* do not remove CTRL-V from argument */
- X#define NOTADR 0x4000 /* number before command is not an address */
- X#define FILES (XFILE + EXTRA) /* multiple extra files allowed */
- X#define WORD1 (EXTRA + NOSPC) /* one extra word allowed */
- X#define FILE1 (FILES + NOSPC) /* 1 file allowed, defaults to current file */
- X#define NAMEDF (FILE1 + NODFL) /* 1 file allowed, defaults to "" */
- X#define NAMEDFS (FILES + NODFL) /* multiple files allowed, default is "" */
- X
- X/*
- X * This array maps ex command names to command codes. The order in which
- X * command names are listed below is significant -- ambiguous abbreviations
- X * are always resolved to be the first possible match (e.g. "r" is taken
- X * to mean "read", not "rewind", because "read" comes before "rewind").
- X * Not supported commands are included to avoid ambiguities.
- X */
- Xstatic struct
- X{
- X char_u *cmd_name; /* name of the command */
- X short cmd_argt; /* command line arguments permitted/needed/used */
- X} cmdnames[] =
- X{
- X {(char_u *)"append", BANG+RANGE+TRLBAR}, /* not supported */
- X#define CMD_append 0
- X {(char_u *)"all", TRLBAR},
- X#define CMD_all 1
- X {(char_u *)"abbreviate", EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_abbreviate 2
- X {(char_u *)"args", RANGE+NOTADR+BANG+NAMEDFS},
- X#define CMD_args 3
- X {(char_u *)"argument", BANG+RANGE+NOTADR+COUNT+EXTRA},
- X#define CMD_argument 4
- X {(char_u *)"buffer", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_buffer 5
- X {(char_u *)"ball", TRLBAR},
- X#define CMD_ball 6
- X {(char_u *)"buffers", TRLBAR},
- X#define CMD_buffers 7
- X {(char_u *)"bdelete", BANG+RANGE+NOTADR+COUNT+EXTRA+TRLBAR},
- X#define CMD_bdelete 8
- X {(char_u *)"bunload", BANG+RANGE+NOTADR+COUNT+EXTRA+TRLBAR},
- X#define CMD_bunload 9
- X {(char_u *)"bmodified", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_bmodified 10
- X {(char_u *)"bnext", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_bnext 11
- X {(char_u *)"bNext", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_bNext 12
- X {(char_u *)"bprevious", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_bprevious 13
- X {(char_u *)"brewind", RANGE+TRLBAR},
- X#define CMD_brewind 14
- X {(char_u *)"blast", RANGE+TRLBAR},
- X#define CMD_blast 15
- X {(char_u *)"change", BANG+RANGE+COUNT+TRLBAR}, /* not supported */
- X#define CMD_change 16
- X {(char_u *)"cabbrev", EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_cabbrev 17
- X {(char_u *)"cc", TRLBAR+WORD1+BANG},
- X#define CMD_cc 18
- X {(char_u *)"cd", NAMEDF+TRLBAR},
- X#define CMD_cd 19
- X {(char_u *)"center", TRLBAR+RANGE+EXTRA},
- X#define CMD_center 20
- X {(char_u *)"cf", TRLBAR+FILE1+BANG},
- X#define CMD_cf 21
- X {(char_u *)"chdir", NAMEDF+TRLBAR},
- X#define CMD_chdir 22
- X {(char_u *)"cl", TRLBAR},
- X#define CMD_cl 23
- X {(char_u *)"close", BANG+TRLBAR},
- X#define CMD_close 24
- X {(char_u *)"cmap", BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_cmap 25
- X {(char_u *)"cn", TRLBAR+WORD1+BANG},
- X#define CMD_cn 26
- X {(char_u *)"cnoremap", BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_cnoremap 27
- X {(char_u *)"cnoreabbrev", EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_cnoreabbrev 28
- X {(char_u *)"copy", RANGE+EXTRA+TRLBAR},
- X#define CMD_copy 29
- X {(char_u *)"cp", TRLBAR+WORD1+BANG},
- X#define CMD_cp 30
- X {(char_u *)"cq", TRLBAR+BANG},
- X#define CMD_cq 31
- X {(char_u *)"cunmap", BANG+EXTRA+TRLBAR+USECTRLV},
- X#define CMD_cunmap 32
- X {(char_u *)"cunabbrev", EXTRA+TRLBAR+USECTRLV},
- X#define CMD_cunabbrev 33
- X {(char_u *)"delete", RANGE+REGSTR+COUNT+TRLBAR},
- X#define CMD_delete 34
- X {(char_u *)"display", TRLBAR},
- X#define CMD_display 35
- X {(char_u *)"digraphs", EXTRA+TRLBAR},
- X#define CMD_digraphs 36
- X {(char_u *)"edit", BANG+FILE1},
- X#define CMD_edit 37
- X {(char_u *)"ex", BANG+FILE1},
- X#define CMD_ex 38
- X {(char_u *)"exit", BANG+FILE1+DFLALL+TRLBAR},
- X#define CMD_exit 39
- X {(char_u *)"file", FILE1+TRLBAR},
- X#define CMD_file 40
- X {(char_u *)"files", TRLBAR},
- X#define CMD_files 41
- X {(char_u *)"global", RANGE+BANG+EXTRA+DFLALL},
- X#define CMD_global 42
- X {(char_u *)"help", TRLBAR},
- X#define CMD_help 43
- X {(char_u *)"insert", BANG+RANGE+TRLBAR}, /* not supported */
- X#define CMD_insert 44
- X {(char_u *)"iabbrev", EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_iabbrev 45
- X {(char_u *)"imap", BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_imap 46
- X {(char_u *)"inoremap", BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_inoremap 47
- X {(char_u *)"inoreabbrev", EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_inoreabbrev 48
- X {(char_u *)"iunmap", BANG+EXTRA+TRLBAR+USECTRLV},
- X#define CMD_iunmap 49
- X {(char_u *)"iunabbrev", EXTRA+TRLBAR+USECTRLV},
- X#define CMD_iunabbrev 50
- X {(char_u *)"join", RANGE+COUNT+TRLBAR},
- X#define CMD_join 51
- X {(char_u *)"jumps", TRLBAR},
- X#define CMD_jumps 52
- X {(char_u *)"k", RANGE+WORD1+TRLBAR},
- X#define CMD_k 53
- X {(char_u *)"list", RANGE+COUNT+TRLBAR},
- X#define CMD_list 54
- X {(char_u *)"last", EXTRA+BANG},
- X#define CMD_last 55
- X {(char_u *)"left", TRLBAR+RANGE+EXTRA},
- X#define CMD_left 56
- X {(char_u *)"move", RANGE+EXTRA+TRLBAR},
- X#define CMD_move 57
- X {(char_u *)"mark", RANGE+WORD1+TRLBAR},
- X#define CMD_mark 58
- X {(char_u *)"marks", TRLBAR},
- X#define CMD_marks 59
- X {(char_u *)"map", BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_map 60
- X {(char_u *)"make", NEEDARG+EXTRA+TRLBAR+XFILE},
- X#define CMD_make 61
- X {(char_u *)"mkexrc", BANG+FILE1+TRLBAR},
- X#define CMD_mkexrc 62
- X {(char_u *)"mkvimrc", BANG+FILE1+TRLBAR},
- X#define CMD_mkvimrc 63
- X {(char_u *)"mfstat", TRLBAR}, /* for debugging */
- X#define CMD_mfstat 64
- X {(char_u *)"mode", WORD1+TRLBAR},
- X#define CMD_mode 65
- X {(char_u *)"next", RANGE+NOTADR+BANG+NAMEDFS},
- X#define CMD_next 66
- X {(char_u *)"new", BANG+FILE1+RANGE+NOTADR},
- X#define CMD_new 67
- X {(char_u *)"number", RANGE+COUNT+TRLBAR},
- X#define CMD_number 68
- X {(char_u *)"#", RANGE+COUNT+TRLBAR},
- X#define CMD_pound 69
- X {(char_u *)"noremap", BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_noremap 70
- X {(char_u *)"noreabbrev", EXTRA+TRLBAR+NOTRLCOM+USECTRLV},
- X#define CMD_noreabbrev 71
- X {(char_u *)"Next", EXTRA+RANGE+NOTADR+COUNT+BANG},
- X#define CMD_Next 72
- X {(char_u *)"only", BANG+TRLBAR},
- X#define CMD_only 73
- X {(char_u *)"print", RANGE+COUNT+TRLBAR},
- X#define CMD_print 74
- X {(char_u *)"pop", RANGE+NOTADR+COUNT+TRLBAR+ZEROR},
- X#define CMD_pop 75
- X {(char_u *)"put", RANGE+BANG+REGSTR+TRLBAR},
- X#define CMD_put 76
- X {(char_u *)"preserve", TRLBAR},
- X#define CMD_preserve 77
- X {(char_u *)"previous", EXTRA+RANGE+NOTADR+COUNT+BANG},
- X#define CMD_previous 78
- X {(char_u *)"pwd", TRLBAR},
- X#define CMD_pwd 79
- X {(char_u *)"quit", BANG+TRLBAR},
- X#define CMD_quit 80
- X {(char_u *)"qall", BANG+TRLBAR},
- X#define CMD_qall 81
- X {(char_u *)"read", RANGE+NAMEDF+TRLBAR+ZEROR},
- X#define CMD_read 82
- X {(char_u *)"rewind", EXTRA+BANG},
- X#define CMD_rewind 83
- X {(char_u *)"recover", FILE1+TRLBAR}, /* not supported */
- X#define CMD_recover 84
- X {(char_u *)"redo", TRLBAR},
- X#define CMD_redo 85
- X {(char_u *)"right", TRLBAR+RANGE+EXTRA},
- X#define CMD_right 86
- X {(char_u *)"resize", TRLBAR+WORD1},
- X#define CMD_resize 87
- X {(char_u *)"substitute", RANGE+EXTRA},
- X#define CMD_substitute 88
- X {(char_u *)"sargument", BANG+RANGE+NOTADR+COUNT+EXTRA},
- X#define CMD_sargument 89
- X {(char_u *)"sall", TRLBAR},
- X#define CMD_sall 90
- X {(char_u *)"sbuffer", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_sbuffer 91
- X {(char_u *)"sball", TRLBAR},
- X#define CMD_sball 92
- X {(char_u *)"sbmodified", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_sbmodified 93
- X {(char_u *)"sbnext", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_sbnext 94
- X {(char_u *)"sbNext", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_sbNext 95
- X {(char_u *)"sbprevious", RANGE+NOTADR+COUNT+TRLBAR},
- X#define CMD_sbprevious 96
- X {(char_u *)"sbrewind", TRLBAR},
- X#define CMD_sbrewind 97
- X {(char_u *)"sblast", TRLBAR},
- X#define CMD_sblast 98
- X {(char_u *)"suspend", TRLBAR+BANG},
- X#define CMD_suspend 99
- X {(char_u *)"set", EXTRA+TRLBAR},
- X#define CMD_set 100
- X {(char_u *)"setkeymap", NAMEDF+TRLBAR},
- X#define CMD_setkeymap 101
- X {(char_u *)"shell", TRLBAR},
- X#define CMD_shell 102
- X {(char_u *)"sleep", RANGE+COUNT+NOTADR+TRLBAR},
- X#define CMD_sleep 103
- X {(char_u *)"source", NAMEDF+NEEDARG+TRLBAR},
- X#define CMD_source 104
- X {(char_u *)"split", BANG+FILE1+RANGE+NOTADR},
- X#define CMD_split 105
- X {(char_u *)"snext", RANGE+NOTADR+BANG+NAMEDFS},
- X#define CMD_snext 106
- X {(char_u *)"sNext", EXTRA+RANGE+NOTADR+COUNT+BANG},
- X#define CMD_sNext 107
- X {(char_u *)"sprevious", EXTRA+RANGE+NOTADR+COUNT+BANG},
- X#define CMD_sprevious 108
- X {(char_u *)"srewind", EXTRA+BANG},
- X#define CMD_srewind 109
- X {(char_u *)"slast", EXTRA+BANG},
- X#define CMD_slast 110
- X {(char_u *)"stop", TRLBAR+BANG},
- X#define CMD_stop 111
- X {(char_u *)"sunhide", TRLBAR},
- X#define CMD_sunhide 112
- X {(char_u *)"swapname", TRLBAR},
- X#define CMD_swapname 113
- X {(char_u *)"t", RANGE+EXTRA+TRLBAR},
- X#define CMD_t 114
- X {(char_u *)"tag", RANGE+NOTADR+COUNT+BANG+WORD1+TRLBAR+ZEROR},
- X#define CMD_tag 115
- X {(char_u *)"tags", TRLBAR},
- X#define CMD_tags 116
- X {(char_u *)"unabbreviate", EXTRA+TRLBAR+USECTRLV},
- X#define CMD_unabbreviate 117
- X {(char_u *)"undo", TRLBAR},
- X#define CMD_undo 118
- X {(char_u *)"unhide", TRLBAR},
- X#define CMD_unhide 119
- X {(char_u *)"unmap", BANG+EXTRA+TRLBAR+USECTRLV},
- X#define CMD_unmap 120
- X {(char_u *)"vglobal", RANGE+EXTRA+DFLALL},
- X#define CMD_vglobal 121
- X {(char_u *)"version", TRLBAR},
- X#define CMD_version 122
- X {(char_u *)"visual", RANGE+BANG+FILE1},
- X#define CMD_visual 123
- X {(char_u *)"write", RANGE+BANG+FILE1+DFLALL+TRLBAR},
- X#define CMD_write 124
- X {(char_u *)"wnext", RANGE+NOTADR+BANG+FILE1+TRLBAR},
- X#define CMD_wnext 125
- X {(char_u *)"wNext", RANGE+NOTADR+BANG+FILE1+TRLBAR},
- X#define CMD_wNext 126
- X {(char_u *)"wprevious", RANGE+NOTADR+BANG+FILE1+TRLBAR},
- X#define CMD_wprevious 127
- X {(char_u *)"winsize", EXTRA+NEEDARG+TRLBAR},
- X#define CMD_winsize 128
- X {(char_u *)"wq", BANG+FILE1+DFLALL+TRLBAR},
- X#define CMD_wq 129
- X {(char_u *)"wall", BANG+TRLBAR},
- X#define CMD_wall 130
- X {(char_u *)"wqall", BANG+FILE1+DFLALL+TRLBAR},
- X#define CMD_wqall 131
- X {(char_u *)"xit", BANG+FILE1+DFLALL+TRLBAR},
- X#define CMD_xit 132
- X {(char_u *)"xall", BANG+TRLBAR},
- X#define CMD_xall 133
- X {(char_u *)"yank", RANGE+REGSTR+COUNT+TRLBAR},
- X#define CMD_yank 134
- X {(char_u *)"z", RANGE+COUNT+TRLBAR}, /* not supported */
- X#define CMD_z 135
- X {(char_u *)"@", RANGE+EXTRA+TRLBAR},
- X#define CMD_at 136
- X {(char_u *)"!", RANGE+NAMEDFS},
- X#define CMD_bang 137
- X {(char_u *)"<", RANGE+COUNT+TRLBAR},
- X#define CMD_lshift 138
- X {(char_u *)">", RANGE+COUNT+TRLBAR},
- X#define CMD_rshift 139
- X {(char_u *)"=", RANGE+TRLBAR},
- X#define CMD_equal 140
- X {(char_u *)"&", RANGE+EXTRA},
- X#define CMD_and 141
- X {(char_u *)"~", RANGE+EXTRA}
- X#define CMD_tilde 142
- X#define CMD_SIZE 143
- X
- X};
- END_OF_FILE
- if test 11638 -ne `wc -c <'vim/src/cmdtab.h'`; then
- echo shar: \"'vim/src/cmdtab.h'\" unpacked with wrong size!
- fi
- # end of 'vim/src/cmdtab.h'
- fi
- if test -f 'vim/src/digraph.c.UU' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vim/src/digraph.c.UU'\"
- else
- echo shar: Extracting \"'vim/src/digraph.c.UU'\" \(11504 characters\)
- sed "s/^X//" >'vim/src/digraph.c.UU' <<'END_OF_FILE'
- Xbegin 644 vim/src/digraph.c
- XM+RH@=FDZ=',]-#IS=STT"B J"B J(%9)32 M(%9I($E-<')O=F5D"0EB>2!"
- XM<F%M($UO;VQE;F%A<@H@*@H@*B!296%D('1H92!F:6QE(")C<F5D:71S+G1X
- XM="(@9F]R(&$@;&ES="!O9B!P96]P;&4@=VAO(&-O;G1R:6)U=&5D+@H@*B!2
- XM96%D('1H92!F:6QE(")U9V%N9&$N='AT(B!F;W(@8V]P>6EN9R!A;F0@=7-A
- XM9V4@8V]N9&ET:6]N<RX*("HO"@HC:69D968@1$E'4D%02%,*+RH*("H@9&EG
- XM<F%P:"YC.B!C;V1E(&9O<B!D:6=R87!H<PH@*B\*"B-I;F-L=61E(")V:6TN
- XM:"(*(VEN8VQU9&4@(F=L;V)A;',N:"(*(VEN8VQU9&4@(G!R;W1O+F@B"B-I
- XM;F-L=61E(")P87)A;2YH(@H*<W1A=&EC('9O:60@<')I;G1D:6=R87!H(%]?
- XM05)'4R@H8VAA<E]U("HI*3L*"F-H87)?=0DH*F1I9W)A<&AN97<I6S-=.PD)
- XM"2\J('!O:6YT97(@=&\@861D960@9&EG<F%P:',@*B\*:6YT"0ED:6=R87!H
- XM8V]U;G0@/2 P.PD)"2\J(&YU;6)E<B!O9B!A9&1E9"!D:6=R87!H<R J+PH*
- XM(VEF9&5F($U31$]3"F-H87)?=0ED:6=R87!H9&5F875L=%M=6S-=(#T@"0DO
- XM*B!S=&%N9&%R9"!-4T1/4R!D:6=R87!H<R J+PH)(" @>WLG0R<L("<L)RP@
- XM,3(X?2P)+RH@@" J+PH)"7LG=2<L("<B)RP@,3(Y?2P)+RH@@2 J+PH)"7LG
- XM92<L("=<)R<L(#$S,'TL"2\J(((@*B\*"0E[)V$G+" G7B<L(#$S,7TL"2\J
- XM((,@*B\*"0E[)V$G+" G(B<L(#$S,GTL"2\J((0@*B\*"0E[)V$G+" G8"<L
- XM(#$S,WTL"2\J((4@*B\*"0E[)V$G+" G0"<L(#$S-'TL"2\J((8@*B\*"0E[
- XM)V,G+" G+"<L(#$S-7TL"2\J('Y'("A305,@0R!C86XG="!H86YD;&4@=&AE
- XM(')E86P@8VAA<BD@*B\*"0E[)V4G+" G7B<L(#$S-GTL"2\J('Y(("A305,@
- XM0R!C86XG="!H86YD;&4@=&AE(')E86P@8VAA<BD@*B\*"0E[)V4G+" G(B<L
- XM(#$S-WTL"2\J((D@*B\*"0E[)V4G+" G8"<L(#$S.'TL"2\J((H@*B\*"0E[
- XM)VDG+" G(B<L(#$S.7TL"2\J((L@*B\*"0E[)VDG+" G7B<L(#$T,'TL"2\J
- XM((P@*B\*"0E[)VDG+" G8"<L(#$T,7TL"2\J((T@*B\*"0E[)T$G+" G(B<L
- XM(#$T,GTL"2\J((X@*B\*"0E[)T$G+" G0"<L(#$T,WTL"2\J((\@*B\*"0E[
- XM)T4G+" G7"<G+" Q-#1]+ DO*B"0("HO"@D)>R=A)RP@)V4G+" Q-#5]+ DO
- XM*B"1("HO"@D)>R=!)RP@)T4G+" Q-#9]+ DO*B"2("HO"@D)>R=O)RP@)UXG
- XM+" Q-#=]+ DO*B"3("HO"@D)>R=O)RP@)R(G+" Q-#A]+ DO*B"4("HO"@D)
- XM>R=O)RP@)V G+" Q-#E]+ DO*B"5("HO"@D)>R=U)RP@)UXG+" Q-3!]+ DO
- XM*B"6("HO"@D)>R=U)RP@)V G+" Q-3%]+ DO*B"7("HO"@D)>R=Y)RP@)R(G
- XM+" Q-3)]+ DO*B"8("HO"@D)>R=/)RP@)R(G+" Q-3-]+ DO*B"9("HO"@D)
- XM>R=5)RP@)R(G+" Q-31]+ DO*B":("HO"@D@(" @>R=C)RP@)WPG+" Q-35]
- XM+ DO*B";("HO"@D@(" @>R<D)RP@)R0G+" Q-39]+ DO*B"<("HO"@D@(" @
- XM>R=9)RP@)RTG+" Q-3=]+ DO*B!^72 H4T%3($,@8V%N)W0@:&%N9&QE('1H
- XM92!R96%L(&-H87(I("HO"@D@(" @>R=0)RP@)W0G+" Q-3A]+ DO*B">("HO
- XM"@D@(" @>R=F)RP@)V8G+" Q-3E]+ DO*B"?("HO"@D)>R=A)RP@)UPG)RP@
- XM,38P?2P)+RH@H" J+PH)"7LG:2<L("=<)R<L(#$V,7TL"2\J(*$@*B\*"0E[
- XM)V\G+" G7"<G+" Q-C)]+ DO*B"B("HO"@D)>R=U)RP@)UPG)RP@,38S?2P)
- XM+RH@>'@@*%-!4R!#(&-A;B=T(&AA;F1L92!T:&4@<F5A;"!C:&%R*2 J+PH)
- XM"7LG;B<L("=^)RP@,38T?2P)+RH@I" J+PH)"7LG3B<L("=^)RP@,38U?2P)
- XM+RH@I2 J+PH)"7LG82<L("=A)RP@,38V?2P)+RH@IB J+PH)"7LG;R<L("=O
- XM)RP@,38W?2P)+RH@IR J+PH)"7LG?B<L("<_)RP@,38X?2P)+RH@J" J+PH)
- XM"7LG+2<L("=A)RP@,38Y?2P)+RH@J2 J+PH)"7LG82<L("<M)RP@,3<P?2P)
- XM+RH@JB J+PH)"7LG,2<L("<R)RP@,3<Q?2P)+RH@JR J+PH)"7LG,2<L("<T
- XM)RP@,3<R?2P)+RH@K" J+PH)"7LG?B<L("<A)RP@,3<S?2P)+RH@K2 J+PH)
- XM"7LG/"<L("<\)RP@,3<T?2P)+RH@KB J+PH)"7LG/B<L("<^)RP@,3<U?2P)
- XM+RH@KR J+PH*"0E[)W,G+" G<R<L(#(R-7TL"2\J(.$@*B\*"0E[)VHG+" G
- XM=2<L(#(S,'TL"2\J(.8@*B\*"0E[)V\G+" G+R<L(#(S-WTL"2\J(.T@*B\*
- XM"0E[)RLG+" G+2<L(#(T,7TL"2\J(/$@*B\*"0E[)SXG+" G/2<L(#(T,GTL
- XM"2\J(/(@*B\*"0E[)SPG+" G/2<L(#(T,WTL"2\J(/,@*B\*"0E[)SHG+" G
- XM+2<L(#(T-GTL"2\J(/8@*B\*"0E[)WXG+" G?B<L(#(T-WTL"2\J(/<@*B\*
- XM"0E[)WXG+" G;R<L(#(T.'TL"2\J(/@@*B\*"0E[)S(G+" G,B<L(#(U,WTL
- XM"2\J(/T@*B\*"0E[3E5,+"!.54PL($Y53'T*"0E].PH*(V5L<V4)+RH@35-$
- XM3U,@*B\*"F-H87)?=0ED:6=R87!H9&5F875L=%M=6S-=(#T@"0DO*B!S=&%N
- XM9&%R9"!)4T\@9&EG<F%P:',@*B\*"2 @('M[)WXG+" G(2<L(#$V,7TL"2\J
- XM(*$@*B\*"2 @("![)V,G+" G?"<L(#$V,GTL"2\J(*(@*B\*"2 @("![)R0G
- XM+" G)"<L(#$V,WTL"2\J(*,@*B\*"2 @("![)V\G+" G>"<L(#$V-'TL"2\J
- XM(*0@*B\*"2 @("![)UDG+" G+2<L(#$V-7TL"2\J(*4@*B\*"2 @("![)WPG
- XM+" G?"<L(#$V-GTL"2\J(*8@*B\*"2 @("![)W G+" G82<L(#$V-WTL"2\J
- XM(*<@*B\*"2 @("![)R(G+" G(B<L(#$V.'TL"2\J(*@@*B\*"2 @("![)V,G
- XM+" G3R<L(#$V.7TL"2\J(*D@*B\*"0E[)V$G+" G+2<L(#$W,'TL"2\J(*H@
- XM*B\*"0E[)SPG+" G/"<L(#$W,7TL"2\J(*L@*B\*"0E[)RTG+" G+"<L(#$W
- XM,GTL"2\J(*P@*B\*"0E[)RTG+" G+2<L(#$W,WTL"2\J(*T@*B\*"0E[)W(G
- XM+" G3R<L(#$W-'TL"2\J(*X@*B\*"0E[)RTG+" G/2<L(#$W-7TL"2\J(*\@
- XM*B\*"0E[)WXG+" G;R<L(#$W-GTL"2\J(+ @*B\*"0E[)RLG+" G+2<L(#$W
- XM-WTL"2\J(+$@*B\*"0E[)S(G+" G,B<L(#$W.'TL"2\J(+(@*B\*"0E[)S,G
- XM+" G,R<L(#$W.7TL"2\J(+,@*B\*"0E[)UPG)RP@)UPG)RP@,3@P?2P)+RH@
- XMM" J+PH)"7LG:B<L("=U)RP@,3@Q?2P)+RH@M2 J+PH)"7LG<"<L("=P)RP@
- XM,3@R?2P)+RH@MB J+PH)"7LG?B<L("<N)RP@,3@S?2P)+RH@MR J+PH)"7LG
- XM+"<L("<L)RP@,3@T?2P)+RH@N" J+PH)"7LG,2<L("<Q)RP@,3@U?2P)+RH@
- XMN2 J+PH)"7LG;R<L("<M)RP@,3@V?2P)+RH@NB J+PH)"7LG/B<L("<^)RP@
- XM,3@W?2P)+RH@NR J+PH)"7LG,2<L("<T)RP@,3@X?2P)+RH@O" J+PH)"7LG
- XM,2<L("<R)RP@,3@Y?2P)+RH@O2 J+PH)"7LG,R<L("<T)RP@,3DP?2P)+RH@
- XMOB J+PH)"7LG?B<L("<_)RP@,3DQ?2P)+RH@OR J+PH)"7LG02<L("=@)RP@
- XM,3DR?2P)+RH@P" J+PH)"7LG02<L("=<)R<L(#$Y,WTL"2\J(,$@*B\*"0E[
- XM)T$G+" G7B<L(#$Y-'TL"2\J(,(@*B\*"0E[)T$G+" G?B<L(#$Y-7TL"2\J
- XM(,,@*B\*"0E[)T$G+" G(B<L(#$Y-GTL"2\J(,0@*B\*"0E[)T$G+" G0"<L
- XM(#$Y-WTL"2\J(,4@*B\*"0E[)T$G+" G12<L(#$Y.'TL"2\J(,8@*B\*"0E[
- XM)T,G+" G+"<L(#$Y.7TL"2\J(,<@*B\*"0E[)T4G+" G8"<L(#(P,'TL"2\J
- XM(,@@*B\*"0E[)T4G+" G7"<G+" R,#%]+ DO*B#)("HO"@D)>R=%)RP@)UXG
- XM+" R,#)]+ DO*B#*("HO"@D)>R=%)RP@)R(G+" R,#-]+ DO*B#+("HO"@D)
- XM>R=))RP@)V G+" R,#1]+ DO*B#,("HO"@D)>R=))RP@)UPG)RP@,C U?2P)
- XM+RH@S2 J+PH)"7LG22<L("=>)RP@,C V?2P)+RH@SB J+PH)"7LG22<L("<B
- XM)RP@,C W?2P)+RH@SR J+PH)"7LG1"<L("<M)RP@,C X?2P)+RH@T" J+PH)
- XM"7LG3B<L("=^)RP@,C Y?2P)+RH@T2 J+PH)"7LG3R<L("=@)RP@,C$P?2P)
- XM+RH@TB J+PH)"7LG3R<L("=<)R<L(#(Q,7TL"2\J(-,@*B\*"0E[)T\G+" G
- XM7B<L(#(Q,GTL"2\J(-0@*B\*"0E[)T\G+" G?B<L(#(Q,WTL"2\J(-4@*B\*
- XM"0E[)T\G+" G(B<L(#(Q-'TL"2\J(-8@*B\*"0E[)R\G+" G7%PG+" R,35]
- XM+ DO*B#7("HO"@D)>R=/)RP@)R\G+" R,39]+ DO*B#8("HO"@D)>R=5)RP@
- XM)V G+" R,3=]+ DO*B#9("HO"@D)>R=5)RP@)UPG)RP@,C$X?2P)+RH@VB J
- XM+PH)"7LG52<L("=>)RP@,C$Y?2P)+RH@VR J+PH)"7LG52<L("<B)RP@,C(P
- XM?2P)+RH@W" J+PH)"7LG62<L("=<)R<L(#(R,7TL"2\J(-T@*B\*"0E[)TDG
- XM+" G<"<L(#(R,GTL"2\J(-X@*B\*"0E[)W,G+" G<R<L(#(R,WTL"2\J(-\@
- XM*B\*"0E[)V$G+" G8"<L(#(R-'TL"2\J(. @*B\*"0E[)V$G+" G7"<G+" R
- XM,C5]+ DO*B#A("HO"@D)>R=A)RP@)UXG+" R,C9]+ DO*B#B("HO"@D)>R=A
- XM)RP@)WXG+" R,C=]+ DO*B#C("HO"@D)>R=A)RP@)R(G+" R,CA]+ DO*B#D
- XM("HO"@D)>R=A)RP@)T G+" R,CE]+ DO*B#E("HO"@D)>R=A)RP@)V4G+" R
- XM,S!]+ DO*B#F("HO"@D)>R=C)RP@)RPG+" R,S%]+ DO*B#G("HO"@D)>R=E
- XM)RP@)V G+" R,S)]+ DO*B#H("HO"@D)>R=E)RP@)UPG)RP@,C,S?2P)+RH@
- XMZ2 J+PH)"7LG92<L("=>)RP@,C,T?2P)+RH@ZB J+PH)"7LG92<L("<B)RP@
- XM,C,U?2P)+RH@ZR J+PH)"7LG:2<L("=@)RP@,C,V?2P)+RH@[" J+PH)"7LG
- XM:2<L("=<)R<L(#(S-WTL"2\J(.T@*B\*"0E[)VDG+" G7B<L(#(S.'TL"2\J
- XM(.X@*B\*"0E[)VDG+" G(B<L(#(S.7TL"2\J(.\@*B\*"0E[)V0G+" G+2<L
- XM(#(T,'TL"2\J(/ @*B\*"0E[)VXG+" G?B<L(#(T,7TL"2\J(/$@*B\*"0E[
- XM)V\G+" G8"<L(#(T,GTL"2\J(/(@*B\*"0E[)V\G+" G7"<G+" R-#-]+ DO
- XM*B#S("HO"@D)>R=O)RP@)UXG+" R-#1]+ DO*B#T("HO"@D)>R=O)RP@)WXG
- XM+" R-#5]+ DO*B#U("HO"@D)>R=O)RP@)R(G+" R-#9]+ DO*B#V("HO"@D)
- XM>R<Z)RP@)RTG+" R-#=]+ DO*B#W("HO"@D)>R=O)RP@)R\G+" R-#A]+ DO
- XM*B#X("HO"@D)>R=U)RP@)V G+" R-#E]+ DO*B#Y("HO"@D)>R=U)RP@)UPG
- XM)RP@,C4P?2P)+RH@^B J+PH)"7LG=2<L("=>)RP@,C4Q?2P)+RH@^R J+PH)
- XM"7LG=2<L("<B)RP@,C4R?2P)+RH@_" J+PH)"7LG>2<L("=<)R<L(#(U,WTL
- XM"2\J(/T@*B\*"0E[)VDG+" G<"<L(#(U-'TL"2\J(/X@*B\*"0E[)WDG+" G
- XM(B<L(#(U-7TL"2\J(/\@*B\*"0E[3E5,+"!.54PL($Y53'T*"0E].PHC96YD
- XM:68)+RH@35-$3U,@*B\*( HO*@H@*B!H86YD;&4@9&EG<F%P:',@869T97(@
- XM='EP:6YG(&$@8VAA<F%C=&5R"B J+PH):6YT"F1O9&EG<F%P:"AC*0H):6YT
- XM"0EC.PI["@ES=&%T:6,@:6YT"6)A8VMS<&%C960["0DO*B!C:&%R86-T97(@
- XM8F5F;W)E($)3("HO"@ES=&%T:6,@:6YT"6QA<W1C:&%R.PD)+RH@;&%S="!T
- XM>7!E9"!C:&%R86-T97(@*B\*"@EI9B H8R ]/2 M,2D)"0D)+RH@:6YI="!V
- XM86QU97,@*B\*"7L*"0EB86-K<W!A8V5D(#T@+3$["@E]"@EE;'-E(&EF("AP
- XM7V1G*0H)>PH)"6EF("AB86-K<W!A8V5D(#X](# I"@D)"6,@/2!G971D:6=R
- XM87!H*&)A8VMS<&%C960L(&,L($9!3%-%*3L*"0EB86-K<W!A8V5D(#T@+3$[
- XM"@D):68@*&,@/3T@0E,@)B8@;&%S=&-H87(@/CT@,"D*"0D)8F%C:W-P86-E
- XM9" ](&QA<W1C:&%R.PH)?0H);&%S=&-H87(@/2!C.PH)<F5T=7)N(&,["GT*
- XM"B\J"B J(&QO;VMU<"!T:&4@<&%I<B!C:&%R,2P@8VAA<C(@:6X@=&AE(&1I
- XM9W)A<&@@=&%B;&5S"B J(&EF(&YO(&UA=&-H+"!R971U<FX@8VAA<C(*("HO
- XM"@EI;G0*9V5T9&EG<F%P:"AC:&%R,2P@8VAA<C(L(&UE=&$I"@EI;G0)8VAA
- XM<C$["@EI;G0)8VAA<C(["@EI;G0);65T83L*>PH):6YT"0EI.PH):6YT"0ER
- XM971V86P["@H)<F5T=F%L(#T@,#L*"69O<B H:2 ](# [(#L@*RMI*0D)"2\J
- XM('-E87)C:"!A9&1E9"!D:6=R87!H<R!F:7)S=" J+PH)>PH)"6EF("AI(#T]
- XM(&1I9W)A<&AC;W5N="D)+RH@96YD(&]F(&%D9&5D('1A8FQE+"!S96%R8V@@
- XM9&5F875L=',@*B\*"0E["@D)"69O<B H:2 ](# [(&1I9W)A<&AD969A=6QT
- XM6VE=6S!=("$](# [("LK:2D*"0D)"6EF("AD:6=R87!H9&5F875L=%MI75LP
- XM72 ]/2!C:&%R,2 F)B!D:6=R87!H9&5F875L=%MI75LQ72 ]/2!C:&%R,BD*
- XM"0D)"7L*"0D)"0ER971V86P@/2!D:6=R87!H9&5F875L=%MI75LR73L*"0D)
- XM"0EB<F5A:SL*"0D)"7T*"0D)8G)E86L["@D)?0H)"6EF("AD:6=R87!H;F5W
- XM6VE=6S!=(#T](&-H87(Q("8F(&1I9W)A<&AN97=;:5U;,5T@/3T@8VAA<C(I
- XM"@D)>PH)"0ER971V86P@/2!D:6=R87!H;F5W6VE=6S)=.PH)"0EB<F5A:SL*
- XM"0E]"@E]"@H):68@*')E='9A;" ]/2 P*0D)"2\J(&1I9W)A<&@@9&5L971E
- XM9"!O<B!N;W0@9F]U;F0@*B\*"7L*"0EI9B H8VAA<C$@/3T@)R G("8F(&UE
- XM=&$I"0DO*B \<W!A8V4^(#QC:&%R/B M+3X@;65T82UC:&%R("HO"@D)"7)E
- XM='5R;B H8VAA<C(@?" P>#@P*3L*"0ER971U<FX@8VAA<C(["@E]"@ER971U
- XM<FX@<F5T=F%L.PI]"@HO*@H@*B!P=70@=&AE(&1I9W)A<&AS(&EN('1H92!A
- XM<F=U;65N="!S=')I;F<@:6X@=&AE(&1I9W)A<&@@=&%B;&4*("H@9F]R;6%T
- XM.B![8S%]>V,R?2!C:&%R('MC,7U[8S)](&-H87(@+BXN"B J+PH)=F]I9 IP
- XM=71D:6=R87!H*'-T<BD*"6-H87)?=2 J<W1R.PI["@EI;G0)"6-H87(Q+"!C
- XM:&%R,BP@;CL*"6-H87)?=0DH*FYE=W1A8BE;,UT["@EI;G0)"6D["@H)=VAI
- XM;&4@*"IS='(I"@E["@D)<VMI<'-P86-E*"9S='(I.PH)"6EF("@H8VAA<C$@
- XM/2 J<W1R*RLI(#T](# @?'P@*&-H87(R(#T@*G-T<BLK*2 ]/2 P*0H)"0ER
- XM971U<FX["@D):68@*&-H87(Q(#T]($530R!\?"!C:&%R,B ]/2!%4T,I"@D)
- XM>PH)"0E%35-'*")%<V-A<&4@;F]T(&%L;&]W960@:6X@9&EG<F%P:"(I.PH)
- XM"0ER971U<FX["@D)?0H)"7-K:7!S<&%C92@F<W1R*3L*"0EI9B H(6ES9&EG
- XM:70H*G-T<BDI"@D)>PH)"0EE;7-G*&5?;G5M8F5R*3L*"0D)<F5T=7)N.PH)
- XM"7T*"0EN(#T@9V5T9&EG:71S*"9S='(I.PH)"6EF("AD:6=R87!H;F5W*0D)
- XM+RH@<V5A<F-H('1H92!T86)L92!F;W(@97AI<W1I;F<@96YT<GD@*B\*"0E[
- XM"@D)"69O<B H:2 ](# [(&D@/"!D:6=R87!H8V]U;G0[("LK:2D*"0D)"6EF
- XM("AD:6=R87!H;F5W6VE=6S!=(#T](&-H87(Q("8F(&1I9W)A<&AN97=;:5U;
- XM,5T@/3T@8VAA<C(I"@D)"0E["@D)"0D)9&EG<F%P:&YE=UMI75LR72 ](&X[
- XM"@D)"0D)8G)E86L["@D)"0E]"@D)"6EF("AI(#P@9&EG<F%P:&-O=6YT*0H)
- XM"0D)8V]N=&EN=64["@D)?0H)"6YE=W1A8B ]("AC:&%R7W4@*"HI6S-=*6%L
- XM;&]C*&1I9W)A<&AC;W5N=" J(#,@*R S*3L*"0EI9B H;F5W=&%B*0H)"7L*
- XM"0D);65M;6]V92@H8VAA<B J*6YE=W1A8BP@*&-H87(@*BED:6=R87!H;F5W
- XM+" H<VEZ95]T*2AD:6=R87!H8V]U;G0@*B S*2D["@D)"69R964H9&EG<F%P
- XM:&YE=RD["@D)"61I9W)A<&AN97<@/2!N97=T86(["@D)"61I9W)A<&AN97=;
- XM9&EG<F%P:&-O=6YT75LP72 ](&-H87(Q.PH)"0ED:6=R87!H;F5W6V1I9W)A
- XM<&AC;W5N=%U;,5T@/2!C:&%R,CL*"0D)9&EG<F%P:&YE=UMD:6=R87!H8V]U
- XM;G1=6S)=(#T@;CL*"0D)*RMD:6=R87!H8V]U;G0["@D)?0H)?0I]"@H)=F]I
- XM9 IL:7-T9&EG<F%P:',H*0I["@EI;G0)"6D["@H)<')I;G1D:6=R87!H*$Y5
- XM3$PI.PH);7-G7W-T87)T*"D["@EM<V=?;W5T8VAA<B@G7&XG*3L*"69O<B H
- XM:2 ](# [(&1I9W)A<&AD969A=6QT6VE=6S!=("8F("%G;W1?:6YT.R K*VDI
- XM"@E["@D):68@*&=E=&1I9W)A<&@H9&EG<F%P:&1E9F%U;'1;:5U;,%TL(&1I
- XM9W)A<&AD969A=6QT6VE=6S%=+"!&04Q312D@/3T@9&EG<F%P:&1E9F%U;'1;
- XM:5U;,ETI"@D)"7!R:6YT9&EG<F%P:"AD:6=R87!H9&5F875L=%MI72D["@D)
- XM8G)E86MC:&5C:R@I.PH)?0H)9F]R("AI(#T@,#L@:2 \(&1I9W)A<&AC;W5N
- XM=" F)B A9V]T7VEN=#L@*RMI*0H)>PH)"7!R:6YT9&EG<F%P:"AD:6=R87!H
- XM;F5W6VE=*3L*"0EB<F5A:V-H96-K*"D["@E]"@EM<V=?;W5T8VAA<B@G7&XG
- XM*3L*"7=A:71?<F5T=7)N*%12544I.PD)+RH@8VQE87(@<V-R965N+"!B96-A
- XM=7-E('-O;64@9&EG<F%P:',@;6%Y(&)E('=R;VYG+ H)"0D)"0D)("H@:6X@
- XM=VAI8V@@8V%S92!W92!M97-S960@=7 @3F5X=%-C<F5E;B J+PI]"@H)<W1A
- XM=&EC('9O:60*<')I;G1D:6=R87!H*' I"@EC:&%R7W4@*G ["GL*"6-H87)?
- XM=0D)8G5F6SE=.PH)<W1A=&EC(&EN= EL96X["@H):68@*' @/3T@3E5,3"D*
- XM"0EL96X@/2 P.PH)96QS92!I9B H<%LR72 A/2 P*0H)>PH)"6EF("AL96X@
- XM/B!#;VQU;6YS("T@,3$I"@D)>PH)"0EM<V=?;W5T8VAA<B@G7&XG*3L*"0D)
- XM;&5N(#T@,#L*"0E]"@D):68@*&QE;BD*"0D);7-G7V]U='-T<B@H8VAA<E]U
- XM("HI(B @("(I.PH)"7-P<FEN=&8H*&-H87(@*BEB=68L("(E8R5C("5C("4S
- XM9"(L('!;,%TL('!;,5TL('!;,ETL('!;,ETI.PH)"6US9U]O=71S='(H8G5F
- XL*3L*"0EL96X@*ST@,3$["@E]"GT*"B-E;F1I9B O*B!$24=205!(4R J+PIF
- X
- Xend
- END_OF_FILE
- if test 11504 -ne `wc -c <'vim/src/digraph.c.UU'`; then
- echo shar: \"'vim/src/digraph.c.UU'\" unpacked with wrong size!
- else
- echo shar: Uudecoding \"'vim/src/digraph.c'\" \(8324 characters\)
- cat vim/src/digraph.c.UU | uudecode
- if test 8324 -ne `wc -c <'vim/src/digraph.c'`; then
- echo shar: \"'vim/src/digraph.c'\" uudecoded with wrong size!
- else
- rm vim/src/digraph.c.UU
- fi
- fi
- # end of 'vim/src/digraph.c.UU'
- fi
- if test -f 'vim/src/makefile.nt' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vim/src/makefile.nt'\"
- else
- echo shar: Extracting \"'vim/src/makefile.nt'\" \(5138 characters\)
- sed "s/^X//" >'vim/src/makefile.nt' <<'END_OF_FILE'
- X!include <ntwin32.mak>
- X#
- X# Makefile for VIM on WINNT, using MS SDK
- X#
- X
- X#>>>>> choose options:
- X### -DDIGRAPHS digraph support (at the cost of 1.6 Kbyte code)
- X### -DCOMPATIBLE start in vi-compatible mode
- X### -DNOBACKUP default is no backup file
- X### -DDEBUG output a lot of debugging garbage
- X### -DTERMCAP include termcap file support
- X### -DNO_BUILTIN_TCAPS do not include builtin termcap entries
- X### (use only with -DTERMCAP)
- X### -DSOME_BUILTIN_TCAPS include most useful builtin termcap entries
- X### (use only without -DNO_BUILTIN_TCAPS)
- X### -DALL_BUILTIN_TCAPS include all builtin termcap entries
- X### (use only without -DNO_BUILTIN_TCAPS)
- X### -DVIMRC_FILE name of the .vimrc file in current dir
- X### -DEXRC_FILE name of the .exrc file in current dir
- X### -DSYSVIMRC_FILE name of the global .vimrc file
- X### -DSYSEXRC_FILE name of the global .exrc file
- X### -DDEFVIMRC_FILE name of the system-wide .vimrc file
- X### -DVIM_HLP name of the help file
- X### -DWEBB_COMPLETE include Webb's code for command line completion
- X### -DWEBB_KEYWORD_COMPL include Webb's code for keyword completion
- X### -DNOTITLE 'title' option off by default
- XDEFINES = -DDIGRAPHS -DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL
- X
- X#>>>>> name of the compiler and linker, name of lib directory
- XCC = cl
- XLINK = cl /ML /Fe$@ /Zi
- XLIB = c:\mstools\lib
- X
- X#CFLAGS = -c -DMSDOS -DNT $(DEFINES) /Zi
- XCFLAGS = -c -DMSDOS -DNT $(DEFINES) /Ox
- X
- X
- X#>>>>> end of choices
- X###########################################################################
- X
- XINCL = vim.h globals.h param.h keymap.h macros.h ascii.h term.h msdos.h structs.h
- X
- XOBJ = obj/alloc.obj obj/winnt.obj obj/buffer.obj obj/charset.obj obj/cmdcmds.obj obj/cmdline.obj \
- X obj/csearch.obj obj/digraph.obj obj/edit.obj obj/fileio.obj obj/getchar.obj obj/help.obj \
- X obj/linefunc.obj obj/main.obj obj/mark.obj obj/memfile.obj obj/memline.obj obj/message.obj obj/misccmds.obj \
- X obj/normal.obj obj/ops.obj obj/param.obj obj/quickfix.obj obj/regexp.obj \
- X obj/regsub.obj obj/screen.obj obj/search.obj \
- X obj/tag.obj obj/term.obj obj/undo.obj obj/window.obj $(TERMLIB)
- X
- X..\vim: $(OBJ) version.obj
- X $(link) $(linkdebug) $(conflags) -out:$*.exe $** $(conlibs) \
- X user32.lib
- X del version.obj
- X
- Xctags:
- X command /c ctags *.c *.h
- X
- Xclean:
- X del $(OBJ) version.obj mkcmdtab.obj ..\vim mkcmdtab cmdtab.h
- X
- Xaddcr: addcr.c
- X $(CC) addcr.c
- X command /c addcr.bat
- X
- X###########################################################################
- X
- Xobj/alloc.obj: alloc.c $(INCL)
- X $(CC) $(CFLAGS) alloc.c /Foobj/alloc.obj
- X
- Xobj/winnt.obj: msdos.c $(INCL) msdos.h
- X $(CC) $(CFLAGS) winnt.c /Foobj/winnt.obj
- X
- Xobj/buffer.obj: buffer.c $(INCL)
- X $(CC) $(CFLAGS) buffer.c /Foobj/buffer.obj
- X
- Xobj/charset.obj: charset.c $(INCL)
- X $(CC) $(CFLAGS) charset.c /Foobj/charset.obj
- X
- Xobj/cmdcmds.obj: cmdcmds.c $(INCL)
- X $(CC) $(CFLAGS) cmdcmds.c /Foobj/cmdcmds.obj
- X
- Xobj/cmdline.obj: cmdline.c $(INCL) cmdtab.h
- X $(CC) $(CFLAGS) cmdline.c /Foobj/cmdline.obj
- X
- Xobj/csearch.obj: csearch.c $(INCL)
- X $(CC) $(CFLAGS) csearch.c /Foobj/csearch.obj
- X
- Xobj/digraph.obj: digraph.c $(INCL)
- X $(CC) $(CFLAGS) digraph.c /Foobj/digraph.obj
- X
- Xobj/edit.obj: edit.c $(INCL)
- X $(CC) $(CFLAGS) edit.c /Foobj/edit.obj
- X
- Xobj/fileio.obj: fileio.c $(INCL)
- X $(CC) $(CFLAGS) fileio.c /Foobj/fileio.obj
- X
- Xobj/getchar.obj: getchar.c $(INCL)
- X $(CC) $(CFLAGS) getchar.c /Foobj/getchar.obj
- X
- Xobj/help.obj: help.c $(INCL)
- X $(CC) $(CFLAGS) help.c /Foobj/help.obj
- X
- Xobj/linefunc.obj: linefunc.c $(INCL)
- X $(CC) $(CFLAGS) linefunc.c /Foobj/linefunc.obj
- X
- Xobj/main.obj: main.c $(INCL)
- X $(CC) $(CFLAGS) main.c /Foobj/main.obj
- X
- Xobj/mark.obj: mark.c $(INCL)
- X $(CC) $(CFLAGS) mark.c /Foobj/mark.obj
- X
- Xobj/memfile.obj: memfile.c $(INCL)
- X $(CC) $(CFLAGS) memfile.c /Foobj/memfile.obj
- X
- Xobj/memline.obj: memline.c $(INCL)
- X $(CC) $(CFLAGS) memline.c /Foobj/memline.obj
- X
- Xobj/message.obj: message.c $(INCL)
- X $(CC) $(CFLAGS) message.c /Foobj/message.obj
- X
- Xobj/misccmds.obj: misccmds.c $(INCL)
- X $(CC) $(CFLAGS) misccmds.c /Foobj/misccmds.obj
- X
- Xobj/normal.obj: normal.c $(INCL) ops.h
- X $(CC) $(CFLAGS) normal.c /Foobj/normal.obj
- X
- Xobj/ops.obj: ops.c $(INCL) ops.h
- X $(CC) $(CFLAGS) ops.c /Foobj/ops.obj
- X
- Xobj/param.obj: param.c $(INCL)
- X $(CC) $(CFLAGS) param.c /Foobj/param.obj
- X
- Xobj/quickfix.obj: quickfix.c $(INCL)
- X $(CC) $(CFLAGS) quickfix.c /Foobj/quickfix.obj
- X
- Xobj/regexp.obj: regexp.c $(INCL)
- X $(CC) $(CFLAGS) regexp.c /Foobj/regexp.obj
- X
- Xobj/regsub.obj: regsub.c $(INCL)
- X $(CC) $(CFLAGS) regsub.c /Foobj/regsub.obj
- X
- Xobj/screen.obj: screen.c $(INCL)
- X $(CC) $(CFLAGS) screen.c /Foobj/screen.obj
- X
- Xobj/search.obj: search.c $(INCL)
- X $(CC) $(CFLAGS) search.c /Foobj/search.obj
- X
- Xobj/tag.obj: tag.c $(INCL)
- X $(CC) $(CFLAGS) tag.c /Foobj/tag.obj
- X
- Xobj/term.obj: term.c $(INCL)
- X $(CC) $(CFLAGS) term.c /Foobj/term.obj
- X
- Xobj/undo.obj: undo.c $(INCL)
- X $(CC) $(CFLAGS) undo.c /Foobj/undo.obj
- X
- Xobj/window.obj: window.c $(INCL)
- X $(CC) $(CFLAGS) window.c /Foobj/window.obj
- X
- Xcmdtab.h: cmdtab.tab mkcmdtab.exe
- X mkcmdtab cmdtab.tab cmdtab.h
- X
- Xmkcmdtab.exe: obj/mkcmdtab.obj
- X $(link) $(linkdebug) $(conflags) -out:$*.exe $** $(conlibs) \
- X user32.lib
- X
- Xobj/mkcmdtab.obj: mkcmdtab.c
- X $(CC) $(CFLAGS) mkcmdtab.c /Foobj/mkcmdtab.obj
- END_OF_FILE
- if test 5138 -ne `wc -c <'vim/src/makefile.nt'`; then
- echo shar: \"'vim/src/makefile.nt'\" unpacked with wrong size!
- fi
- # end of 'vim/src/makefile.nt'
- fi
- if test -f 'vim/src/tag.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vim/src/tag.c'\"
- else
- echo shar: Extracting \"'vim/src/tag.c'\" \(11552 characters\)
- sed "s/^X//" >'vim/src/tag.c' <<'END_OF_FILE'
- X/* vi:ts=4:sw=4
- X *
- X * VIM - Vi IMproved by Bram Moolenaar
- X *
- X * Read the file "credits.txt" for a list of people who contributed.
- X * Read the file "uganda.txt" for copying and usage conditions.
- X */
- X
- X/*
- X * Code to handle tags and the tag stack
- X */
- X
- X#include "vim.h"
- X#include "globals.h"
- X#include "proto.h"
- X#include "param.h"
- X
- Xstatic int findtag __ARGS((char_u *));
- Xstatic char_u *bottommsg = (char_u *)"at bottom of tag stack";
- Xstatic char_u *topmsg = (char_u *)"at top of tag stack";
- X
- X/*
- X * Jump to tag; handling of tag stack
- X *
- X * *tag != NUL (:tag): jump to new tag, add to tag stack
- X * type == 1 (:pop) || type == 2 (CTRL-T): jump to old position
- X * type == 0 (:tag): jump to old tag
- X */
- X void
- Xdotag(tag, type, count)
- X char_u *tag;
- X int type;
- X int count;
- X{
- X int i;
- X struct taggy *tagstack = curwin->w_tagstack;
- X int tagstackidx = curwin->w_tagstackidx;
- X int tagstacklen = curwin->w_tagstacklen;
- X
- X if (*tag != NUL) /* new pattern, add to the stack */
- X {
- X /*
- X * if last used entry is not at the top, delete all tag stack entries
- X * above it.
- X */
- X while (tagstackidx < tagstacklen)
- X free(tagstack[--tagstacklen].tagname);
- X
- X /* if tagstack is full: remove oldest entry */
- X if (++tagstacklen > TAGSTACKSIZE)
- X {
- X tagstacklen = TAGSTACKSIZE;
- X free(tagstack[0].tagname);
- X for (i = 1; i < tagstacklen; ++i)
- X tagstack[i - 1] = tagstack[i];
- X --tagstackidx;
- X }
- X /*
- X * put the tag name in the tag stack
- X * the position is added below
- X */
- X tagstack[tagstackidx].tagname = strsave(tag);
- X }
- X else if (tagstacklen == 0) /* empty stack */
- X {
- X EMSG("tag stack empty");
- X goto end_dotag;
- X }
- X else if (type) /* go to older position */
- X {
- X if ((tagstackidx -= count) < 0)
- X {
- X emsg(bottommsg);
- X if (tagstackidx + count == 0)
- X {
- X /* We did ^T (or <num>^T) from the bottom of the stack */
- X tagstackidx = 0;
- X goto end_dotag;
- X }
- X /* We weren't at the bottom of the stack, so jump all the way to
- X * the bottom.
- X */
- X tagstackidx = 0;
- X }
- X else if (tagstackidx >= tagstacklen) /* must have been count == 0 */
- X {
- X emsg(topmsg);
- X goto end_dotag;
- X }
- X if (tagstack[tagstackidx].fmark.fnum != curbuf->b_fnum) /* jump to other file */
- X {
- X if (buflist_getfile(tagstack[tagstackidx].fmark.fnum, tagstack[tagstackidx].fmark.mark.lnum, TRUE) == FAIL)
- X {
- X /* emsg(e_notopen); */
- X goto end_dotag;
- X }
- X }
- X else
- X curwin->w_cursor.lnum = tagstack[tagstackidx].fmark.mark.lnum;
- X curwin->w_cursor.col = tagstack[tagstackidx].fmark.mark.col;
- X curwin->w_set_curswant = TRUE;
- X goto end_dotag;
- X }
- X else /* go to newer pattern */
- X {
- X if ((tagstackidx += count - 1) >= tagstacklen)
- X {
- X tagstackidx = tagstacklen - 1;
- X emsg(topmsg);
- X }
- X else if (tagstackidx < 0) /* must have been count == 0 */
- X {
- X emsg(bottommsg);
- X tagstackidx = 0;
- X goto end_dotag;
- X }
- X }
- X /*
- X * For :tag [arg], remember position before the jump
- X */
- X if (type == 0)
- X {
- X tagstack[tagstackidx].fmark.mark = curwin->w_cursor;
- X tagstack[tagstackidx].fmark.fnum = curbuf->b_fnum;
- X }
- X if (findtag(tagstack[tagstackidx].tagname) > 0)
- X ++tagstackidx;
- X
- Xend_dotag:
- X curwin->w_tagstackidx = tagstackidx;
- X curwin->w_tagstacklen = tagstacklen;
- X}
- X
- X/*
- X * Print the tag stack
- X */
- X void
- Xdotags()
- X{
- X int i;
- X char_u *name;
- X struct taggy *tagstack = curwin->w_tagstack;
- X int tagstackidx = curwin->w_tagstackidx;
- X int tagstacklen = curwin->w_tagstacklen;
- X
- X gotocmdline(TRUE, NUL);
- X msg_outstr((char_u *)"\n # TO tag FROM line in file\n");
- X for (i = 0; i < tagstacklen; ++i)
- X {
- X if (tagstack[i].tagname != NULL)
- X {
- X name = fm_getname(&(tagstack[i].fmark));
- X if (name == NULL) /* file name not available */
- X continue;
- X
- X sprintf((char *)IObuff, "%c%2d %-15s %4ld %s\n",
- X i == tagstackidx ? '>' : ' ',
- X i + 1,
- X tagstack[i].tagname,
- X tagstack[i].fmark.mark.lnum,
- X name);
- X msg_outstr(IObuff);
- X }
- X flushbuf(); /* show one line at a time */
- X }
- X if (tagstackidx == tagstacklen) /* idx at top of stack */
- X msg_outstr((char_u *)">\n");
- X wait_return(FALSE);
- X}
- X
- X/*
- X * findtag(tag) - goto tag
- X * return 0 for failure, 1 for success
- X */
- X static int
- Xfindtag(tag)
- X char_u *tag;
- X{
- X FILE *tp;
- X char_u lbuf[LSIZE];
- X char_u pbuf[LSIZE]; /* search pattern buffer */
- X char_u *fname, *str;
- X int cmplen;
- X char_u *m = (char_u *)"No tags file";
- X char_u *marg = NULL;
- X register char_u *p;
- X char_u *p2;
- X char_u *np; /* pointer into file name string */
- X char_u sbuf[CMDBUFFSIZE + 1]; /* tag file name */
- X int i;
- X int save_secure;
- X int save_p_ws;
- X
- X if (tag == NULL) /* out of memory condition */
- X return 0;
- X
- X if ((cmplen = p_tl) == 0)
- X cmplen = 999;
- X
- X /* get stack of tag file names from tags option */
- X for (np = p_tags; *np; )
- X {
- X for (i = 0; i < CMDBUFFSIZE && *np; ++i) /* copy next file name into lbuf */
- X {
- X if (*np == ' ')
- X {
- X ++np;
- X break;
- X }
- X sbuf[i] = *np++;
- X }
- X sbuf[i] = 0;
- X if ((tp = fopen((char *)sbuf, "r")) == NULL)
- X continue;
- X reg_ic = p_ic; /* for cstrncmp() */
- X while (fgets((char *)lbuf, LSIZE, tp) != NULL)
- X {
- X m = (char_u *)"Format error in tags file %s"; /* default error message */
- X marg = sbuf;
- X
- X /* find start of file name, after first white space */
- X fname = lbuf;
- X skiptospace(&fname); /* skip tag */
- X if (*fname == NUL)
- X goto erret;
- X *fname++ = '\0';
- X
- X if (cstrncmp(lbuf, tag, cmplen) == 0) /* Tag found */
- X {
- X fclose(tp);
- X skipspace(&fname);
- X
- X /* find start of search command, after second white space */
- X str = fname;
- X skiptospace(&str);
- X if (*str == NUL)
- X goto erret;
- X *str++ = '\0';
- X skipspace(&str);
- X
- X /*
- X * If the command is a string like "/^function fname"
- X * scan through the search string. If we see a magic
- X * char, we have to quote it. This lets us use "real"
- X * implementations of ctags.
- X */
- X if (*str == '/' || *str == '?')
- X {
- X p = pbuf;
- X *p++ = *str++; /* copy the '/' or '?' */
- X if (*str == '^')
- X *p++ = *str++; /* copy the '^' */
- X
- X while (*str)
- X {
- X switch (*str)
- X {
- X case '\\': if (str[1] == '(') /* remove '\' before '(' */
- X ++str;
- X else
- X *p++ = *str++;
- X break;
- X
- X case '\r':
- X case '\n': *str = pbuf[0]; /* copy '/' or '?' */
- X str[1] = NUL; /* delete NL after CR */
- X break;
- X
- X /*
- X * if string ends in search character: skip it
- X * else escape it with '\'
- X */
- X case '/':
- X case '?': if (*str != pbuf[0]) /* not the search char */
- X break;
- X /* last char */
- X if (str[1] == '\n' || str[1] == '\r')
- X {
- X ++str;
- X continue;
- X }
- X case '[':
- X if (!p_magic)
- X break;
- X case '^':
- X case '*':
- X case '.': *p++ = '\\';
- X break;
- X }
- X *p++ = *str++;
- X }
- X }
- X else /* not a search command, just copy it */
- X for (p = pbuf; *str && *str != '\n'; )
- X *p++ = *str++;
- X *p = NUL;
- X
- X /*
- X * expand filename (for environment variables)
- X */
- X if ((p = ExpandOne((char_u *)fname, 1, -1)) != NULL)
- X fname = p;
- X /*
- X * if 'tagrelative' option set, may change file name
- X */
- X if (p_tr && !isFullName(fname) && (p2 = gettail(sbuf)) != sbuf)
- X {
- X STRNCPY(p2, fname, CMDBUFFSIZE - (p2 - sbuf));
- X fname = sbuf;
- X }
- X /*
- X * check if file for tag exists before abandoning current file
- X */
- X if (getperm(fname) < 0)
- X {
- X m = (char_u *)"File \"%s\" does not exist";
- X marg = fname;
- X goto erret;
- X }
- X
- X RedrawingDisabled = TRUE;
- X /*
- X * if it was a CTRL-W CTRL-] command split window now
- X */
- X if (postponed_split)
- X win_split(0L, FALSE);
- X i = getfile(fname, NULL, TRUE, (linenr_t)0);
- X if (p)
- X free(p);
- X if (i <= 0)
- X {
- X curwin->w_set_curswant = TRUE;
- X postponed_split = FALSE;
- X
- X RedrawingDisabled = FALSE;
- X save_secure = secure;
- X secure = 1;
- X tag_busy = TRUE; /* don't set marks for this search */
- X keep_old_search_pattern = TRUE;
- X
- X /*
- X * if the command is a search, try here
- X *
- X * Rather than starting at line one, just turn wrap-scan
- X * on temporarily, this ensures that tags on line 1 will
- X * be found, and makes sure our guess searches search the
- X * whole file when repeated -- webb.
- X */
- X if (pbuf[0] == '/' || pbuf[0] == '?')
- X {
- X save_p_ws = p_ws;
- X p_ws = TRUE; /* Switch wrap-scan on temporarily */
- X if (!dosearch(pbuf[0], pbuf + 1, FALSE, (long)1, FALSE, FALSE))
- X {
- X register int notfound = FALSE;
- X
- X /*
- X * Failed to find pattern, take a guess:
- X */
- X sprintf((char *)pbuf, "^%s(", lbuf);
- X if (!dosearch('/', pbuf, FALSE, (long)1, FALSE, FALSE))
- X {
- X /* Guess again: */
- X sprintf((char *)pbuf, "^[#a-zA-Z_].*%s(", lbuf);
- X if (!dosearch('/', pbuf, FALSE, (long)1, FALSE, FALSE))
- X notfound = TRUE;
- X }
- X if (notfound)
- X EMSG("Can't find tag pattern");
- X else
- X {
- X MSG("Couldn't find tag, just guessing!");
- X sleep(1);
- X }
- X }
- X p_ws = save_p_ws;
- X }
- X else
- X {
- X curwin->w_cursor.lnum = 1; /* start command in line 1 */
- X docmdline(pbuf);
- X }
- X
- X tag_busy = FALSE;
- X keep_old_search_pattern = FALSE;
- X if (secure == 2) /* done something that is not allowed */
- X wait_return(TRUE);
- X secure = save_secure;
- X
- X /* print the file message after redraw */
- X if (p_im && i == -1)
- X stuffReadbuff((char_u *)"\033\007i"); /* ESC CTRL-G i */
- X else
- X stuffcharReadbuff('\007'); /* CTRL-G */
- X return 1;
- X }
- X RedrawingDisabled = FALSE;
- X if (postponed_split) /* close the window */
- X {
- X close_window(FALSE);
- X postponed_split = FALSE;
- X }
- X return 0;
- X }
- X }
- X m = NULL;
- X
- Xerret:
- X fclose(tp);
- X if (m)
- X emsg2(m, marg);
- X }
- X if (m == NULL)
- X EMSG("tag not found");
- X else if (marg == NULL)
- X emsg(m);
- X return 0;
- X}
- X
- X#ifdef WEBB_COMPLETE
- X int
- XExpandTags(prog, num_file, file)
- X regexp *prog;
- X int *num_file;
- X char_u ***file;
- X{
- X char_u **matches, **new_matches;
- X char_u tag_file[CMDBUFFSIZE + 1];
- X char_u line[LSIZE];
- X char_u *np;
- X char_u *p;
- X int limit = 100;
- X int index;
- X int i;
- X int lnum;
- X FILE *fp;
- X
- X matches = (char_u **) alloc((unsigned)(limit * sizeof(char_u *)));
- X if (matches == NULL)
- X return FAIL;
- X index = 0;
- X for (np = p_tags; *np; )
- X {
- X for (i = 0; i < CMDBUFFSIZE && *np && *np != ' '; i++)
- X tag_file[i] = *np++;
- X tag_file[i] = NUL;
- X skipspace(&np);
- X if ((fp = fopen((char *)tag_file, "r")) == NULL)
- X continue;
- X lnum = 0;
- X while (!vim_fgets(line, LSIZE, fp, &lnum))
- X {
- X if (regexec(prog, line, TRUE))
- X {
- X p = line;
- X skiptospace(&p);
- X *p = NUL;
- X if (index == limit)
- X {
- X limit *= 2;
- X new_matches = (char_u **) alloc((unsigned)(limit * sizeof(char_u *)));
- X if (new_matches == NULL)
- X {
- X /* We'll miss some matches, oh well */
- X *file = matches;
- X *num_file = index;
- X return OK;
- X }
- X for (i = 0; i < index; i++)
- X new_matches[i] = matches[i];
- X free(matches);
- X matches = new_matches;
- X }
- X matches[index++] = strsave(line);
- X }
- X }
- X }
- X if (index > 0)
- X {
- X new_matches = *file = (char_u **) alloc((unsigned)(index * sizeof(char_u *)));
- X if (new_matches == NULL)
- X {
- X *file = matches;
- X *num_file = index;
- X return OK;
- X }
- X for (i = 0; i < index; i++)
- X new_matches[i] = matches[i];
- X }
- X free(matches);
- X *num_file = index;
- X return OK;
- X}
- X#endif /* WEBB_COMPLETE */
- END_OF_FILE
- if test 11552 -ne `wc -c <'vim/src/tag.c'`; then
- echo shar: \"'vim/src/tag.c'\" unpacked with wrong size!
- fi
- # end of 'vim/src/tag.c'
- fi
- echo shar: End of archive 22 \(of 26\).
- cp /dev/null ark22isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 26 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-