summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0927
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0927')
-rw-r--r--data/vim/patches/8.1.0927695
1 files changed, 695 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0927 b/data/vim/patches/8.1.0927
new file mode 100644
index 000000000..9b617200d
--- /dev/null
+++ b/data/vim/patches/8.1.0927
@@ -0,0 +1,695 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0927
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0927
+Problem: USE_CR is never defined.
+Solution: Remove usage of USE_CR. (Ken Takata, closes #3958)
+Files: runtime/doc/options.txt, src/diff.c, src/evalfunc.c,
+ src/ex_cmds2.c, src/fileio.c, src/message.c, src/ops.c,
+ src/option.h, src/proto/ex_cmds2.pro, src/proto/fileio.pro,
+ src/tag.c
+
+*** ../vim-8.1.0926/runtime/doc/options.txt 2019-02-13 19:23:04.734816702 +0100
+--- runtime/doc/options.txt 2019-02-15 20:38:23.714261969 +0100
+***************
+*** 3106,3114 ****
+ is read.
+
+ *'fileformat'* *'ff'*
+! 'fileformat' 'ff' string (MS-DOS, MS-Windows, OS/2 default: "dos",
+! Unix default: "unix",
+! Macintosh default: "mac")
+ local to buffer
+ {not in Vi}
+ This gives the <EOL> of the current buffer, which is used for
+--- 3134,3141 ----
+ is read.
+
+ *'fileformat'* *'ff'*
+! 'fileformat' 'ff' string (MS-Windows default: "dos",
+! Unix, macOS default: "unix")
+ local to buffer
+ {not in Vi}
+ This gives the <EOL> of the current buffer, which is used for
+***************
+*** 3131,3139 ****
+
+ *'fileformats'* *'ffs'*
+ 'fileformats' 'ffs' string (default:
+! Vim+Vi MS-DOS, MS-Windows OS/2: "dos,unix",
+! Vim Unix: "unix,dos",
+! Vim Mac: "mac,unix,dos",
+ Vi Cygwin: "unix,dos",
+ Vi others: "")
+ global
+--- 3158,3165 ----
+
+ *'fileformats'* *'ffs'*
+ 'fileformats' 'ffs' string (default:
+! Vim+Vi MS-Windows: "dos,unix",
+! Vim Unix, macOS: "unix,dos",
+ Vi Cygwin: "unix,dos",
+ Vi others: "")
+ global
+*** ../vim-8.1.0926/src/diff.c 2019-01-24 15:04:44.662887892 +0100
+--- src/diff.c 2019-02-15 20:40:16.937520634 +0100
+***************
+*** 90,99 ****
+ static int parse_diff_unified(char_u *line, linenr_T *lnum_orig, long *count_orig, linenr_T *lnum_new, long *count_new);
+ static int xdiff_out(void *priv, mmbuffer_t *mb, int nbuf);
+
+- #ifndef USE_CR
+- # define tag_fgets vim_fgets
+- #endif
+-
+ /*
+ * Called when deleting or unloading a buffer: No longer make a diff with it.
+ */
+--- 90,95 ----
+***************
+*** 996,1002 ****
+ for (;;)
+ {
+ /* There must be a line that contains "1c1". */
+! if (tag_fgets(linebuf, LBUFLEN, fd))
+ break;
+ if (STRNCMP(linebuf, "1c1", 3) == 0)
+ ok = TRUE;
+--- 992,998 ----
+ for (;;)
+ {
+ /* There must be a line that contains "1c1". */
+! if (vim_fgets(linebuf, LBUFLEN, fd))
+ break;
+ if (STRNCMP(linebuf, "1c1", 3) == 0)
+ ok = TRUE;
+***************
+*** 1604,1610 ****
+ }
+ else
+ {
+! if (tag_fgets(linebuf, LBUFLEN, fd))
+ break; // end of file
+ line = linebuf;
+ }
+--- 1600,1606 ----
+ }
+ else
+ {
+! if (vim_fgets(linebuf, LBUFLEN, fd))
+ break; // end of file
+ line = linebuf;
+ }
+***************
+*** 1626,1634 ****
+ else if ((STRNCMP(line, "@@ ", 3) == 0))
+ diffstyle = DIFF_UNIFIED;
+ else if ((STRNCMP(line, "--- ", 4) == 0)
+! && (tag_fgets(linebuf, LBUFLEN, fd) == 0)
+ && (STRNCMP(line, "+++ ", 4) == 0)
+! && (tag_fgets(linebuf, LBUFLEN, fd) == 0)
+ && (STRNCMP(line, "@@ ", 3) == 0))
+ diffstyle = DIFF_UNIFIED;
+ else
+--- 1622,1630 ----
+ else if ((STRNCMP(line, "@@ ", 3) == 0))
+ diffstyle = DIFF_UNIFIED;
+ else if ((STRNCMP(line, "--- ", 4) == 0)
+! && (vim_fgets(linebuf, LBUFLEN, fd) == 0)
+ && (STRNCMP(line, "+++ ", 4) == 0)
+! && (vim_fgets(linebuf, LBUFLEN, fd) == 0)
+ && (STRNCMP(line, "@@ ", 3) == 0))
+ diffstyle = DIFF_UNIFIED;
+ else
+*** ../vim-8.1.0926/src/evalfunc.c 2019-02-14 12:56:31.686115921 +0100
+--- src/evalfunc.c 2019-02-15 20:38:23.714261969 +0100
+***************
+*** 13431,13450 ****
+ else
+ {
+ res = get_cmd_output(tv_get_string(&argvars[0]), infile, flags, NULL);
+! #ifdef USE_CR
+! /* translate <CR> into <NL> */
+! if (res != NULL)
+! {
+! char_u *s;
+!
+! for (s = res; *s; ++s)
+! {
+! if (*s == CAR)
+! *s = NL;
+! }
+! }
+! #else
+! # ifdef USE_CRNL
+ /* translate <CR><NL> into <NL> */
+ if (res != NULL)
+ {
+--- 13431,13437 ----
+ else
+ {
+ res = get_cmd_output(tv_get_string(&argvars[0]), infile, flags, NULL);
+! #ifdef USE_CRNL
+ /* translate <CR><NL> into <NL> */
+ if (res != NULL)
+ {
+***************
+*** 13459,13465 ****
+ }
+ *d = NUL;
+ }
+- # endif
+ #endif
+ rettv->vval.v_string = res;
+ res = NULL;
+--- 13446,13451 ----
+*** ../vim-8.1.0926/src/ex_cmds2.c 2019-01-24 15:54:17.782847030 +0100
+--- src/ex_cmds2.c 2019-02-15 20:38:23.718261942 +0100
+***************
+*** 1359,1365 ****
+ did_throw = FALSE;
+ current_exception = NULL;
+ save_vimvars(&vvsave);
+!
+ timer->tr_firing = TRUE;
+ timer_callback(timer);
+ timer->tr_firing = FALSE;
+--- 1359,1365 ----
+ did_throw = FALSE;
+ current_exception = NULL;
+ save_vimvars(&vvsave);
+! ch_log(NULL, "calling timer callback");
+ timer->tr_firing = TRUE;
+ timer_callback(timer);
+ timer->tr_firing = FALSE;
+***************
+*** 4243,4249 ****
+ FILE *fp; /* opened file for sourcing */
+ char_u *nextline; /* if not NULL: line that was read ahead */
+ int finished; /* ":finish" used */
+! #if defined(USE_CRNL) || defined(USE_CR)
+ int fileformat; /* EOL_UNKNOWN, EOL_UNIX or EOL_DOS */
+ int error; /* TRUE if LF found after CR-LF */
+ #endif
+--- 4243,4249 ----
+ FILE *fp; /* opened file for sourcing */
+ char_u *nextline; /* if not NULL: line that was read ahead */
+ int finished; /* ":finish" used */
+! #ifdef USE_CRNL
+ int fileformat; /* EOL_UNKNOWN, EOL_UNIX or EOL_DOS */
+ int error; /* TRUE if LF found after CR-LF */
+ #endif
+***************
+*** 4465,4479 ****
+ cookie.error = FALSE;
+ #endif
+
+- #ifdef USE_CR
+- /* If no automatic file format: Set default to CR. */
+- if (*p_ffs == NUL)
+- cookie.fileformat = EOL_MAC;
+- else
+- cookie.fileformat = EOL_UNKNOWN;
+- cookie.error = FALSE;
+- #endif
+-
+ cookie.nextline = NULL;
+ cookie.finished = FALSE;
+
+--- 4465,4470 ----
+***************
+*** 4768,4826 ****
+
+ #endif
+
+- #if defined(USE_CR) || defined(PROTO)
+-
+- # if defined(__MSL__) && (__MSL__ >= 22)
+- /*
+- * Newer version of the Metrowerks library handle DOS and UNIX files
+- * without help.
+- * Test with earlier versions, MSL 2.2 is the library supplied with
+- * Codewarrior Pro 2.
+- */
+- char *
+- fgets_cr(char *s, int n, FILE *stream)
+- {
+- return fgets(s, n, stream);
+- }
+- # else
+- /*
+- * Version of fgets() which also works for lines ending in a <CR> only
+- * (Macintosh format).
+- * For older versions of the Metrowerks library.
+- * At least CodeWarrior 9 needed this code.
+- */
+- char *
+- fgets_cr(char *s, int n, FILE *stream)
+- {
+- int c = 0;
+- int char_read = 0;
+-
+- while (!feof(stream) && c != '\r' && c != '\n' && char_read < n - 1)
+- {
+- c = fgetc(stream);
+- s[char_read++] = c;
+- /* If the file is in DOS format, we need to skip a NL after a CR. I
+- * thought it was the other way around, but this appears to work... */
+- if (c == '\n')
+- {
+- c = fgetc(stream);
+- if (c != '\r')
+- ungetc(c, stream);
+- }
+- }
+-
+- s[char_read] = 0;
+- if (char_read == 0)
+- return NULL;
+-
+- if (feof(stream) && char_read == 1)
+- return NULL;
+-
+- return s;
+- }
+- # endif
+- #endif
+-
+ /*
+ * Get one full line from a sourced file.
+ * Called by do_cmdline() when it's called from do_source().
+--- 4759,4764 ----
+***************
+*** 4954,4962 ****
+ #ifdef USE_CRNL
+ int has_cr; /* CR-LF found */
+ #endif
+- #ifdef USE_CR
+- char_u *scan;
+- #endif
+ int have_read = FALSE;
+
+ /* use a growarray to store the sourced line */
+--- 4892,4897 ----
+***************
+*** 4973,4990 ****
+ break;
+ buf = (char_u *)ga.ga_data;
+
+! #ifdef USE_CR
+! if (sp->fileformat == EOL_MAC)
+! {
+! if (fgets_cr((char *)buf + ga.ga_len, ga.ga_maxlen - ga.ga_len,
+ sp->fp) == NULL)
+! break;
+! }
+! else
+! #endif
+! if (fgets((char *)buf + ga.ga_len, ga.ga_maxlen - ga.ga_len,
+! sp->fp) == NULL)
+! break;
+ len = ga.ga_len + (int)STRLEN(buf + ga.ga_len);
+ #ifdef USE_CRNL
+ /* Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the
+--- 4908,4916 ----
+ break;
+ buf = (char_u *)ga.ga_data;
+
+! if (fgets((char *)buf + ga.ga_len, ga.ga_maxlen - ga.ga_len,
+ sp->fp) == NULL)
+! break;
+ len = ga.ga_len + (int)STRLEN(buf + ga.ga_len);
+ #ifdef USE_CRNL
+ /* Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the
+***************
+*** 4998,5031 ****
+ }
+ #endif
+
+- #ifdef USE_CR
+- /* If the read doesn't stop on a new line, and there's
+- * some CR then we assume a Mac format */
+- if (sp->fileformat == EOL_UNKNOWN)
+- {
+- if (buf[len - 1] != '\n' && vim_strchr(buf, '\r') != NULL)
+- sp->fileformat = EOL_MAC;
+- else
+- sp->fileformat = EOL_UNIX;
+- }
+-
+- if (sp->fileformat == EOL_MAC)
+- {
+- scan = vim_strchr(buf, '\r');
+-
+- if (scan != NULL)
+- {
+- *scan = '\n';
+- if (*(scan + 1) != 0)
+- {
+- *(scan + 1) = 0;
+- fseek(sp->fp, (long)(scan - buf - len + 1), SEEK_CUR);
+- }
+- }
+- len = STRLEN(buf);
+- }
+- #endif
+-
+ have_read = TRUE;
+ ga.ga_len = len;
+
+--- 4924,4929 ----
+*** ../vim-8.1.0926/src/fileio.c 2019-02-14 12:56:31.682115940 +0100
+--- src/fileio.c 2019-02-15 20:38:23.718261942 +0100
+***************
+*** 5216,5229 ****
+ return TRUE;
+ }
+ #endif
+- #ifndef USE_CR
+ if (eol_type == EOL_MAC)
+ {
+ STRCAT(IObuff, shortmess(SHM_TEXT) ? _("[mac]") : _("[mac format]"));
+ return TRUE;
+ }
+! #endif
+! #if defined(USE_CRNL) || defined(USE_CR)
+ if (eol_type == EOL_UNIX)
+ {
+ STRCAT(IObuff, shortmess(SHM_TEXT) ? _("[unix]") : _("[unix format]"));
+--- 5216,5227 ----
+ return TRUE;
+ }
+ #endif
+ if (eol_type == EOL_MAC)
+ {
+ STRCAT(IObuff, shortmess(SHM_TEXT) ? _("[mac]") : _("[mac format]"));
+ return TRUE;
+ }
+! #ifdef USE_CRNL
+ if (eol_type == EOL_UNIX)
+ {
+ STRCAT(IObuff, shortmess(SHM_TEXT) ? _("[unix]") : _("[unix format]"));
+***************
+*** 6359,6369 ****
+ char tbuf[FGETS_SIZE];
+
+ buf[size - 2] = NUL;
+- #ifdef USE_CR
+- eof = fgets_cr((char *)buf, size, fp);
+- #else
+ eof = fgets((char *)buf, size, fp);
+- #endif
+ if (buf[size - 2] != NUL && buf[size - 2] != '\n')
+ {
+ buf[size - 1] = NUL; /* Truncate the line */
+--- 6357,6363 ----
+***************
+*** 6372,6428 ****
+ do
+ {
+ tbuf[FGETS_SIZE - 2] = NUL;
+- #ifdef USE_CR
+- vim_ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
+- #else
+ vim_ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
+- #endif
+ } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
+ }
+ return (eof == NULL);
+ }
+
+- #if defined(USE_CR) || defined(PROTO)
+- /*
+- * Like vim_fgets(), but accept any line terminator: CR, CR-LF or LF.
+- * Returns TRUE for end-of-file.
+- * Only used for the Mac, because it's much slower than vim_fgets().
+- */
+- int
+- tag_fgets(char_u *buf, int size, FILE *fp)
+- {
+- int i = 0;
+- int c;
+- int eof = FALSE;
+-
+- for (;;)
+- {
+- c = fgetc(fp);
+- if (c == EOF)
+- {
+- eof = TRUE;
+- break;
+- }
+- if (c == '\r')
+- {
+- /* Always store a NL for end-of-line. */
+- if (i < size - 1)
+- buf[i++] = '\n';
+- c = fgetc(fp);
+- if (c != '\n') /* Macintosh format: single CR. */
+- ungetc(c, fp);
+- break;
+- }
+- if (i < size - 1)
+- buf[i++] = c;
+- if (c == '\n')
+- break;
+- }
+- buf[i] = NUL;
+- return eof;
+- }
+- #endif
+-
+ /*
+ * rename() only works if both files are on the same file system, this
+ * function will (attempts to?) copy the file across if rename fails -- webb
+--- 6366,6377 ----
+*** ../vim-8.1.0926/src/message.c 2019-02-14 20:55:05.983776869 +0100
+--- src/message.c 2019-02-15 20:38:23.718261942 +0100
+***************
+*** 2590,2599 ****
+ memcpy(buf, p, n);
+ if (!info_message)
+ buf[n++] = CAR;
+! #ifdef USE_CR
+! else
+! #endif
+! buf[n++] = NL;
+ buf[n++] = NUL;
+ if (info_message) // informative message, not an error
+ mch_msg((char *)buf);
+--- 2590,2596 ----
+ memcpy(buf, p, n);
+ if (!info_message)
+ buf[n++] = CAR;
+! buf[n++] = NL;
+ buf[n++] = NUL;
+ if (info_message) // informative message, not an error
+ mch_msg((char *)buf);
+*** ../vim-8.1.0926/src/ops.c 2019-01-26 17:28:22.232599086 +0100
+--- src/ops.c 2019-02-15 20:38:23.718261942 +0100
+***************
+*** 6577,6587 ****
+ #ifdef USE_CRNL
+ p[i++] = '\r';
+ #endif
+- #ifdef USE_CR
+- p[i] = '\r';
+- #else
+ p[i] = '\n';
+- #endif
+ lnum++;
+ j = -1;
+ }
+--- 6577,6583 ----
+*** ../vim-8.1.0926/src/option.h 2019-02-08 12:46:03.588784187 +0100
+--- src/option.h 2019-02-15 20:38:23.718261942 +0100
+***************
+*** 50,70 ****
+ # define DFLT_FFS_VI "dos,unix" /* also autodetect in compatible mode */
+ # define DFLT_TEXTAUTO TRUE
+ #else
+! # ifdef USE_CR
+! # define DFLT_FF "mac"
+! # define DFLT_FFS_VIM "mac,unix,dos"
+! # define DFLT_FFS_VI "mac,unix,dos"
+! # define DFLT_TEXTAUTO TRUE
+ # else
+! # define DFLT_FF "unix"
+! # define DFLT_FFS_VIM "unix,dos"
+! # ifdef __CYGWIN__
+! # define DFLT_FFS_VI "unix,dos" /* Cygwin always needs file detection */
+! # define DFLT_TEXTAUTO TRUE
+! # else
+! # define DFLT_FFS_VI ""
+! # define DFLT_TEXTAUTO FALSE
+! # endif
+ # endif
+ #endif
+
+--- 50,63 ----
+ # define DFLT_FFS_VI "dos,unix" /* also autodetect in compatible mode */
+ # define DFLT_TEXTAUTO TRUE
+ #else
+! # define DFLT_FF "unix"
+! # define DFLT_FFS_VIM "unix,dos"
+! # ifdef __CYGWIN__
+! # define DFLT_FFS_VI "unix,dos" /* Cygwin always needs file detection */
+! # define DFLT_TEXTAUTO TRUE
+ # else
+! # define DFLT_FFS_VI ""
+! # define DFLT_TEXTAUTO FALSE
+ # endif
+ #endif
+
+*** ../vim-8.1.0926/src/proto/ex_cmds2.pro 2018-05-17 13:52:34.000000000 +0200
+--- src/proto/ex_cmds2.pro 2019-02-15 20:38:23.718261942 +0100
+***************
+*** 93,99 ****
+ void scriptnames_slash_adjust(void);
+ char_u *get_scriptname(scid_T id);
+ void free_scriptnames(void);
+- char *fgets_cr(char *s, int n, FILE *stream);
+ char_u *getsourceline(int c, void *cookie, int indent);
+ void script_line_start(void);
+ void script_line_exec(void);
+--- 93,98 ----
+*** ../vim-8.1.0926/src/proto/fileio.pro 2019-02-14 12:56:31.682115940 +0100
+--- src/proto/fileio.pro 2019-02-15 20:38:23.718261942 +0100
+***************
+*** 18,24 ****
+ char_u *modname(char_u *fname, char_u *ext, int prepend_dot);
+ char_u *buf_modname(int shortname, char_u *fname, char_u *ext, int prepend_dot);
+ int vim_fgets(char_u *buf, int size, FILE *fp);
+- int tag_fgets(char_u *buf, int size, FILE *fp);
+ int vim_rename(char_u *from, char_u *to);
+ int check_timestamps(int focus);
+ int buf_check_timestamp(buf_T *buf, int focus);
+--- 18,23 ----
+*** ../vim-8.1.0926/src/tag.c 2019-02-13 21:19:09.503999092 +0100
+--- src/tag.c 2019-02-15 20:39:52.869677988 +0100
+***************
+*** 1146,1159 ****
+ msg_puts("\n>");
+ }
+
+- /* When not using a CR for line separator, use vim_fgets() to read tag lines.
+- * For the Mac use tag_fgets(). It can handle any line separator, but is much
+- * slower than vim_fgets().
+- */
+- #ifndef USE_CR
+- # define tag_fgets vim_fgets
+- #endif
+-
+ #ifdef FEAT_TAG_BINS
+ /*
+ * Compare two strings, for length "len", ignoring case the ASCII way.
+--- 1146,1151 ----
+***************
+*** 1654,1660 ****
+ /* Adjust the search file offset to the correct position */
+ search_info.curr_offset_used = search_info.curr_offset;
+ vim_fseek(fp, search_info.curr_offset, SEEK_SET);
+! eof = tag_fgets(lbuf, LSIZE, fp);
+ if (!eof && search_info.curr_offset != 0)
+ {
+ /* The explicit cast is to work around a bug in gcc 3.4.2
+--- 1646,1652 ----
+ /* Adjust the search file offset to the correct position */
+ search_info.curr_offset_used = search_info.curr_offset;
+ vim_fseek(fp, search_info.curr_offset, SEEK_SET);
+! eof = vim_fgets(lbuf, LSIZE, fp);
+ if (!eof && search_info.curr_offset != 0)
+ {
+ /* The explicit cast is to work around a bug in gcc 3.4.2
+***************
+*** 1666,1678 ****
+ vim_fseek(fp, search_info.low_offset, SEEK_SET);
+ search_info.curr_offset = search_info.low_offset;
+ }
+! eof = tag_fgets(lbuf, LSIZE, fp);
+ }
+ /* skip empty and blank lines */
+ while (!eof && vim_isblankline(lbuf))
+ {
+ search_info.curr_offset = vim_ftell(fp);
+! eof = tag_fgets(lbuf, LSIZE, fp);
+ }
+ if (eof)
+ {
+--- 1658,1670 ----
+ vim_fseek(fp, search_info.low_offset, SEEK_SET);
+ search_info.curr_offset = search_info.low_offset;
+ }
+! eof = vim_fgets(lbuf, LSIZE, fp);
+ }
+ /* skip empty and blank lines */
+ while (!eof && vim_isblankline(lbuf))
+ {
+ search_info.curr_offset = vim_ftell(fp);
+! eof = vim_fgets(lbuf, LSIZE, fp);
+ }
+ if (eof)
+ {
+***************
+*** 1698,1704 ****
+ eof = cs_fgets(lbuf, LSIZE);
+ else
+ #endif
+! eof = tag_fgets(lbuf, LSIZE, fp);
+ } while (!eof && vim_isblankline(lbuf));
+
+ if (eof)
+--- 1690,1696 ----
+ eof = cs_fgets(lbuf, LSIZE);
+ else
+ #endif
+! eof = vim_fgets(lbuf, LSIZE, fp);
+ } while (!eof && vim_isblankline(lbuf));
+
+ if (eof)
+***************
+*** 1763,1769 ****
+ {
+ is_etag = 1; /* in case at the start */
+ state = TS_LINEAR;
+! if (!tag_fgets(ebuf, LSIZE, fp))
+ {
+ for (p = ebuf; *p && *p != ','; p++)
+ ;
+--- 1755,1761 ----
+ {
+ is_etag = 1; /* in case at the start */
+ state = TS_LINEAR;
+! if (!vim_fgets(ebuf, LSIZE, fp))
+ {
+ for (p = ebuf; *p && *p != ','; p++)
+ ;
+*** ../vim-8.1.0926/src/version.c 2019-02-15 20:14:56.740255481 +0100
+--- src/version.c 2019-02-15 21:05:12.754653589 +0100
+***************
+*** 785,786 ****
+--- 785,788 ----
+ { /* Add new patch number below this line */
++ /**/
++ 927,
+ /**/
+
+--
+Mrs Abbott: I'm a paediatrician.
+ Basil: Feet?
+Mrs Abbott: Children.
+ Sybil: Oh, Basil!
+ Basil: Well, children have feet, don't they? That's how they move
+ around, my dear. You must take a look next time, it's most
+ interesting. (Fawlty Towers)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///