+++ /dev/null
-# Better DNS syntax highlighting.
-
---- vim63/runtime/syntax/dns.vim-old 2004-09-26 22:46:26.000000000 -0700
-+++ vim63/runtime/syntax/dns.vim 2004-09-26 23:17:20.000000000 -0700
-@@ -13,13 +13,14 @@
- endif
-
- " Last match is taken!
--syn match dnsKeyword "\<\(IN\|A\|SOA\|NS\|CNAME\|MX\|PTR\|SOA\|MB\|MG\|MR\|NULL\|WKS\|HINFO\|TXT\|CS\|CH\|CPU\|OS\)\>"
-+syn match dnsKeyword "\<\(IN\|A\|AAAA\|SOA\|NS\|CNAME\|MX\|PTR\|SOA\|MB\|MG\|MR\|NULL\|WKS\|HINFO\|TXT\|CS\|CH\|CPU\|OS\|SRV\)\>"
- syn match dnsRecordName "^[^ ]*"
- syn match dnsPreProc "^\$[^ ]*"
- syn match dnsComment ";.*$"
- syn match dnsDataFQDN "\<[^ ]*\.[ ]*$"
- syn match dnsConstant "\<\([0-9][0-9.]*\|[0-9.]*[0-9]\)\>"
- syn match dnsIPaddr "\<\(\([0-2]\)\{0,1}\([0-9]\)\{1,2}\.\)\{3}\([0-2]\)\{0,1}\([0-9]\)\{1,2}\>[ ]*$"
-+syn match dnsIP6addr "\<\([[:xdigit:]]\{0,4}:\)\{2,7}\(\|[[:xdigit:]]\{0,4}\)\>[ ]*$"
-
- " Define the default highlighting.
- " For version 5.7 and earlier: only when not done already
-@@ -38,6 +39,7 @@
- HiLink dnsKeyword Keyword
- HiLink dnsRecordName Type
- HiLink dnsIPaddr Type
-+ HiLink dnsIP6addr Type
- HiLink dnsIPerr Error
- HiLink dnsConstant Constant
-
+++ /dev/null
-# TERM=screen.linux background detection, Gentoo bug 83416.
-Index: src/option.c
-===================================================================
---- src/option.c (revision 2)
-+++ src/option.c (revision 3)
-@@ -3109,11 +3109,15 @@
- /*
- * If 'background' wasn't set by the user, try guessing the value,
- * depending on the terminal name. Only need to check for terminals
-- * with a dark background, that can handle color. Only "linux"
-- * console at the moment.
-+ * with a dark background, that can handle color. We recognise:
-+ * * 'linux' -- linux console
-+ * * 'screen.linux' -- linux console, with screen
- */
- idx4 = findoption((char_u *)"bg");
-- if (!(options[idx4].flags & P_WAS_SET) && STRCMP(T_NAME, "linux") == 0)
-+ if (!(options[idx4].flags & P_WAS_SET) && (
-+ (STRCMP(T_NAME, "linux") == 0) ||
-+ (STRCMP(T_NAME, "screen.linux") == 0)
-+ ))
- {
- set_string_option_direct(NULL, idx4, (char_u *)"dark", OPT_FREE);
- /* don't mark it as set, when starting the GUI it may be changed
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.001 (extra)
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Note: This only changes the code for Global IME, none of the 6.4
-executables are affected.
-
-
-Patch 6.4.001 (extra)
-Problem: Win32: Can't compile the Global IME code.
-Solution: Change "hwnd" to "hWnd". (Yongwei)
-Files: src/glbl_ime.cpp
-
-
-*** ../vim-6.4.000/src/glbl_ime.cpp Tue May 11 22:29:41 2004
---- src/glbl_ime.cpp Mon Oct 17 11:03:43 2005
-***************
-*** 136,142 ****
- {
- #if defined(WIN3264) && defined(FEAT_MBYTE)
- if (wide_WindowProc)
-! lResult = DefWindowProcW(hwnd, Msg, wParam, lParam);
- else
- #endif
- lResult = DefWindowProc(hWnd, Msg, wParam, lParam);
---- 136,142 ----
- {
- #if defined(WIN3264) && defined(FEAT_MBYTE)
- if (wide_WindowProc)
-! lResult = DefWindowProcW(hWnd, Msg, wParam, lParam);
- else
- #endif
- lResult = DefWindowProc(hWnd, Msg, wParam, lParam);
-*** ../vim-6.4.000/src/version.c Sat Oct 15 13:23:40 2005
---- src/version.c Mon Oct 17 11:08:25 2005
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 1,
- /**/
-
---
-Well, you come from nothing, you go back to nothing... What have you
-lost? Nothing!
- -- Monty Python: The life of Brian
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
- \\\ Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html ///
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.002
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 6.4.002
-Problem: Unix: There is a small chance that the ownership of the wrong file
- is changed.
-Solution: Use fchown() instead of chown() for the viminfo file and the
- backup file.
-Files: src/ex_cmds.c, src/fileio.c
-
-
-*** ../vim-6.4.001/src/ex_cmds.c Thu Jul 21 22:23:54 2005
---- src/ex_cmds.c Tue Nov 29 17:23:48 2005
-***************
-*** 14,19 ****
---- 14,23 ----
- #include "vim.h"
- #include "version.h"
-
-+ #ifdef HAVE_FCNTL_H
-+ # include <fcntl.h>
-+ #endif
-+
- #ifdef FEAT_EX_EXTRA
- static int linelen __ARGS((int *has_tab));
- #endif
-***************
-*** 1510,1516 ****
-
- if (tempname != NULL)
- {
-! fp_out = mch_fopen((char *)tempname, WRITEBIN);
-
- /*
- * If we can't create in the same directory, try creating a
---- 1514,1536 ----
-
- if (tempname != NULL)
- {
-! int fd;
-!
-! /* Use mch_open() to be able to use O_EXCL and set file
-! * protection same as original file, but strip s-bit. */
-! #ifdef UNIX
-! fd = mch_open((char *)tempname,
-! O_CREAT|O_EXTRA|O_EXCL|O_WRONLY,
-! (int)((st_old.st_mode & 0777) | 0600));
-! #else
-! fd = mch_open((char *)tempname,
-! O_CREAT|O_EXTRA|O_EXCL|O_WRONLY,
-! 0600); /* r&w for user only */
-! #endif
-! if (fd < 0)
-! fp_out = NULL;
-! else
-! fp_out = fdopen(fd, WRITEBIN);
-
- /*
- * If we can't create in the same directory, try creating a
-***************
-*** 1522,1539 ****
- if ((tempname = vim_tempname('o')) != NULL)
- fp_out = mch_fopen((char *)tempname, WRITEBIN);
- }
-! #ifdef UNIX
- /*
-! * Set file protection same as original file, but strip s-bit
-! * and make sure the owner can read/write it.
- */
- if (fp_out != NULL)
-! {
-! (void)mch_setperm(tempname,
-! (long)((st_old.st_mode & 0777) | 0600));
-! /* this only works for root: */
-! (void)chown((char *)tempname, st_old.st_uid, st_old.st_gid);
-! }
- #endif
- }
- }
---- 1542,1555 ----
- if ((tempname = vim_tempname('o')) != NULL)
- fp_out = mch_fopen((char *)tempname, WRITEBIN);
- }
-!
-! #if defined(UNIX) && defined(HAVE_FCHOWN)
- /*
-! * Make sure the owner can read/write it. This only works for
-! * root.
- */
- if (fp_out != NULL)
-! (void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
- #endif
- }
- }
-*** ../vim-6.4.001/src/fileio.c Fri Mar 18 19:16:29 2005
---- src/fileio.c Tue Nov 29 16:51:26 2005
-***************
-*** 3087,3093 ****
- if (st_old.st_nlink > 1
- || mch_lstat((char *)fname, &st) < 0
- || st.st_dev != st_old.st_dev
-! || st.st_ino != st_old.st_ino)
- backup_copy = TRUE;
- else
- # endif
---- 3087,3098 ----
- if (st_old.st_nlink > 1
- || mch_lstat((char *)fname, &st) < 0
- || st.st_dev != st_old.st_dev
-! || st.st_ino != st_old.st_ino
-! # ifndef HAVE_FCHOWN
-! || st.st_uid != st_old.st_uid
-! || st.st_gid != st_old.st_gid
-! # endif
-! )
- backup_copy = TRUE;
- else
- # endif
-***************
-*** 3102,3125 ****
- for (i = 4913; ; i += 123)
- {
- sprintf((char *)gettail(IObuff), "%d", i);
-! if (mch_stat((char *)IObuff, &st) < 0)
- break;
- }
- fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL, perm);
-- close(fd);
- if (fd < 0) /* can't write in directory */
- backup_copy = TRUE;
- else
- {
- # ifdef UNIX
-! chown((char *)IObuff, st_old.st_uid, st_old.st_gid);
-! (void)mch_setperm(IObuff, perm);
- if (mch_stat((char *)IObuff, &st) < 0
- || st.st_uid != st_old.st_uid
- || st.st_gid != st_old.st_gid
- || st.st_mode != perm)
- backup_copy = TRUE;
- # endif
- mch_remove(IObuff);
- }
- }
---- 3107,3133 ----
- for (i = 4913; ; i += 123)
- {
- sprintf((char *)gettail(IObuff), "%d", i);
-! if (mch_lstat((char *)IObuff, &st) < 0)
- break;
- }
- fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL, perm);
- if (fd < 0) /* can't write in directory */
- backup_copy = TRUE;
- else
- {
- # ifdef UNIX
-! # ifdef HAVE_FCHOWN
-! fchown(fd, st_old.st_uid, st_old.st_gid);
-! # endif
- if (mch_stat((char *)IObuff, &st) < 0
- || st.st_uid != st_old.st_uid
- || st.st_gid != st_old.st_gid
- || st.st_mode != perm)
- backup_copy = TRUE;
- # endif
-+ /* Close the file before removing it, on MS-Windows we
-+ * can't delete an open file. */
-+ close(fd);
- mch_remove(IObuff);
- }
- }
-***************
-*** 3333,3343 ****
- * bits for the group same as the protection bits for
- * others.
- */
-! if (st_new.st_gid != st_old.st_gid &&
- # ifdef HAVE_FCHOWN /* sequent-ptx lacks fchown() */
-! fchown(bfd, (uid_t)-1, st_old.st_gid) != 0
-! # else
-! chown((char *)backup, (uid_t)-1, st_old.st_gid) != 0
- # endif
- )
- mch_setperm(backup,
---- 3341,3349 ----
- * bits for the group same as the protection bits for
- * others.
- */
-! if (st_new.st_gid != st_old.st_gid
- # ifdef HAVE_FCHOWN /* sequent-ptx lacks fchown() */
-! && fchown(bfd, (uid_t)-1, st_old.st_gid) != 0
- # endif
- )
- mch_setperm(backup,
-***************
-*** 3999,4004 ****
---- 4005,4033 ----
- }
- #endif
-
-+ #ifdef UNIX
-+ /* When creating a new file, set its owner/group to that of the original
-+ * file. Get the new device and inode number. */
-+ if (backup != NULL && !backup_copy)
-+ {
-+ # ifdef HAVE_FCHOWN
-+ struct stat st;
-+
-+ /* don't change the owner when it's already OK, some systems remove
-+ * permission or ACL stuff */
-+ if (mch_stat((char *)wfname, &st) < 0
-+ || st.st_uid != st_old.st_uid
-+ || st.st_gid != st_old.st_gid)
-+ {
-+ fchown(fd, st_old.st_uid, st_old.st_gid);
-+ if (perm >= 0) /* set permission again, may have changed */
-+ (void)mch_setperm(wfname, perm);
-+ }
-+ # endif
-+ buf_setino(buf);
-+ }
-+ #endif
-+
- if (close(fd) != 0)
- {
- errmsg = (char_u *)_("E512: Close failed");
-***************
-*** 4021,4047 ****
- * ACL on a file the user doesn't own). */
- if (!backup_copy)
- mch_set_acl(wfname, acl);
-- #endif
--
-- #ifdef UNIX
-- /* When creating a new file, set its owner/group to that of the original
-- * file. Get the new device and inode number. */
-- if (backup != NULL && !backup_copy)
-- {
-- struct stat st;
--
-- /* don't change the owner when it's already OK, some systems remove
-- * permission or ACL stuff */
-- if (mch_stat((char *)wfname, &st) < 0
-- || st.st_uid != st_old.st_uid
-- || st.st_gid != st_old.st_gid)
-- {
-- chown((char *)wfname, st_old.st_uid, st_old.st_gid);
-- if (perm >= 0) /* set permission again, may have changed */
-- (void)mch_setperm(wfname, perm);
-- }
-- buf_setino(buf);
-- }
- #endif
-
-
---- 4050,4055 ----
-*** ../vim-6.4.001/src/version.c Mon Oct 17 11:09:59 2005
---- src/version.c Tue Nov 29 19:23:24 2005
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 2,
- /**/
-
---
-hundred-and-one symptoms of being an internet addict:
-250. You've given up the search for the "perfect woman" and instead,
- sit in front of the PC until you're just too tired to care.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://www.ICCF.nl ///
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.003
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 6.4.003 (after 6.4.002)
-Problem: Build problem on non-Unix systems.
-Solution: Use stat() instead of lstat().
-Files: src/fileio.c
-
-
-*** ../vim-6.4.002/src/fileio.c Tue Nov 29 19:29:15 2005
---- src/fileio.c Wed Nov 30 11:48:29 2005
-***************
-*** 3107,3113 ****
---- 3107,3117 ----
- for (i = 4913; ; i += 123)
- {
- sprintf((char *)gettail(IObuff), "%d", i);
-+ #ifdef HAVE_LSTAT
- if (mch_lstat((char *)IObuff, &st) < 0)
-+ #else
-+ if (mch_stat((char *)IObuff, &st) < 0)
-+ #endif
- break;
- }
- fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL, perm);
-*** ../vim-6.4.002/src/version.c Tue Nov 29 19:29:15 2005
---- src/version.c Wed Nov 30 11:49:19 2005
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 3,
- /**/
-
---
-If VIM were a woman, I'd marry her. Slim, organized, helpful
-and beautiful; what's not to like? --David A. Rogers
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://www.ICCF.nl ///
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.004
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 6.4.004
-Problem: "go" does not work correctly in combination with 'virtualedit'.
- (Alojz Motesicky)
-Solution: Reset the "coladd" field.
-Files: src/memline.c
-
-
-*** ../vim-6.4.003/src/memline.c Thu Feb 17 11:02:53 2005
---- src/memline.c Thu Dec 1 16:07:04 2005
-***************
-*** 4368,4373 ****
---- 4368,4376 ----
- {
- curwin->w_cursor.lnum = lnum;
- curwin->w_cursor.col = (colnr_T)boff;
-+ # ifdef FEAT_VIRTUALEDIT
-+ curwin->w_cursor.coladd = 0;
-+ # endif
- curwin->w_set_curswant = TRUE;
- }
- check_cursor();
-*** ../vim-6.4.003/src/version.c Wed Nov 30 12:38:32 2005
---- src/version.c Thu Dec 1 16:07:55 2005
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 4,
- /**/
-
---
- Bravely bold Sir Robin, rode forth from Camelot,
- He was not afraid to die, Oh Brave Sir Robin,
- He was not at all afraid to be killed in nasty ways
- Brave, brave, brave, brave Sir Robin.
- "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://www.ICCF.nl ///
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.005
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 6.4.005
-Problem: When truncating a message with multi-byte characters the '<' may
- be written before the buffer. (Pawel S. Veselov)
-Solution: Don't write the '<' when there is sufficient room.
-Files: src/message.c
-
-
-*** ../vim-6.4.004/src/message.c Sun Jun 13 12:15:03 2004
---- src/message.c Thu Dec 22 22:26:05 2005
-***************
-*** 718,723 ****
---- 718,727 ----
- {
- int size = vim_strsize(s);
-
-+ /* There may be room anyway when there are multibyte chars. */
-+ if (size <= room)
-+ return s;
-+
- for (n = 0; size >= room; )
- {
- size -= (*mb_ptr2cells)(s + n);
-*** ../vim-6.4.004/src/version.c Thu Dec 1 16:08:05 2005
---- src/version.c Thu Dec 22 22:33:27 2005
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 5,
- /**/
-
---
-ARTHUR: Old woman!
-DENNIS: Man!
-ARTHUR: Man. I'm sorry. Old man, What knight live in that castle over there?
-DENNIS: I'm thirty-seven.
- "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://www.ICCF.nl ///
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.006
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 6.4.006
-Problem: ":argedit 1234.c" edits the file ".c". (Karsten Hopp)
-Solution: Don't accept a count for ":argedit", ":argadd" and ":argdelete".
-Files: src/ex_cmds.h
-
-
-*** ../vim-6.4.005/src/ex_cmds.h Mon Aug 30 14:58:51 2004
---- src/ex_cmds.h Thu Dec 22 22:29:14 2005
-***************
-*** 109,121 ****
- EX(CMD_args, "args", ex_args,
- BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
- EX(CMD_argadd, "argadd", ex_argadd,
-! BANG|NEEDARG|RANGE|NOTADR|ZEROR|COUNT|FILES|TRLBAR),
- EX(CMD_argdelete, "argdelete", ex_argdelete,
-! BANG|RANGE|NOTADR|COUNT|FILES|TRLBAR),
- EX(CMD_argdo, "argdo", ex_listdo,
- BANG|NEEDARG|EXTRA|NOTRLCOM),
- EX(CMD_argedit, "argedit", ex_argedit,
-! BANG|NEEDARG|RANGE|NOTADR|COUNT|FILE1|EDITCMD|TRLBAR),
- EX(CMD_argglobal, "argglobal", ex_args,
- BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
- EX(CMD_arglocal, "arglocal", ex_args,
---- 109,121 ----
- EX(CMD_args, "args", ex_args,
- BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
- EX(CMD_argadd, "argadd", ex_argadd,
-! BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILES|TRLBAR),
- EX(CMD_argdelete, "argdelete", ex_argdelete,
-! BANG|RANGE|NOTADR|FILES|TRLBAR),
- EX(CMD_argdo, "argdo", ex_listdo,
- BANG|NEEDARG|EXTRA|NOTRLCOM),
- EX(CMD_argedit, "argedit", ex_argedit,
-! BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|TRLBAR),
- EX(CMD_argglobal, "argglobal", ex_args,
- BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
- EX(CMD_arglocal, "arglocal", ex_args,
-*** ../vim-6.4.005/src/version.c Thu Dec 22 22:36:58 2005
---- src/version.c Thu Dec 22 22:38:08 2005
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 6,
- /**/
-
---
-"Lisp has all the visual appeal of oatmeal with nail clippings thrown in."
- -- Larry Wall
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://www.ICCF.nl ///
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.007
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 6.4.007
-Problem: Crash when expanding a file name argument in backticks. (Adri
- Verhoef)
-Solution: Check for the NUL after the expansion result.
-Files: src/os_unix.c
-
-
-*** ../vim-6.4.006/src/os_unix.c Sat Oct 8 16:39:10 2005
---- src/os_unix.c Thu Feb 2 12:48:28 2006
-***************
-*** 5051,5057 ****
- /* Space or NL separates */
- if (shell_style == STYLE_ECHO || shell_style == STYLE_BT)
- {
-! while (!(shell_style == STYLE_ECHO && *p == ' ') && *p != '\n')
- ++p;
- if (p == buffer + len) /* last entry */
- *p = NUL;
---- 5051,5058 ----
- /* Space or NL separates */
- if (shell_style == STYLE_ECHO || shell_style == STYLE_BT)
- {
-! while (!(shell_style == STYLE_ECHO && *p == ' ')
-! && *p != '\n' && *p != NUL)
- ++p;
- if (p == buffer + len) /* last entry */
- *p = NUL;
-*** ../vim-6.4.006/src/version.c Thu Dec 22 22:39:11 2005
---- src/version.c Wed Feb 8 11:10:30 2006
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 7,
- /**/
-
---
-"My particular problem is with registry entries, which seem to just accumulate
-like plastic coffee cups..." -- Paul Moore
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://www.ICCF.nl ///
+++ /dev/null
-To: vim-dev@vim.org
-Subject: Patch 6.4.008
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 6.4.008
-Problem: Hang in search for 'hlsearch' highlighting. (Yukihiro Nakadaira)
-Solution: Skip over (multi-byte) character instead of single byte.
-Files: src/screen.c
-
-
-*** ../vim-6.4.007/src/screen.c Wed Jan 19 11:03:00 2005
---- src/screen.c Sat Feb 25 14:34:41 2006
-***************
-*** 5803,5814 ****
- || (shl->rm.endpos[0].lnum == 0
- && shl->rm.endpos[0].col == shl->rm.startpos[0].col))
- {
-! matchcol = shl->rm.startpos[0].col + 1;
-! if (ml_get_buf(shl->buf, lnum, FALSE)[matchcol - 1] == NUL)
- {
- shl->lnum = 0;
- break;
- }
- }
- else
- matchcol = shl->rm.endpos[0].col;
---- 5803,5824 ----
- || (shl->rm.endpos[0].lnum == 0
- && shl->rm.endpos[0].col == shl->rm.startpos[0].col))
- {
-! char_u *ml;
-!
-! matchcol = shl->rm.startpos[0].col;
-! ml = ml_get_buf(shl->buf, lnum, FALSE) + matchcol;
-! if (*ml == NUL)
- {
-+ ++matchcol;
- shl->lnum = 0;
- break;
- }
-+ #ifdef FEAT_MBYTE
-+ if (has_mbyte)
-+ matchcol += mb_ptr2len_check(ml);
-+ else
-+ #endif
-+ ++matchcol;
- }
- else
- matchcol = shl->rm.endpos[0].col;
-*** ../vim-6.4.007/src/version.c Wed Feb 8 11:11:51 2006
---- src/version.c Sat Feb 25 14:37:36 2006
-***************
-*** 643,644 ****
---- 643,646 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 8,
- /**/
-
---
-Team-building exercises come in many forms but they all trace their roots back
-to the prison system. In your typical team-building exercise the employees
-are subjected to a variety of unpleasant situations until they become either a
-cohesive team or a ring of car jackers.
- (Scott Adams - The Dilbert principle)
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://www.ICCF.nl ///
+++ /dev/null
-diff -burN vim63.orig/runtime/tools/vimspell.sh vim63/runtime/tools/vimspell.sh
---- vim63.orig/runtime/tools/vimspell.sh 2005-03-19 15:54:53.345907600 +0100
-+++ vim63/runtime/tools/vimspell.sh 2005-03-19 15:56:32.960763840 +0100
-@@ -13,9 +13,7 @@
- # March 1999
-
- INFILE=$1
--OUTFILE=/tmp/vimspell.$$
--# if you have "tempfile", use the following line
--#OUTFILE=`tempfile`
-+OUTFILE=`mktemp -t vimspellXXXXXX` || exit 1
-
- #
- # local spellings
+++ /dev/null
-diff -ru vim-5.4e.old/src/ex_docmd.c vim-5.4e/src/ex_docmd.c
---- vim-5.4e.old/src/ex_docmd.c Tue Feb 16 21:25:54 1999
-+++ vim-5.4e/src/ex_docmd.c Tue Feb 23 17:13:57 1999
-@@ -5902,9 +5902,7 @@
- {
- int mode;
- char_u *cmdp;
--#ifdef CMDLINE_COMPL
- char_u *ambigstr;
--#endif
-
- cmdp = eap->cmd;
- mode = get_map_mode(&cmdp, eap->forceit || isabbrev);
+++ /dev/null
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/Makefile vim/src/Makefile
---- vimcopy/src/Makefile Mon Jun 2 09:32:18 2003
-+++ vim/src/Makefile Sat Jul 26 13:16:46 2003
-@@ -1291,6 +1291,10 @@
- objects/fileio.o \
- objects/fold.o \
- objects/getchar.o \
-+ objects/gtkhtml_editor.o \
-+ objects/gtkhtml_editor_common.o \
-+ objects/gtkhtml_editor_skels.o \
-+ objects/gtkhtml_editor_stubs.o \
- $(HANGULIN_OBJ) \
- objects/if_cscope.o \
- objects/if_xcmdsrv.o \
-@@ -1319,6 +1323,9 @@
- objects/term.o \
- objects/ui.o \
- objects/undo.o \
-+ objects/vim_bonobo_main.o \
-+ objects/vim_bonobo_factory.o \
-+ objects/vim_bonobo_control.o \
- objects/window.o \
- $(GUI_OBJ) \
- $(PERL_OBJ) \
-@@ -1328,7 +1335,7 @@
- $(OS_EXTRA_OBJ) \
- $(WORKSHOP_OBJ) \
- $(NETBEANS_OBJ) \
-- $(WSDEBUG_OBJ)
-+ $(WSDEBUG_OBJ)
-
- PRO_AUTO = \
- buffer.pro \
-@@ -2132,6 +2139,18 @@
- objects/gui_photon.o: gui_photon.c
- $(CCC) -o $@ gui_photon.c
-
-+objects/gtkhtml_editor.o: gtkhtml_editor.c
-+ $(CCC) -o $@ gtkhtml_editor.c
-+
-+objects/gtkhtml_editor_common.o: gtkhtml_editor_common.c
-+ $(CCC) -o $@ gtkhtml_editor_common.c
-+
-+objects/gtkhtml_editor_skels.o: gtkhtml_editor_skels.c
-+ $(CCC) -o $@ gtkhtml_editor_skels.c
-+
-+objects/gtkhtml_editor_stubs.o: gtkhtml_editor_stubs.c
-+ $(CCC) -o $@ gtkhtml_editor_stubs.c
-+
- objects/hangulin.o: hangulin.c
- $(CCC) -o $@ hangulin.c
-
-@@ -2251,6 +2270,15 @@
-
- objects/undo.o: undo.c
- $(CCC) -o $@ undo.c
-+
-+objects/vim_bonobo_control.o: vim_bonobo_control.c
-+ $(CCC) -o $@ vim_bonobo_control.c
-+
-+objects/vim_bonobo_factory.o: vim_bonobo_factory.c
-+ $(CCC) -o $@ vim_bonobo_factory.c
-+
-+objects/vim_bonobo_main.o: vim_bonobo_main.c
-+ $(CCC) -o $@ vim_bonobo_main.c
-
- objects/window.o: window.c
- $(CCC) -o $@ window.c
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/Vim_Control.server vim/src/Vim_Control.server
---- vimcopy/src/Vim_Control.server Wed Dec 31 18:00:00 1969
-+++ vim/src/Vim_Control.server Sat Jul 26 13:16:46 2003
-@@ -0,0 +1,34 @@
-+<oaf_info>
-+
-+<oaf_server iid="OAFIID:Vim_Control_Factory" type="exe" location="/home/jdhildeb/projects/gnome-vim/vim/src/vim">
-+ <oaf_attribute name="repo_ids" type="stringv">
-+ <item value="IDL:Bonobo/GenericFactory:1.0"/>
-+ </oaf_attribute>
-+ <oaf_attribute name="name" type="string" value="Vim Control factory"/>
-+ <oaf_attribute name="description" type="string" value="Vim Control factory"/>
-+</oaf_server>
-+
-+<oaf_server iid="OAFIID:Vim_Control" type="factory"
-+ location="OAFIID:Vim_Control_Factory">
-+ <oaf_attribute name="repo_ids" type="stringv">
-+ <item value="IDL:Bonobo/Unknown:1.0"/>
-+ <item value="IDL:Bonobo/Control:1.0"/>
-+ <item value="IDL:Bonobo/ItemContainer:1.0"/>
-+ <item value="IDL:Bonobo/PersistStream:1.0"/>
-+ <item value="IDL:Bonobo/PersistFile:1.0"/>
-+ <item value="IDL:Bonobo/Persist:1.0"/>
-+ <item value="IDL:Nautilus/View:1.0"/>
-+ </oaf_attribute>
-+ <oaf_attribute name="name" type="string" value="Vim Control"/>
-+ <oaf_attribute name="description" type="string" value="Vim Control"/>
-+ <oaf_attribute name="bonobo:editable" type="boolean" value="false"/>
-+ <oaf_attribute name="bonobo:supported_mime_types" type="stringv">
-+ <item value="text/plain"/>
-+ <item value="text/*"/>
-+ </oaf_attribute>
-+ <oaf_attribute name="nautilus:view_as_name" type="string" value="Text"/>
-+ <oaf_attribute name="nautilus:view_as_label" type="string" value="View/Edit in Vim"/>
-+ <oaf_attribute name="nautilus:viewer_label" type="string" value="Vim"/>
-+</oaf_server>
-+
-+</oaf_info>
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/buffer.c vim/src/buffer.c
---- vimcopy/src/buffer.c Mon May 26 23:04:33 2003
-+++ vim/src/buffer.c Sat Jul 26 16:36:29 2003
-@@ -28,6 +28,10 @@
-
- #include "vim.h"
-
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+#include "vim_bonobo_control.h"
-+#endif
-+
- #if defined(FEAT_CMDL_COMPL) || defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL)
- static char_u *buflist_match __ARGS((regprog_T *prog, buf_T *buf));
- # define HAVE_BUFLIST_MATCH
-@@ -132,10 +136,20 @@
- if (curbuf->b_help)
- fix_help_buffer();
- }
-- else if (read_stdin)
-+ else if (read_stdin
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ || read_from_container
-+#endif
-+ )
- {
- int save_bin = curbuf->b_p_bin;
- linenr_T line_count;
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ int flags = READ_NEW + READ_EMB_STREAM;
-+ curbuf->emb_buffer = TRUE;
-+#else
-+ int flags = READ_NEW + READ_STDIN;
-+#endif
-
- /*
- * First read the text in binary mode into the buffer.
-@@ -145,7 +159,7 @@
- */
- curbuf->b_p_bin = TRUE;
- retval = readfile(NULL, NULL, (linenr_T)0,
-- (linenr_T)0, (linenr_T)MAXLNUM, eap, READ_NEW + READ_STDIN);
-+ (linenr_T)0, (linenr_T)MAXLNUM, eap, flags);
- curbuf->b_p_bin = save_bin;
- if (retval == OK)
- {
-@@ -167,14 +181,21 @@
- /* Put the cursor on the first line. */
- curwin->w_cursor.lnum = 1;
- curwin->w_cursor.col = 0;
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ if (read_stdin)
-+ {
-+#endif
- #ifdef FEAT_AUTOCMD
- # ifdef FEAT_EVAL
-- apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE,
-+ apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE,
- curbuf, &retval);
- # else
-- apply_autocmds(EVENT_STDINREADPOST, NULL, NULL, FALSE, curbuf);
-+ apply_autocmds(EVENT_STDINREADPOST, NULL, NULL, FALSE, curbuf);
- # endif
- #endif
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ }
-+#endif
- }
- }
-
-@@ -4510,6 +4531,11 @@
- if (buf->b_sfname != NULL)
- return (char *)buf->b_sfname;
- return "[Scratch]";
-+ }
-+#endif
-+#if defined(FEAT_QUICKFIX) && defined(FEAT_GUI_COMPONENT)
-+ if ( buf->emb_buffer ) {
-+ return "[Embedded File]";
- }
- #endif
- if (buf->b_fname == NULL)
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/config.h.in vim/src/config.h.in
---- vimcopy/src/config.h.in Mon May 26 10:45:01 2003
-+++ vim/src/config.h.in Sat Jul 26 13:16:46 2003
-@@ -316,6 +316,9 @@
- /* Define if GTK+ multihead support is available (requires GTK+ >= 2.1.1). */
- #undef HAVE_GTK_MULTIHEAD
-
-+/* Define if you want component (i.e. Bonobo) support. */
-+#undef FEAT_GUI_COMPONENT
-+
- /* Define if your X has own locale library */
- #undef X_LOCALE
-
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/configure.in vim/src/configure.in
---- vimcopy/src/configure.in Mon Jun 2 09:32:19 2003
-+++ vim/src/configure.in Sat Jul 26 13:16:46 2003
-@@ -1131,9 +1131,9 @@
- AC_MSG_CHECKING(for libgnomeui-2.0)
- if $PKG_CONFIG --exists libgnomeui-2.0; then
- AC_MSG_RESULT(yes)
-- GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
-- GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
-- GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
-+ GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0 libnautilus`
-+ GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0 libnautilus`
-+ GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0 libnautilus`
- $1
- else
- AC_MSG_RESULT(not found)
-@@ -1301,6 +1301,20 @@
- AC_DEFINE(FEAT_GUI_GNOME)
- GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
- GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
-+ AC_MSG_CHECKING(whether or not to include bonobo support)
-+ AC_ARG_ENABLE(bonobo,
-+ [ --enable-bonobo If using GNOME, enable bonobo support [default=no]],
-+ , enable_bonobo="no")
-+ if test "x$enable_bonobo" = "xno"; then
-+ AC_MSG_RESULT($enable_bonobo);
-+ else
-+ if test "x$SKIP_BONOBO" != "xYES" -a $gtk_major_version -ge 2; then
-+ AC_MSG_RESULT(yes);
-+ AC_DEFINE(FEAT_GUI_COMPONENT)
-+ else
-+ AC_MSG_RESULT(no (bonobo requires Gnome 2));
-+ fi
-+ fi
- fi
- }
- fi
-Binary files vimcopy/src/container and vim/src/container differ
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/container.c vim/src/container.c
---- vimcopy/src/container.c Wed Dec 31 18:00:00 1969
-+++ vim/src/container.c Sat Jul 26 13:16:46 2003
-@@ -0,0 +1,266 @@
-+
-+#include <bonobo.h>
-+#include <glib.h>
-+
-+BonoboControlFrame *ctrl_frame;
-+BonoboUIComponent *ui_comp;
-+
-+/* vbox */
-+GtkWidget *box;
-+GtkWidget *ctrl_widget;
-+
-+char * filename;
-+
-+static Bonobo_Control
-+instantiate_control()
-+{
-+ Bonobo_Control control;
-+ Bonobo_PersistFile pfile;
-+ Bonobo_PersistStream pstream;
-+ CORBA_Environment ev;
-+ Bonobo_Stream stream;
-+
-+ CORBA_exception_init (&ev);
-+
-+ /* get control component */
-+ control = bonobo_get_object ("OAFIID:Vim_Control",
-+ "Bonobo/Control", &ev);
-+ if (BONOBO_EX (&ev) || (control == CORBA_OBJECT_NIL))
-+ {
-+ CORBA_exception_free (&ev);
-+ return NULL;
-+ }
-+
-+#if 0
-+ /* get PersistFile interface */
-+ pfile = Bonobo_Unknown_queryInterface (control, "IDL:Bonobo/PersistFile:1.0", &ev);
-+ if (BONOBO_EX (&ev) || (pfile == CORBA_OBJECT_NIL))
-+ exit(1);
-+
-+ /* load the file */
-+ Bonobo_PersistFile_load (pfile, filename, &ev);
-+ bonobo_object_release_unref (pfile, NULL);
-+#endif
-+
-+ /* get PersistStream interface */
-+ pstream = Bonobo_Unknown_queryInterface (control, "IDL:Bonobo/PersistStream:1.0", &ev);
-+ if (BONOBO_EX (&ev) || (pstream == CORBA_OBJECT_NIL))
-+ {
-+ CORBA_exception_free (&ev);
-+ return NULL;
-+ }
-+
-+ /* load the file */
-+ stream = bonobo_get_object(filename, "IDL:Bonobo/Stream:1.0", &ev);
-+ if (ev._major != CORBA_NO_EXCEPTION) {
-+ g_warning("Error getting stream interface");
-+ bonobo_object_unref (BONOBO_OBJECT (stream));
-+ CORBA_exception_free (&ev);
-+ return NULL;
-+ }
-+ Bonobo_PersistStream_load (pstream, stream, "text/plain", &ev);
-+ if (ev._major != CORBA_NO_EXCEPTION) {
-+ g_warning("Error loading stream!");
-+ bonobo_object_unref (BONOBO_OBJECT (stream));
-+ CORBA_exception_free (&ev);
-+ return NULL;
-+ }
-+ bonobo_object_release_unref (pstream, NULL);
-+ return control;
-+}
-+
-+static void
-+verb_FileNewWindow (BonoboUIComponent *uic, gpointer user_data, const char *cname)
-+{
-+ printf("Got New Window!\n");
-+}
-+
-+static void
-+verb_DoNothing (BonoboUIComponent *uic, gpointer user_data, const char *cname)
-+{
-+}
-+
-+static BonoboUIVerb app_verbs[] = {
-+ BONOBO_UI_VERB ("FileNewWindow", verb_FileNewWindow),
-+ BONOBO_UI_VERB ("FileOpen", verb_DoNothing),
-+ BONOBO_UI_VERB ("FileCloseWindow", verb_DoNothing),
-+ BONOBO_UI_VERB ("FileExit", verb_DoNothing),
-+ BONOBO_UI_VERB ("Preferences", verb_DoNothing),
-+ BONOBO_UI_VERB ("HelpAbout", verb_DoNothing),
-+ BONOBO_UI_VERB ("Help", verb_DoNothing),
-+ BONOBO_UI_VERB ("DnDNewWindow", verb_DoNothing),
-+ BONOBO_UI_VERB ("DnDSameWindow", verb_DoNothing),
-+ BONOBO_UI_VERB ("DnDCancel", verb_DoNothing),
-+ BONOBO_UI_VERB_END
-+};
-+
-+static void
-+add_control_to_ui (BonoboWindow *window, Bonobo_Control control)
-+{
-+ CORBA_Environment ev;
-+ Bonobo_PropertyControl prop_control;
-+ BonoboUIContainer *ui_container;
-+ char *curdir;
-+
-+ g_return_if_fail (window != NULL);
-+ g_return_if_fail (BONOBO_IS_WINDOW (window));
-+
-+ CORBA_exception_init (&ev);
-+
-+ ui_container = bonobo_window_get_ui_container (BONOBO_WINDOW (window));
-+ ctrl_frame = bonobo_control_frame_new (BONOBO_OBJREF (ui_container));
-+
-+ /* bind and view new control widget */
-+ bonobo_control_frame_bind_to_control (ctrl_frame, control, &ev);
-+ bonobo_control_frame_control_activate (ctrl_frame);
-+ if (control != CORBA_OBJECT_NIL && ctrl_widget == NULL) {
-+ ctrl_widget = bonobo_control_frame_get_widget (ctrl_frame);
-+ if (!ctrl_widget)
-+ g_assert_not_reached ();
-+
-+ bonobo_window_set_contents (BONOBO_WINDOW(window), GTK_WIDGET(ctrl_widget));
-+ gtk_widget_show (ctrl_widget);
-+ }
-+
-+ ui_comp = bonobo_ui_component_new ("vim-container");
-+ bonobo_ui_component_set_container (ui_comp, BONOBO_OBJREF (ui_container), NULL);
-+
-+ curdir = (char *)getcwd(NULL, 0);
-+ bonobo_ui_util_set_ui (ui_comp, curdir, "vim-container.xml", "Vim", NULL);
-+ free( curdir );
-+ bonobo_ui_component_add_verb_list_with_data (ui_comp, app_verbs, window);
-+
-+ /* update sensitivity of the properties menu item */
-+ prop_control = Bonobo_Unknown_queryInterface (control,
-+ "IDL:Bonobo/PropertyControl:1.0", &ev);
-+ bonobo_ui_component_set_prop (ui_comp,
-+ "/commands/Preferences",
-+ "sensitive",
-+ prop_control == CORBA_OBJECT_NIL ? "0" : "1",
-+ &ev);
-+
-+ bonobo_object_release_unref (prop_control, &ev);
-+
-+ /* enable view menu */
-+ /* FIXME: We should check if the component adds anything to
-+ * the menu, so that we don't view an empty menu.
-+ */
-+ /*bonobo_ui_component_set_prop (ui_comp, "/menu/View", "hidden", "0", &ev);*/
-+
-+ CORBA_exception_free (&ev);
-+
-+ /* retrieve control properties and install listeners */
-+ //check_for_control_properties (window);
-+}
-+
-+static void write_stream_to_file(Bonobo_Control control)
-+{
-+ Bonobo_Storage storage;
-+ gchar * dirname;
-+ gchar * basename;
-+ CORBA_Environment ev;
-+ Bonobo_PersistStream pstream;
-+ Bonobo_Stream stream;
-+
-+ g_warning("write stream to file!");
-+ CORBA_exception_init (&ev);
-+
-+ dirname = g_path_get_dirname(filename);
-+ storage = bonobo_get_object(dirname, "IDL:Bonobo/Storage:1.0", &ev);
-+ g_free(dirname);
-+ if (BONOBO_EX (&ev) || (storage == CORBA_OBJECT_NIL))
-+ {
-+ CORBA_exception_free (&ev);
-+ return;
-+ }
-+
-+ pstream = Bonobo_Unknown_queryInterface (control, "IDL:Bonobo/PersistStream:1.0", &ev);
-+ if (BONOBO_EX (&ev) || (pstream == CORBA_OBJECT_NIL))
-+ {
-+ bonobo_object_release_unref(storage, NULL);
-+ CORBA_exception_free (&ev);
-+ return;
-+ }
-+
-+ basename = g_path_get_basename(filename);
-+ stream = Bonobo_Storage_openStream(storage, basename, Bonobo_Storage_WRITE, &ev );
-+ g_free(basename);
-+ if (BONOBO_EX (&ev) || (stream == CORBA_OBJECT_NIL))
-+ {
-+ bonobo_object_release_unref(pstream, NULL);
-+ bonobo_object_release_unref(storage, NULL);
-+ CORBA_exception_free (&ev);
-+ return;
-+ }
-+
-+ Bonobo_PersistStream_save (pstream, stream, "text/plain", &ev);
-+ if (ev._major != CORBA_NO_EXCEPTION) {
-+ g_warning("Error saving stream!");
-+ bonobo_object_unref (BONOBO_OBJECT (stream));
-+ bonobo_object_release_unref(pstream, NULL);
-+ bonobo_object_release_unref(storage, NULL);
-+ CORBA_exception_free (&ev);
-+ return;
-+ }
-+ bonobo_object_release_unref(stream, NULL);
-+ bonobo_object_release_unref(pstream, NULL);
-+ bonobo_object_release_unref(storage, NULL);
-+ return;
-+}
-+
-+static void
-+window_destroyed (GtkWindow *window, char * data)
-+{
-+ Bonobo_Control control;
-+
-+ control = bonobo_control_frame_get_control(ctrl_frame);
-+ write_stream_to_file(control);
-+ bonobo_control_frame_control_deactivate(ctrl_frame);
-+ bonobo_object_release_unref( control, NULL );
-+ bonobo_main_quit();
-+}
-+
-+int main(int argc, char * argv[] )
-+{
-+ BonoboWidget * bw;
-+ BonoboWindow *window;
-+ BonoboUIEngine *engine;
-+ BonoboUIContainer *container;
-+ Bonobo_Control control;
-+ gchar *cwd;
-+
-+ if( argc <= 1 ) {
-+ fprintf(stderr, "%s: not enough args\n", argv[0] );
-+ fprintf(stderr, "Usage: %s <text file>\n", argv[0]);
-+ exit(1);
-+ }
-+ cwd = g_get_current_dir();
-+ filename = g_build_filename( "file:", cwd, argv[1], NULL );
-+ g_free(cwd);
-+
-+ bonobo_ui_init ("container", "1.0", &argc, argv);
-+
-+ if(gnome_vfs_init () == FALSE)
-+ g_error (_("Could not initialize GnomeVFS!\n"));
-+
-+ window = BONOBO_WINDOW ( bonobo_window_new ("Window", "Vim Test Container"));
-+
-+ // instantiate a control
-+ control = instantiate_control();
-+ if( control == NULL )
-+ return 1;
-+
-+ // put it into our window
-+ add_control_to_ui (window, control);
-+
-+ g_signal_connect (window, "destroy",
-+ G_CALLBACK (window_destroyed),
-+ &window);
-+
-+
-+ gtk_widget_show_all( GTK_WIDGET( window ));
-+
-+ bonobo_main();
-+
-+ return 0;
-+}
-Binary files vimcopy/src/container.o and vim/src/container.o differ
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/ex_cmds2.c vim/src/ex_cmds2.c
---- vimcopy/src/ex_cmds2.c Wed Jul 9 09:23:22 2003
-+++ vim/src/ex_cmds2.c Sat Jul 26 13:16:47 2003
-@@ -704,6 +704,12 @@
- int forceit;
- int allbuf; /* may write all buffers */
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ if ( buf->emb_buffer ) {
-+ EMSG(_("E467: Cannot close embedded file"));
-+ return TRUE;
-+ }
-+#endif
- if ( !forceit
- && bufIsChanged(buf)
- && (mult_win || buf->b_nwindows <= 1)
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/ex_docmd.c vim/src/ex_docmd.c
---- vimcopy/src/ex_docmd.c Mon May 26 10:45:01 2003
-+++ vim/src/ex_docmd.c Sat Jul 26 13:16:47 2003
-@@ -5348,8 +5348,13 @@
- }
- else
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ EMSG(_(e_compnoquit));
-+ not_exiting();
-+ return;
-+#endif
- #ifdef FEAT_WINDOWS
-- if (only_one_window()) /* quit last window */
-+ if (only_one_window()) /* quit last window */
- #endif
- getout(0);
- #ifdef FEAT_WINDOWS
-@@ -5370,8 +5375,12 @@
- ex_cquit(eap)
- exarg_T *eap;
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ EMSG(_(e_compnoquit));
-+ return;
-+#endif
- getout(1); /* this does not always pass on the exit code to the Manx
-- compiler. why? */
-+ compiler. why? */
- }
-
- /*
-@@ -5391,6 +5400,10 @@
- return;
- }
- # endif
-+#ifdef FEAT_GUI_COMPONENT
-+ EMSG(_(e_compnoquit));
-+ return;
-+#endif
- exiting = TRUE;
- if (eap->forceit || !check_changed_any(FALSE))
- getout(0);
-@@ -5585,8 +5598,13 @@
- }
- else
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ EMSG(_(e_compnoquit));
-+ not_exiting();
-+ return;
-+#endif
- #ifdef FEAT_WINDOWS
-- if (only_one_window()) /* quit last window, exit Vim */
-+ if ( only_one_window()) /* quit last window, exit Vim */
- #endif
- getout(0);
- #ifdef FEAT_WINDOWS
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/fileio.c vim/src/fileio.c
---- vimcopy/src/fileio.c Fri Jul 25 11:04:42 2003
-+++ vim/src/fileio.c Sat Jul 26 13:16:47 2003
-@@ -45,6 +45,10 @@
- # define CRYPT_MAGIC_LEN 12 /* must be multiple of 4! */
- #endif
-
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+#include "vim_bonobo_control.h"
-+#endif
-+
- /* Is there any system that doesn't have access()? */
- #ifndef MACOS_CLASSIC /* Not available on MacOS 9 */
- # define USE_MCH_ACCESS
-@@ -200,6 +204,7 @@
- * READ_BUFFER read from curbuf instead of a file (converting after reading
- * stdin)
- * READ_DUMMY read into a dummy buffer (to check if file contents changed)
-+ * READ_EMB_STREAM read from a bonobo persist stream
- *
- * return FAIL for failure, OK otherwise
- */
-@@ -219,6 +224,11 @@
- int filtering = (flags & READ_FILTER);
- int read_stdin = (flags & READ_STDIN);
- int read_buffer = (flags & READ_BUFFER);
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ int read_pstream = (flags & READ_EMB_STREAM);
-+#else
-+#define read_pstream 0
-+#endif
- linenr_T read_buf_lnum = 1; /* next line to read from curbuf */
- colnr_T read_buf_col = 0; /* next char to read from this line */
- char_u c;
-@@ -322,7 +332,7 @@
- * The BufReadCmd and FileReadCmd events intercept the reading process by
- * executing the associated commands instead.
- */
-- if (!filtering && !read_stdin && !read_buffer)
-+ if (!filtering && !read_stdin && !read_buffer && !read_pstream)
- {
- pos_T pos;
-
-@@ -381,7 +391,7 @@
- * On Unix it is possible to read a directory, so we have to
- * check for it before the mch_open().
- */
-- if (!read_stdin && !read_buffer)
-+ if (!read_stdin && !read_buffer && !read_pstream)
- {
- perm = mch_getperm(fname);
- if (perm >= 0 && !S_ISREG(perm) /* not a regular file ... */
-@@ -423,7 +433,7 @@
- if (check_readonly && !readonlymode) /* default: set file not readonly */
- curbuf->b_p_ro = FALSE;
-
-- if (newfile && !read_stdin && !read_buffer)
-+ if (newfile && !read_stdin && !read_buffer && !read_pstream)
- {
- /* Remember time of file.
- * For RISCOS, also remember the filetype.
-@@ -483,6 +493,11 @@
- setmode(0, O_BINARY);
- #endif
- }
-+#ifdef FEAT_GUI_COMPONENT
-+ else if (read_pstream)
-+ {
-+ }
-+#endif
- else if (!read_buffer)
- {
- #ifdef USE_MCH_ACCESS
-@@ -599,7 +614,7 @@
- /* If "Quit" selected at ATTENTION dialog, don't load the file */
- if (swap_exists_action == SEA_QUIT)
- {
-- if (!read_buffer && !read_stdin)
-+ if (!read_buffer && !read_stdin && !read_pstream)
- close(fd);
- return FAIL;
- }
-@@ -624,7 +639,7 @@
- * The file must be closed again, the autocommands may want to change
- * the file before reading it.
- */
-- if (!read_stdin)
-+ if (!read_stdin && !read_pstream)
- close(fd); /* ignore errors */
-
- /*
-@@ -661,7 +676,7 @@
- * Don't allow the autocommands to change the current buffer.
- * Try to re-open the file.
- */
-- if (!read_stdin && (curbuf != old_curbuf
-+ if (!read_stdin && !read_pstream && (curbuf != old_curbuf
- || (fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0)) < 0))
- {
- --no_wait_return;
-@@ -701,7 +716,7 @@
- }
- #endif
- }
-- else if (!read_buffer)
-+ else if (!read_buffer && !read_pstream)
- filemess(curbuf, sfname, (char_u *)"", 0);
- }
-
-@@ -781,7 +796,7 @@
- read_buf_lnum = 1;
- read_buf_col = 0;
- }
-- else if (read_stdin || lseek(fd, (off_t)0L, SEEK_SET) != 0)
-+ else if (read_stdin || read_pstream || lseek(fd, (off_t)0L, SEEK_SET) != 0)
- {
- /* Can't rewind the file, give up. */
- error = TRUE;
-@@ -920,7 +935,7 @@
- * Use the 'charconvert' expression when conversion is required
- * and we can't do it internally or with iconv().
- */
-- if (fio_flags == 0 && !read_stdin && !read_buffer && *p_ccv != NUL
-+ if (fio_flags == 0 && !read_stdin && !read_buffer && !read_pstream && *p_ccv != NUL
- # ifdef USE_ICONV
- && iconv_fd == (iconv_t)-1
- # endif
-@@ -969,7 +984,7 @@
- /* Set can_retry when it's possible to rewind the file and try with
- * another "fenc" value. It's FALSE when no other "fenc" to try, reading
- * stdin or "fenc" was specified with "++enc=". */
-- can_retry = (*fenc != NUL && !read_stdin
-+ can_retry = (*fenc != NUL && !read_stdin && !read_pstream
- && (eap == NULL || eap->force_enc == 0));
- #endif
-
-@@ -1120,6 +1135,11 @@
- }
- }
- }
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ else if( read_pstream ) {
-+ size = vim_control_persist_stream_read(ptr, size);
-+ }
-+#endif
- else
- {
- /*
-@@ -1713,7 +1733,7 @@
- else if (ff_error != EOL_DOS)
- {
- if ( try_unix
-- && !read_stdin
-+ && !read_stdin && !read_pstream
- && (read_buffer
- || lseek(fd, (off_t)0L, SEEK_SET) == 0))
- {
-@@ -1802,7 +1822,7 @@
- # endif
- #endif
-
-- if (!read_buffer && !read_stdin)
-+ if (!read_buffer && !read_stdin && !read_pstream)
- close(fd); /* errors are ignored */
- vim_free(buffer);
-
-@@ -1991,7 +2011,7 @@
- #ifdef ALWAYS_USE_GUI
- /* Don't show the message when reading stdin, it would end up in a
- * message box (which might be shown when exiting!) */
-- if (read_stdin || read_buffer)
-+ if (read_stdin || read_buffer )
- p = msg_may_trunc(FALSE, IObuff);
- else
- #endif
-@@ -2057,7 +2077,7 @@
- */
- write_no_eol_lnum = read_no_eol_lnum;
-
-- if (!read_stdin && !read_buffer)
-+ if (!read_stdin && !read_buffer && !read_pstream)
- {
- int m = msg_scroll;
- int n = msg_scrolled;
-@@ -2383,6 +2403,11 @@
- int prev_got_int = got_int;
- int file_readonly = FALSE; /* overwritten file is read-only */
- static char *err_readonly = "is read-only (cannot override: \"W\" in 'cpoptions')";
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ int write_pstream = write_to_container;
-+#else
-+#define write_pstream 0
-+#endif
- #if defined(UNIX) || defined(__EMX__XX) /*XXX fix me sometime? */
- int made_writable = FALSE; /* 'w' bit has been set */
- #endif
-@@ -2795,6 +2820,10 @@
- if (dobackup && *p_bsk != NUL && match_file_list(p_bsk, sfname, ffname))
- dobackup = FALSE;
- #endif
-+#ifdef FEAT_GUI_COMPONENT
-+ if( write_pstream )
-+ dobackup = FALSE;
-+#endif
-
- /*
- * Save the value of got_int and reset it. We don't want a previous
-@@ -3398,7 +3427,7 @@
- * (this may happen when the user reached his quotum for number of files).
- * Appending will fail if the file does not exist and forceit is FALSE.
- */
-- while ((fd = mch_open((char *)wfname, O_WRONLY | O_EXTRA | (append
-+ while (write_pstream && (fd = mch_open((char *)wfname, O_WRONLY | O_EXTRA | (append
- ? (forceit ? (O_APPEND | O_CREAT) : O_APPEND)
- : (O_CREAT | O_TRUNC))
- , 0666)) < 0)
-@@ -3670,7 +3699,7 @@
- nchars += len;
- }
-
-- if (close(fd) != 0)
-+ if (!write_pstream && close(fd) != 0)
- {
- errmsg = (char_u *)_("E512: Close failed");
- end = 0;
-@@ -4088,6 +4117,10 @@
- buf_T *buf;
- char_u *fname;
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ if (buf->emb_buffer)
-+ fname = (char_u *)"[Embedded File]";
-+#endif
- if (fname == NULL)
- fname = (char_u *)"-stdin-";
- home_replace(buf, fname, IObuff + 1, IOSIZE - 4, TRUE);
-@@ -4476,7 +4509,12 @@
- /* Repeat the write(), it may be interrupted by a signal. */
- while (len)
- {
-- wlen = vim_write(ip->bw_fd, buf, len);
-+#if defined(FEAT_GUI_COMPONENT) && defined(FEAT_GUI_GNOME)
-+ if( write_to_container )
-+ wlen = vim_control_persist_stream_write(buf, len);
-+ else
-+#endif
-+ wlen = vim_write(ip->bw_fd, buf, len);
- if (wlen <= 0) /* error! */
- return FAIL;
- len -= wlen;
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/globals.h vim/src/globals.h
---- vimcopy/src/globals.h Mon Jun 2 09:32:19 2003
-+++ vim/src/globals.h Sat Jul 26 13:16:47 2003
-@@ -802,6 +802,11 @@
- EXTERN int readonlymode INIT(= FALSE); /* Set to TRUE for "view" */
- EXTERN int recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */
-
-+#ifdef FEAT_GUI_COMPONENT
-+EXTERN int read_from_container INIT(= 0); /* read the buffer from the container app */
-+EXTERN int write_to_container INIT(= 0); /* write the buffer to the container app */
-+#endif
-+
- EXTERN struct buffheader stuffbuff /* stuff buffer */
- #ifdef DO_INIT
- = {{NULL, {NUL}}, NULL, 0, 0}
-@@ -1321,6 +1326,9 @@
- #endif
- #ifdef FEAT_NETBEANS_INTG
- EXTERN char_u e_guarded[] INIT(=N_("E463: Region is guarded, cannot modify"));
-+#endif
-+#ifdef FEAT_GUI_COMPONENT
-+EXTERN char_u e_compnoquit[] INIT(=N_("E464: Quit not allowed from embedded component"));
- #endif
- #ifdef MACOS_X_UNIX
- EXTERN short disallow_gui INIT(= FALSE);
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gtkhtml.h vim/src/gtkhtml.h
---- vimcopy/src/gtkhtml.h Wed Dec 31 18:00:00 1969
-+++ vim/src/gtkhtml.h Sat Jul 26 13:16:47 2003
-@@ -0,0 +1,480 @@
-+/*
-+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
-+ */
-+
-+#ifndef Editor_H
-+#define Editor_H 1
-+#include <glib.h>
-+#define ORBIT_IDL_SERIAL 19
-+#include <orbit/orbit-types.h>
-+
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif /* __cplusplus */
-+
-+/** typedefs **/
-+#include <bonobo/Bonobo.h>
-+#if !defined(ORBIT_DECL_GNOME_GtkHTML_Editor_Listener) && !defined(_GNOME_GtkHTML_Editor_Listener_defined)
-+#define ORBIT_DECL_GNOME_GtkHTML_Editor_Listener 1
-+#define _GNOME_GtkHTML_Editor_Listener_defined 1
-+#define GNOME_GtkHTML_Editor_Listener__freekids CORBA_Object__freekids
-+ typedef CORBA_Object GNOME_GtkHTML_Editor_Listener;
-+ extern CORBA_unsigned_long GNOME_GtkHTML_Editor_Listener__classid;
-+#if !defined(TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_0)
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_0 'E'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_1 'd'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_2 'i'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_3 't'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_4 'o'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_5 'r'
-+#ifdef ORBIT_IDL_C_IMODULE
-+ static
-+#else
-+ extern
-+#endif
-+ const struct CORBA_TypeCode_struct TC_GNOME_GtkHTML_Editor_Listener_struct;
-+#define TC_GNOME_GtkHTML_Editor_Listener ((CORBA_TypeCode)&TC_GNOME_GtkHTML_Editor_Listener_struct)
-+#endif
-+#endif
-+#if !defined(ORBIT_DECL_GNOME_GtkHTML_Editor_Engine) && !defined(_GNOME_GtkHTML_Editor_Engine_defined)
-+#define ORBIT_DECL_GNOME_GtkHTML_Editor_Engine 1
-+#define _GNOME_GtkHTML_Editor_Engine_defined 1
-+#define GNOME_GtkHTML_Editor_Engine__freekids CORBA_Object__freekids
-+ typedef CORBA_Object GNOME_GtkHTML_Editor_Engine;
-+ extern CORBA_unsigned_long GNOME_GtkHTML_Editor_Engine__classid;
-+#if !defined(TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_0)
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_0 'E'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_1 'd'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_2 'i'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_3 't'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_4 'o'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_5 'r'
-+#ifdef ORBIT_IDL_C_IMODULE
-+ static
-+#else
-+ extern
-+#endif
-+ const struct CORBA_TypeCode_struct TC_GNOME_GtkHTML_Editor_Engine_struct;
-+#define TC_GNOME_GtkHTML_Editor_Engine ((CORBA_TypeCode)&TC_GNOME_GtkHTML_Editor_Engine_struct)
-+#endif
-+#endif
-+#if !defined(_GNOME_GtkHTML_Editor_URLRequestEvent_defined)
-+#define _GNOME_GtkHTML_Editor_URLRequestEvent_defined 1
-+ typedef struct GNOME_GtkHTML_Editor_URLRequestEvent_type
-+ GNOME_GtkHTML_Editor_URLRequestEvent;
-+ struct GNOME_GtkHTML_Editor_URLRequestEvent_type
-+ {
-+ CORBA_string url;
-+ Bonobo_Stream stream;
-+ };
-+
-+#if !defined(TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_0)
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_0 'E'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_1 'd'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_2 'i'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_3 't'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_4 'o'
-+#define TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_5 'r'
-+#ifdef ORBIT_IDL_C_IMODULE
-+ static
-+#else
-+ extern
-+#endif
-+ const struct CORBA_TypeCode_struct
-+ TC_GNOME_GtkHTML_Editor_URLRequestEvent_struct;
-+#define TC_GNOME_GtkHTML_Editor_URLRequestEvent ((CORBA_TypeCode)&TC_GNOME_GtkHTML_Editor_URLRequestEvent_struct)
-+#endif
-+#define GNOME_GtkHTML_Editor_URLRequestEvent__alloc() ((GNOME_GtkHTML_Editor_URLRequestEvent *)ORBit_small_alloc (TC_GNOME_GtkHTML_Editor_URLRequestEvent))
-+#define GNOME_GtkHTML_Editor_URLRequestEvent__freekids(m,d) ORBit_small_freekids (TC_GNOME_GtkHTML_Editor_URLRequestEvent,(m),(d))
-+#endif
-+
-+/** POA structures **/
-+#ifndef _defined_POA_GNOME_GtkHTML_Editor_Listener
-+#define _defined_POA_GNOME_GtkHTML_Editor_Listener 1
-+ typedef struct
-+ {
-+ void *_private;
-+ CORBA_any *(*event) (PortableServer_Servant _servant,
-+ const CORBA_char * name, const CORBA_any * arg,
-+ CORBA_Environment * ev);
-+ }
-+ POA_GNOME_GtkHTML_Editor_Listener__epv;
-+ typedef struct
-+ {
-+ PortableServer_ServantBase__epv *_base_epv;
-+ POA_Bonobo_Unknown__epv *Bonobo_Unknown_epv;
-+ POA_GNOME_GtkHTML_Editor_Listener__epv
-+ *GNOME_GtkHTML_Editor_Listener_epv;
-+ }
-+ POA_GNOME_GtkHTML_Editor_Listener__vepv;
-+ typedef struct
-+ {
-+ void *_private;
-+ POA_GNOME_GtkHTML_Editor_Listener__vepv *vepv;
-+ }
-+ POA_GNOME_GtkHTML_Editor_Listener;
-+ extern void POA_GNOME_GtkHTML_Editor_Listener__init(PortableServer_Servant
-+ servant,
-+ CORBA_Environment *
-+ ev);
-+ extern void POA_GNOME_GtkHTML_Editor_Listener__fini(PortableServer_Servant
-+ servant,
-+ CORBA_Environment *
-+ ev);
-+#endif /* _defined_POA_GNOME_GtkHTML_Editor_Listener */
-+#ifndef _defined_POA_GNOME_GtkHTML_Editor_Engine
-+#define _defined_POA_GNOME_GtkHTML_Editor_Engine 1
-+ typedef struct
-+ {
-+ void *_private;
-+ GNOME_GtkHTML_Editor_Listener(*_get_listener) (PortableServer_Servant
-+ _servant,
-+ CORBA_Environment * ev);
-+ void (*_set_listener) (PortableServer_Servant _servant,
-+ const GNOME_GtkHTML_Editor_Listener value,
-+ CORBA_Environment * ev);
-+ CORBA_boolean(*runCommand) (PortableServer_Servant _servant,
-+ const CORBA_char * command,
-+ CORBA_Environment * ev);
-+ CORBA_string(*getParagraphData) (PortableServer_Servant _servant,
-+ const CORBA_char * key,
-+ CORBA_Environment * ev);
-+ void (*setParagraphData) (PortableServer_Servant _servant,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev);
-+ void (*setObjectDataByType) (PortableServer_Servant _servant,
-+ const CORBA_char * type_name,
-+ const CORBA_char * key,
-+ const CORBA_char * data,
-+ CORBA_Environment * ev);
-+ CORBA_boolean(*searchByData) (PortableServer_Servant _servant,
-+ const CORBA_long level,
-+ const CORBA_char * klass,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev);
-+ CORBA_boolean(*isParagraphEmpty) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev);
-+ CORBA_boolean(*isPreviousParagraphEmpty) (PortableServer_Servant
-+ _servant,
-+ CORBA_Environment * ev);
-+ void (*insertHTML) (PortableServer_Servant _servant,
-+ const CORBA_char * html, CORBA_Environment * ev);
-+ void (*freeze) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev);
-+ void (*thaw) (PortableServer_Servant _servant, CORBA_Environment * ev);
-+ void (*undoBegin) (PortableServer_Servant _servant,
-+ const CORBA_char * undo_name,
-+ const CORBA_char * redo_name,
-+ CORBA_Environment * ev);
-+ void (*undoEnd) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev);
-+ void (*ignoreWord) (PortableServer_Servant _servant,
-+ const CORBA_char * word, CORBA_Environment * ev);
-+ void (*dropUndo) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev);
-+ CORBA_boolean(*hasUndo) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev);
-+ }
-+ POA_GNOME_GtkHTML_Editor_Engine__epv;
-+ typedef struct
-+ {
-+ PortableServer_ServantBase__epv *_base_epv;
-+ POA_Bonobo_Unknown__epv *Bonobo_Unknown_epv;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *GNOME_GtkHTML_Editor_Engine_epv;
-+ }
-+ POA_GNOME_GtkHTML_Editor_Engine__vepv;
-+ typedef struct
-+ {
-+ void *_private;
-+ POA_GNOME_GtkHTML_Editor_Engine__vepv *vepv;
-+ }
-+ POA_GNOME_GtkHTML_Editor_Engine;
-+ extern void POA_GNOME_GtkHTML_Editor_Engine__init(PortableServer_Servant
-+ servant,
-+ CORBA_Environment * ev);
-+ extern void POA_GNOME_GtkHTML_Editor_Engine__fini(PortableServer_Servant
-+ servant,
-+ CORBA_Environment * ev);
-+#endif /* _defined_POA_GNOME_GtkHTML_Editor_Engine */
-+
-+/** skel prototypes **/
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Listener_event
-+ (POA_GNOME_GtkHTML_Editor_Listener * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ CORBA_any * (*_impl_event) (PortableServer_Servant _servant,
-+ const CORBA_char * name,
-+ const CORBA_any * arg,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine__get_listener
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ GNOME_GtkHTML_Editor_Listener(*_impl__get_listener)
-+ (PortableServer_Servant _servant, CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine__set_listener
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl__set_listener) (PortableServer_Servant _servant,
-+ const GNOME_GtkHTML_Editor_Listener value,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_runCommand
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ CORBA_boolean(*_impl_runCommand) (PortableServer_Servant _servant,
-+ const CORBA_char * command,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_getParagraphData
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ CORBA_string(*_impl_getParagraphData) (PortableServer_Servant _servant,
-+ const CORBA_char * key,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_setParagraphData
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_setParagraphData) (PortableServer_Servant _servant,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_setObjectDataByType
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_setObjectDataByType) (PortableServer_Servant _servant,
-+ const CORBA_char * type_name,
-+ const CORBA_char * key,
-+ const CORBA_char * data,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_searchByData
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ CORBA_boolean(*_impl_searchByData) (PortableServer_Servant _servant,
-+ const CORBA_long level,
-+ const CORBA_char * klass,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_isParagraphEmpty
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ CORBA_boolean(*_impl_isParagraphEmpty) (PortableServer_Servant
-+ _servant,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_isPreviousParagraphEmpty
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ CORBA_boolean(*_impl_isPreviousParagraphEmpty) (PortableServer_Servant
-+ _servant,
-+ CORBA_Environment *
-+ ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_insertHTML
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_insertHTML) (PortableServer_Servant _servant,
-+ const CORBA_char * html,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_freeze
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_freeze) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_thaw
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_thaw) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_undoBegin
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_undoBegin) (PortableServer_Servant _servant,
-+ const CORBA_char * undo_name,
-+ const CORBA_char * redo_name,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_undoEnd
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_undoEnd) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_ignoreWord
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_ignoreWord) (PortableServer_Servant _servant,
-+ const CORBA_char * word,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_dropUndo
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ void (*_impl_dropUndo) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev));
-+ void
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_hasUndo
-+ (POA_GNOME_GtkHTML_Editor_Engine * _ORBIT_servant,
-+ gpointer _ORBIT_retval, gpointer * _ORBIT_args, CORBA_Context ctx,
-+ CORBA_Environment * ev,
-+ CORBA_boolean(*_impl_hasUndo) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev));
-+
-+/** stub prototypes **/
-+#define GNOME_GtkHTML_Editor_Listener_ref Bonobo_Unknown_ref
-+#define GNOME_GtkHTML_Editor_Listener_unref Bonobo_Unknown_unref
-+#define GNOME_GtkHTML_Editor_Listener_queryInterface Bonobo_Unknown_queryInterface
-+ CORBA_any
-+ *GNOME_GtkHTML_Editor_Listener_event(GNOME_GtkHTML_Editor_Listener _obj,
-+ const CORBA_char * name,
-+ const CORBA_any * arg,
-+ CORBA_Environment * ev);
-+#define GNOME_GtkHTML_Editor_Engine_ref Bonobo_Unknown_ref
-+#define GNOME_GtkHTML_Editor_Engine_unref Bonobo_Unknown_unref
-+#define GNOME_GtkHTML_Editor_Engine_queryInterface Bonobo_Unknown_queryInterface
-+ GNOME_GtkHTML_Editor_Listener
-+ GNOME_GtkHTML_Editor_Engine__get_listener(GNOME_GtkHTML_Editor_Engine
-+ _obj, CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine__set_listener(GNOME_GtkHTML_Editor_Engine
-+ _obj,
-+ const
-+ GNOME_GtkHTML_Editor_Listener
-+ value,
-+ CORBA_Environment * ev);
-+ CORBA_boolean
-+ GNOME_GtkHTML_Editor_Engine_runCommand(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_char * command,
-+ CORBA_Environment * ev);
-+ CORBA_string
-+ GNOME_GtkHTML_Editor_Engine_getParagraphData(GNOME_GtkHTML_Editor_Engine
-+ _obj,
-+ const CORBA_char * key,
-+ CORBA_Environment * ev);
-+ void
-+ GNOME_GtkHTML_Editor_Engine_setParagraphData(GNOME_GtkHTML_Editor_Engine
-+ _obj,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev);
-+ void
-+ GNOME_GtkHTML_Editor_Engine_setObjectDataByType
-+ (GNOME_GtkHTML_Editor_Engine _obj, const CORBA_char * type_name,
-+ const CORBA_char * key, const CORBA_char * data,
-+ CORBA_Environment * ev);
-+ CORBA_boolean
-+ GNOME_GtkHTML_Editor_Engine_searchByData(GNOME_GtkHTML_Editor_Engine
-+ _obj, const CORBA_long level,
-+ const CORBA_char * klass,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev);
-+ CORBA_boolean
-+ GNOME_GtkHTML_Editor_Engine_isParagraphEmpty(GNOME_GtkHTML_Editor_Engine
-+ _obj,
-+ CORBA_Environment * ev);
-+ CORBA_boolean
-+ GNOME_GtkHTML_Editor_Engine_isPreviousParagraphEmpty
-+ (GNOME_GtkHTML_Editor_Engine _obj, CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine_insertHTML(GNOME_GtkHTML_Editor_Engine
-+ _obj, const CORBA_char * html,
-+ CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine_freeze(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine_thaw(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine_undoBegin(GNOME_GtkHTML_Editor_Engine
-+ _obj,
-+ const CORBA_char * undo_name,
-+ const CORBA_char * redo_name,
-+ CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine_undoEnd(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine_ignoreWord(GNOME_GtkHTML_Editor_Engine
-+ _obj, const CORBA_char * word,
-+ CORBA_Environment * ev);
-+ void GNOME_GtkHTML_Editor_Engine_dropUndo(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev);
-+ CORBA_boolean
-+ GNOME_GtkHTML_Editor_Engine_hasUndo(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev);
-+
-+/** more internals **/
-+#if !defined(MARSHAL_IMPL_GNOME_GtkHTML_Editor_URLRequestEvent_0)
-+#define MARSHAL_IMPL_GNOME_GtkHTML_Editor_URLRequestEvent_0 'E'
-+#define MARSHAL_IMPL_GNOME_GtkHTML_Editor_URLRequestEvent_1 'd'
-+#define MARSHAL_IMPL_GNOME_GtkHTML_Editor_URLRequestEvent_2 'i'
-+#define MARSHAL_IMPL_GNOME_GtkHTML_Editor_URLRequestEvent_3 't'
-+#define MARSHAL_IMPL_GNOME_GtkHTML_Editor_URLRequestEvent_4 'o'
-+#define MARSHAL_IMPL_GNOME_GtkHTML_Editor_URLRequestEvent_5 'r'
-+#endif
-+#include <orbit/orb-core/orbit-interface.h>
-+
-+#ifdef ORBIT_IDL_C_IMODULE
-+ static
-+#else
-+ extern
-+#endif
-+ ORBit_IInterface GNOME_GtkHTML_Editor_Listener__iinterface;
-+#define GNOME_GtkHTML_Editor_Listener_IMETHODS_LEN 1
-+#ifdef ORBIT_IDL_C_IMODULE
-+ static
-+#else
-+ extern
-+#endif
-+ ORBit_IMethod
-+ GNOME_GtkHTML_Editor_Listener__imethods
-+ [GNOME_GtkHTML_Editor_Listener_IMETHODS_LEN];
-+#ifdef ORBIT_IDL_C_IMODULE
-+ static
-+#else
-+ extern
-+#endif
-+ ORBit_IInterface GNOME_GtkHTML_Editor_Engine__iinterface;
-+#define GNOME_GtkHTML_Editor_Engine_IMETHODS_LEN 17
-+#ifdef ORBIT_IDL_C_IMODULE
-+ static
-+#else
-+ extern
-+#endif
-+ ORBit_IMethod
-+ GNOME_GtkHTML_Editor_Engine__imethods
-+ [GNOME_GtkHTML_Editor_Engine_IMETHODS_LEN];
-+#ifdef __cplusplus
-+}
-+#endif /* __cplusplus */
-+
-+#ifndef EXCLUDE_ORBIT_H
-+#include <orbit/orbit.h>
-+
-+#endif /* EXCLUDE_ORBIT_H */
-+#endif
-+#undef ORBIT_IDL_SERIAL
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gtkhtml_editor.c vim/src/gtkhtml_editor.c
---- vimcopy/src/gtkhtml_editor.c Wed Dec 31 18:00:00 1969
-+++ vim/src/gtkhtml_editor.c Sat Jul 26 13:16:47 2003
-@@ -0,0 +1,189 @@
-+#include <bonobo.h>
-+
-+#include "gtkhtml_editor.h"
-+
-+static BonoboObjectClass *engine_parent_class;
-+
-+inline static EditorEngine *
-+gtkhtml_editor_engine_from_servant (PortableServer_Servant servant)
-+{
-+ return EDITOR_ENGINE (bonobo_object_from_servant (servant));
-+}
-+
-+static CORBA_char *
-+impl_get_paragraph_data (PortableServer_Servant servant, const CORBA_char * key, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+}
-+
-+static void
-+impl_set_paragraph_data (PortableServer_Servant servant,
-+ const CORBA_char * key, const CORBA_char * value,
-+ CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+}
-+
-+static void
-+impl_set_object_data_by_type (PortableServer_Servant servant,
-+ const CORBA_char * type_name, const CORBA_char * key, const CORBA_char * value,
-+ CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+}
-+
-+static void
-+impl_set_listener (PortableServer_Servant servant, const GNOME_GtkHTML_Editor_Listener value, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+
-+ bonobo_object_release_unref (e->listener, NULL);
-+ e->listener = bonobo_object_dup_ref (value, NULL);
-+}
-+
-+static GNOME_GtkHTML_Editor_Listener
-+impl_get_listener (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+ return gtkhtml_editor_engine_from_servant (servant)->listener;
-+}
-+
-+static CORBA_boolean
-+impl_run_command (PortableServer_Servant servant, const CORBA_char * command, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+ printf ("command: %s\n", command);
-+ return CORBA_TRUE;
-+}
-+
-+static CORBA_boolean
-+impl_is_paragraph_empty (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+ return CORBA_FALSE;
-+}
-+
-+static CORBA_boolean
-+impl_is_previous_paragraph_empty (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+ return CORBA_FALSE;
-+}
-+
-+static void
-+impl_insert_html (PortableServer_Servant servant, const CORBA_char * html, CORBA_Environment * ev)
-+{
-+ printf ("impl_insert_html\n");
-+}
-+
-+static CORBA_boolean
-+impl_search_by_data (PortableServer_Servant servant, const CORBA_long level, const CORBA_char * klass,
-+ const CORBA_char * key, const CORBA_char * value, CORBA_Environment * ev)
-+{
-+ return FALSE;
-+}
-+
-+static void
-+impl_freeze (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+}
-+
-+static void
-+impl_thaw (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+}
-+
-+static void
-+impl_undo_begin (PortableServer_Servant servant, const CORBA_char * undo_name, const CORBA_char * redo_name,
-+ CORBA_Environment * ev)
-+{
-+}
-+
-+static void
-+impl_undo_end (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+}
-+
-+static void
-+impl_ignore_word (PortableServer_Servant servant, const CORBA_char * word, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+}
-+
-+static CORBA_boolean
-+impl_has_undo (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+
-+ printf ("hasUndo\n");
-+ return CORBA_FALSE;
-+}
-+
-+static void
-+impl_drop_undo (PortableServer_Servant servant, CORBA_Environment * ev)
-+{
-+ EditorEngine *e = gtkhtml_editor_engine_from_servant (servant);
-+
-+ printf ("dropUndo\n");
-+}
-+
-+static void
-+engine_object_finalize (GObject *object)
-+{
-+ EditorEngine *e = EDITOR_ENGINE (object);
-+
-+ bonobo_object_release_unref (e->listener, NULL);
-+
-+ G_OBJECT_CLASS (engine_parent_class)->finalize (object);
-+}
-+
-+static void
-+editor_engine_init (GObject *object)
-+{
-+ EditorEngine *e = EDITOR_ENGINE (object);
-+
-+ e->listener = CORBA_OBJECT_NIL;
-+}
-+
-+static void
-+editor_engine_class_init (EditorEngineClass *klass)
-+{
-+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *epv = &klass->epv;
-+
-+ engine_parent_class = g_type_class_peek_parent (klass);
-+ object_class->finalize = engine_object_finalize;
-+
-+ epv->_set_listener = impl_set_listener;
-+ epv->_get_listener = impl_get_listener;
-+ epv->setParagraphData = impl_set_paragraph_data;
-+ epv->getParagraphData = impl_get_paragraph_data;
-+ epv->setObjectDataByType = impl_set_object_data_by_type;
-+ epv->runCommand = impl_run_command;
-+ epv->isParagraphEmpty = impl_is_paragraph_empty;
-+ epv->isPreviousParagraphEmpty = impl_is_previous_paragraph_empty;
-+ epv->searchByData = impl_search_by_data;
-+ epv->insertHTML = impl_insert_html;
-+ epv->freeze = impl_freeze;
-+ epv->thaw = impl_thaw;
-+ epv->undoBegin = impl_undo_begin;
-+ epv->undoEnd = impl_undo_end;
-+ epv->ignoreWord = impl_ignore_word;
-+ epv->hasUndo = impl_has_undo;
-+ epv->dropUndo = impl_drop_undo;
-+}
-+
-+BONOBO_TYPE_FUNC_FULL (
-+ EditorEngine, /* Glib class name */
-+ GNOME_GtkHTML_Editor_Engine, /* CORBA interface name */
-+ BONOBO_TYPE_OBJECT, /* parent type */
-+ editor_engine); /* local prefix ie. 'echo'_class_init */
-+
-+EditorEngine *
-+editor_engine_new (void)
-+{
-+ EditorEngine *ee;
-+
-+ ee = g_object_new (EDITOR_ENGINE_TYPE, NULL);
-+
-+ return ee;
-+}
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gtkhtml_editor.h vim/src/gtkhtml_editor.h
---- vimcopy/src/gtkhtml_editor.h Wed Dec 31 18:00:00 1969
-+++ vim/src/gtkhtml_editor.h Sat Jul 26 13:16:47 2003
-@@ -0,0 +1,34 @@
-+#ifndef GTKHTML_ENGINE_H_
-+#define GTKHTML_ENGINE_H_
-+
-+G_BEGIN_DECLS
-+
-+typedef struct _EditorEngine EditorEngine;
-+
-+#include <gtk/gtktypeutils.h>
-+#include <bonobo/bonobo-object.h>
-+#include "gtkhtml.h"
-+
-+#define EDITOR_ENGINE_TYPE (editor_engine_get_type ())
-+#define EDITOR_ENGINE(o) (GTK_CHECK_CAST ((o), EDITOR_ENGINE_TYPE, EditorEngine))
-+#define EDITOR_ENGINE_CLASS(k) (GTK_CHECK_CLASS_CAST((k), EDITOR_ENGINE_TYPE, EditorEngineClass))
-+#define IS_EDITOR_ENGINE(o) (GTK_CHECK_TYPE ((o), EDITOR_ENGINE_TYPE))
-+#define IS_EDITOR_ENGINE_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), EDITOR_ENGINE_TYPE))
-+
-+struct _EditorEngine {
-+ BonoboObject parent;
-+ GNOME_GtkHTML_Editor_Listener listener;
-+};
-+
-+typedef struct {
-+ BonoboObjectClass parent_class;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv epv;
-+} EditorEngineClass;
-+
-+GtkType editor_engine_get_type (void);
-+EditorEngine *editor_engine_new (void);
-+POA_GNOME_GtkHTML_Editor_Engine__epv *editor_engine_get_epv (void);
-+
-+G_END_DECLS
-+
-+#endif /* GTKHTML_ENGINE_H_ */
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gtkhtml_editor_common.c vim/src/gtkhtml_editor_common.c
---- vimcopy/src/gtkhtml_editor_common.c Wed Dec 31 18:00:00 1969
-+++ vim/src/gtkhtml_editor_common.c Sat Jul 26 13:16:47 2003
-@@ -0,0 +1,306 @@
-+/*
-+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
-+ */
-+
-+#include <string.h>
-+#define ORBIT2_STUBS_API
-+#define ORBIT_IDL_C_COMMON
-+#define Editor_COMMON
-+#include "gtkhtml.h"
-+
-+static const CORBA_unsigned_long ORBit_zero_int = 0;
-+
-+#if ( (TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_0 == 'E') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_1 == 'd') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_2 == 'i') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_3 == 't') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_4 == 'o') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Listener_5 == 'r') \
-+) && !defined(TC_DEF_TC_GNOME_GtkHTML_Editor_Listener)
-+#define TC_DEF_TC_GNOME_GtkHTML_Editor_Listener 1
-+#ifdef ORBIT_IDL_C_IMODULE_Editor
-+static
-+#endif
-+const struct CORBA_TypeCode_struct TC_GNOME_GtkHTML_Editor_Listener_struct = {
-+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
-+ CORBA_tk_objref,
-+ 0,
-+ 0,
-+ ORBIT_ALIGNOF_CORBA_POINTER,
-+ 0,
-+ 0,
-+ NULL,
-+ CORBA_OBJECT_NIL,
-+ "Listener",
-+ "IDL:GNOME/GtkHTML/Editor/Listener:1.0",
-+ NULL,
-+ NULL,
-+ -1,
-+ 0,
-+ 0, 0
-+};
-+#endif
-+#if ( (TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_0 == 'E') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_1 == 'd') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_2 == 'i') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_3 == 't') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_4 == 'o') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_Engine_5 == 'r') \
-+) && !defined(TC_DEF_TC_GNOME_GtkHTML_Editor_Engine)
-+#define TC_DEF_TC_GNOME_GtkHTML_Editor_Engine 1
-+#ifdef ORBIT_IDL_C_IMODULE_Editor
-+static
-+#endif
-+const struct CORBA_TypeCode_struct TC_GNOME_GtkHTML_Editor_Engine_struct = {
-+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
-+ CORBA_tk_objref,
-+ 0,
-+ 0,
-+ ORBIT_ALIGNOF_CORBA_POINTER,
-+ 0,
-+ 0,
-+ NULL,
-+ CORBA_OBJECT_NIL,
-+ "Engine",
-+ "IDL:GNOME/GtkHTML/Editor/Engine:1.0",
-+ NULL,
-+ NULL,
-+ -1,
-+ 0,
-+ 0, 0
-+};
-+#endif
-+#if ( (TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_0 == 'E') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_1 == 'd') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_2 == 'i') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_3 == 't') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_4 == 'o') \
-+&& (TC_IMPL_TC_GNOME_GtkHTML_Editor_URLRequestEvent_5 == 'r') \
-+) && !defined(TC_DEF_TC_GNOME_GtkHTML_Editor_URLRequestEvent)
-+#define TC_DEF_TC_GNOME_GtkHTML_Editor_URLRequestEvent 1
-+static const char *anon_subnames_array6[] = { "url", "stream" };
-+static const CORBA_TypeCode anon_subtypes_array7[] =
-+ { (CORBA_TypeCode) & TC_CORBA_string_struct,
-+ (CORBA_TypeCode) & TC_Bonobo_Stream_struct };
-+
-+#ifdef ORBIT_IDL_C_IMODULE_Editor
-+static
-+#endif
-+const struct CORBA_TypeCode_struct
-+ TC_GNOME_GtkHTML_Editor_URLRequestEvent_struct = {
-+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
-+ CORBA_tk_struct,
-+ 0,
-+ 0,
-+ ORBIT_ALIGNOF_CORBA_POINTER,
-+ 0,
-+ 2,
-+ (CORBA_TypeCode *) anon_subtypes_array7,
-+ CORBA_OBJECT_NIL,
-+ "URLRequestEvent",
-+ "IDL:GNOME/GtkHTML/Editor/URLRequestEvent:1.0",
-+ (char **) anon_subnames_array6,
-+ NULL,
-+ -1,
-+ 0,
-+ 0, 0
-+};
-+#endif
-+
-+#ifndef ORBIT_IDL_C_IMODULE_Editor
-+CORBA_unsigned_long GNOME_GtkHTML_Editor_Listener__classid = 0;
-+#endif
-+
-+#ifndef ORBIT_IDL_C_IMODULE_Editor
-+CORBA_unsigned_long GNOME_GtkHTML_Editor_Engine__classid = 0;
-+#endif
-+
-+/* Interface type data */
-+
-+static ORBit_IArg GNOME_GtkHTML_Editor_Listener_event__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "name"},
-+ {TC_CORBA_any, ORBit_I_ARG_IN, "arg"}
-+};
-+
-+#ifdef ORBIT_IDL_C_IMODULE_Editor
-+static
-+#endif
-+ORBit_IMethod GNOME_GtkHTML_Editor_Listener__imethods[] = {
-+ {
-+ {2, 2, GNOME_GtkHTML_Editor_Listener_event__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_CORBA_any, "event", 5,
-+ 0}
-+};
-+static CORBA_string GNOME_GtkHTML_Editor_Listener__base_itypes[] = {
-+ "IDL:Bonobo/Unknown:1.0",
-+ "IDL:omg.org/CORBA/Object:1.0"
-+};
-+
-+#ifdef ORBIT_IDL_C_IMODULE_Editor
-+static
-+#endif
-+ORBit_IInterface GNOME_GtkHTML_Editor_Listener__iinterface = {
-+ TC_GNOME_GtkHTML_Editor_Listener, {1, 1,
-+ GNOME_GtkHTML_Editor_Listener__imethods,
-+ FALSE},
-+ {2, 2, GNOME_GtkHTML_Editor_Listener__base_itypes, FALSE}
-+};
-+
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine__set_listener__arginfo[] = {
-+ {TC_GNOME_GtkHTML_Editor_Listener, ORBit_I_ARG_IN, "value"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_runCommand__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "command"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_getParagraphData__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "key"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_setParagraphData__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "key"},
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "value"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_setObjectDataByType__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "type_name"},
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "key"},
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "data"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_searchByData__arginfo[] = {
-+ {TC_CORBA_long, ORBit_I_ARG_IN | ORBit_I_COMMON_FIXED_SIZE, "level"},
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "klass"},
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "key"},
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "value"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_insertHTML__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "html"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_undoBegin__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "undo_name"},
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "redo_name"}
-+};
-+static ORBit_IArg GNOME_GtkHTML_Editor_Engine_ignoreWord__arginfo[] = {
-+ {TC_CORBA_string, ORBit_I_ARG_IN, "word"}
-+};
-+
-+#ifdef ORBIT_IDL_C_IMODULE_Editor
-+static
-+#endif
-+ORBit_IMethod GNOME_GtkHTML_Editor_Engine__imethods[] = {
-+ {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_GNOME_GtkHTML_Editor_Listener, "_get_listener", 13,
-+ 0}
-+ , {
-+ {1, 1, GNOME_GtkHTML_Editor_Engine__set_listener__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "_set_listener", 13,
-+ 0}
-+ , {
-+ {1, 1, GNOME_GtkHTML_Editor_Engine_runCommand__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_CORBA_boolean, "runCommand", 10,
-+ 0 | ORBit_I_COMMON_FIXED_SIZE}
-+ , {
-+ {1, 1, GNOME_GtkHTML_Editor_Engine_getParagraphData__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_CORBA_string, "getParagraphData", 16,
-+ 0}
-+ , {
-+ {2, 2, GNOME_GtkHTML_Editor_Engine_setParagraphData__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "setParagraphData", 16,
-+ 0}
-+ , {
-+ {3, 3, GNOME_GtkHTML_Editor_Engine_setObjectDataByType__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "setObjectDataByType", 19,
-+ 0}
-+ , {
-+ {4, 4, GNOME_GtkHTML_Editor_Engine_searchByData__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_CORBA_boolean, "searchByData", 12,
-+ 0 | ORBit_I_COMMON_FIXED_SIZE}
-+ , {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_CORBA_boolean, "isParagraphEmpty", 16,
-+ 0 | ORBit_I_COMMON_FIXED_SIZE}
-+ , {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_CORBA_boolean, "isPreviousParagraphEmpty", 24,
-+ 0 | ORBit_I_COMMON_FIXED_SIZE}
-+ , {
-+ {1, 1, GNOME_GtkHTML_Editor_Engine_insertHTML__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "insertHTML", 10,
-+ 0}
-+ , {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "freeze", 6,
-+ 0}
-+ , {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "thaw", 4,
-+ 0}
-+ , {
-+ {2, 2, GNOME_GtkHTML_Editor_Engine_undoBegin__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "undoBegin", 9,
-+ 0}
-+ , {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "undoEnd", 7,
-+ 0}
-+ , {
-+ {1, 1, GNOME_GtkHTML_Editor_Engine_ignoreWord__arginfo, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "ignoreWord", 10,
-+ 0}
-+ , {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_void, "dropUndo", 8,
-+ 0}
-+ , {
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ {0, 0, NULL, FALSE},
-+ TC_CORBA_boolean, "hasUndo", 7,
-+ 0 | ORBit_I_COMMON_FIXED_SIZE}
-+};
-+static CORBA_string GNOME_GtkHTML_Editor_Engine__base_itypes[] = {
-+ "IDL:Bonobo/Unknown:1.0",
-+ "IDL:omg.org/CORBA/Object:1.0"
-+};
-+
-+#ifdef ORBIT_IDL_C_IMODULE_Editor
-+static
-+#endif
-+ORBit_IInterface GNOME_GtkHTML_Editor_Engine__iinterface = {
-+ TC_GNOME_GtkHTML_Editor_Engine, {17, 17,
-+ GNOME_GtkHTML_Editor_Engine__imethods,
-+ FALSE},
-+ {2, 2, GNOME_GtkHTML_Editor_Engine__base_itypes, FALSE}
-+};
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gtkhtml_editor_skels.c vim/src/gtkhtml_editor_skels.c
---- vimcopy/src/gtkhtml_editor_skels.c Wed Dec 31 18:00:00 1969
-+++ vim/src/gtkhtml_editor_skels.c Sat Jul 26 13:16:47 2003
-@@ -0,0 +1,658 @@
-+/*
-+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
-+ */
-+
-+#include <string.h>
-+#define ORBIT2_STUBS_API
-+#include "gtkhtml.h"
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Listener_event
-+ (POA_GNOME_GtkHTML_Editor_Listener * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ CORBA_any * (*_impl_event) (PortableServer_Servant _servant,
-+ const CORBA_char * name,
-+ const CORBA_any * arg,
-+ CORBA_Environment * ev))
-+{
-+ *(CORBA_any * *)_o_retval =
-+ _impl_event(_o_servant, *(const CORBA_char * *) _o_args[0],
-+ (const CORBA_any *) _o_args[1], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine__get_listener
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ GNOME_GtkHTML_Editor_Listener(*_impl__get_listener)
-+ (PortableServer_Servant _servant, CORBA_Environment * ev))
-+{
-+ *(GNOME_GtkHTML_Editor_Listener *) _o_retval =
-+ _impl__get_listener(_o_servant, _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine__set_listener
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl__set_listener) (PortableServer_Servant _servant,
-+ const GNOME_GtkHTML_Editor_Listener value,
-+ CORBA_Environment * ev))
-+{
-+ _impl__set_listener(_o_servant,
-+ *(const GNOME_GtkHTML_Editor_Listener *) _o_args[0],
-+ _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_runCommand
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ CORBA_boolean(*_impl_runCommand) (PortableServer_Servant _servant,
-+ const CORBA_char * command,
-+ CORBA_Environment * ev))
-+{
-+ *(CORBA_boolean *) _o_retval =
-+ _impl_runCommand(_o_servant, *(const CORBA_char * *) _o_args[0], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_getParagraphData
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ CORBA_string(*_impl_getParagraphData) (PortableServer_Servant _servant,
-+ const CORBA_char * key,
-+ CORBA_Environment * ev))
-+{
-+ *(CORBA_string *) _o_retval =
-+ _impl_getParagraphData(_o_servant, *(const CORBA_char * *) _o_args[0],
-+ _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_setParagraphData
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_setParagraphData) (PortableServer_Servant _servant,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev))
-+{
-+ _impl_setParagraphData(_o_servant, *(const CORBA_char * *) _o_args[0],
-+ *(const CORBA_char * *) _o_args[1], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_setObjectDataByType
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_setObjectDataByType) (PortableServer_Servant _servant,
-+ const CORBA_char * type_name,
-+ const CORBA_char * key,
-+ const CORBA_char * data,
-+ CORBA_Environment * ev))
-+{
-+ _impl_setObjectDataByType(_o_servant, *(const CORBA_char * *) _o_args[0],
-+ *(const CORBA_char * *) _o_args[1],
-+ *(const CORBA_char * *) _o_args[2], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_searchByData
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ CORBA_boolean(*_impl_searchByData) (PortableServer_Servant _servant,
-+ const CORBA_long level,
-+ const CORBA_char * klass,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev))
-+{
-+ *(CORBA_boolean *) _o_retval =
-+ _impl_searchByData(_o_servant, *(const CORBA_long *) _o_args[0],
-+ *(const CORBA_char * *) _o_args[1],
-+ *(const CORBA_char * *) _o_args[2],
-+ *(const CORBA_char * *) _o_args[3], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_isParagraphEmpty
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ CORBA_boolean(*_impl_isParagraphEmpty) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev))
-+{
-+ *(CORBA_boolean *) _o_retval = _impl_isParagraphEmpty(_o_servant, _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_isPreviousParagraphEmpty
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ CORBA_boolean(*_impl_isPreviousParagraphEmpty) (PortableServer_Servant
-+ _servant,
-+ CORBA_Environment * ev))
-+{
-+ *(CORBA_boolean *) _o_retval =
-+ _impl_isPreviousParagraphEmpty(_o_servant, _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_insertHTML
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_insertHTML) (PortableServer_Servant _servant,
-+ const CORBA_char * html,
-+ CORBA_Environment * ev))
-+{
-+ _impl_insertHTML(_o_servant, *(const CORBA_char * *) _o_args[0], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_freeze
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_freeze) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev))
-+{
-+ _impl_freeze(_o_servant, _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_thaw
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_thaw) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev))
-+{
-+ _impl_thaw(_o_servant, _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_undoBegin
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_undoBegin) (PortableServer_Servant _servant,
-+ const CORBA_char * undo_name,
-+ const CORBA_char * redo_name,
-+ CORBA_Environment * ev))
-+{
-+ _impl_undoBegin(_o_servant, *(const CORBA_char * *) _o_args[0],
-+ *(const CORBA_char * *) _o_args[1], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_undoEnd
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_undoEnd) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev))
-+{
-+ _impl_undoEnd(_o_servant, _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_ignoreWord
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_ignoreWord) (PortableServer_Servant _servant,
-+ const CORBA_char * word,
-+ CORBA_Environment * ev))
-+{
-+ _impl_ignoreWord(_o_servant, *(const CORBA_char * *) _o_args[0], _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_dropUndo
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ void (*_impl_dropUndo) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev))
-+{
-+ _impl_dropUndo(_o_servant, _o_ev);
-+}
-+
-+void
-+_ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_hasUndo
-+ (POA_GNOME_GtkHTML_Editor_Engine * _o_servant, gpointer _o_retval,
-+ gpointer * _o_args, CORBA_Context _o_ctx, CORBA_Environment * _o_ev,
-+ CORBA_boolean(*_impl_hasUndo) (PortableServer_Servant _servant,
-+ CORBA_Environment * ev))
-+{
-+ *(CORBA_boolean *) _o_retval = _impl_hasUndo(_o_servant, _o_ev);
-+}
-+static ORBitSmallSkeleton
-+get_skel_small_GNOME_GtkHTML_Editor_Listener(POA_GNOME_GtkHTML_Editor_Listener
-+ * servant, const char *opname,
-+ gpointer * m_data,
-+ gpointer * impl)
-+{
-+ switch (opname[0]) {
-+ case 'e':
-+ if (strcmp((opname + 1), "vent"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Listener_epv->event;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Listener__iinterface.methods.
-+ _buffer[0];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Listener_event;
-+ break;
-+ case 'q':
-+ if (strcmp((opname + 1), "ueryInterface"))
-+ break;
-+ *impl = (gpointer) servant->vepv->Bonobo_Unknown_epv->queryInterface;
-+ *m_data = (gpointer) & Bonobo_Unknown__iinterface.methods._buffer[2];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_Bonobo_Unknown_queryInterface;
-+ break;
-+ case 'r':
-+ if (strcmp((opname + 1), "ef"))
-+ break;
-+ *impl = (gpointer) servant->vepv->Bonobo_Unknown_epv->ref;
-+ *m_data = (gpointer) & Bonobo_Unknown__iinterface.methods._buffer[0];
-+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Bonobo_Unknown_ref;
-+ break;
-+ case 'u':
-+ if (strcmp((opname + 1), "nref"))
-+ break;
-+ *impl = (gpointer) servant->vepv->Bonobo_Unknown_epv->unref;
-+ *m_data = (gpointer) & Bonobo_Unknown__iinterface.methods._buffer[1];
-+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Bonobo_Unknown_unref;
-+ break;
-+ default:
-+ break;
-+ }
-+ return NULL;
-+}
-+
-+void
-+POA_GNOME_GtkHTML_Editor_Listener__init(PortableServer_Servant servant,
-+ CORBA_Environment * env)
-+{
-+ static PortableServer_ClassInfo class_info =
-+ { NULL,
-+(ORBit_small_impl_finder) & get_skel_small_GNOME_GtkHTML_Editor_Listener,
-+ "IDL:GNOME/GtkHTML/Editor/Listener:1.0",
-+ &GNOME_GtkHTML_Editor_Listener__classid, NULL,
-+ &GNOME_GtkHTML_Editor_Listener__iinterface };
-+ POA_GNOME_GtkHTML_Editor_Listener__vepv *fakevepv = NULL;
-+
-+ if (((PortableServer_ServantBase *) servant)->vepv[0]->finalize == 0) {
-+ ((PortableServer_ServantBase *) servant)->vepv[0]->finalize =
-+ POA_GNOME_GtkHTML_Editor_Listener__fini;
-+ }
-+ PortableServer_ServantBase__init(((PortableServer_ServantBase *) servant),
-+ env);
-+ POA_Bonobo_Unknown__init(servant, env);
-+ ORBit_classinfo_register(&class_info);
-+ ORBIT_SERVANT_SET_CLASSINFO(servant, &class_info);
-+
-+ if (!class_info.vepvmap) {
-+ class_info.vepvmap =
-+ g_new0(ORBit_VepvIdx, GNOME_GtkHTML_Editor_Listener__classid + 1);
-+ class_info.vepvmap[Bonobo_Unknown__classid] =
-+ (((char *) &(fakevepv->Bonobo_Unknown_epv)) -
-+ ((char *) (fakevepv))) / sizeof(GFunc);
-+ class_info.vepvmap[GNOME_GtkHTML_Editor_Listener__classid] =
-+ (((char *) &(fakevepv->GNOME_GtkHTML_Editor_Listener_epv)) -
-+ ((char *) (fakevepv))) / sizeof(GFunc);
-+ }
-+}
-+
-+void
-+POA_GNOME_GtkHTML_Editor_Listener__fini(PortableServer_Servant servant,
-+ CORBA_Environment * env)
-+{
-+ POA_Bonobo_Unknown__fini(servant, env);
-+ PortableServer_ServantBase__fini(servant, env);
-+}
-+
-+static ORBitSmallSkeleton
-+get_skel_small_GNOME_GtkHTML_Editor_Engine(POA_GNOME_GtkHTML_Editor_Engine *
-+ servant, const char *opname,
-+ gpointer * m_data, gpointer * impl)
-+{
-+ switch (opname[0]) {
-+ case '_':
-+ switch (opname[1]) {
-+ case 'g':
-+ if (strcmp((opname + 2), "et_listener"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ _get_listener;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[0];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine__get_listener;
-+ break;
-+ case 's':
-+ if (strcmp((opname + 2), "et_listener"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ _set_listener;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[1];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine__set_listener;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case 'd':
-+ if (strcmp((opname + 1), "ropUndo"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->dropUndo;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[15];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_dropUndo;
-+ break;
-+ case 'f':
-+ if (strcmp((opname + 1), "reeze"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->freeze;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[10];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_freeze;
-+ break;
-+ case 'g':
-+ if (strcmp((opname + 1), "etParagraphData"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ getParagraphData;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[3];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_getParagraphData;
-+ break;
-+ case 'h':
-+ if (strcmp((opname + 1), "asUndo"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->hasUndo;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[16];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_hasUndo;
-+ break;
-+ case 'i':
-+ switch (opname[1]) {
-+ case 'g':
-+ if (strcmp((opname + 2), "noreWord"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ ignoreWord;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[14];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_ignoreWord;
-+ break;
-+ case 'n':
-+ if (strcmp((opname + 2), "sertHTML"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ insertHTML;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[9];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_insertHTML;
-+ break;
-+ case 's':
-+ switch (opname[2]) {
-+ case 'P':
-+ switch (opname[3]) {
-+ case 'a':
-+ if (strcmp((opname + 4), "ragraphEmpty"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ isParagraphEmpty;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods._buffer[7];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_isParagraphEmpty;
-+ break;
-+ case 'r':
-+ if (strcmp((opname + 4), "eviousParagraphEmpty"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ isPreviousParagraphEmpty;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods._buffer[8];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_isPreviousParagraphEmpty;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case 'q':
-+ if (strcmp((opname + 1), "ueryInterface"))
-+ break;
-+ *impl = (gpointer) servant->vepv->Bonobo_Unknown_epv->queryInterface;
-+ *m_data = (gpointer) & Bonobo_Unknown__iinterface.methods._buffer[2];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_Bonobo_Unknown_queryInterface;
-+ break;
-+ case 'r':
-+ switch (opname[1]) {
-+ case 'e':
-+ if (strcmp((opname + 2), "f"))
-+ break;
-+ *impl = (gpointer) servant->vepv->Bonobo_Unknown_epv->ref;
-+ *m_data = (gpointer) & Bonobo_Unknown__iinterface.methods._buffer[0];
-+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Bonobo_Unknown_ref;
-+ break;
-+ case 'u':
-+ if (strcmp((opname + 2), "nCommand"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ runCommand;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[2];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_runCommand;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case 's':
-+ switch (opname[1]) {
-+ case 'e':
-+ switch (opname[2]) {
-+ case 'a':
-+ if (strcmp((opname + 3), "rchByData"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ searchByData;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[6];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_searchByData;
-+ break;
-+ case 't':
-+ switch (opname[3]) {
-+ case 'O':
-+ if (strcmp((opname + 4), "bjectDataByType"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ setObjectDataByType;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods._buffer[5];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_setObjectDataByType;
-+ break;
-+ case 'P':
-+ if (strcmp((opname + 4), "aragraphData"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->
-+ setParagraphData;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods._buffer[4];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_setParagraphData;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case 't':
-+ if (strcmp((opname + 1), "haw"))
-+ break;
-+ *impl = (gpointer) servant->vepv->GNOME_GtkHTML_Editor_Engine_epv->thaw;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.methods.
-+ _buffer[11];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_thaw;
-+ break;
-+ case 'u':
-+ switch (opname[1]) {
-+ case 'n':
-+ switch (opname[2]) {
-+ case 'd':
-+ switch (opname[3]) {
-+ case 'o':
-+ switch (opname[4]) {
-+ case 'B':
-+ if (strcmp((opname + 5), "egin"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->
-+ GNOME_GtkHTML_Editor_Engine_epv->undoBegin;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods._buffer[12];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_undoBegin;
-+ break;
-+ case 'E':
-+ if (strcmp((opname + 5), "nd"))
-+ break;
-+ *impl =
-+ (gpointer) servant->vepv->
-+ GNOME_GtkHTML_Editor_Engine_epv->undoEnd;
-+ *m_data =
-+ (gpointer) & GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods._buffer[13];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_GNOME_GtkHTML_Editor_Engine_undoEnd;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case 'r':
-+ if (strcmp((opname + 3), "ef"))
-+ break;
-+ *impl = (gpointer) servant->vepv->Bonobo_Unknown_epv->unref;
-+ *m_data =
-+ (gpointer) & Bonobo_Unknown__iinterface.methods._buffer[1];
-+ return (ORBitSmallSkeleton)
-+ _ORBIT_skel_small_Bonobo_Unknown_unref;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ return NULL;
-+}
-+
-+void
-+POA_GNOME_GtkHTML_Editor_Engine__init(PortableServer_Servant servant,
-+ CORBA_Environment * env)
-+{
-+ static PortableServer_ClassInfo class_info =
-+ { NULL,
-+(ORBit_small_impl_finder) & get_skel_small_GNOME_GtkHTML_Editor_Engine, "IDL:GNOME/GtkHTML/Editor/Engine:1.0",
-+ &GNOME_GtkHTML_Editor_Engine__classid, NULL,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface };
-+ POA_GNOME_GtkHTML_Editor_Engine__vepv *fakevepv = NULL;
-+
-+ if (((PortableServer_ServantBase *) servant)->vepv[0]->finalize == 0) {
-+ ((PortableServer_ServantBase *) servant)->vepv[0]->finalize =
-+ POA_GNOME_GtkHTML_Editor_Engine__fini;
-+ }
-+ PortableServer_ServantBase__init(((PortableServer_ServantBase *) servant),
-+ env);
-+ POA_Bonobo_Unknown__init(servant, env);
-+ ORBit_classinfo_register(&class_info);
-+ ORBIT_SERVANT_SET_CLASSINFO(servant, &class_info);
-+
-+ if (!class_info.vepvmap) {
-+ class_info.vepvmap =
-+ g_new0(ORBit_VepvIdx, GNOME_GtkHTML_Editor_Engine__classid + 1);
-+ class_info.vepvmap[Bonobo_Unknown__classid] =
-+ (((char *) &(fakevepv->Bonobo_Unknown_epv)) -
-+ ((char *) (fakevepv))) / sizeof(GFunc);
-+ class_info.vepvmap[GNOME_GtkHTML_Editor_Engine__classid] =
-+ (((char *) &(fakevepv->GNOME_GtkHTML_Editor_Engine_epv)) -
-+ ((char *) (fakevepv))) / sizeof(GFunc);
-+ }
-+}
-+
-+void
-+POA_GNOME_GtkHTML_Editor_Engine__fini(PortableServer_Servant servant,
-+ CORBA_Environment * env)
-+{
-+ POA_Bonobo_Unknown__fini(servant, env);
-+ PortableServer_ServantBase__fini(servant, env);
-+}
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gtkhtml_editor_stubs.c vim/src/gtkhtml_editor_stubs.c
---- vimcopy/src/gtkhtml_editor_stubs.c Wed Dec 31 18:00:00 1969
-+++ vim/src/gtkhtml_editor_stubs.c Sat Jul 26 13:16:47 2003
-@@ -0,0 +1,496 @@
-+/*
-+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
-+ */
-+
-+#include <string.h>
-+#define ORBIT2_STUBS_API
-+#include "gtkhtml.h"
-+
-+CORBA_any *
-+GNOME_GtkHTML_Editor_Listener_event(GNOME_GtkHTML_Editor_Listener _obj,
-+ const CORBA_char * name,
-+ const CORBA_any * arg,
-+ CORBA_Environment * ev)
-+{
-+ CORBA_any *_ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Listener__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Listener__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Listener__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Listener__classid))->
-+ event) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval =
-+ _ORBIT_epv->event(ORBIT_STUB_GetServant(_obj), name, arg, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[2];
-+
-+ _args[0] = (gpointer) & name;
-+ _args[1] = (gpointer) arg;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Listener__iinterface.
-+ methods, 0, &_ORBIT_retval, _args, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-+
-+GNOME_GtkHTML_Editor_Listener
-+GNOME_GtkHTML_Editor_Engine__get_listener(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev)
-+{
-+ GNOME_GtkHTML_Editor_Listener _ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ _get_listener) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval =
-+ _ORBIT_epv->_get_listener(ORBIT_STUB_GetServant(_obj), ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 0, &_ORBIT_retval, NULL, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-+
-+void
-+GNOME_GtkHTML_Editor_Engine__set_listener(GNOME_GtkHTML_Editor_Engine _obj,
-+ const GNOME_GtkHTML_Editor_Listener
-+ value, CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ _set_listener) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->_set_listener(ORBIT_STUB_GetServant(_obj), value, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[1];
-+
-+ _args[0] = (gpointer) & value;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 1, NULL, _args, NULL, ev);
-+
-+ }
-+}
-+CORBA_boolean
-+GNOME_GtkHTML_Editor_Engine_runCommand(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_char * command,
-+ CORBA_Environment * ev)
-+{
-+ CORBA_boolean _ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ runCommand) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval =
-+ _ORBIT_epv->runCommand(ORBIT_STUB_GetServant(_obj), command, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[1];
-+
-+ _args[0] = (gpointer) & command;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 2, &_ORBIT_retval, _args, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-+
-+CORBA_string
-+GNOME_GtkHTML_Editor_Engine_getParagraphData(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_char * key,
-+ CORBA_Environment * ev)
-+{
-+ CORBA_string _ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ getParagraphData) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval =
-+ _ORBIT_epv->getParagraphData(ORBIT_STUB_GetServant(_obj), key, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[1];
-+
-+ _args[0] = (gpointer) & key;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 3, &_ORBIT_retval, _args, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-+
-+void
-+GNOME_GtkHTML_Editor_Engine_setParagraphData(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ setParagraphData) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->setParagraphData(ORBIT_STUB_GetServant(_obj), key, value,
-+ ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[2];
-+
-+ _args[0] = (gpointer) & key;
-+ _args[1] = (gpointer) & value;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 4, NULL, _args, NULL, ev);
-+
-+ }
-+}
-+void
-+GNOME_GtkHTML_Editor_Engine_setObjectDataByType(GNOME_GtkHTML_Editor_Engine
-+ _obj,
-+ const CORBA_char * type_name,
-+ const CORBA_char * key,
-+ const CORBA_char * data,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ setObjectDataByType) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->setObjectDataByType(ORBIT_STUB_GetServant(_obj), type_name,
-+ key, data, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[3];
-+
-+ _args[0] = (gpointer) & type_name;
-+ _args[1] = (gpointer) & key;
-+ _args[2] = (gpointer) & data;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 5, NULL, _args, NULL, ev);
-+
-+ }
-+}
-+CORBA_boolean
-+GNOME_GtkHTML_Editor_Engine_searchByData(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_long level,
-+ const CORBA_char * klass,
-+ const CORBA_char * key,
-+ const CORBA_char * value,
-+ CORBA_Environment * ev)
-+{
-+ CORBA_boolean _ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ searchByData) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval =
-+ _ORBIT_epv->searchByData(ORBIT_STUB_GetServant(_obj), level, klass,
-+ key, value, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[4];
-+
-+ _args[0] = (gpointer) & level;
-+ _args[1] = (gpointer) & klass;
-+ _args[2] = (gpointer) & key;
-+ _args[3] = (gpointer) & value;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 6, &_ORBIT_retval, _args, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-+
-+CORBA_boolean
-+GNOME_GtkHTML_Editor_Engine_isParagraphEmpty(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev)
-+{
-+ CORBA_boolean _ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ isParagraphEmpty) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval =
-+ _ORBIT_epv->isParagraphEmpty(ORBIT_STUB_GetServant(_obj), ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 7, &_ORBIT_retval, NULL, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-+
-+CORBA_boolean
-+GNOME_GtkHTML_Editor_Engine_isPreviousParagraphEmpty
-+ (GNOME_GtkHTML_Editor_Engine _obj, CORBA_Environment * ev)
-+{
-+ CORBA_boolean _ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ isPreviousParagraphEmpty) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval =
-+ _ORBIT_epv->isPreviousParagraphEmpty(ORBIT_STUB_GetServant(_obj),
-+ ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 8, &_ORBIT_retval, NULL, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-+
-+void
-+GNOME_GtkHTML_Editor_Engine_insertHTML(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_char * html,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ insertHTML) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->insertHTML(ORBIT_STUB_GetServant(_obj), html, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[1];
-+
-+ _args[0] = (gpointer) & html;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 9, NULL, _args, NULL, ev);
-+
-+ }
-+}
-+void
-+GNOME_GtkHTML_Editor_Engine_freeze(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ freeze) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->freeze(ORBIT_STUB_GetServant(_obj), ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 10, NULL, NULL, NULL, ev);
-+
-+ }
-+}
-+void
-+GNOME_GtkHTML_Editor_Engine_thaw(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ thaw) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->thaw(ORBIT_STUB_GetServant(_obj), ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 11, NULL, NULL, NULL, ev);
-+
-+ }
-+}
-+void
-+GNOME_GtkHTML_Editor_Engine_undoBegin(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_char * undo_name,
-+ const CORBA_char * redo_name,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ undoBegin) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->undoBegin(ORBIT_STUB_GetServant(_obj), undo_name, redo_name,
-+ ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[2];
-+
-+ _args[0] = (gpointer) & undo_name;
-+ _args[1] = (gpointer) & redo_name;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 12, NULL, _args, NULL, ev);
-+
-+ }
-+}
-+void
-+GNOME_GtkHTML_Editor_Engine_undoEnd(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ undoEnd) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->undoEnd(ORBIT_STUB_GetServant(_obj), ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 13, NULL, NULL, NULL, ev);
-+
-+ }
-+}
-+void
-+GNOME_GtkHTML_Editor_Engine_ignoreWord(GNOME_GtkHTML_Editor_Engine _obj,
-+ const CORBA_char * word,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ ignoreWord) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->ignoreWord(ORBIT_STUB_GetServant(_obj), word, ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ gpointer _args[1];
-+
-+ _args[0] = (gpointer) & word;
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 14, NULL, _args, NULL, ev);
-+
-+ }
-+}
-+void
-+GNOME_GtkHTML_Editor_Engine_dropUndo(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev)
-+{
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ dropUndo) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_epv->dropUndo(ORBIT_STUB_GetServant(_obj), ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 15, NULL, NULL, NULL, ev);
-+
-+ }
-+}
-+CORBA_boolean
-+GNOME_GtkHTML_Editor_Engine_hasUndo(GNOME_GtkHTML_Editor_Engine _obj,
-+ CORBA_Environment * ev)
-+{
-+ CORBA_boolean _ORBIT_retval;
-+ POA_GNOME_GtkHTML_Editor_Engine__epv *_ORBIT_epv;
-+
-+ if (ORBit_small_flags & ORBIT_SMALL_FAST_LOCALS &&
-+ ORBIT_STUB_IsBypass(_obj, GNOME_GtkHTML_Editor_Engine__classid) &&
-+ (_ORBIT_epv =
-+ (POA_GNOME_GtkHTML_Editor_Engine__epv *) ORBIT_STUB_GetEpv(_obj,
-+ GNOME_GtkHTML_Editor_Engine__classid))->
-+ hasUndo) {
-+ ORBIT_STUB_PreCall(_obj);
-+ _ORBIT_retval = _ORBIT_epv->hasUndo(ORBIT_STUB_GetServant(_obj), ev);
-+ ORBIT_STUB_PostCall(_obj);
-+ } else { /* remote marshal */
-+ ORBit_small_invoke_stub_n(_obj,
-+ &GNOME_GtkHTML_Editor_Engine__iinterface.
-+ methods, 16, &_ORBIT_retval, NULL, NULL, ev);
-+
-+ }
-+ return _ORBIT_retval;
-+}
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gui.c vim/src/gui.c
---- vimcopy/src/gui.c Mon May 19 09:43:43 2003
-+++ vim/src/gui.c Sat Jul 26 13:16:47 2003
-@@ -439,8 +439,12 @@
- * Create the GUI shell.
- */
- gui.in_use = TRUE; /* Must be set after menus have been set up */
-+#ifdef FEAT_GUI_COMPONENT
-+ vim_bonobo_wait_for_instantiation();
-+#else
- if (gui_mch_init() == FAIL)
- goto error;
-+#endif
-
- /* Avoid a delay for an error message that was printed in the terminal
- * where Vim was started. */
-@@ -4055,8 +4059,8 @@
-
- #ifdef FEAT_GUI_GTK
- /* Need to wake up the main loop */
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- #endif
- }
- }
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gui.h vim/src/gui.h
---- vimcopy/src/gui.h Tue May 6 12:02:22 2003
-+++ vim/src/gui.h Sat Jul 26 13:16:47 2003
-@@ -35,6 +35,21 @@
- # include <gtk/gtk.h>
- #endif
-
-+# if defined(FEAT_GUI_GNOME) && defined(FEAT_GUI_COMPONENT)
-+ #include "libbonoboui.h"
-+ #include "vim_bonobo_main.h"
-+ #include "vim_bonobo_factory.h"
-+ #define MAIN vim_bonobo_main
-+ #define MAIN_LEVEL vim_bonobo_main_level
-+ #define MAIN_QUIT vim_bonobo_main_quit
-+ #define MAIN_ITERATION_DO vim_bonobo_main_iteration_do
-+# else
-+ #define MAIN gtk_main
-+ #define MAIN_LEVEL gtk_main_level
-+ #define MAIN_QUIT gtk_main_quit
-+ #define MAIN_ITERATION_DO gtk_main_iteration_do
-+#endif
-+
- #ifdef FEAT_GUI_BEOS
- # include "gui_beos.h"
- #endif
-@@ -392,6 +407,11 @@
- GtkWidget *toolbar; /* toolbar */
- # endif
- # ifdef FEAT_GUI_GNOME
-+# ifdef FEAT_GUI_COMPONENT
-+ GtkWidget *vbox;
-+ BonoboPlug *plug;
-+ BonoboControl *control;
-+# endif
- GtkWidget *menubar_h; /* menubar handle */
- GtkWidget *toolbar_h; /* toolbar handle */
- # endif
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gui_gtk.c vim/src/gui_gtk.c
---- vimcopy/src/gui_gtk.c Tue Jun 3 13:26:44 2003
-+++ vim/src/gui_gtk.c Sat Jul 26 14:19:38 2003
-@@ -39,7 +39,7 @@
-
- #include "vim.h"
-
--#ifdef FEAT_GUI_GNOME
-+#if 0
- /* Gnome redefines _() and N_(). Grrr... */
- # ifdef _
- # undef _
-@@ -545,9 +545,302 @@
-
- # endif /* !HAVE_GTK2 */
-
-+#ifdef FEAT_GUI_COMPONENT
-+
-+
-+static void
-+verb_activate( BonoboUIComponent *uic, gpointer data, const char *cname )
-+{
-+ gui_menu_cb((vimmenu_T *) data);
-+
-+ /* make sure the menu action is taken immediately */
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
-+}
-+
-+static void g_string_append_normalized_name( GString * dest, char_u * name )
-+{
-+ gchar * cur;
-+
-+ if( name == NULL )
-+ {
-+ return;
-+ }
-+ cur = name;
-+ while( *cur != '\0' ) {
-+ gunichar wc;
-+ wc = g_utf8_get_char(cur);
-+ if( g_unichar_isalnum( wc ) ) {
-+ g_string_append_unichar( dest, wc );
-+ }
-+ cur = g_utf8_next_char(cur);
-+ }
-+}
-+
-+static
-+char * menu_xml_path( vimmenu_T * menu, int only_parent )
-+{
-+ GString * normname;
-+ GString * path;
-+ char * retpath;
-+
-+ normname = g_string_sized_new( 64 );
-+ path = g_string_sized_new( 128 );
-+ while( 1 ) {
-+ if( menu_is_toolbar(menu->name) ) {
-+ /* "Toolbar" is a standard Bonobo UI element, but Vim uses "ToolBar", so we
-+ * have to check for this. */
-+ g_string_prepend( path, "/Toolbar");
-+ } else {
-+ g_string_assign( normname, "" );
-+ g_string_append_normalized_name( normname, menu->dname );
-+ g_string_prepend( path, normname->str );
-+ g_string_prepend( path, "/" );
-+ }
-+ if( menu->parent == NULL ) {
-+ if( menu && menu_is_menubar( menu->name ) ) {
-+ g_string_prepend( path, "/menu" );
-+ }
-+ break;
-+ }
-+ menu = menu->parent;
-+ }
-+ g_string_free( normname, TRUE );
-+ retpath = path->str;
-+ g_string_free( path, FALSE );
-+
-+ if( only_parent ) {
-+ gchar * slash;
-+ slash = g_strrstr(retpath, "/");
-+ if( slash == retpath )
-+ slash[1] = '\0';
-+ else if( slash )
-+ *slash = '\0';
-+ }
-+ return( retpath );
-+}
-+
-+static char *
-+gtk_image_to_xml_attrs( GtkImage * image)
-+{
-+ GString * xml = g_string_sized_new(32);
-+ GtkImageType type = gtk_image_get_storage_type(image);
-+ char * attrs;
-+ char * imagexml;
-+
-+ if( type == GTK_IMAGE_STOCK ) {
-+ GtkIconSize size;
-+ GtkIconSet * iconset;
-+ gchar * stockname;
-+ GdkPixbuf * pixbuf;
-+
-+ gtk_image_get_stock(image, &stockname, &size);
-+ pixbuf = gtk_widget_render_icon(gui.drawarea, stockname, size, NULL);
-+ imagexml = bonobo_ui_util_pixbuf_to_xml(pixbuf);
-+ g_string_append_printf(xml, " pixtype=\"pixbuf\" pixname=\"%s\"", imagexml);
-+ g_object_unref(pixbuf);
-+ g_free(imagexml);
-+ } else if( type == GTK_IMAGE_PIXBUF ) {
-+ imagexml = bonobo_ui_util_pixbuf_to_xml(gtk_image_get_pixbuf(image));
-+ g_string_append_printf(xml, " pixtype=\"pixbuf\" pixname=\"%s\"", imagexml);
-+ g_free(imagexml);
-+ }
-+ attrs = xml->str;
-+ g_string_free(xml, FALSE);
-+ return( attrs );
-+}
-+
-+static
-+void generate_gui_xml_recurse( vimmenu_T * menu, GString * xml, GSList ** commands, int do_siblings)
-+{
-+ GString * normname = g_string_sized_new(16);
-+ GString * verbname = g_string_sized_new(32);
-+ char_u * label;
-+ int use_mnemonic;
-+ BonoboUIComponent *uic;
-+ gchar * command;
-+
-+ uic = bonobo_control_get_ui_component (BONOBO_CONTROL (gui.control));
-+
-+ while( menu )
-+ {
-+ use_mnemonic = (p_wak[0] != 'n' );
-+ label = translate_mnemonic_tag( menu->name, use_mnemonic );
-+ g_string_assign( normname, "" );
-+ g_string_append_normalized_name( normname, menu->dname );
-+ if( menu->children ) {
-+ if( menu_is_toolbar( menu->name )) {
-+ g_string_append( xml, "<dockitem name=\"Toolbar\" look=\"icon\" tips=\"1\">");
-+ generate_gui_xml_recurse( menu->children, xml, commands, TRUE );
-+ g_string_append( xml, "</dockitem>");
-+ } else {
-+ g_string_append_printf( xml, "<submenu name=\"%s\" label=\"%s\">\n", normname->str, label);
-+
-+ generate_gui_xml_recurse( menu->children, xml, commands, TRUE );
-+ g_string_append( xml, "</submenu>\n");
-+ }
-+ } else if( menu_is_separator(menu->name)) {
-+ g_string_append( xml, "<separator />\n" );
-+ } else if( menu->parent && menu_is_toolbar(menu->parent->name)) {
-+ char * menupath = menu_xml_path(menu, FALSE);
-+ GtkImage *image = NULL;
-+ char * imagexml;
-+ char_u *tooltip;
-+
-+ g_string_assign(verbname, "");
-+ g_string_append_normalized_name(verbname, menupath);
-+ vim_free(menupath);
-+ image = GTK_IMAGE(create_menu_icon(menu, GTK_ICON_SIZE_SMALL_TOOLBAR));
-+ imagexml = gtk_image_to_xml_attrs(image);
-+ tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]);
-+ g_string_append_printf( xml, "<toolitem name=\"%s\" label=\"%s\" verb=\"%s\" tip=\"%s\" %s />\n", normname->str, label, verbname->str, tooltip, imagexml);
-+ gtk_object_sink(GTK_OBJECT(image));
-+ g_free(imagexml);
-+ CONVERT_TO_UTF8_FREE(tooltip);
-+
-+ command = g_strdup_printf( "<cmd name=\"%s\" sensitive=\"%c\" />\n", verbname->str, menu->sensitive ? '1' : '0');
-+ *commands = g_slist_prepend( *commands, command );
-+ bonobo_ui_component_add_verb(uic, verbname->str, verb_activate, menu);
-+ } else if( menu_is_menubar(menu->name)) {
-+ char * menupath = menu_xml_path(menu, FALSE);
-+
-+ g_string_assign(verbname, "");
-+ g_string_append_normalized_name(verbname, menupath);
-+ vim_free(menupath);
-+
-+ g_string_append_printf( xml, "<menuitem name=\"%s\" label=\"%s\" verb=\"%s\" />\n", normname->str, label, verbname->str);
-+
-+ command = g_strdup_printf( "<cmd name=\"%s\" sensitive=\"%c\" />\n", verbname->str, menu->sensitive ? '1' : '0');
-+ *commands = g_slist_prepend( *commands, command );
-+ bonobo_ui_component_add_verb(uic, verbname->str, verb_activate, menu);
-+ }
-+ if( label ) {
-+ vim_free( label );
-+ }
-+ if( do_siblings ) {
-+ menu = menu->next;
-+ } else {
-+ menu = NULL;
-+ }
-+ }
-+ g_string_free( normname, TRUE );
-+}
-+
-+static
-+void set_gui_xml(vimmenu_T * menu)
-+{
-+ GSList * commands = NULL;
-+ GSList * command;
-+ BonoboUIComponent *uic;
-+ GString * xml = g_string_sized_new(1024);
-+ int path_exists;
-+ uic = bonobo_control_get_ui_component (BONOBO_CONTROL (gui.control));
-+
-+ if( bonobo_ui_component_get_container(uic) == CORBA_OBJECT_NIL ) {
-+ return;
-+ }
-+
-+ while( menu ) {
-+ if( menu->dirty ) {
-+ if (menu_is_popup(menu->name)) {
-+ /* do nothing */
-+ } else if( menu_is_menubar(menu->name)) {
-+ char * menupath = menu_xml_path(menu, TRUE);
-+ path_exists = bonobo_ui_component_path_exists(uic, menupath, NULL);
-+ g_string_assign(xml, "");
-+ generate_gui_xml_recurse (menu, xml, &commands, FALSE);
-+ /*fprintf(stdout, "set %s\n", menupath);*/
-+ /*fprintf(stdout, "set %s\n%s", menupath, xml->str);*/
-+ /*fflush(stdout);*/
-+ bonobo_ui_component_set(uic, menupath, xml->str, NULL);
-+ g_free(menupath);
-+ } else if( menu_is_toolbar(menu->name)) {
-+ char * menupath = menu_xml_path(menu, TRUE);
-+ path_exists = bonobo_ui_component_path_exists(uic, menupath, NULL);
-+ g_string_assign(xml, "");
-+ generate_gui_xml_recurse (menu, xml, &commands, FALSE);
-+ /*fprintf(stdout, "set %s\n", menupath);*/
-+ /*fprintf(stdout, "set %s\n%s", menupath, xml->str);*/
-+ /*fflush(stdout);*/
-+ bonobo_ui_component_set(uic, menupath, xml->str, NULL);
-+ g_free(menupath);
-+ }
-+ menu->dirty = FALSE;
-+ }
-+ menu = menu->next;
-+ }
-+ /* the commands are inserted separately into a list, and set one by one,
-+ * otherwise it's not possible to update a subtree of the UI
-+ */
-+ command = commands;
-+ while( command ) {
-+ /*fprintf(stdout, "set %s\n%s", "/commands", command->data);
-+ fflush(stdout);*/
-+ bonobo_ui_component_set(uic, "/commands", command->data, NULL);
-+ g_free(command->data);
-+ command = command->next;
-+ }
-+ g_slist_free( commands );
-+}
-+
-+static gboolean update_gui_idle_installed = FALSE;
-+
-+static gboolean
-+update_gui_idle(gpointer data)
-+{
-+ BonoboUIComponent *uic;
-+
-+ uic = bonobo_control_get_ui_component (BONOBO_CONTROL (gui.control));
-+ if( bonobo_ui_component_get_container(uic) == CORBA_OBJECT_NIL ) {
-+ /* we aren't in a container yet; try again later... */
-+ g_timeout_add(100, &update_gui_idle, NULL);
-+ return FALSE;
-+ }
-+ bonobo_ui_component_freeze(uic, NULL);
-+ set_gui_xml( (vimmenu_T *)root_menu );
-+ update_gui_idle_installed = FALSE;
-+ bonobo_ui_component_thaw(uic, NULL);
-+ return FALSE; /* don't call me again */
-+}
-+
-+void
-+update_menu_later(vimmenu_T *menu)
-+{
-+ if (!update_gui_idle_installed)
-+ {
-+ update_gui_idle_installed = TRUE;
-+ g_idle_add_full(GDK_PRIORITY_EVENTS + 10,
-+ &update_gui_idle, NULL, NULL);
-+ }
-+ while( menu->parent )
-+ menu = menu->parent;
-+ menu->dirty = TRUE;
-+}
-+
-+void update_ui_later()
-+{
-+ vimmenu_T *menu = root_menu;
-+
-+ if (!update_gui_idle_installed)
-+ {
-+ update_gui_idle_installed = TRUE;
-+ g_idle_add_full(GDK_PRIORITY_EVENTS + 10,
-+ &update_gui_idle, NULL, NULL);
-+ }
-+ while( menu ) {
-+ menu->dirty = TRUE;
-+ menu = menu->next;
-+ }
-+}
-+#endif
-+
- void
- gui_mch_add_menu(vimmenu_T *menu, int idx)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ update_menu_later(menu);
-+ return;
-+#else
- vimmenu_T *parent;
- GtkWidget *parent_widget;
-
-@@ -593,6 +886,7 @@
- if (vim_strchr(p_go, GO_TEAROFF) != NULL)
- gtk_widget_show(menu->tearoff_handle);
- gtk_menu_prepend(GTK_MENU(menu->submenu_id), menu->tearoff_handle);
-+#endif
- }
-
- /*ARGSUSED*/
-@@ -609,8 +903,8 @@
- # endif
-
- /* make sure the menu action is taken immediately */
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
-
- # if defined(FEAT_TOOLBAR) && !defined(HAVE_GTK2)
-@@ -715,6 +1009,10 @@
- void
- gui_mch_add_menu_item(vimmenu_T *menu, int idx)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ update_menu_later(menu);
-+ return;
-+#else
- vimmenu_T *parent;
-
- parent = menu->parent;
-@@ -817,6 +1115,7 @@
- gtk_signal_connect(GTK_OBJECT(menu->id), "activate",
- GTK_SIGNAL_FUNC(menu_item_activate), menu);
- }
-+#endif
- }
- #endif /* FEAT_MENU */
-
-@@ -841,6 +1140,10 @@
- guint accel_key;
- # endif
-
-+#ifdef FEAT_GUI_COMPONENT
-+ return;
-+#endif
-+
- for (menu = root_menu; menu != NULL; menu = menu->next)
- {
- if (menu->id == NULL)
-@@ -897,6 +1200,9 @@
- void
- gui_mch_toggle_tearoffs(int enable)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ return;
-+#endif
- recurse_tearoffs(root_menu, enable);
- }
- #endif /* FEAT_MENU */
-@@ -1001,6 +1307,9 @@
- void
- gui_mch_destroy_menu(vimmenu_T *menu)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ return;
-+#endif
- # ifdef FEAT_TOOLBAR
- if (menu->parent != NULL && menu_is_toolbar(menu->parent->name))
- {
-@@ -1115,8 +1424,8 @@
-
- gui_drag_scrollbar(sb, value, dragging);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
-
- /* SBAR_VERT or SBAR_HORIZ */
-@@ -1175,8 +1484,8 @@
- vw->browse_fname = (char_u *)g_strdup(gtk_file_selection_get_filename(
- GTK_FILE_SELECTION(vw->filedlg)));
- gtk_widget_hide(vw->filedlg);
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
-
- /*ARGSUSED*/
-@@ -1191,8 +1500,8 @@
- vw->browse_fname = NULL;
- }
- gtk_widget_hide(vw->filedlg);
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
-
- /*ARGSUSED*/
-@@ -1206,8 +1515,8 @@
- }
- gui.filedlg = NULL;
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
-
- return FALSE;
- }
-@@ -1290,7 +1599,7 @@
-
- gtk_widget_show(gui.filedlg);
- while (gui.filedlg && GTK_WIDGET_DRAWABLE(gui.filedlg))
-- gtk_main_iteration_do(TRUE);
-+ MAIN_ITERATION_DO(TRUE);
-
- if (gui.browse_fname == NULL)
- return NULL;
-@@ -1510,8 +1819,8 @@
- dlg_destroy_cb(int *p)
- {
- *p = TRUE; /* set dialog_destroyed to break out of the loop */
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
-
- /* ARGSUSED */
-@@ -1811,7 +2120,7 @@
- /* loop here until the dialog goes away */
- while (dialog_status == -1 && !dialog_destroyed
- && GTK_WIDGET_DRAWABLE(dialog))
-- gtk_main_iteration_do(TRUE);
-+ MAIN_ITERATION_DO(TRUE);
-
- if (dialog_status < 0)
- dialog_status = 0;
-@@ -2795,8 +3104,8 @@
- CONVERT_FROM_UTF8_FREE(find_text);
- #endif
-
-- if (rc && gtk_main_level() > 0)
-- gtk_main_quit(); /* make sure cmd will be handled immediately */
-+ if (rc && MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure cmd will be handled immediately */
- }
-
- /* our usual callback function */
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/gui_gtk_x11.c vim/src/gui_gtk_x11.c
---- vimcopy/src/gui_gtk_x11.c Tue Jun 3 13:19:03 2003
-+++ vim/src/gui_gtk_x11.c Sat Jul 26 16:53:24 2003
-@@ -654,8 +654,8 @@
- xev.xproperty.state = PropertyNewValue;
- serverEventProc(GDK_WINDOW_XDISPLAY(widget->window), &xev);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
- return FALSE;
- }
-@@ -756,6 +756,10 @@
- if (blink_state == BLINK_NONE)
- gui_mch_start_blink();
-
-+#ifdef FEAT_GUI_COMPONENT
-+ /*gtk_plug_grab_focus(GTK_PLUG(gui.plug));*/
-+ /*gtk_window_set_focus(GTK_WINDOW(gui.plug), gui.drawarea);*/
-+#endif
- /* make sure keyboard input goes there */
- if (gtk_socket_id == 0 || !GTK_WIDGET_HAS_FOCUS(gui.drawarea))
- gtk_widget_grab_focus(gui.drawarea);
-@@ -767,6 +771,11 @@
- static gint
- leave_notify_event(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ /*gtk_plug_ungrab_focus(GTK_PLUG(gui.plug));*/
-+ /*gdk_display_keyboard_ungrab (gtk_widget_get_display (gui.drawarea),
-+ gtk_get_current_event_time ());*/
-+#endif
- if (blink_state != BLINK_NONE)
- gui_mch_stop_blink();
-
-@@ -777,8 +786,16 @@
- static gint
- focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
- {
-+ GdkEventMask mask;
- gui_focus_change(TRUE);
-
-+#ifdef FEAT_GUI_COMPONENT
-+ gtk_widget_grab_focus(gui.drawarea);
-+ mask = gdk_window_get_events(gui.drawarea->window);
-+ mask |= GDK_KEY_PRESS | GDK_KEY_RELEASE;
-+ gdk_window_set_events(gui.drawarea->window, mask);
-+#endif
-+
- if (blink_state == BLINK_NONE)
- gui_mch_start_blink();
-
-@@ -793,6 +810,9 @@
- static gint
- focus_out_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+/* gtk_plug_ungrab_focus(GTK_PLUG(gui.plug));*/
-+#endif
- gui_focus_change(FALSE);
-
- if (blink_state != BLINK_NONE)
-@@ -1134,8 +1154,8 @@
- if (p_mh)
- gui_mch_mousehide(TRUE);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
-
- return TRUE;
- }
-@@ -1170,8 +1190,8 @@
- else
- clip_lose_selection(&clip_star);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
-
- return TRUE;
- }
-@@ -1211,9 +1231,8 @@
- received_selection = RS_FAIL;
- /* clip_free_selection(cbd); ??? */
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
--
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
- return;
- }
-
-@@ -1294,8 +1313,8 @@
- g_free(tmpbuf_utf8);
- #endif
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
- }
-
- /*
-@@ -1455,6 +1474,15 @@
- using_gnome = 1;
- #endif
-
-+
-+#ifdef FEAT_GUI_COMPONENT
-+ if( !vim_bonobo_init(&gui_argc, gui_argv))
-+ {
-+ /* in component mode, we don't care about trying to continue without
-+ * a gui; if we can't create the factory, we might as well quit. */
-+ mch_exit(2);
-+ }
-+#else
- /* Don't use gtk_init() or gnome_init(), it exits on failure. */
- if (!gtk_init_check(&gui_argc, &gui_argv))
- {
-@@ -1462,10 +1490,29 @@
- EMSG(_(e_opendisp));
- return FAIL;
- }
-+#endif
-
- return OK;
- }
-
-+#if FEAT_GUI_COMPONENT
-+static gint
-+control_activate_event(BonoboControl *control, gboolean activated)
-+{
-+ if (activated)
-+ {
-+ gui_focus_change (TRUE);
-+ if (blink_state == BLINK_NONE)
-+ gui_mch_start_blink();
-+ } else {
-+ gui_focus_change (FALSE);
-+ if (blink_state != BLINK_NONE)
-+ gui_mch_stop_blink();
-+ }
-+ return TRUE;
-+}
-+#endif
-+
-
- /****************************************************************************
- * Mouse handling callbacks
-@@ -1526,8 +1573,8 @@
- /* inform the editor engine about the occurence of this event */
- gui_send_mouse_event(button, x, y, FALSE, vim_modifiers);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
-
- /*
- * Auto repeat timer handling.
-@@ -1722,8 +1769,8 @@
- vim_modifiers |= MOUSE_ALT;
-
- gui_send_mouse_event(button, x, y, repeated_click, vim_modifiers);
-- if (gtk_main_level() > 0)
-- gtk_main_quit(); /* make sure the above will be handled immediately */
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
-
- return TRUE;
- }
-@@ -1771,8 +1818,8 @@
- gui_send_mouse_event(button, (int)event->x, (int)event->y,
- FALSE, vim_modifiers);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit(); /* make sure the above will be handled immediately */
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
-
- return TRUE;
- }
-@@ -1807,8 +1854,8 @@
- vim_modifiers |= MOUSE_ALT;
-
- gui_send_mouse_event(MOUSE_RELEASE, x, y, FALSE, vim_modifiers);
-- if (gtk_main_level() > 0)
-- gtk_main_quit(); /* make sure it will be handled immediately */
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
-
- return TRUE;
- }
-@@ -2031,8 +2078,8 @@
- else
- add_to_input_buf(dropkey + 3, (int)(sizeof(dropkey) - 3));
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
- }
-
- /*
-@@ -2498,6 +2545,7 @@
- static void
- mainwin_realize(GtkWidget *widget, gpointer data)
- {
-+#ifndef FEAT_GUI_COMPONENT
- /* If you get an error message here, you still need to unpack the runtime
- * archive! */
- #ifdef magick
-@@ -2581,6 +2629,7 @@
-
- #endif /* !HAVE_GTK2 */
- }
-+#endif /* FEAT_GUI_COMPONENT */
-
- #if !(defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION))
- /* Register a handler for WM_SAVE_YOURSELF with GDK's low-level X I/F */
-@@ -2599,7 +2648,7 @@
- #endif
- setup_save_yourself();
-
--#ifdef FEAT_CLIENTSERVER
-+#if defined(FEAT_CLIENTSERVER) &&!defined(FEAT_GUI_COMPONENT)
- if (serverName == NULL && serverDelayedStartName != NULL)
- {
- /* This is a :gui command in a plain vim with no previous server */
-@@ -2647,7 +2696,7 @@
- return cursor;
- }
-
--#ifdef HAVE_GTK_MULTIHEAD
-+#if defined(GTK2_MULTIHEAD) && !defined(FEAT_GUI_COMPONENT)
- /*ARGSUSED1*/
- static void
- mainwin_screen_changed_cb(GtkWidget *widget,
-@@ -2972,7 +3021,11 @@
- #ifdef FEAT_GUI_GNOME
- if (using_gnome)
- {
-- gui.mainwin = gnome_app_new("Vim", NULL);
-+# if defined(FEAT_GUI_COMPONENT)
-+ gui.mainwin = NULL;
-+# else
-+ gui.mainwin = gnome_app_new("vim", NULL);
-+# endif
- # ifdef USE_XSMP
- /* Use the GNOME save-yourself functionality now. */
- xsmp_close();
-@@ -2983,14 +3036,27 @@
- gui.mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- }
-
-+#ifndef FEAT_GUI_COMPONENT
- gtk_widget_set_name(gui.mainwin, "vim-main-window");
-+#endif
-+ vbox = gtk_vbox_new(FALSE, 0);
-+ gui.vbox = vbox;
-
- #ifdef HAVE_GTK2
- /* Create the PangoContext used for drawing all text. */
-+#ifdef FEAT_GUI_COMPONENT
-+ gui.text_context = gtk_widget_create_pango_context(GTK_WIDGET(gui.vbox));
-+#else
- gui.text_context = gtk_widget_create_pango_context(gui.mainwin);
-+#endif
- pango_context_set_base_dir(gui.text_context, PANGO_DIRECTION_LTR);
- #endif
-
-+#ifdef FEAT_GUI_COMPONENT
-+ bonobo_control_construct (BONOBO_CONTROL (gui.control), GTK_WIDGET(gui.vbox));
-+ gtk_widget_add_events(GTK_WIDGET(gui.drawarea), GDK_VISIBILITY_NOTIFY_MASK);
-+ gtk_widget_show_all(GTK_WIDGET(gui.vbox));
-+#else
- #ifndef HAVE_GTK2
- gtk_window_set_policy(GTK_WINDOW(gui.mainwin), TRUE, TRUE, TRUE);
- #endif
-@@ -3013,8 +3079,6 @@
- gui.accel_group = gtk_accel_group_get_default();
- #endif
-
-- vbox = gtk_vbox_new(FALSE, 0);
--
- #ifdef FEAT_GUI_GNOME
- if (using_gnome)
- {
-@@ -3030,6 +3094,9 @@
- gtk_container_add(GTK_CONTAINER(gui.mainwin), vbox);
- gtk_widget_show(vbox);
- }
-+#endif
-+
-+#ifndef FEAT_GUI_COMPONENT
-
- #ifdef FEAT_MENU
- /*
-@@ -3135,6 +3202,7 @@
- gtk_box_pack_start(GTK_BOX(vbox), gui.toolbar, FALSE, FALSE, 0);
- }
- #endif /* FEAT_TOOLBAR */
-+#endif /* FEAT_GUI_COMPONENT */
-
- gui.formwin = gtk_form_new();
- gtk_container_border_width(GTK_CONTAINER(gui.formwin), 0);
-@@ -3162,6 +3230,11 @@
- gtk_widget_show(gui.formwin);
- gtk_box_pack_start(GTK_BOX(vbox), gui.formwin, TRUE, TRUE, 0);
-
-+#ifdef FEAT_GUI_COMPONENT
-+ GTK_WIDGET_SET_FLAGS (gui.drawarea, GTK_CAN_FOCUS);
-+ g_signal_connect(G_OBJECT(gui.drawarea), "key_press_event",
-+ G_CALLBACK(key_press_event), NULL);
-+#else
- /* For GtkSockets, key-presses must go to the focus widget (drawarea)
- * and not the window. */
- gtk_signal_connect((gtk_socket_id == 0) ? GTK_OBJECT(gui.mainwin)
-@@ -3176,6 +3249,7 @@
- "key_release_event",
- G_CALLBACK(&key_release_event), NULL);
- #endif
-+#endif /* FEAT_GUI_COMPONENT */
- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "realize",
- GTK_SIGNAL_FUNC(drawarea_realize_cb), NULL);
- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "unrealize",
-@@ -3207,16 +3281,27 @@
- */
- gui.border_offset = gui.border_width;
-
-+#ifdef FEAT_GUI_COMPONENT
-+ gtk_signal_connect(GTK_OBJECT(gui.drawarea), "visibility_notify_event",
-+ GTK_SIGNAL_FUNC(visibility_event), NULL);
-+#else
- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "visibility_notify_event",
- GTK_SIGNAL_FUNC(visibility_event), NULL);
-+#endif
- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "expose_event",
- GTK_SIGNAL_FUNC(expose_event), NULL);
-
- /*
- * Only install these enter/leave callbacks when 'p' in 'guioptions'.
- * Only needed for some window managers.
-+ *
-+ * Force this on for bonobo, otherwise the toolbar gets the focus
-+ * after you click a button, and you can't get the focus back to the
-+ * drawarea.
- */
-+#ifndef FEAT_GUI_COMPONENT
- if (vim_strchr(p_go, GO_POINTER) != NULL)
-+#endif
- {
- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "leave_notify_event",
- GTK_SIGNAL_FUNC(leave_notify_event), NULL);
-@@ -3224,10 +3309,19 @@
- GTK_SIGNAL_FUNC(enter_notify_event), NULL);
- }
-
-+#ifdef FEAT_GUI_COMPONENT
-+ g_signal_connect(G_OBJECT(gui.control), "activate",
-+ G_CALLBACK (control_activate_event), NULL);
-+ gtk_signal_connect(GTK_OBJECT(gui.drawarea), "focus_out_event",
-+ GTK_SIGNAL_FUNC(focus_out_event), NULL);
-+ gtk_signal_connect(GTK_OBJECT(gui.drawarea), "focus_in_event",
-+ GTK_SIGNAL_FUNC(focus_in_event), NULL);
-+#else
- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "focus_out_event",
- GTK_SIGNAL_FUNC(focus_out_event), NULL);
- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "focus_in_event",
- GTK_SIGNAL_FUNC(focus_in_event), NULL);
-+#endif
-
- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "motion_notify_event",
- GTK_SIGNAL_FUNC(motion_notify_event), NULL);
-@@ -3400,7 +3494,7 @@
- * otherwise the hints don't work. */
- width = gui_get_base_width();
- height = gui_get_base_height();
--# ifdef HAVE_GTK2
-+# if defined( HAVE_GTK2 ) && !defined(FEAT_GUI_COMPONENT)
- width += get_menu_tool_width();
- height += get_menu_tool_height();
- # endif
-@@ -3447,8 +3541,18 @@
- form_configure_event(GtkWidget *widget, GdkEventConfigure *event,
- gpointer data)
- {
-+ int height;
-+
- gtk_form_freeze(GTK_FORM(gui.formwin));
-- gui_resize_shell(event->width, event->height);
-+#ifdef FEAT_GUI_COMPONENT
-+ /* width_inc and height_inc (see window manager hints, above) aren't
-+ * respected for embedded controls, so we have to make a slight adjustment
-+ * to make sure the bottom line doesn't get clipped. */
-+ height = gui.char_height * ((event->height - 2 )/ gui.char_height);
-+#else
-+ height = event->height;
-+#endif
-+ gui_resize_shell(event->width, height);
- gtk_form_thaw(GTK_FORM(gui.formwin));
-
- return TRUE;
-@@ -3580,8 +3684,10 @@
- * changed them). */
- highlight_gui_started(); /* re-init colors and fonts */
-
-+#ifndef FEAT_GUI_COMPONENT
- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "destroy",
- GTK_SIGNAL_FUNC(mainwin_destroy_cb), NULL);
-+#endif
-
- #ifdef FEAT_HANGULIN
- hangul_keyboard_set();
-@@ -3649,7 +3755,9 @@
- NULL);
- # endif
- #endif
-- gtk_widget_show(gui.mainwin);
-+#ifndef FEAT_GUI_COMPONENT
-+ gtk_widget_show(gui.mainwin);
-+#endif
-
- #if defined(FEAT_GUI_GNOME) && defined(HAVE_GTK2) && defined(FEAT_MENU)
- if (menu_handler != 0)
-@@ -3679,8 +3787,8 @@
- if (gui.mainwin != NULL)
- gtk_widget_destroy(gui.mainwin);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
- }
-
- /*
-@@ -3727,6 +3835,7 @@
- static gboolean
- force_shell_resize_idle(gpointer data)
- {
-+ g_warning("force_shell_resize_idle called!");
- if (gui.mainwin != NULL
- && GTK_WIDGET_REALIZED(gui.mainwin)
- && GTK_WIDGET_VISIBLE(gui.mainwin))
-@@ -3775,7 +3884,7 @@
- /* this will cause the proper resizement to happen too */
- update_window_manager_hints();
-
--#ifdef HAVE_GTK2
-+#if defined( HAVE_GTK2 ) && !defined(FEAT_GUI_COMPONENT)
- /* With GTK+ 2, changing the size of the form widget doesn't resize
- * the window. So lets do it the other way around and resize the
- * main window instead. */
-@@ -3866,6 +3975,7 @@
- {
- GtkWidget *widget;
-
-+#ifndef FEAT_GUI_COMPONENT
- # ifdef FEAT_GUI_GNOME
- if (using_gnome)
- widget = gui.menubar_h;
-@@ -3882,6 +3992,7 @@
-
- update_window_manager_hints();
- }
-+#endif
- }
- #endif /* FEAT_MENU */
-
-@@ -3933,8 +4044,8 @@
-
- vw->fontname = (char_u *)gtk_font_selection_dialog_get_font_name(fs);
- gtk_widget_hide(vw->fontdlg);
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
- }
-
- /*ARGSUSED*/
-@@ -3944,8 +4055,8 @@
- gui_T *vw = (gui_T *)cbdata;
-
- gtk_widget_hide(vw->fontdlg);
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
- }
-
- /*ARGSUSED*/
-@@ -3955,8 +4066,8 @@
- gui_T *vw = (gui_T *)cbdata;
-
- vw->fontdlg = NULL;
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
- }
- #endif /* !HAVE_GTK2 */
-
-@@ -4123,7 +4234,7 @@
-
- /* Wait for the font dialog to be closed. */
- while (gui.fontdlg && GTK_WIDGET_DRAWABLE(gui.fontdlg))
-- gtk_main_iteration_do(TRUE);
-+ MAIN_ITERATION_DO(TRUE);
-
- if (gui.fontname != NULL)
- {
-@@ -5637,7 +5748,7 @@
- gui_mch_update(void)
- {
- while (gtk_events_pending() && !vim_is_input_buf_full())
-- gtk_main_iteration_do(FALSE);
-+ MAIN_ITERATION_DO(TRUE);
- }
-
- static gint
-@@ -5648,8 +5759,8 @@
- /* Just inform the caller about the occurence of it */
- *timed_out = TRUE;
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT(); /* make sure the above will be handled immediately */
-
- return FALSE; /* don't happen again */
- }
-@@ -5669,8 +5780,8 @@
-
- add_to_input_buf(bytes, 3);
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
- #endif
-
-@@ -5737,7 +5848,7 @@
- /*
- * Loop in GTK+ processing until a timeout or input occurs.
- */
-- gtk_main();
-+ MAIN();
-
- /* Got char, return immediately */
- if (input_available())
-@@ -5812,6 +5923,7 @@
- gdk_window_clear(gui.drawarea->window);
- }
-
-+
- /*
- * Redraw any text revealed by scrolling up/down.
- */
-@@ -5926,7 +6038,7 @@
- (guint32)GDK_CURRENT_TIME);
-
- while (received_selection == RS_NONE)
-- gtk_main(); /* wait for selection_received_cb */
-+ MAIN(); /* wait for selection_received_cb */
-
- if (received_selection != RS_FAIL)
- return;
-@@ -5994,6 +6106,13 @@
- void
- gui_mch_menu_grey(vimmenu_T *menu, int grey)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ if( menu->sensitive != !grey ) {
-+ menu->sensitive = !grey;
-+ update_menu_later(menu);
-+ }
-+ return;
-+#endif
- if (menu->id == NULL)
- return;
-
-@@ -6129,6 +6248,40 @@
- /* The last set mouse pointer shape is remembered, to be used when it goes
- * from hidden to not hidden. */
- static int last_shape = 0;
-+#endif
-+
-+#if 0
-+static BonoboWindow *
-+bonobo_create_window(void)
-+{
-+ BonoboWindow *win;
-+ BonoboUIContainer *ui_container;
-+ BonoboUIComponent *ui_component;
-+
-+ win = BONOBO_WINDOW (bonobo_window_new ("vim", "vim"));
-+ ui_container = bonobo_window_get_ui_container (win);
-+ bonobo_ui_engine_config_set_path (bonobo_window_get_ui_engine (win),
-+ "/gnome-vim/UIConfig/kvps");
-+
-+ /* Create a UI component with which to communicate with the window */
-+ ui_component = bonobo_ui_component_new_default ();
-+
-+ gui.component = ui_component;
-+
-+ /* Associate the BonoboUIComponent with the container */
-+ bonobo_ui_component_set_container (
-+ ui_component, BONOBO_OBJREF (ui_container), NULL);
-+
-+ //bonobo_ui_util_set_ui (ui_component, "",
-+ //HELLO_SRCDIR HELLO_UI_XML,
-+ //"bonobo-hello", NULL);
-+
-+ /* Associate our verb -> callback mapping with the BonoboWindow */
-+ /* All the callback's user_data pointers will be set to 'win' */
-+ //bonobo_ui_component_add_verb_list_with_data (ui_component, hello_verbs, win);
-+
-+ return win;
-+}
- #endif
-
- /*
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/main.c vim/src/main.c
---- vimcopy/src/main.c Tue Jun 3 13:32:56 2003
-+++ vim/src/main.c Sat Jul 26 13:16:48 2003
-@@ -79,7 +79,7 @@
- # ifdef VIMDLL
- _export
- # endif
--# ifdef FEAT_GUI_MSWIN
-+# if defined(FEAT_GUI_MSWIN)
- # ifdef __BORLANDC__
- _cdecl
- # endif
-@@ -239,8 +239,12 @@
- TIME_MSG("locale set");
- #endif
-
--#ifdef FEAT_GUI
-+#if defined(FEAT_GUI_COMPONENT)
-+ gui.dofork = FALSE; /* don't use fork when running as component */
-+#else
-+# if defined(FEAT_GUI) && !defined(FEAT_GUI_COMPONENT)
- gui.dofork = TRUE; /* default is to use fork() */
-+# endif
- #endif
-
- #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER)
-@@ -439,6 +443,10 @@
- ++initstr;
- }
-
-+#ifdef FEAT_GUI_COMPONENT
-+ main_start_gui();
-+#endif
-+
- if (TOLOWER_ASC(initstr[0]) == 'g')
- {
- main_start_gui();
-@@ -1760,6 +1768,9 @@
- #ifdef FEAT_WINDOWS
- curwin = firstwin;
- curbuf = curwin->w_buffer;
-+#endif
-+#ifdef FEAT_GUI_COMPONENT
-+ set_curbuf_persistent();
- #endif
- }
- TIME_MSG("opening buffers");
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/mbyte.c vim/src/mbyte.c
---- vimcopy/src/mbyte.c Wed Jun 4 10:26:32 2003
-+++ vim/src/mbyte.c Sat Jul 26 13:16:48 2003
-@@ -3120,8 +3120,8 @@
-
- im_add_to_input((char_u *)str, (int)strlen(str));
-
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
-
- /*
-@@ -4125,7 +4125,11 @@
- if (gui.fontset != NOFONTSET
- && gui.fontset->type == GDK_FONT_FONTSET)
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ widget = gui.drawarea;
-+#else
- widget = gui.mainwin;
-+#endif
- gdk_window_get_size(widget->window, &width, &height);
-
- attrmask |= (int)GDK_IC_STATUS_AREA;
-@@ -4706,9 +4710,15 @@
- while (event_queue != NULL && processing_queued_event)
- {
- GdkEvent *ev = event_queue->data;
--
-+ GtkWidget *output;
-+
- gboolean *ret;
-- gtk_signal_emit_by_name((GtkObject*)gui.mainwin, "key_press_event",
-+#ifdef FEAT_GUI_COMPONENT
-+ output = gui.drawarea;
-+#else
-+ output = gui.mainwin;
-+#endif
-+ gtk_signal_emit_by_name((GtkObject*)output, "key_press_event",
- ev, &ret);
- gdk_event_free(ev);
- event_queue = event_queue->next;
-@@ -4720,8 +4730,8 @@
- key_press_event_queue = NULL;
- }
- }
-- if (gtk_main_level() > 0)
-- gtk_main_quit();
-+ if (MAIN_LEVEL() > 0)
-+ MAIN_QUIT();
- }
-
- /*
-@@ -4856,7 +4866,11 @@
- GtkWidget *widget = gui.drawarea;
-
- attr->style = (GdkIMStyle)xim_input_style;
-+#ifdef FEAT_GUI_COMPONENT
-+ attr->client_window = gui.drawarea->window;
-+#else
- attr->client_window = gui.mainwin->window;
-+#endif
-
- if ((colormap = gtk_widget_get_colormap(widget)) !=
- gtk_widget_get_default_colormap())
-@@ -4903,7 +4917,11 @@
- }
- else
- {
-+#ifdef FEAT_GUI_COMPONENT
-+ gdk_window_get_size(gui.drawarea->window, &width, &height);
-+#else
- gdk_window_get_size(gui.mainwin->window, &width, &height);
-+#endif
- attrmask |= (int)GDK_IC_STATUS_AREA_REQ;
- attr->status_area.x = 0;
- attr->status_area.y = height - gui.char_height - 1;
-Binary files vimcopy/src/objects/buffer.o and vim/src/objects/buffer.o differ
-Binary files vimcopy/src/objects/charset.o and vim/src/objects/charset.o differ
-Binary files vimcopy/src/objects/diff.o and vim/src/objects/diff.o differ
-Binary files vimcopy/src/objects/digraph.o and vim/src/objects/digraph.o differ
-Binary files vimcopy/src/objects/edit.o and vim/src/objects/edit.o differ
-Binary files vimcopy/src/objects/eval.o and vim/src/objects/eval.o differ
-Binary files vimcopy/src/objects/ex_cmds.o and vim/src/objects/ex_cmds.o differ
-Binary files vimcopy/src/objects/ex_cmds2.o and vim/src/objects/ex_cmds2.o differ
-Binary files vimcopy/src/objects/ex_docmd.o and vim/src/objects/ex_docmd.o differ
-Binary files vimcopy/src/objects/ex_eval.o and vim/src/objects/ex_eval.o differ
-Binary files vimcopy/src/objects/ex_getln.o and vim/src/objects/ex_getln.o differ
-Binary files vimcopy/src/objects/fileio.o and vim/src/objects/fileio.o differ
-Binary files vimcopy/src/objects/fold.o and vim/src/objects/fold.o differ
-Binary files vimcopy/src/objects/getchar.o and vim/src/objects/getchar.o differ
-Binary files vimcopy/src/objects/gtkhtml_editor.o and vim/src/objects/gtkhtml_editor.o differ
-Binary files vimcopy/src/objects/gtkhtml_editor_common.o and vim/src/objects/gtkhtml_editor_common.o differ
-Binary files vimcopy/src/objects/gtkhtml_editor_skels.o and vim/src/objects/gtkhtml_editor_skels.o differ
-Binary files vimcopy/src/objects/gtkhtml_editor_stubs.o and vim/src/objects/gtkhtml_editor_stubs.o differ
-Binary files vimcopy/src/objects/gui.o and vim/src/objects/gui.o differ
-Binary files vimcopy/src/objects/gui_beval.o and vim/src/objects/gui_beval.o differ
-Binary files vimcopy/src/objects/gui_gtk.o and vim/src/objects/gui_gtk.o differ
-Binary files vimcopy/src/objects/gui_gtk_f.o and vim/src/objects/gui_gtk_f.o differ
-Binary files vimcopy/src/objects/gui_gtk_x11.o and vim/src/objects/gui_gtk_x11.o differ
-Binary files vimcopy/src/objects/if_cscope.o and vim/src/objects/if_cscope.o differ
-Binary files vimcopy/src/objects/if_xcmdsrv.o and vim/src/objects/if_xcmdsrv.o differ
-Binary files vimcopy/src/objects/main.o and vim/src/objects/main.o differ
-Binary files vimcopy/src/objects/mark.o and vim/src/objects/mark.o differ
-Binary files vimcopy/src/objects/mbyte.o and vim/src/objects/mbyte.o differ
-Binary files vimcopy/src/objects/memfile.o and vim/src/objects/memfile.o differ
-Binary files vimcopy/src/objects/memline.o and vim/src/objects/memline.o differ
-Binary files vimcopy/src/objects/menu.o and vim/src/objects/menu.o differ
-Binary files vimcopy/src/objects/message.o and vim/src/objects/message.o differ
-Binary files vimcopy/src/objects/misc1.o and vim/src/objects/misc1.o differ
-Binary files vimcopy/src/objects/misc2.o and vim/src/objects/misc2.o differ
-Binary files vimcopy/src/objects/move.o and vim/src/objects/move.o differ
-Binary files vimcopy/src/objects/netbeans.o and vim/src/objects/netbeans.o differ
-Binary files vimcopy/src/objects/normal.o and vim/src/objects/normal.o differ
-Binary files vimcopy/src/objects/ops.o and vim/src/objects/ops.o differ
-Binary files vimcopy/src/objects/option.o and vim/src/objects/option.o differ
-Binary files vimcopy/src/objects/os_unix.o and vim/src/objects/os_unix.o differ
-Binary files vimcopy/src/objects/pathdef.o and vim/src/objects/pathdef.o differ
-Binary files vimcopy/src/objects/pty.o and vim/src/objects/pty.o differ
-Binary files vimcopy/src/objects/quickfix.o and vim/src/objects/quickfix.o differ
-Binary files vimcopy/src/objects/regexp.o and vim/src/objects/regexp.o differ
-Binary files vimcopy/src/objects/screen.o and vim/src/objects/screen.o differ
-Binary files vimcopy/src/objects/search.o and vim/src/objects/search.o differ
-Binary files vimcopy/src/objects/syntax.o and vim/src/objects/syntax.o differ
-Binary files vimcopy/src/objects/tag.o and vim/src/objects/tag.o differ
-Binary files vimcopy/src/objects/term.o and vim/src/objects/term.o differ
-Binary files vimcopy/src/objects/ui.o and vim/src/objects/ui.o differ
-Binary files vimcopy/src/objects/undo.o and vim/src/objects/undo.o differ
-Binary files vimcopy/src/objects/version.o and vim/src/objects/version.o differ
-Binary files vimcopy/src/objects/vim_bonobo_control.o and vim/src/objects/vim_bonobo_control.o differ
-Binary files vimcopy/src/objects/vim_bonobo_factory.o and vim/src/objects/vim_bonobo_factory.o differ
-Binary files vimcopy/src/objects/vim_bonobo_main.o and vim/src/objects/vim_bonobo_main.o differ
-Binary files vimcopy/src/objects/window.o and vim/src/objects/window.o differ
-Binary files vimcopy/src/po/af.mo and vim/src/po/af.mo differ
-Binary files vimcopy/src/po/cs.cp1250.mo and vim/src/po/cs.cp1250.mo differ
-Binary files vimcopy/src/po/cs.mo and vim/src/po/cs.mo differ
-Binary files vimcopy/src/po/de.mo and vim/src/po/de.mo differ
-Binary files vimcopy/src/po/en_gb.mo and vim/src/po/en_gb.mo differ
-Binary files vimcopy/src/po/es.mo and vim/src/po/es.mo differ
-Binary files vimcopy/src/po/fr.mo and vim/src/po/fr.mo differ
-Binary files vimcopy/src/po/it.mo and vim/src/po/it.mo differ
-Binary files vimcopy/src/po/ja.mo and vim/src/po/ja.mo differ
-Binary files vimcopy/src/po/ja.sjis.mo and vim/src/po/ja.sjis.mo differ
-Binary files vimcopy/src/po/ko.mo and vim/src/po/ko.mo differ
-Binary files vimcopy/src/po/no.mo and vim/src/po/no.mo differ
-Binary files vimcopy/src/po/pl.cp1250.mo and vim/src/po/pl.cp1250.mo differ
-Binary files vimcopy/src/po/pl.mo and vim/src/po/pl.mo differ
-Binary files vimcopy/src/po/sk.cp1250.mo and vim/src/po/sk.cp1250.mo differ
-Binary files vimcopy/src/po/sk.mo and vim/src/po/sk.mo differ
-Binary files vimcopy/src/po/uk.mo and vim/src/po/uk.mo differ
-Binary files vimcopy/src/po/zh_CN.UTF-8.mo and vim/src/po/zh_CN.UTF-8.mo differ
-Binary files vimcopy/src/po/zh_CN.cp936.mo and vim/src/po/zh_CN.cp936.mo differ
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/po/zh_CN.cp936.po vim/src/po/zh_CN.cp936.po
---- vimcopy/src/po/zh_CN.cp936.po Mon Jun 2 09:32:25 2003
-+++ vim/src/po/zh_CN.cp936.po Sat Jul 26 15:06:40 2003
-@@ -3007,7 +3007,7 @@
-
- #: main.c:2315
- msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
--msgstr "-foreground <color>\tÉ趨 <color> Ϊһ°ãÎÄ×ÖÑÕÉ« (Ò²¿ÉÓà -fg)"
-+msgstr "-foreground <color>\tÉ趨 <color> Ϊһ°ãÎÄ×ÖÑÕÉ« (Ò²ÉÓà -fg)"
-
- #: main.c:2316 main.c:2336
- msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-Binary files vimcopy/src/po/zh_CN.mo and vim/src/po/zh_CN.mo differ
-Binary files vimcopy/src/po/zh_TW.UTF-8.mo and vim/src/po/zh_TW.UTF-8.mo differ
-Binary files vimcopy/src/po/zh_TW.mo and vim/src/po/zh_TW.mo differ
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/structs.h vim/src/structs.h
---- vimcopy/src/structs.h Tue May 27 11:22:01 2003
-+++ vim/src/structs.h Sat Jul 26 13:16:48 2003
-@@ -1036,6 +1036,10 @@
- char_u *b_p_bh; /* 'bufhidden' */
- char_u *b_p_bt; /* 'buftype' */
- #endif
-+#if defined(FEAT_GUI_COMPONENT)
-+ int emb_buffer; /* this buffer is associated with the container application,
-+ and cannot be removed */
-+#endif
- int b_p_bl; /* 'buflisted' */
- #ifdef FEAT_CINDENT
- int b_p_cin; /* 'cindent' */
-@@ -1713,8 +1717,11 @@
- GtkWidget *tearoff_handle;
- GtkWidget *label; /* Used by "set wak=" code. */
- #endif
--#ifdef FEAT_GUI_MOTIF
-+#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_COMPONENT)
- int sensitive; /* turn button on/off */
-+#if defined(FEAT_GUI_COMPONENT)
-+ int dirty; /* menu item has been updated; container needs to know */
-+#endif
- #endif
- #if defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MOTIF)
- Pixmap image; /* Toolbar image */
-Binary files vimcopy/src/vim and vim/src/vim differ
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim-container.xml vim/src/vim-container.xml
---- vimcopy/src/vim-container.xml Wed Dec 31 18:00:00 1969
-+++ vim/src/vim-container.xml Sat Jul 26 13:16:48 2003
-@@ -0,0 +1,83 @@
-+<Root>
-+
-+<commands>
-+ <cmd name="FileNewWindow" _label="_New Window" _tip="Open a new window"
-+ pixtype="stock" pixname="gtk-new" accel="*Control*n"/>
-+
-+ <cmd name="FileOpen" _label="_Open..." _tip="Open a file"
-+ pixtype="stock" pixname="gtk-open" accel="*Control*o"/>
-+
-+ <cmd name="FileCloseWindow" _label="_Close" _tip="Close window"
-+ pixtype="stock" pixname="gtk-close" accel="*Control*w"/>
-+
-+ <cmd name="FileExit" _label="_Quit" _tip="Quit the program"
-+ pixtype="stock" pixname="gtk-quit" accel="*Control*q"/>
-+
-+ <cmd name="Preferences" _label="_Preferences..." _tip="Change preferences" sensitive="0"
-+ pixtype="stock" pixname="gtk-preferences"/>
-+
-+ <cmd name="HelpAbout" _label="_About" _tip="About this application"
-+ pixtype="stock" pixname="About"/>
-+ <cmd name="Help" _label="Contents" _tip="Help On this application"
-+ pixtype="stock" pixname="Help" accel="F1"/>
-+
-+
-+ <cmd name="DnDNewWindow" _label="Open in new window"/>
-+ <cmd name="DnDSameWindow" _label="Open in this window"/>
-+ <cmd name="DnDCancel" _label="Cancel"
-+ pixtype="stock" pixname="Cancel"/>
-+</commands>
-+
-+<menu>
-+ <submenu name="File" _label="_File">
-+
-+ <menuitem name="FileNewWindow" verb=""/>
-+
-+ <placeholder name="Open Placeholder" delimit="top">
-+ <menuitem name="FileOpen" verb=""/>
-+ </placeholder>
-+
-+ <placeholder name="File Items Placeholder" delimit="top"/>
-+
-+ <separator/>
-+
-+ <menuitem name="FileCloseWindow" verb=""/>
-+
-+ <menuitem name="FileExit" verb=""/>
-+
-+ </submenu>
-+
-+ <submenu name="Edit" _label="_Edit">
-+ <menuitem name="Preferences" verb=""/>
-+ </submenu>
-+
-+ <submenu name="View" _label="_View" hidden="1">
-+ <placeholder name="View Preferences Placeholder"/>
-+ <placeholder name="View Items Placeholder" delimit="top"/>
-+ </submenu>
-+
-+ <submenu name="Help" _label="_Help">
-+ <menuitem name="Help" verb=""/>
-+ <menuitem name="HelpAbout" verb=""/>
-+ </submenu>
-+</menu>
-+
-+<dockitem name="Toolbar" relief="none" homogeneous="1" behavior="exclusive">
-+
-+ <toolitem name="TBOpen" _label="Open" pixtype="stock"
-+ pixname="Open" verb="FileOpen"/>
-+
-+ <toolitem name="TBCloseWindow" _label="Close" pixtype="stock"
-+ pixname="Close" verb="FileCloseWindow"/>
-+</dockitem>
-+
-+<popups>
-+ <popup name="dragndrop">
-+ <menuitem name="DnDNewWindow" verb=""/>
-+ <menuitem name="DnDSameWindow" verb=""/>
-+ <separator/>
-+ <menuitem name="DnDCancel" verb=""/>
-+ </popup>
-+</popups>
-+
-+</Root>
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim.h vim/src/vim.h
---- vimcopy/src/vim.h Thu May 29 10:18:40 2003
-+++ vim/src/vim.h Sat Jul 26 13:16:48 2003
-@@ -738,6 +738,10 @@
- #define READ_STDIN 0x04 /* read from stdin */
- #define READ_BUFFER 0x08 /* read from curbuf (converting stdin) */
- #define READ_DUMMY 0x10 /* reading into a dummy buffer */
-+#define READ_EMB_STREAM 0x20 /* read from container stream object
-+ (i.e. Bonobo Persist Stream) */
-+#define READ_EMB_FILE 0x40 /* read from container file object
-+ (i.e. Bonobo Persist File) */
-
- /* Values for change_indent() */
- #define INDENT_SET 1 /* set indent */
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim_bonobo_control.c vim/src/vim_bonobo_control.c
---- vimcopy/src/vim_bonobo_control.c Wed Dec 31 18:00:00 1969
-+++ vim/src/vim_bonobo_control.c Sat Jul 26 13:16:48 2003
-@@ -0,0 +1,411 @@
-+/**
-+ * vim_bonobo_control.c
-+ *
-+ * Author:
-+ * Jason Hildebrand <jason@peaceworks.ca>
-+ *
-+ */
-+#include <stdio.h>
-+
-+#include "vim.h"
-+#include "vim_bonobo_control.h"
-+#include "gtkhtml_editor.h"
-+
-+#include <gnome.h>
-+#include <libbonoboui.h>
-+#include <libbonobo.h>
-+#include <libnautilus/nautilus-view.h>
-+
-+
-+struct _VimControlPrivate {
-+ BonoboUIComponent *component;
-+};
-+
-+static GObjectClass *vim_control_parent_class;
-+
-+static gboolean
-+quit_vim(gpointer data)
-+{
-+ MAIN_QUIT();
-+ exit(0);
-+}
-+
-+static void
-+vim_control_destroy (BonoboObject *control)
-+{
-+ BonoboUIComponent *uic;
-+
-+ g_return_if_fail (control != NULL);
-+ g_return_if_fail (VIM_IS_CONTROL (control));
-+
-+ g_message ("Destroying VimControl...");
-+
-+ uic = bonobo_control_get_ui_component (BONOBO_CONTROL (control));
-+ if( uic != CORBA_OBJECT_NIL )
-+ bonobo_ui_component_unset_container (uic, NULL);
-+
-+ BONOBO_OBJECT_CLASS (vim_control_parent_class)->destroy (control);
-+
-+ /* we only support creating one vim control per process, so when this one
-+ * is finished, we're done. */
-+ /* BONOBO_FIXME: shut down vim cleanly! */
-+ g_timeout_add(100, &quit_vim, NULL);
-+}
-+
-+static void
-+vim_control_finalize (GObject *object)
-+{
-+ VimControl *control;
-+
-+ g_return_if_fail (object != NULL);
-+ g_return_if_fail (VIM_IS_CONTROL (object));
-+
-+ control = VIM_CONTROL (object);
-+
-+ g_free (control->priv);
-+
-+ G_OBJECT_CLASS (vim_control_parent_class)->finalize (object);
-+}
-+
-+static void
-+vim_control_set_ui_container (VimControl *control,
-+ Bonobo_UIContainer ui_container)
-+{
-+ BonoboUIComponent *uic;
-+
-+ g_return_if_fail (control != NULL);
-+ g_return_if_fail (VIM_IS_CONTROL (control));
-+ g_return_if_fail (ui_container != CORBA_OBJECT_NIL);
-+
-+ uic = bonobo_control_get_ui_component (BONOBO_CONTROL (control));
-+ bonobo_ui_component_set_container (uic, ui_container, NULL);
-+
-+ /* update vim's UI now */
-+ update_ui_later();
-+}
-+
-+static void
-+vim_control_unset_ui_container (VimControl *control)
-+{
-+ BonoboUIComponent *uic;
-+
-+ g_return_if_fail (control != NULL);
-+ g_return_if_fail (VIM_IS_CONTROL (control));
-+
-+ uic = bonobo_control_get_ui_component (BONOBO_CONTROL (control));
-+ bonobo_ui_component_unset_container (uic, NULL);
-+}
-+
-+static grab_keys = 0;
-+
-+static GdkFilterReturn
-+filter_key_events (GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data)
-+{
-+ /* GdkScreen *screen = gdk_drawable_get_screen (event->any.window);
-+ GdkDisplay *display = gdk_screen_get_display (screen);*/
-+ XEvent *xevent = (XEvent *)gdk_xevent;
-+
-+ GdkFilterReturn return_val;
-+
-+ return_val = GDK_FILTER_CONTINUE;
-+
-+ switch (xevent->type)
-+ {
-+ case KeyPress:
-+ g_warning("Key press!");
-+ break;
-+
-+ case KeyRelease:
-+ g_warning("Key release!");
-+ break;
-+
-+ default:
-+ break;
-+ }
-+ return return_val;
-+}
-+
-+
-+static void
-+set_frame_cb (BonoboControl *object, gpointer data)
-+{
-+ Bonobo_ControlFrame frame;
-+ BonoboPlug * plug;
-+ VimControl *control;
-+ GdkEventMask mask;
-+
-+ g_return_if_fail (object != NULL);
-+ g_return_if_fail (VIM_IS_CONTROL (object));
-+
-+ frame = bonobo_control_get_control_frame (object, NULL);
-+ if (frame == CORBA_OBJECT_NIL)
-+ return;
-+ CORBA_Object_release (frame, NULL);
-+
-+ control = VIM_CONTROL (object);
-+
-+ Bonobo_UIContainer ui_container;
-+
-+ ui_container = bonobo_control_get_remote_ui_container (BONOBO_CONTROL (control), NULL);
-+ if (ui_container != CORBA_OBJECT_NIL) {
-+ vim_control_set_ui_container (control, ui_container);
-+ bonobo_object_release_unref (ui_container, NULL);
-+ }
-+
-+ /*plug = (BonoboPlug *)bonobo_control_get_plug(control);*/
-+ /*gdk_window_add_filter (NULL, filter_key_events, NULL);*/
-+}
-+
-+static void
-+vim_control_class_init (VimControl *klass)
-+{
-+ GObjectClass *gobject_class = (GObjectClass *)klass;
-+ BonoboObjectClass *bonobo_object_class = (BonoboObjectClass *)klass;
-+ BonoboControlClass *control_class = (BonoboControlClass *)klass;
-+
-+ vim_control_parent_class= g_type_class_peek_parent (klass);
-+
-+ bonobo_object_class->destroy = vim_control_destroy;
-+ gobject_class->finalize = vim_control_finalize;
-+}
-+
-+static int persistent_buffer;
-+static char_u * stream_buffer = NULL;
-+static int stream_offset = 0;
-+static CORBA_long stream_length = 0;
-+static Bonobo_Stream current_stream;
-+
-+void
-+set_curbuf_persistent(void)
-+{
-+ persistent_buffer = curbuf->b_fnum;
-+}
-+
-+/* It seems like it's an error to attempt to read more data
-+ * than is available from a bonobo stream. So we slurp in
-+ * the entire file in one chunk, and then pass it back in
-+ * pieces to the caller.
-+ */
-+int
-+vim_control_persist_stream_read(char_u * buffer, int reqsize)
-+{
-+ int read_size;
-+
-+ if( stream_offset >= stream_length ) {
-+ return 0;
-+ }
-+ read_size = stream_length - stream_offset >= reqsize ?
-+ reqsize : stream_length - stream_offset;
-+ mch_memmove(buffer, &stream_buffer[stream_offset], read_size);
-+ stream_offset += read_size;
-+ return read_size;
-+}
-+
-+int
-+vim_control_persist_stream_write(char_u * buffer, int reqsize)
-+{
-+ CORBA_Environment ev;
-+
-+ CORBA_exception_init(&ev);
-+ bonobo_stream_client_write(current_stream, buffer, reqsize, &ev);
-+ if (ev._major != CORBA_NO_EXCEPTION || stream_buffer == NULL) {
-+ g_warning("Error writing to stream");
-+ CORBA_exception_free (&ev);
-+ return 0;
-+ }
-+ CORBA_exception_free (&ev);
-+ return reqsize;
-+}
-+
-+static void load_buffer_from_stream(BonoboPersistStream *ps,
-+ const Bonobo_Stream stream,
-+ Bonobo_Persist_ContentType type,
-+ void *closure,
-+ CORBA_Environment *ev)
-+{
-+ exarg_T ea; /* Ex command arguments */
-+
-+ g_warning ("load_buffer_from_stream");
-+
-+ stream_buffer = bonobo_stream_client_read( stream, -1, &stream_length, ev);
-+ if (ev->_major != CORBA_NO_EXCEPTION || stream_buffer == NULL) {
-+ g_warning("Error reading from stream");
-+ return;
-+ }
-+ stream_offset = 0;
-+
-+ vim_memset(&ea, 0, sizeof(ea));
-+ ea.cmd = "e ++enc=utf-8";
-+ ea.force_enc = 8; /* this is the offset of "utf-8" in the cmd */
-+
-+ read_from_container = PERSIST_STREAM_IO;
-+ do_ecmd(0, NULL, NULL, &ea, 1, 0);
-+ read_from_container = NORMAL_IO;
-+
-+ /* remember this buffer */
-+ persistent_buffer = curbuf->b_fnum;
-+ ga_clear(&error_ga);
-+ g_free(stream_buffer);
-+}
-+
-+
-+static void
-+save_buffer_to_stream(BonoboPersistStream *ps,
-+ const Bonobo_Stream stream,
-+ Bonobo_Persist_ContentType type,
-+ void *closure,
-+ CORBA_Environment *ev)
-+{
-+ buf_T * buf;
-+ exarg_T ea; /* Ex command arguments */
-+
-+ g_warning ("save_buffer_to_stream");
-+
-+ current_stream = stream;
-+ write_to_container = PERSIST_STREAM_IO;
-+
-+ vim_memset(&ea, 0, sizeof(ea));
-+ ea.cmd = "e ++enc=utf-8";
-+ ea.force_enc = 8; /* this is the offset of "utf-8" in the cmd */
-+
-+ buf = buflist_findnr(persistent_buffer);
-+ if( buf ) {
-+ buf_write(buf, "dummy", "dummy", 1, buf->b_ml.ml_line_count, &ea, FALSE, FALSE,
-+ TRUE, TRUE);
-+ }
-+ write_to_container = NORMAL_IO;
-+ ga_clear(&error_ga);
-+}
-+
-+
-+Bonobo_Persist_ContentTypeList *
-+persist_stream_types( BonoboPersistStream * ps, void * closure, CORBA_Environment *ev )
-+{
-+ g_warning ("persist_stream_types");
-+ return bonobo_persist_generate_content_types(1, "text/plain", "text/html");
-+}
-+
-+
-+static void
-+nv_load_location_cb (NautilusView *view, const char *location, gpointer user_data)
-+{
-+ g_return_if_fail (NAUTILUS_IS_VIEW (view));
-+ g_return_if_fail (location != NULL);
-+
-+ nautilus_view_report_load_underway (NAUTILUS_VIEW (view));
-+
-+ /* FIXME: load the file here (using gnome-vfs)! */
-+ nautilus_view_report_load_complete (NAUTILUS_VIEW (view));
-+}
-+
-+static void
-+vim_control_init (VimControl *control)
-+{
-+ control->priv = g_new0 (VimControlPrivate, 1);
-+}
-+
-+BONOBO_TYPE_FUNC (VimControl, BONOBO_TYPE_CONTROL, vim_control);
-+
-+BonoboObject *
-+vim_control_add_interfaces (VimControl *control,
-+ BonoboObject *to_aggregate)
-+{
-+ //BonoboPersistFile *file;
-+ NautilusView *nv;
-+ BonoboPersistStream *stream;
-+ EditorEngine *engine; /* GtkHTML editor engine interface */
-+ //BonoboItemContainer *item_container;
-+
-+ g_return_val_if_fail (VIM_IS_CONTROL (control), NULL);
-+ g_return_val_if_fail (BONOBO_IS_OBJECT (to_aggregate), NULL);
-+
-+ /* Interface Bonobo::PersistFile */
-+#if 0
-+ file = bonobo_persist_file_new (load_vim_from_file,
-+ NULL, VIM_OAFIID, control);
-+ if (!file) {
-+ bonobo_object_unref (BONOBO_OBJECT (to_aggregate));
-+ return NULL;
-+ }
-+#endif
-+
-+ stream = bonobo_persist_stream_new (load_buffer_from_stream,
-+ save_buffer_to_stream,
-+ persist_stream_types,
-+ VIM_OAFIID,
-+ control);
-+ if (!stream) {
-+ bonobo_object_unref (BONOBO_OBJECT (to_aggregate));
-+ return NULL;
-+ }
-+ bonobo_object_add_interface (BONOBO_OBJECT (to_aggregate),
-+ BONOBO_OBJECT (stream));
-+
-+ nv = nautilus_view_new_from_bonobo_control(BONOBO_CONTROL(control));
-+ if( !nv ) {
-+ bonobo_object_unref (BONOBO_OBJECT(to_aggregate));
-+ return NULL;
-+ }
-+ bonobo_object_add_interface (BONOBO_OBJECT (to_aggregate),
-+ BONOBO_OBJECT (nv));
-+
-+ g_signal_connect (G_OBJECT (nv), "load_location",
-+ G_CALLBACK (nv_load_location_cb), NULL);
-+
-+ engine = editor_engine_new();
-+ if( !engine ) {
-+ bonobo_object_unref (BONOBO_OBJECT(to_aggregate));
-+ return NULL;
-+ }
-+ bonobo_object_add_interface (BONOBO_OBJECT (to_aggregate),
-+ BONOBO_OBJECT (engine));
-+
-+ return to_aggregate;
-+}
-+
-+VimControl *
-+vim_control_construct (VimControl *control)
-+{
-+ GtkWidget *button;
-+ GtkWidget *label;
-+ BonoboPlug *plug;
-+ GtkAccelGroup *group;
-+ GClosure *closure;
-+ //VimControlPrivate *priv;
-+
-+ g_return_val_if_fail (control != NULL, NULL);
-+ g_return_val_if_fail (VIM_IS_CONTROL (control), NULL);
-+
-+
-+ if (!vim_control_add_interfaces (control, BONOBO_OBJECT (control)))
-+ return NULL;
-+
-+ gui.control = BONOBO_CONTROL(control);
-+ gui.plug = (BonoboPlug *)bonobo_control_get_plug(control);
-+ gui.mainwin = GTK_WIDGET(gui.plug);
-+ gui_mch_init();
-+
-+ g_signal_connect (control, "set_frame", G_CALLBACK (set_frame_cb), NULL);
-+
-+ /* Create the vim-view */
-+ //priv->image_view = vim_image_view_new (vim, FALSE);
-+ //if (!priv->image_view) {
-+ //bonobo_object_unref (BONOBO_OBJECT (control));
-+ //return NULL;
-+ //}
-+
-+ return control;
-+}
-+
-+VimControl *
-+vim_control_new (void)
-+{
-+ VimControl *control;
-+
-+ g_message ("Creating VimControl...");
-+
-+ control = g_object_new (VIM_CONTROL_TYPE, NULL);
-+
-+ return vim_control_construct (control);
-+}
-+
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim_bonobo_control.h vim/src/vim_bonobo_control.h
---- vimcopy/src/vim_bonobo_control.h Wed Dec 31 18:00:00 1969
-+++ vim/src/vim_bonobo_control.h Sat Jul 26 13:16:48 2003
-@@ -0,0 +1,50 @@
-+/*
-+ * vim_bonobo_control.h
-+ *
-+ * Author:
-+ * Jason Hildebrand (jason@peaceworks.ca)
-+ *
-+ */
-+
-+#ifndef _VIM_CONTROL_H_
-+#define _VIM_CONTROL_H_
-+
-+#include <bonobo/bonobo-control.h>
-+#define VIM_OAFIID "OAFIID:Vim_Control"
-+#define NORMAL_IO 0
-+#define PERSIST_STREAM_IO 1
-+#define PERSIST_FILE_IO 2
-+
-+G_BEGIN_DECLS
-+
-+#define VIM_CONTROL_TYPE (vim_control_get_type ())
-+#define VIM_CONTROL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), VIM_CONTROL_TYPE, VimControl))
-+#define VIM_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), VIM_CONTROL_TYPE, VimControlClass))
-+
-+#define VIM_IS_CONTROL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), VIM_CONTROL_TYPE))
-+#define VIM_IS_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), VIM_CONTROL_TYPE))
-+#define VIM_CONTROL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), VIM_CONTROL_TYPE, VimControlClass))
-+
-+typedef struct _VimControl VimControl;
-+typedef struct _VimControlClass VimControlClass;
-+typedef struct _VimControlPrivate VimControlPrivate;
-+
-+struct _VimControl {
-+ BonoboControl control;
-+
-+ VimControlPrivate *priv;
-+};
-+
-+struct _VimControlClass {
-+ BonoboControlClass parent_class;
-+};
-+
-+GType vim_control_get_type (void);
-+VimControl *vim_control_new (void);
-+VimControl *vim_control_construct (VimControl *control);
-+
-+void set_curbuf_persistent(void);
-+
-+G_END_DECLS
-+
-+#endif /* _VIM_CONTROL_H_*/
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim_bonobo_factory.c vim/src/vim_bonobo_factory.c
---- vimcopy/src/vim_bonobo_factory.c Wed Dec 31 18:00:00 1969
-+++ vim/src/vim_bonobo_factory.c Sat Jul 26 13:42:10 2003
-@@ -0,0 +1,73 @@
-+/*
-+ * vim_bonobo_factory.c
-+ *
-+ * Author:
-+ * Jason Hildebrand (jason@peaceworks.ca)
-+ *
-+ */
-+
-+#include "vim.h"
-+#include "version.h"
-+#include <bonobo/bonobo-generic-factory.h>
-+#include "vim_bonobo_control.h"
-+
-+static BonoboGenericFactory *factory = NULL;
-+static int vim_instantiated = 0;
-+
-+static BonoboObject *
-+vim_bonobo_factory(BonoboGenericFactory *this,
-+ const char *oaf_iid,
-+ void *data)
-+{
-+ VimControl *vim;
-+ BonoboObject *retval;
-+
-+ g_return_val_if_fail (this != NULL, NULL);
-+ g_return_val_if_fail (oaf_iid != NULL, NULL);
-+
-+ if( vim_instantiated ) {
-+ /* we cannot instantiate more than one control from this process,
-+ * because of all of vim's global variables */
-+ return NULL;
-+ }
-+
-+ g_message ("Trying to produce a '%s'...", oaf_iid);
-+
-+ if (strcmp (oaf_iid, VIM_OAFIID) == 0) {
-+ vim = vim_control_new ();
-+ if (vim == NULL)
-+ return NULL;
-+ retval = BONOBO_OBJECT (vim);
-+ } else {
-+ g_warning ("Unknown IID `%s' requested", oaf_iid);
-+ return NULL;
-+ }
-+ vim_instantiated = 1;
-+
-+ return retval;
-+}
-+
-+/* wait until this component is instantiated */
-+int vim_bonobo_wait_for_instantiation()
-+{
-+ while( !vim_instantiated) {
-+ MAIN_ITERATION_DO(TRUE);
-+ }
-+}
-+
-+
-+int vim_bonobo_init(int *argc, char *argv[])
-+{
-+ if (!bonobo_ui_init ("gnome-vim", VIM_VERSION_SHORT, argc, argv))
-+ g_error (_("Could not initialize Bonobo"));
-+
-+ factory = bonobo_generic_factory_new (
-+ "OAFIID:Vim_Control_Factory", vim_bonobo_factory, NULL);
-+
-+ if (factory == NULL) {
-+ g_error ("Couldn't create factory.\n");
-+ return 0;
-+ }
-+ return 1;
-+}
-+
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim_bonobo_factory.h vim/src/vim_bonobo_factory.h
---- vimcopy/src/vim_bonobo_factory.h Wed Dec 31 18:00:00 1969
-+++ vim/src/vim_bonobo_factory.h Sat Jul 26 13:16:48 2003
-@@ -0,0 +1,15 @@
-+/*
-+ * vim_bonobo_factory.h
-+ *
-+ * Author:
-+ * Jason Hildebrand (jason@peaceworks.ca)
-+ *
-+ */
-+
-+#if !defined( _VIM_BONOBO_FACTORY_H)
-+#define _VIM_BONOBO_FACTORY_H
-+
-+void gui_component_init(int *argc, char *argv []);
-+int gui_component_wait_for_instantiation(void);
-+
-+#endif
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim_bonobo_main.c vim/src/vim_bonobo_main.c
---- vimcopy/src/vim_bonobo_main.c Wed Dec 31 18:00:00 1969
-+++ vim/src/vim_bonobo_main.c Sat Jul 26 13:16:48 2003
-@@ -0,0 +1,60 @@
-+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-+
-+#include <glib/gmain.h>
-+#include <glib-object.h>
-+
-+static guint bonobo_main_loop_level = 0;
-+static GSList * bonobo_main_loops = NULL;
-+
-+
-+/**
-+ * bonobo_main:
-+ *
-+ * Activates the Bonobo POA Manager and enters the main event loop.
-+ */
-+void
-+vim_bonobo_main (void)
-+{
-+ GMainLoop *loop;
-+
-+ bonobo_activate ();
-+
-+ bonobo_main_loop_level++;
-+
-+ loop = g_main_loop_new (NULL, TRUE);
-+ bonobo_main_loops = g_slist_prepend (bonobo_main_loops, loop);
-+
-+ if (g_main_loop_is_running (bonobo_main_loops->data))
-+ g_main_loop_run (loop);
-+
-+ bonobo_main_loops = g_slist_remove (bonobo_main_loops, loop);
-+
-+ g_main_loop_unref (loop);
-+
-+ bonobo_main_loop_level--;
-+}
-+
-+/**
-+ * bonobo_main_quit:
-+ *
-+ * Quits the main event loop.
-+ */
-+void
-+vim_bonobo_main_quit (void)
-+{
-+ g_return_if_fail (bonobo_main_loops != NULL);
-+
-+ g_main_loop_quit (bonobo_main_loops->data);
-+}
-+
-+int
-+vim_bonobo_main_level(void)
-+{
-+ return bonobo_main_loop_level;
-+}
-+
-+gboolean
-+vim_bonobo_main_iteration_do(may_block)
-+{
-+ g_main_context_iteration(NULL, may_block);
-+}
-diff --new-file -u -r --exclude-from=excludelist vimcopy/src/vim_bonobo_main.h vim/src/vim_bonobo_main.h
---- vimcopy/src/vim_bonobo_main.h Wed Dec 31 18:00:00 1969
-+++ vim/src/vim_bonobo_main.h Sat Jul 26 13:16:48 2003
-@@ -0,0 +1,14 @@
-+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-+
-+#ifndef __VIM_BONOBO_MAIN_H__
-+#define __VIM_BONOBO_MAIN_H__
-+
-+#include <glib-object.h>
-+#include <bonobo/Bonobo.h>
-+
-+void vim_bonobo_main (void);
-+void vim_bonobo_main_quit (void);
-+int vim_bonobo_level(void);
-+gboolean vim_bonobo_main_iteration_do(int may_block);
-+
-+#endif /* __VIM_BONOBO_MAIN_H__ */
-Binary files vimcopy/src/xxd/xxd and vim/src/xxd/xxd differ
-diff --new-file -u -r --exclude-from=excludelist vimcopy/vim/src/Make_container.mak vim/vim/src/Make_container.mak
---- vimcopy/vim/src/Make_container.mak Wed Dec 31 18:00:00 1969
-+++ vim/vim/src/Make_container.mak Sat Jul 26 13:16:48 2003
-@@ -0,0 +1,11 @@
-+gnomeccFlags = `pkg-config --cflags libgnomeui-2.0 libgnome-2.0`
-+ccFlags = -g -c ${gnomeccFlags}
-+ldFlags = `pkg-config --libs libgnomeui-2.0 libgnome-2.0`
-+
-+all: container
-+
-+container: container.o
-+ gcc -o container ${ldFlags} container.o
-+
-+%.o: %.c
-+ gcc ${ccFlags} $< -o $@
+++ /dev/null
---- vim-5.7/runtime/doc/vim.1.paths Fri Aug 4 15:41:18 2000
-+++ vim-5.7/runtime/doc/vim.1 Fri Aug 4 15:49:02 2000
-@@ -350,42 +350,42 @@
- ":help syntax.txt".
- .SH FILES
- .TP 15
--/usr/local/lib/vim/doc/*.txt
-+/usr/share/vim/doc/*.txt
- The
- .B Vim
- documentation files.
- Use ":help doc-file-list" to get the complete list.
- .TP
--/usr/local/lib/vim/doc/tags
-+/usr/share/vim/doc/tags
- The tags file used for finding information in the documentation files.
- .TP
--/usr/local/lib/vim/syntax/syntax.vim
-+/usr/share/vim/syntax/syntax.vim
- System wide syntax initializations.
- .TP
--/usr/local/lib/vim/syntax/*.vim
-+/usr/share/vim/syntax/*.vim
- Syntax files for various languages.
- .TP
--/usr/local/lib/vim/vimrc
-+/etc/vim/vimrc
- System wide
- .B Vim
- initializations.
- .TP
--/usr/local/lib/vim/gvimrc
-+/etc/vim/gvimrc
- System wide gvim initializations.
- .TP
--/usr/local/lib/vim/optwin.vim
-+/usr/share/vim/optwin.vim
- Script used for the ":options" command, a nice way to view and set options.
- .TP
--/usr/local/lib/vim/menu.vim
-+/usr/share/vim/menu.vim
- System wide menu initializations for gvim.
- .TP
--/usr/local/lib/vim/bugreport.vim
-+/usr/share/vim/bugreport.vim
- Script to generate a bug report. See ":help bugs".
- .TP
--/usr/local/lib/vim/filetype.vim
-+/usr/share/vim/filetype.vim
- Script to detect the type of a file by its name. See ":help 'filetype'".
- .TP
--/usr/local/lib/vim/scripts.vim
-+/usr/share/vim/scripts.vim
- Script to detect the type of a file by its contents. See ":help 'filetype'".
- .PP
- For recent info read the VIM home page:
+++ /dev/null
-diff -Nur vim-5.4k/src/os_unix.h vim-5.4k.pld/src/os_unix.h
---- vim-5.4k/src/os_unix.h Tue May 11 17:42:25 1999
-+++ vim-5.4k.pld/src/os_unix.h Sun Jun 13 17:55:19 1999
-@@ -243,7 +243,7 @@
- # ifdef OS2
- # define DEF_BDIR ".,c:/tmp,~/tmp,~/"
- # else
--# define DEF_BDIR ".,~/tmp,~/" /* default for 'backupdir' */
-+# define DEF_BDIR ".,~/tmp,/var/lib/vim" /* default for 'backupdir' */
- # endif
- #endif
-
-@@ -251,7 +251,7 @@
- # ifdef OS2
- # define DEF_DIR ".,~/tmp,c:/tmp,/tmp"
- # else
--# define DEF_DIR ".,~/tmp,/var/tmp,/tmp" /* default for 'directory' */
-+# define DEF_DIR ".,~/tmp,/var/lib/vim,/var/tmp,/tmp" /* default for 'directory' */
- # endif
- #endif
-
-@@ -259,7 +259,7 @@
- #ifdef OS2
- # define MAKEEF "vim##.err"
- #else
--# define MAKEEF "/tmp/vim##.err"
-+# define MAKEEF "~/tmp/vim##.err"
- #endif
-
- #ifdef OS2
+++ /dev/null
---- src/globals.h.old Tue Jan 5 20:10:00 1999
-+++ src/globals.h Wed Jan 13 13:54:46 1999
-@@ -215,7 +215,9 @@
- /* found "-rv" or "-reverse" in command line args */
- EXTERN int found_reverse_arg INIT(= FALSE);
- EXTERN char * font_opt INIT(= NULL);
-+#endif
-
-+#if defined(USE_GUI) || defined(GPM_MOUSE)
- /*
- * While executing external commands or in Ex mode, should not insert GUI
- * events in the input buffer: Set hold_gui_events to non-zero.
+++ /dev/null
---- vim60/src/spell/config.h.orig Mon Feb 18 21:18:22 2002
-+++ vim60/src/spell/config.h Mon Feb 18 21:19:42 2002
-@@ -496,7 +496,7 @@
- #define MASKTYPE long
- #endif
- #ifndef MASKTYPE_WIDTH
--#define MASKTYPE_WIDTH 32
-+#define MASKTYPE_WIDTH 64
- #endif
- #if MASKBITS < MASKTYPE_WIDTH
- #undef MASKBITS
+++ /dev/null
-diff -urBbN vim64.org/src/edit.c vim64/src/edit.c
---- vim64.org/src/edit.c 2005-04-08 11:16:31.000000000 +0200
-+++ vim64/src/edit.c 2005-10-17 12:49:17.442845032 +0200
-@@ -659,7 +659,11 @@
- if ((c == Ctrl_V || c == Ctrl_Q) && ctrl_x_mode == CTRL_X_CMDLINE)
- goto docomplete;
- #endif
-- if (c == Ctrl_V || c == Ctrl_Q)
-+ if (c == Ctrl_V
-+#ifndef FEAT_SPELL_HL /* WM */
-+ || c == Ctrl_Q
-+#endif
-+ )
- {
- ins_ctrl_v();
- c = Ctrl_V; /* pretend CTRL-V is last typed character */
-@@ -1231,6 +1235,20 @@
- continue_status = 0;
- break;
- #endif /* FEAT_INS_EXPAND */
-+#ifdef FEAT_SPELL_HL /* WM */
-+ case Ctrl_Q:
-+ if(set_to_private_dict(
-+ ml_get_buf(curbuf, curwin->w_cursor.lnum, FALSE),
-+ curwin->w_cursor.col, FALSE))
-+ vim_beep();
-+ break;
-+ case Ctrl_S:
-+ if(set_to_private_dict(
-+ ml_get_buf(curbuf, curwin->w_cursor.lnum, FALSE),
-+ curwin->w_cursor.col, TRUE))
-+ vim_beep();
-+ break;
-+#endif
-
- case Ctrl_Y: /* copy from previous line or scroll down */
- case Ctrl_E: /* copy from next line or scroll up */
-diff -urBbN vim64.org/src/eval.c vim64/src/eval.c
---- vim64.org/src/eval.c 2004-07-28 11:53:18.000000000 +0200
-+++ vim64/src/eval.c 2005-10-17 12:49:17.448844120 +0200
-@@ -4995,6 +4995,9 @@
- #ifdef FEAT_SNIFF
- "sniff",
- #endif
-+#ifdef FEAT_SPELL_HL
-+ "spell",
-+#endif
- #ifdef FEAT_STL_OPT
- "statusline",
- #endif
-diff -urBbN vim64.org/src/ex_cmds.h vim64/src/ex_cmds.h
---- vim64.org/src/ex_cmds.h 2004-08-30 14:58:51.000000000 +0200
-+++ vim64/src/ex_cmds.h 2005-10-17 12:49:17.449843968 +0200
-@@ -726,6 +726,8 @@
- BANG|FILE1|TRLBAR|SBOXOK|CMDWIN),
- EX(CMD_split, "split", ex_splitview,
- BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
-+EX(CMD_spell, "spell", ex_spell,
-+ EXTRA|NOTRLCOM|CMDWIN),
- EX(CMD_sprevious, "sprevious", ex_previous,
- EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR),
- EX(CMD_srewind, "srewind", ex_rewind,
-diff -urBbN vim64.org/src/ex_docmd.c vim64/src/ex_docmd.c
---- vim64.org/src/ex_docmd.c 2005-10-08 16:24:04.000000000 +0200
-+++ vim64/src/ex_docmd.c 2005-10-17 12:49:17.455843056 +0200
-@@ -220,6 +220,9 @@
- #ifndef FEAT_SYN_HL
- # define ex_syntax ex_ni
- #endif
-+#ifndef FEAT_SPELL_HL
-+# define ex_spell ex_ni
-+#endif
- #ifndef FEAT_PERL
- # define ex_perl ex_script_ni
- # define ex_perldo ex_ni
-@@ -3413,6 +3416,12 @@
- set_context_in_syntax_cmd(xp, arg);
- break;
- #endif
-+#ifdef FEAT_SPELL_HL
-+ case CMD_spell:
-+ return arg;
-+ break;
-+#endif
-+
- #ifdef FEAT_EVAL
- case CMD_let:
- case CMD_if:
-diff -urBbN vim64.org/src/feature.h vim64/src/feature.h
---- vim64.org/src/feature.h 2005-01-13 19:22:50.000000000 +0100
-+++ vim64/src/feature.h 2005-10-17 12:49:17.457842752 +0200
-@@ -314,6 +314,11 @@
- # define FEAT_RIGHTLEFT
- # endif
- #endif
-+#ifdef FEAT_BIG
-+#undef FEAT_RIGHTLEFT
-+#undef FEAT_FKMAP
-+#endif
-+/* # define FEAT_PRINTER */
-
- /*
- * +arabic Arabic keymap and shaping support.
-diff -urBbN vim64.org/src/globals.h vim64/src/globals.h
---- vim64.org/src/globals.h 2004-06-27 15:44:13.000000000 +0200
-+++ vim64/src/globals.h 2005-10-17 12:49:17.458842600 +0200
-@@ -877,6 +877,9 @@
- #ifdef USE_TERM_CONSOLE
- EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */
- #endif
-+#ifdef FEAT_SPELL_HL
-+EXTERN char_u hashname[MAXPATHL]; /* name of the dictionary */
-+#endif
- EXTERN int termcap_active INIT(= FALSE); /* set by starttermcap() */
- EXTERN int cur_tmode INIT(= TMODE_COOK); /* input terminal mode */
- EXTERN int bangredo INIT(= FALSE); /* set to TRUE whith ! command */
-diff -urBbN vim64.org/src/main.c vim64/src/main.c
---- vim64.org/src/main.c 2005-02-15 14:09:15.000000000 +0100
-+++ vim64/src/main.c 2005-10-17 12:49:17.461842144 +0200
-@@ -2263,6 +2263,10 @@
- write_viminfo(NULL, FALSE);
- #endif
-
-+#ifdef FEAT_SPELL_HL
-+ spell_save_private_dict();
-+#endif
-+
- #ifdef FEAT_AUTOCMD
- apply_autocmds(EVENT_VIMLEAVE, NULL, NULL, FALSE, curbuf);
- #endif
-diff -urBbN vim64.org/src/Makefile vim64/src/Makefile
---- vim64.org/src/Makefile 2005-10-15 13:52:15.000000000 +0200
-+++ vim64/src/Makefile 2005-10-17 12:51:51.656401008 +0200
-@@ -1211,6 +1211,22 @@
- # Use this for cproto 3 patchlevel 7 or above (use "cproto -V" to check):
- PROTO_FLAGS = -m -M__ARGS -d -E"$(CPP)" $(NO_ATTR)
-
-+SPELL_SRC = spell.c \
-+ spell/good.c \
-+ spell/lookup.c \
-+ spell/hash.c \
-+ spell/makedent.c \
-+ spell/tree.c \
-+ spell/tgood.c \
-+ spell/util.c
-+SPELL_OBJ = objects/spell.o \
-+ objects/good.o \
-+ objects/lookup.o \
-+ objects/hash.o \
-+ objects/makedent.o \
-+ objects/tree.o \
-+ objects/tgood.o \
-+ objects/util.o
-
- ################################################
- ## no changes required below this line ##
-@@ -1221,7 +1237,7 @@
- .SUFFIXES:
- .SUFFIXES: .cc .c .o .pro
-
--PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
-+PRE_DEFS = -Iproto -Ispell $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
- POST_DEFS = $(X_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS)
-
- ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
-@@ -1305,6 +1321,7 @@
- screen.c \
- search.c \
- syntax.c \
-+ $(SPELL_SRC) \
- tag.c \
- term.c \
- ui.c \
-@@ -1371,6 +1388,7 @@
- objects/screen.o \
- objects/search.o \
- objects/syntax.o \
-+ $(SPELL_OBJ) \
- $(SNIFF_OBJ) \
- objects/tag.o \
- objects/term.o \
-@@ -2327,6 +2345,9 @@
- objects/undo.o: undo.c
- $(CCC) -o $@ undo.c
-
-+objects/spell.o: spell.c spell/local.h
-+ $(CCC) -o $@ spell.c
-+
- objects/window.o: window.c
- $(CCC) -o $@ window.c
-
-@@ -2561,6 +2582,9 @@
- ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \
- proto/gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \
- arabic.h
-+objects/spell.o: spell.c vim.h spell/config.h feature.h os_unix.h auto/osdef.h \
-+ ascii.h keymap.h term.h macros.h regexp.h structs.h gui.h globals.h farsi.h \
-+ option.h ex_cmds.h proto.h spell/local.h spell/wm.h spell/ispell.h
- objects/syntax.o: syntax.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
- ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h gui_beval.h \
- proto/gui_beval.pro option.h ex_cmds.h proto.h globals.h farsi.h \
-@@ -2691,3 +2715,27 @@
- auto/osdef.h ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h \
- gui_beval.h proto/gui_beval.pro option.h ex_cmds.h proto.h globals.h \
- farsi.h arabic.h version.h
-+
-+SPELL_CFLAGS=$(CFLAGS) -pedantic -DUSG=1
-+
-+objects/good.o: spell/good.c spell/config.h spell/ispell.h spell/i_proto.h spell/msgs.h spell/local.h
-+ $(CC) -c $(SPELL_CFLAGS) spell/good.c -o objects/good.o
-+
-+objects/lookup.o: spell/lookup.c spell/config.h spell/ispell.h spell/i_proto.h spell/msgs.h spell/local.h
-+ $(CC) -c $(SPELL_CFLAGS) spell/lookup.c -o objects/lookup.o
-+
-+objects/hash.o: spell/hash.c spell/config.h spell/ispell.h spell/i_proto.h spell/local.h
-+ $(CC) -c $(SPELL_CFLAGS) spell/hash.c -o objects/hash.o
-+
-+objects/makedent.o: spell/makedent.c spell/config.h spell/ispell.h spell/i_proto.h spell/msgs.h spell/local.h
-+ $(CC) -c $(SPELL_CFLAGS) spell/makedent.c -o objects/makedent.o
-+
-+objects/tree.o: spell/tree.c spell/config.h spell/ispell.h spell/i_proto.h spell/msgs.h spell/local.h
-+ $(CC) -c $(SPELL_CFLAGS) spell/tree.c -o objects/tree.o
-+
-+objects/tgood.o: spell/tgood.c spell/config.h spell/ispell.h spell/i_proto.h spell/local.h
-+ $(CC) -c $(SPELL_CFLAGS) spell/tgood.c -o objects/tgood.o
-+
-+objects/util.o: spell/util.c spell/config.h spell/ispell.h spell/i_proto.h spell/local.h
-+ $(CC) -c $(SPELL_CFLAGS) spell/util.c -o objects/util.o
-+
-diff -urBbN vim64.org/src/normal.c vim64/src/normal.c
---- vim64.org/src/normal.c 2005-10-06 20:42:06.000000000 +0200
-+++ vim64/src/normal.c 2005-10-17 12:49:17.471840624 +0200
-@@ -84,6 +84,10 @@
- #ifdef FEAT_VISUAL
- static int get_visual_text __ARGS((cmdarg_T *cap, char_u **pp, int *lenp));
- #endif
-+#ifdef FEAT_SPELL_HL
-+static void nv_settodict_q __ARGS((cmdarg_T *cap));
-+static void nv_settodict_s __ARGS((cmdarg_T *cap));
-+#endif
- static void nv_tagpop __ARGS((cmdarg_T *cap));
- static void nv_scroll __ARGS((cmdarg_T *cap));
- static void nv_right __ARGS((cmdarg_T *cap));
-@@ -232,9 +236,17 @@
- {Ctrl_N, nv_down, NV_STS, FALSE},
- {Ctrl_O, nv_ctrlo, 0, 0},
- {Ctrl_P, nv_up, NV_STS, FALSE},
-+#ifdef FEAT_SPELL_HL
-+ {Ctrl_Q, nv_settodict_q, 0, 0},
-+#else
- {Ctrl_Q, nv_ignore, 0, 0},
-+#endif
- {Ctrl_R, nv_redo, 0, 0},
-+#ifdef FEAT_SPELL_HL
-+ {Ctrl_S, nv_settodict_s, 0, 0},
-+#else
- {Ctrl_S, nv_ignore, 0, 0},
-+#endif
- {Ctrl_T, nv_tagpop, NV_NCW, 0},
- {Ctrl_U, nv_halfpage, 0, 0},
- #ifdef FEAT_VISUAL
-@@ -7845,6 +7857,28 @@
- #endif
- }
-
-+#ifdef FEAT_SPELL_HL
-+static void
-+nv_settodict_q(cap)
-+ cmdarg_T *cap;
-+{
-+ if(set_to_private_dict(
-+ ml_get_buf(curbuf, curwin->w_cursor.lnum, FALSE),
-+ curwin->w_cursor.col, FALSE))
-+ clearopbeep(cap->oap);
-+}
-+
-+static void
-+nv_settodict_s(cap)
-+ cmdarg_T *cap;
-+{
-+ if(set_to_private_dict(
-+ ml_get_buf(curbuf, curwin->w_cursor.lnum, FALSE),
-+ curwin->w_cursor.col, TRUE))
-+ clearopbeep(cap->oap);
-+}
-+#endif
-+
- #ifdef FEAT_VISUAL
- /*
- * In exclusive Visual mode, may include the last character.
-diff -urBbN vim64.org/src/option.c vim64/src/option.c
---- vim64.org/src/option.c 2005-10-08 16:27:46.000000000 +0200
-+++ vim64/src/option.c 2005-10-17 12:49:17.478839560 +0200
-@@ -121,6 +121,8 @@
- , PV_SW
- , PV_SWF
- , PV_SYN
-+ , PV_SPELL_DIR
-+ , PV_SPELL_LANG
- , PV_TAGS
- , PV_TS
- , PV_TSR
-@@ -221,6 +223,10 @@
- #ifdef FEAT_SYN_HL
- static char_u *p_syn;
- #endif
-+#ifdef FEAT_SPELL_HL
-+static char_u *p_spelldirectory;
-+static char_u *p_language;
-+#endif
- static long p_ts;
- static long p_tw;
- static int p_tx;
-@@ -1073,7 +1079,7 @@
- {(char_u *)FALSE, (char_u *)0L}},
- {"highlight", "hl", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
- (char_u *)&p_hl, PV_NONE,
-- {(char_u *)"8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn",
-+ {(char_u *)"8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,Z:Spell",
- (char_u *)0L}},
- {"history", "hi", P_NUM|P_VIM,
- (char_u *)&p_hi, PV_NONE,
-@@ -1338,6 +1344,13 @@
- (char_u *)NULL, PV_NONE,
- #endif
- {(char_u *)"", (char_u *)0L}},
-+ {"language", "lang", P_STRING|P_ALLOCED|P_VI_DEF,
-+#ifdef FEAT_SPELL_HL
-+ (char_u *)&p_language, PV_SPELL_LANG,
-+#else
-+ (char_u *)NULL, PV_NONE,
-+#endif
-+ {(char_u *)"", (char_u *)0L}},
- {"laststatus", "ls", P_NUM|P_VI_DEF|P_RALL,
- #ifdef FEAT_WINDOWS
- (char_u *)&p_ls, PV_NONE,
-@@ -1936,6 +1949,14 @@
- {"sourceany", NULL, P_BOOL|P_VI_DEF,
- (char_u *)NULL, PV_NONE,
- {(char_u *)FALSE, (char_u *)0L}},
-+ {"spelldirectory", "spelldir", P_STRING|P_ALLOCED|P_VI_DEF|P_EXPAND,
-+#ifdef FEAT_SPELL_HL
-+ (char_u *)&p_spelldirectory, PV_SPELL_DIR,
-+ {(char_u *)"/usr/lib/ispell", (char_u *)0L}},
-+#else
-+ (char_u *)NULL, PV_NONE,
-+ {(char_u *)"", (char_u *)0L}},
-+#endif
- {"splitbelow", "sb", P_BOOL|P_VI_DEF,
- #ifdef FEAT_WINDOWS
- (char_u *)&p_sb, PV_NONE,
-@@ -4835,6 +4856,26 @@
- errmsg = e_invarg;
- }
- #endif
-+#ifdef FEAT_SPELL_HL
-+ else if (varp == &p_spell_dir)
-+ {
-+ STRCPY(hashname, p_spell_dir);
-+ STRCAT(hashname, "/");
-+ STRCAT(hashname, p_spell_lang);
-+ STRCAT(hashname, ".hash");
-+ reload_dict();
-+ redraw_all_later(NOT_VALID);
-+ }
-+ else if (varp == &p_spell_lang)
-+ {
-+ STRCPY(hashname, p_spell_dir);
-+ STRCAT(hashname, "/");
-+ STRCAT(hashname, p_spell_lang);
-+ STRCAT(hashname, ".hash");
-+ reload_dict();
-+ redraw_all_later(NOT_VALID);
-+ }
-+#endif
-
- #ifdef FEAT_MBYTE
- /* 'encoding' and 'fileencoding' */
-@@ -7951,6 +7992,10 @@
- #ifdef FEAT_SYN_HL
- case PV_SYN: return (char_u *)&(curbuf->b_p_syn);
- #endif
-+#ifdef FEAT_SPELL_HL
-+ case PV_SPELL_DIR: return (char_u *)&(p_spell_dir);
-+ case PV_SPELL_LANG: return (char_u *)&(p_spell_lang);
-+#endif
- case PV_SW: return (char_u *)&(curbuf->b_p_sw);
- case PV_TS: return (char_u *)&(curbuf->b_p_ts);
- case PV_TW: return (char_u *)&(curbuf->b_p_tw);
-diff -urBbN vim64.org/src/option.h vim64/src/option.h
---- vim64.org/src/option.h 2004-05-05 11:43:49.000000000 +0200
-+++ vim64/src/option.h 2005-10-17 12:49:17.494837128 +0200
-@@ -385,6 +385,8 @@
- EXTERN char_u *p_dex; /* 'diffexpr' */
- # endif
- #endif
-+EXTERN char_u *p_spell_dir; /* directory with spell hash*/
-+EXTERN char_u *p_spell_lang; /* name of language (spell hash file)*/
- #ifdef FEAT_INS_EXPAND
- EXTERN char_u *p_dict; /* 'dictionary' */
- #endif
-diff -urBbN vim64.org/src/proto/spell.pro vim64/src/proto/spell.pro
---- vim64.org/src/proto/spell.pro 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/proto/spell.pro 2005-10-17 12:49:17.495836976 +0200
-@@ -0,0 +1,5 @@
-+int reload_dict(void);\r
-+void ex_spell(exarg_T *eap);\r
-+int get_spell_attr(colnr_T spell_col, colnr_T col, char_u *line);\r
-+int set_to_private_dict(char *line, int cursor_col, int convert_to_lower);\r
-+void spell_save_private_dict(void);\r
-diff -urBbN vim64.org/src/proto.h vim64/src/proto.h
---- vim64.org/src/proto.h 2005-10-08 16:22:32.000000000 +0200
-+++ vim64/src/proto.h 2005-10-17 12:49:17.496836824 +0200
-@@ -72,6 +72,9 @@
- # include "os_qnx.pro"
- # endif
-
-+#ifdef FEAT_SPELL_HL
-+# include "spell.pro"
-+#endif
- # include "buffer.pro"
- # include "charset.pro"
- # ifdef FEAT_CSCOPE
-diff -urBbN vim64.org/src/screen.c vim64/src/screen.c
---- vim64.org/src/screen.c 2005-01-19 11:03:00.000000000 +0100
-+++ vim64/src/screen.c 2005-10-17 12:49:17.501836064 +0200
-@@ -118,6 +118,9 @@
- static match_T match_hl; /* used for ":match" highlight matching */
- #endif
-
-+#ifdef FEAT_SPELL_HL
-+extern int spell_flag;
-+#endif
- #ifdef FEAT_FOLDING
- static foldinfo_T win_foldinfo; /* info for 'foldcolumn' */
- #endif
-@@ -2536,6 +2539,9 @@
- int has_syntax = FALSE; /* this buffer has syntax highl. */
- int save_did_emsg;
- #endif
-+#ifdef FEAT_SPELL_HL
-+ int spell_attr = 0;
-+#endif
- int extra_check; /* has syntax or linebreak */
- #ifdef FEAT_MBYTE
- int multi_attr = 0; /* attributes desired by multibyte */
-@@ -2614,8 +2620,18 @@
- #else
- extra_check = 0;
- #endif
-+#if defined(FEAT_SYN_HL) || defined(FEAT_SPELL_HL)
-+ if (
- #ifdef FEAT_SYN_HL
-- if (syntax_present(wp->w_buffer))
-+ syntax_present(wp->w_buffer)
-+#else
-+ 0
-+#endif
-+#ifdef FEAT_SPELL_HL
-+ ||
-+ spell_flag
-+#endif
-+ )
- {
- /* Prepare for syntax highlighting in this line. When there is an
- * error, stop syntax highlighting. */
-@@ -3262,6 +3278,10 @@
- else if (search_attr == 0 && has_syntax)
- char_attr = syntax_attr;
- #endif
-+#ifdef FEAT_SPELL_HL
-+ else if (spell_flag)
-+ char_attr = spell_attr;
-+#endif
- else
- char_attr = search_attr;
-
-@@ -3576,6 +3596,17 @@
- char_attr = syntax_attr;
- }
- #endif
-+#ifdef FEAT_SPELL_HL
-+ if (spell_flag)
-+ {
-+ v = ptr - line;
-+ spell_attr = get_spell_attr((colnr_T)v - 1, col,
-+ ml_get_buf(wp->w_buffer,
-+ lnum, FALSE));
-+ if (area_attr == 0 && search_attr == 0 && spell_attr)
-+ char_attr = spell_attr;
-+ }
-+#endif
- #ifdef FEAT_LINEBREAK
- /*
- * Found last space before word: check for line break
-diff -urBbN vim64.org/src/spell/config.h vim64/src/spell/config.h
---- vim64.org/src/spell/config.h 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/config.h 2005-10-17 12:49:17.504835608 +0200
-@@ -0,0 +1,846 @@
-+#include "local.h" /* local definitions for options */
-+
-+/*
-+** Major-differences selection. The default system is BSD; for USG
-+** or non-UNIX systems you should add the appropriate #define to local.h.
-+*/
-+#ifndef USG
-+#undef USG /* Define this in local.h for System V machines */
-+#endif /* USG */
-+
-+#ifndef WIN32
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#endif
-+#ifndef USG
-+# ifndef FEAT_SPELL_HL
-+# if HAVE_DIRENT_H
-+# include <dirent.h>
-+# ifndef NAMLEN
-+# define NAMLEN(dirent) strlen((dirent)->d_name)
-+# endif
-+# else
-+# define dirent direct
-+# define NAMLEN(dirent) (dirent)->d_namlen
-+# if HAVE_SYS_NDIR_H
-+# include <sys/ndir.h>
-+# endif
-+# if HAVE_SYS_DIR_H
-+# include <sys/dir.h>
-+# endif
-+# if HAVE_NDIR_H
-+# include <ndir.h>
-+# endif
-+# endif
-+# endif
-+#endif /* USG */
-+
-+/*
-+** Things that normally go in a Makefile. Define these just like you
-+** might in the Makefile, except you should use #define instead of
-+** make's assignment syntax. Everything must be double-quoted, and
-+** (unlike make) you can't use any sort of $-syntax to pick up the
-+** values of other definitions.
-+*/
-+#ifndef CC
-+#define CC "cc"
-+#endif /* CC */
-+#ifndef EMACS
-+#define EMACS "emacs"
-+#endif /* EMACS */
-+#ifndef LINT
-+#define LINT "lint"
-+#endif /* LINT */
-+#ifndef CFLAGS
-+#define CFLAGS "-O"
-+#endif /* CFLAGS */
-+#ifndef LINTFLAGS
-+#define LINTFLAGS ""
-+#endif /* LINTFLAGS */
-+#ifndef YACC
-+#define YACC "yacc"
-+#endif /* YACC */
-+
-+/*
-+** Libraries that may need to be added to the cc line to get ispell to
-+** link. Normally, this should be null.
-+*/
-+#ifndef LIBES
-+#define LIBES ""
-+#endif
-+
-+/*
-+** TERMLIB - where to get the termcap library. Should be -ltermcap or
-+** -lcurses on most systems.
-+*/
-+#ifndef TERMLIB
-+#define TERMLIB "-lncurses"
-+#endif
-+
-+/*
-+** REGLIB - where to get the regular-expression routines, if
-+** REGEX_LOOKUP is defined. Should be -lPW on USG systems, null on
-+** BSD systems.
-+*/
-+#ifndef REGLIB
-+#define REGLIB ""
-+#endif
-+
-+/*
-+** Where to install various components of ispell. BINDIR contains
-+** binaries. LIBDIR contains hash tables and affix files. ELISPDIR
-+** contains emacs lisp files (if any) and TEXINFODIR contains emacs
-+** TeXinfo files. MAN1DIR and MAN4DIR will hold the chapter-1 and
-+** chapter-4 manual pages, respectively.
-+**
-+** If you intend to use multiple dictionary files, I would suggest
-+** LIBDIR be a directory which will contain nothing else, so sensible
-+** names can be constructed for the -d option without conflict.
-+*/
-+#ifndef BINDIR
-+#define BINDIR "/usr/bin"
-+#endif
-+#ifndef LIBDIR
-+#define LIBDIR "/usr/lib/ispell"
-+#endif
-+#ifndef ELISPDIR
-+#define ELISPDIR "/usr/lib/emacs/site-lisp"
-+#endif
-+#ifndef TEXINFODIR
-+#define TEXINFODIR "/usr/share/info"
-+#endif
-+#ifndef MAN1DIR
-+#define MAN1DIR "/usr/share/man/man1"
-+#endif
-+#ifndef MAN4DIR
-+#define MAN4DIR "/usr/share/man/man4"
-+#endif
-+
-+/*
-+** Extensions to put on manual pages. Usually these are ".1" or ".1l".
-+*/
-+#ifndef MAN1EXT
-+#define MAN1EXT ".1"
-+#endif
-+#ifndef MAN4EXT
-+#define MAN4EXT ".4"
-+#endif
-+
-+/*
-+** List of all hash files (languages) which will be supported by ispell.
-+**
-+** This variable has a complex format so that many options can be
-+** specified. The format is as follows:
-+**
-+** <language>[,<make-options>...] [<language> [,<make-options> ...] ...]
-+**
-+** where
-+**
-+** language is the name of a subdirectory of the
-+** "languages" directory
-+** make-options are options that are to be passed to "make" in
-+** the specified directory. The make-options
-+** should not, in general, specify a target, as
-+** this will be provided by the make process.
-+**
-+** For example, if LANGUAGES is:
-+**
-+** "{american,MASTERDICTS=american.med+,HASHFILES=americanmed+.hash,EXTRADICT=/usr/dict/words /usr/dict/web2} {deutsch,DICTALWAYS=deutsch.sml,DICTOPTIONS=}"
-+**
-+** then the American-English and Deutsch (German) languages will be supported,
-+** and the following variable settings will be passed to the two Makefiles:
-+**
-+** American:
-+**
-+** MASTERDICTS='american.med+'
-+** HASHFILES='americanmed+.hash'
-+** EXTRADICT='/usr/dict/words /usr/dict/web2'
-+**
-+** Deutsch:
-+**
-+** DICTALWAYS='deutsch.sml'
-+** DICTOPTIONS=''
-+**
-+** Notes on the syntax: The makefile is not very robust. If you have
-+** make problems, or if make seems to fail in the language-subdirs
-+** dependency, check your syntax. The makefile adds single quotes to
-+** the individual variables in the LANGUAGES specification, so don't
-+** use quotes of any kind.
-+**
-+** In the future, the first language listed in this variable will
-+** become the default, and the DEFHASH, DEFLANG, and DEFPAFF,
-+** variables will all become obsolete. So be sure to put your default
-+** language first, to make later conversion easier!
-+**
-+** Notes on options for the various languages will be found in the
-+** Makefiles for those languages. Some of those languages may require
-+** you to also change various limits limits like MASKBITS or the
-+** length parameters.
-+**
-+** A special note on the English language: because the British and
-+** American dialects use different spelling, you should usually select
-+** one or the other of these. If you select both, the setting of
-+** MASTERHASH will determine which becomes the language linked to
-+** DEFHASH (which will usually be named english.hash).
-+**
-+** On MSDOS systems you must use names which are consistent with the
-+** 8+3 filename restrictions, or you will risk filename collision. See
-+** the file pc/local.djgpp for details.
-+*/
-+#ifndef LANGUAGES
-+#define LANGUAGES "{american,MASTERDICTS=american.med+,HASHFILES=americanmed+.hash,EXTRADICT=/usr/dict/words}"
-+#endif /* LANGUAGES */
-+
-+/*
-+** Master hash file for DEFHASH. This is the name of a hash file
-+** built by a language Makefile. It should be the most-popular hash
-+** file on your system, because it is the one that will be used by
-+** default. It must be listed in LANGUAGES, above.
-+*/
-+#ifndef MASTERHASH
-+#define MASTERHASH "polish+.hash"
-+#endif
-+
-+/*
-+** Default native-language hash file. This is the name given to the
-+** hash table that will be used if no language is specified to
-+** ispell. It is a link to MASTERHASH, above.
-+*/
-+#ifndef DEFHASH
-+#define DEFHASH "polish.hash"
-+#endif
-+
-+/*
-+** Language tables for the default language. This must be the name of
-+** the affix file that was used to generate the MASTERHASH/DEFHASH,
-+** above.
-+*/
-+#ifndef DEFLANG
-+#define DEFLANG "polish.aff"
-+#endif
-+
-+/*
-+** Language to use for error messages. If there are no messages in this
-+** language, English will be used instead.
-+*/
-+#ifndef MSGLANG
-+#define MSGLANG "polish"
-+#endif /* MSGLANG */
-+
-+/*
-+** If your sort command accepts the -T switch to set temp file
-+** locations (try it out; it exists but is undocumented on some
-+** systems), make the following variable the null string. Otherwise
-+** leave it as the sed script.
-+*/
-+#ifndef SORTTMP
-+#define SORTTMP "-e '/!!SORTTMP!!/s/=.*$/=/'"
-+#endif
-+
-+/*
-+** If your sort command accepts the -T switch (see above), make the
-+** following variable refer to a temporary directory with lots of
-+** space. Otherwise make it the null string.
-+*/
-+#ifndef MAKE_SORTTMP
-+#define MAKE_SORTTMP "-T ${TMPDIR-/usr/tmp}"
-+#endif
-+
-+/*
-+** If your shell needs ": Use /bin/sh" at the first line of a shell
-+** script, make the following variable the null string. Otherwise
-+** leave it as this sed script which will put a "#!/bin/sh" there.
-+*/
-+#ifndef MAKE_POUND_BANG
-+#define MAKE_POUND_BANG "-e 1s,^:.*Use.*/bin/sh,#!/bin/sh,"
-+#endif
-+
-+
-+/*
-+** INSTALL program. Could be a copy program like cp or something fancier
-+** like /usr/ucb/install -c
-+*/
-+#ifndef INSTALL
-+#define INSTALL "cp"
-+#endif
-+
-+/*
-+** If your system has the rename(2) system call, define HAS_RENAME and
-+** ispell will use that call to rename backup files. Otherwise, it
-+** will use link/unlink. There is no harm in this except on MS-DOS,
-+** which doesn't support link/unlink.
-+*/
-+#ifndef HAS_RENAME
-+#undef HAS_RENAME
-+#endif /* HAS_RENAME */
-+
-+/* type given to signal() by signal.h */
-+#ifndef SIGNAL_TYPE
-+#define SIGNAL_TYPE void
-+#endif
-+
-+/* environment variable for user's word list */
-+#ifndef PDICTVAR
-+#define PDICTVAR "WORDLIST"
-+#endif
-+
-+/* prefix part of default word list */
-+#ifndef DEFPDICT
-+#define DEFPDICT ".ispell_"
-+#endif
-+
-+/*
-+** suffix part of default word list
-+*/
-+#ifndef DEFPAFF
-+#define DEFPAFF "words"
-+#endif
-+
-+/* old place to look for default word list */
-+#ifndef OLDPDICT
-+#define OLDPDICT ".ispell_"
-+#endif /* OLDPDICT */
-+#ifndef OLDPAFF
-+#define OLDPAFF "words"
-+#endif /* OLDPAFF */
-+
-+/* environment variable for include file string */
-+#ifndef INCSTRVAR
-+#define INCSTRVAR "INCLUDE_STRING"
-+#endif
-+
-+/* default include string */
-+#ifndef DEFINCSTR
-+#define DEFINCSTR "&Include_File&"
-+#endif
-+
-+/* mktemp template for temporary file - MUST contain 6 consecutive X's */
-+#ifndef TEMPNAME
-+#define TEMPNAME "/tmp/ispellXXXXXX"
-+#endif
-+
-+/*
-+** If REGEX_LOOKUP is undefined, the lookup command (L) will use the look(1)
-+** command (if available) or the egrep command. If REGEX_LOOKUP is defined,
-+** the lookup command will use the internal dictionary and the
-+** regular-expression library (which you must supply separately. There is
-+** a public-domain library available; libraries are also distributed with
-+** both BSD and System V.
-+**
-+** The advantage of no REGEX_LOOKUP is that it is often much faster, especially
-+** if the look(1) command is available, that the words found are presented
-+** in alphabetical order, and that the list of words searched is larger.
-+** The advantage of REGEX_LOOKUP is that ispell doesn't need to spawn another
-+** program, and the list of words searched is exactly the list of (root) words
-+** that ispell will accept. (However, note that words formed with affixes will
-+** not be found; this can produce some artifacts. For example, since
-+** "brother" can be formed as "broth+er", a lookup command might fail to
-+** find "brother.")
-+*/
-+#ifndef REGEX_LOOKUP
-+#undef REGEX_LOOKUP
-+#endif /* REGEX_LOOKUP */
-+
-+/*
-+** Choose the proper type of regular-expression routines here. BSD
-+** and public-domain systems have routines called re_comp and re_exec;
-+** System V uses regcmp and regex.
-+**
-+** REGCTYPE is the type of a variable to hold the compiled regexp
-+** REGCMP(re,str) is the function which compiles a regexp in `str' into
-+** a compiled regexp `re' declared as REGCTYPE and
-+** returns `re'.
-+** REGEX(re,str,dummy) is a function which matches `str' against a compiled
-+** regexp in `re' and returns a non-NULL pointer if it
-+** matches, NULL otherwise.
-+** REGFREE(re) is anything that should be done when the compiled
-+** regexp `re' is no longer needed. It can be also used
-+** to allocate any structures required to compile a
-+** regexp, since it is called *before* compiling a new
-+** regexp (that's where we know that the old one will no
-+** longer be used).
-+**
-+** Here is one way of defining these if you have POSIX regexp functions:
-+**
-+** #include <sys/types.h>
-+** #include <regex.h>
-+** #define REGCTYPE regex_t *
-+** #define REGCMP(re,str) (regcomp (re, str, 0), re)
-+** #define REGEX(re, str, dummy) \
-+** (re != 0 && regexec (re, str, 0, 0, 0) == 0 ? (char *)1 : NULL)
-+** #define REGFREE(re) \
-+** do { \
-+** if (re == 0) \
-+** re = (regex_t *)calloc (1, sizeof (regex_t)); \
-+** else \
-+** regfree(re); \
-+** } while (0)
-+**
-+*/
-+#ifdef REGEX_LOOKUP
-+#ifndef REGCMP
-+#ifdef USG
-+#define REGCTYPE char *
-+#define REGCMP(re,str) regcmp (str, (char *) 0)
-+#define REGEX(re, str, dummy) regex (re, str, dummy, dummy, dummy, dummy, \
-+ dummy, dummy, dummy, dummy, dummy, dummy)
-+#define REGFREE(re) do {if (re != NULL) free (re); re = NULL;} \
-+ while (0)
-+#else /* USG */
-+#define REGCTYPE char *
-+#define REGFREE(re) (void)0
-+#define REGCMP(re,str) re_comp (str)
-+#define REGEX(re, str, dummy) re_exec (str)
-+#endif /* USG */
-+#endif /* REGCMP */
-+#endif /* REGEX_LOOKUP */
-+
-+/* look command (if look(1) MAY BE available - ignored if not) */
-+#ifndef REGEX_LOOKUP
-+#ifndef LOOK
-+#define LOOK "look -df"
-+#endif
-+#endif /* REGEX_LOOKUP */
-+
-+/* path to egrep (use speeded up version if available) */
-+#ifndef EGREPCMD
-+#ifdef USG
-+#define EGREPCMD "/bin/egrep"
-+#else
-+#define EGREPCMD "/usr/bin/egrep -i"
-+#endif
-+#endif
-+
-+/* path to wordlist for Lookup command (typically /usr/dict/{words|web2}) */
-+/* note that /usr/dict/web2 is usually a bad idea due to obscure words */
-+#ifndef WORDS
-+#define WORDS "/usr/dict/words"
-+#endif
-+
-+/* buffer size to use for file names if not in sys/param.h */
-+#ifndef MAXPATHLEN
-+#define MAXPATHLEN 240
-+#endif
-+
-+/* max file name length (will truncate to fit BAKEXT) if not in sys/param.h */
-+#ifndef MAXNAMLEN
-+#define MAXNAMLEN 14
-+#endif
-+
-+/* define if you want .bak file names truncated to MAXNAMLEN characters */
-+#ifndef TRUNCATEBAK
-+#undef TRUNCATEBAK
-+#endif /* TRUNCATEBAK */
-+
-+/* largest word accepted from a file by any input routine, plus one */
-+#ifndef INPUTWORDLEN
-+#define INPUTWORDLEN 100
-+#endif
-+
-+/* largest amount that a word might be extended by adding affixes */
-+#ifndef MAXAFFIXLEN
-+#define MAXAFFIXLEN 20
-+#endif
-+
-+/*
-+** Define the following to suppress the 8-bit character feature.
-+** Unfortunately, this doesn't work as well as it might, because ispell
-+** only strips the 8th bit in some places. For example, it calls strcmp()
-+** quite often without first stripping parity. However, I really wonder
-+** about the utility of this option, so I haven't bothered to fix it. If
-+** you think the stripping feature of NO8BIT is useful, you might let me
-+** (Geoff Kuenning) know.
-+**
-+** Nevertheless, NO8BIT is a useful option for other reasons. If NO8BIT
-+** is defined, ispell will probably use 8-bit characters internally;
-+** this improves time efficiency and saves a small amount of space
-+** in the hash file. Thus, I recommend you specify NO8BIT unless you
-+** actually expect to be spelling files which use a 256-character set.
-+*/
-+#ifndef NO8BIT
-+#undef NO8BIT
-+#endif /* NO8BIT */
-+
-+/*
-+** Number of mask bits (affix flags) supported. Must be 32, 64, 128, or
-+** 256. If MASKBITS is 32 or 64, there are really only 26 or 58 flags
-+** available, respectively. If it is 32, the flags are named with the
-+** 26 English uppercase letters; lowercase will be converted to uppercase.
-+** If MASKBITS is 64, the 58 flags are named 'A' through 'z' in ASCII
-+** order, including the 6 special characters from 'Z' to 'a': "[\]^_`".
-+** If MASKBITS is 128 or 256, all the 7-bit or 8-bit characters,
-+** respectively, are theoretically available, though a few (newline, slash,
-+** null byte) are pretty hard to actually use successfully.
-+**
-+** Note that a number of non-English affix files depend on having a
-+** larger value for MASKBITS. See the affix files for more
-+** information.
-+*/
-+#ifndef MASKBITS
-+#define MASKBITS 64
-+#endif
-+
-+/*
-+** C type to use for masks. This should be a type that the processor
-+** accesses efficiently.
-+**
-+** MASKTYPE_WIDTH must correctly reflect the number of bits in a
-+** MASKTYPE. Unfortunately, it is also required to be a constant at
-+** preprocessor time, which means you can't use the sizeof operator to
-+** define it.
-+**
-+** Note that MASKTYPE *must* match MASKTYPE_WIDTH or you may get
-+** division-by-zero errors!
-+*/
-+#ifndef MASKTYPE
-+#define MASKTYPE long
-+#endif
-+#ifndef MASKTYPE_WIDTH
-+#define MASKTYPE_WIDTH 32
-+#endif
-+#if MASKBITS < MASKTYPE_WIDTH
-+#undef MASKBITS
-+#define MASKBITS MASKTYPE_WIDTH
-+#endif /* MASKBITS < MASKTYPE_WIDTH */
-+
-+
-+/* maximum number of include files supported by xgets; set to 0 to disable */
-+#ifndef MAXINCLUDEFILES
-+#define MAXINCLUDEFILES 5
-+#endif
-+
-+/*
-+** Maximum hash table fullness percentage. Larger numbers trade space
-+** for time.
-+**/
-+#ifndef MAXPCT
-+#define MAXPCT 70 /* Expand table when 70% full */
-+#endif
-+
-+/*
-+** Maximum number of "string" characters that can be defined in a
-+** language (affix) file. Don't forget that an upper/lower string
-+** character counts as two!
-+*/
-+#ifndef MAXSTRINGCHARS
-+#define MAXSTRINGCHARS 512
-+#endif /* MAXSTRINGCHARS */
-+
-+/*
-+** Maximum length of a "string" character. The default is appropriate for
-+** nroff-style characters starting with a backslash.
-+*/
-+#ifndef MAXSTRINGCHARLEN
-+#define MAXSTRINGCHARLEN 10
-+#endif /* MAXSTRINGCHARLEN */
-+
-+/*
-+** the S_NOPARITY mask is applied to user input characters from the terminal
-+** in order to mask out the parity bit.
-+*/
-+#ifdef NO8BIT
-+#define S_NOPARITY 0x7f
-+#else
-+#define S_NOPARITY 0xff
-+#endif
-+
-+
-+/*
-+** the terminal mode for ispell, set to CBREAK or RAW
-+**
-+*/
-+#ifndef TERM_MODE
-+#define TERM_MODE CBREAK
-+#endif
-+
-+/*
-+** Define this if you want your columns of words to be of equal length.
-+** This will spread short word lists across the screen instead of down it.
-+*/
-+#ifndef EQUAL_COLUMNS
-+#undef EQUAL_COLUMNS
-+#endif /* EQUAL_COLUMNS */
-+
-+/*
-+** This is the extension that will be added to backup files
-+*/
-+#ifndef BAKEXT
-+#define BAKEXT ".bak"
-+#endif
-+
-+/*
-+** Define this if you want to suppress the capitalization-checking
-+** feature. This will reduce the size of the hashed dictionary on
-+** most 16-bit and some 32-bit machines. This option is not
-+** recommended.
-+*/
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+#undef NO_CAPITALIZATION_SUPPORT
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+
-+/*
-+** Define this if you want your personal dictionary sorted. This may take
-+** a long time for very large dictionaries. Dictionaries larger than
-+** SORTPERSONAL words will not be sorted. Define SORTPERSONAL as zero
-+** to disable this feature.
-+*/
-+#ifndef SORTPERSONAL
-+#define SORTPERSONAL 1000
-+#endif
-+
-+/*
-+** Define this if you want to use the shell for interpretation of commands
-+** issued via the "L" command, "^Z" under System V, and "!". If this is
-+** not defined then a direct fork()/exec() will be used in place of the
-+** normal system(). This may speed up these operations greately on some
-+** systems.
-+*/
-+#ifndef USESH
-+#undef USESH
-+#endif /* USESH */
-+
-+/*
-+** Maximum language-table search size. Smaller numbers make ispell
-+** run faster, at the expense of more memory (the lowest reasonable value
-+** is 2). If a given character appears in a significant position in
-+** more than MAXSEARCH suffixes, it will be given its own index table.
-+** If you change this, define INDEXDUMP in lookup.c to be sure your
-+** index table looks reasonable.
-+*/
-+#ifndef MAXSEARCH
-+#define MAXSEARCH 4
-+#endif
-+
-+/*
-+** Define this if you want to be able to type any command at a "type space
-+** to continue" prompt.
-+*/
-+#ifndef COMMANDFORSPACE
-+#undef COMMANDFORSPACE
-+#endif /* COMMANDFORSPACE */
-+
-+/*
-+** Memory-allocation increment. Buildhash allocates memory in chunks
-+** of this size, and then subdivides it to get its storage. This saves
-+** much malloc execution time. A good number for this is the system
-+** page size less the malloc storage overhead.
-+**
-+** Define this to zero to revert to using malloc/realloc. This is normally
-+** useful only on systems with limited memory.
-+*/
-+#ifndef MALLOC_INCREMENT
-+#define MALLOC_INCREMENT 0
-+#endif
-+
-+/*
-+** Maximum number of "hits" expected on a word. This is basically the
-+** number of different ways different affixes can produce the same word.
-+** For example, with "english.aff", "brothers" can be produced 3 ways:
-+** "brothers," "brother+s", or "broth+ers". If this is too low, no major
-+** harm will be done, but ispell may occasionally forget a capitalization.
-+*/
-+#ifndef MAX_HITS
-+#define MAX_HITS 10
-+#endif
-+
-+/*
-+** Maximum number of capitalization variations expected in any word.
-+** Besides the obvious all-lower, all-upper, and capitalized versions,
-+** this includes followcase variants. If this is too low, no real
-+** harm will be done, but ispell may occasionally fail to suggest a
-+** correct capitalization.
-+*/
-+#ifndef MAX_CAPS
-+#define MAX_CAPS 10
-+#endif /* MAX_CAPS */
-+
-+/* Define this to ignore spelling check of entire LaTeX bibliography listings */
-+#ifndef IGNOREBIB
-+#undef IGNOREBIB
-+#endif
-+
-+/*
-+** Default nroff and TeX special characters. Normally, you won't want to
-+** change this; instead you would override it in the language-definition
-+** file.
-+*/
-+#ifndef TEXSPECIAL
-+#define TEXSPECIAL "{}$*.%#&?,;:!@~-"
-+#endif
-+
-+#ifndef NRSPECIAL
-+#define NRSPECIAL "().\\*"
-+#endif
-+
-+/*
-+** Defaults for certain command-line flags.
-+*/
-+#ifndef DEFNOBACKUPFLAG
-+#define DEFNOBACKUPFLAG 0 /* Don't suppress backup file */
-+#endif
-+#ifndef DEFTEXFLAG
-+#define DEFTEXFLAG 0 /* Default to nroff mode */
-+#endif
-+
-+/*
-+** Define this if you want ispell to place a limitation on the maximum
-+** size of the screen. On windowed workstations with very large windows,
-+** the size of the window can be too much of a good thing, forcing the
-+** user to look back and forth between the bottom and top of the screen.
-+** If MAX_SCREEN_SIZE is nonzero, screens larger than this will be treated
-+** as if they have only MAX_SCREEN_SIZE lines. A good value for this
-+** variable is 24 or 30. Define it as zero to suppress the feature.
-+*/
-+#ifndef MAX_SCREEN_SIZE
-+#define MAX_SCREEN_SIZE 0
-+#endif
-+
-+/*
-+** The next three variables are used to provide a variable-size context
-+** display at the bottom of the screen. Normally, the user will see
-+** a number of lines equal to CONTEXTPCT of his screen, rounded down
-+** (thus, with CONTEXTPCT == 10, a 24-line screen will produce two lines
-+** of context). The context will never be greater than MAXCONTEXT or
-+** less than MINCONTEXT. To disable this feature entirely, set MAXCONTEXT
-+** and MINCONTEXT to the same value. To round context percentages up,
-+** define CONTEXTROUNDUP.
-+**
-+** Warning: don't set MAXCONTEXT ridiculously large. There is a
-+** static buffer of size MAXCONTEXT*BUFSIZ; since BUFSIZ is frequently
-+** 1K or larger, this can create a remarkably large executable.
-+*/
-+#ifndef CONTEXTPCT
-+#define CONTEXTPCT 10 /* Use 10% of the screen for context */
-+#endif
-+#ifndef MINCONTEXT
-+#define MINCONTEXT 2 /* Always show at least 2 lines of context */
-+#endif
-+#ifndef MAXCONTEXT
-+#define MAXCONTEXT 10 /* Never show more than 10 lines of context */
-+#endif
-+#ifndef CONTEXTROUNDUP
-+#undef CONTEXTROUNDUP /* Don't round context up */
-+#endif
-+
-+/*
-+** Define this if you want the context lines to be displayed at the
-+** bottom of the screen, the way they used to be, rather than at the top.
-+*/
-+#ifndef BOTTOMCONTEXT
-+#undef BOTTOMCONTEXT
-+#endif /* BOTTOMCONTEXT */
-+
-+/*
-+** Define this if you want the "mini-menu," which gives the most important
-+** options at the bottom of the screen, to be the default (in any case, it
-+** can be controlled with the "-M" switch).
-+*/
-+#ifndef MINIMENU
-+#undef MINIMENU
-+#endif
-+
-+/*
-+** You might want to change this to zero if your users want to check
-+** single-letter words against the dictionary. However, you should try
-+** some sample runs using the -W switch before you try it out; you'd
-+** be surprised how many single letters appear in documents. If you increase
-+** MINWORD beyond 1, don't say I didn't warn you that it was a bad idea.
-+*/
-+#ifndef MINWORD
-+#define MINWORD 1 /* Words this short and shorter are always ok */
-+#endif
-+
-+/*
-+** ANSI C compilers are supposed to provide an include file,
-+** "stdlib.h", which gives function prototypes for all library
-+** routines. Define NO_STDLIB_H if you have a compiler that claims to
-+** be ANSI, but doesn't provide this include file.
-+*/
-+#ifndef NO_STDLIB_H
-+#ifndef __STDC__
-+#define NO_STDLIB_H
-+#endif /* __STDC__ */
-+#endif /* NO_STDLIB_H */
-+
-+/*
-+** The following define is used by the ispell developer to help
-+** double-check the software. Leave it undefined on other systems
-+** unless you are especially fond of warning messages, or are pursuing
-+** an inexplicable bug that might be related to a type mismatch.
-+*/
-+#ifndef GENERATE_LIBARARY_PROTOS
-+#undef GENERATE_LIBARARY_PROTOS
-+#endif /* GENERATE_LIBARARY_PROTOS */
-+
-+/*
-+** Symbols below this point are generally intended to cater to
-+** idiosyncracies of specific machines and operating systems.
-+**
-+** MS-DOS users should also define HAS_RENAME, above, if appropriate.
-+**
-+** Define PIECEMEAL_HASH_WRITES if your system can't handle huge write
-+** operations. This is known to be a problem on MS-DOS systems when
-+** a 16-bit compiler is used to compile Ispell.
-+*/
-+#ifndef PIECEMEAL_HASH_WRITES
-+#undef PIECEMEAL_HASH_WRITES
-+#endif /* PIECEMEAL_HASH_WRITES */
-+
-+/*
-+** Redefine GETKEYSTROKE() to getkey() on some MS-DOS systems where
-+** getchar() doesn't operate properly in raw mode.
-+*/
-+#ifndef GETKEYSTROKE
-+#define GETKEYSTROKE() getchar ()
-+#endif /* GETKEYSTROKE */
-+
-+/*
-+** Define MSDOS_BINARY_OPEN to 0x8000 on MS-DOS systems. This can be
-+** done by adding "#include fcntl.h" to your local.h file.
-+*/
-+#ifndef MSDOS_BINARY_OPEN
-+#ifdef O_BINARY
-+#define MSDOS_BINARY_OPEN O_BINARY
-+#else /* O_BINARY */
-+#define MSDOS_BINARY_OPEN 0
-+#endif /* O_BINARY */
-+#endif /* MSDOS_BINARY_OPEN */
-+
-+/*
-+** Environment variable to use to locate the home directory. On DOS
-+** systems you might want to set this to ISPELL_HOME to avoid
-+** conflicts with other programs that look for a HOME environment
-+** variable; on all other systems it should be just HOME.
-+*/
-+#ifndef HOME
-+#define HOME "HOME"
-+#endif /* HOME */
-+
-+/*
-+** On MS-DOS systems, define PDICTHOME to be the name of a directory
-+** to be used to contain the personal dictionary (.ispell_english,
-+** etc.). On other systems, you can leave it undefined.
-+*/
-+#ifndef PDICTHOME
-+#undef PDICTHOME
-+#endif /* PDICTHOME */
-+
-+/*
-+** On MS-DOS systems, you can rename the following variables so that
-+** ispell's files have 3-character suffixes. Note that, if you do
-+** this, you will have to redefine any variable above that incorporates
-+** one of the suffixes. (Most MS-DOS environments will silently truncate
-+** excess characters beyond the 8+3 limit, so you usually don't need to
-+** change the suffixes just because they are longer than 3 characters.)
-+*/
-+#ifndef HASHSUFFIX
-+#define HASHSUFFIX ".hash"
-+#endif /* HASHSUFFIX */
-+#ifndef STATSUFFIX
-+#define STATSUFFIX ".sta"
-+#endif /* STATSUFFIX */
-+#ifndef COUNTSUFFIX
-+#define COUNTSUFFIX ".cnt"
-+#endif /* COUNTSUFFIX */
-+#define SIGNAL_TYPE_STRING "void"
-+#define MASKTYPE_STRING "long"
-diff -urBbN vim64.org/src/spell/good.c vim64/src/spell/good.c
---- vim64.org/src/spell/good.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/good.c 2005-10-17 12:49:17.505835456 +0200
-@@ -0,0 +1,400 @@
-+#ifndef lint
-+static char Rcs_Id[] =
-+ "$Id$";
-+#endif
-+
-+/*
-+ * good.c - see if a word or its root word
-+ * is in the dictionary.
-+ *
-+ * Pace Willisson, 1983
-+ *
-+ * Copyright 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.43 1994/11/02 06:56:05 geoff
-+ * Remove the anyword feature, which I've decided is a bad idea.
-+ *
-+ * Revision 1.42 1994/10/25 05:45:59 geoff
-+ * Add support for an affix that will work with any word, even if there's
-+ * no explicit flag.
-+ *
-+ * Revision 1.41 1994/05/24 06:23:06 geoff
-+ * Let tgood decide capitalization questions, rather than doing it ourselves.
-+ *
-+ * Revision 1.40 1994/05/17 06:44:10 geoff
-+ * Add support for controlled compound formation and the COMPOUNDONLY
-+ * option to affix flags.
-+ *
-+ * Revision 1.39 1994/01/25 07:11:31 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+#include <ctype.h>
-+#include "ispell.h"
-+
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+Public Logical cap_ok (ichar_t * word, struct success * hit, int len);
-+Local Logical entryhasaffixes (struct dent * dent, struct success * hit);
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+Public void flagpr (ichar_t * word, int preflag, int prestrip,
-+ int preadd, int sufflag, int sufadd);
-+Local ichar_t * orig_word;
-+
-+Public int
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+good (ichar_t *w, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)
-+#else
-+/* ARGSUSED */
-+good (ichar_t *w, int ignoreflagbits, int dummy, int pfxopts, int sfxopts)
-+#define allhits 0 /* Never actually need more than one hit */
-+#endif
-+
-+{
-+ ichar_t nword[INPUTWORDLEN + MAXAFFIXLEN];
-+ register ichar_t *p;
-+ register ichar_t *q;
-+ register n;
-+ register struct dent *dp;
-+
-+ /*
-+ ** Make an uppercase copy of the word we are checking.
-+ */
-+ for (p = w, q = nword; *p; )
-+ *q++ = mytoupper (*p++);
-+ *q = 0;
-+ n = q - nword;
-+
-+ numhits = 0;
-+
-+ if (cflag)
-+ {
-+ (void) printf ("%s", ichartosstr (w, 0));
-+ orig_word = w;
-+ }
-+ else if ((dp = lookup (nword, 1)) != NULL)
-+ {
-+ hits[0].dictent = dp;
-+ hits[0].prefix = NULL;
-+ hits[0].suffix = NULL;
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ if (allhits || cap_ok (w, &hits[0], n))
-+ numhits = 1;
-+#else
-+ numhits = 1;
-+#endif
-+ /*
-+ * If we're looking for compounds, and this root doesn't
-+ * participate in compound formation, undo the hit.
-+ */
-+ if (compoundflag == COMPOUND_CONTROLLED
-+ && ((pfxopts | sfxopts) & FF_COMPOUNDONLY) != 0
-+ && hashheader.compoundbit >= 0
-+ && TSTMASKBIT (dp->mask, hashheader.compoundbit) == 0)
-+ numhits = 0;
-+ }
-+ if (numhits && !allhits)
-+ return 1;
-+
-+ /* try stripping off affixes */
-+
-+#if 0
-+ numchars = icharlen (nword);
-+ if (numchars < 4)
-+ {
-+ if (cflag)
-+ (void) putchar ('\n');
-+ return numhits || (numchars == 1);
-+ }
-+#endif
-+
-+ chk_aff (w, nword, n, ignoreflagbits, allhits, pfxopts, sfxopts);
-+
-+ if (cflag)
-+ (void) putchar ('\n');
-+
-+ return numhits;
-+}
-+
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+Public Logical
-+cap_ok (register ichar_t *word, register struct success *hit, int len)
-+{
-+ register ichar_t * dword;
-+ register ichar_t * w;
-+ register struct dent * dent;
-+ ichar_t dentword[INPUTWORDLEN + MAXAFFIXLEN];
-+ int preadd;
-+ int prestrip;
-+ int sufadd;
-+ ichar_t * limit;
-+ long thiscap;
-+ long dentcap;
-+
-+ thiscap = whatcap (word);
-+ /*
-+ ** All caps is always legal, regardless of affixes.
-+ */
-+ preadd = prestrip = sufadd = 0;
-+ if (thiscap == ALLCAPS)
-+ return 1;
-+ else if (thiscap == FOLLOWCASE)
-+ {
-+ /* Set up some constants for the while(1) loop below */
-+ if (hit->prefix)
-+ {
-+ preadd = hit->prefix->affl;
-+ prestrip = hit->prefix->stripl;
-+ }
-+ else
-+ preadd = prestrip = 0;
-+ sufadd = hit->suffix ? hit->suffix->affl : 0;
-+ }
-+ /*
-+ ** Search the variants for one that matches what we have. Note
-+ ** that thiscap can't be ALLCAPS, since we already returned
-+ ** for that case.
-+ */
-+ dent = hit->dictent;
-+ while(True)
-+ {
-+ dentcap = captype (dent->flagfield);
-+ if (dentcap != thiscap)
-+ {
-+ if (dentcap == ANYCASE && thiscap == CAPITALIZED
-+ && entryhasaffixes (dent, hit))
-+ return True;
-+ }
-+ else /* captypes match */
-+ {
-+ if (thiscap != FOLLOWCASE)
-+ {
-+ if (entryhasaffixes (dent, hit))
-+ return True;
-+ }
-+ else
-+ {
-+ /*
-+ ** Make sure followcase matches exactly.
-+ ** Life is made more difficult by the
-+ ** possibility of affixes. Start with
-+ ** the prefix.
-+ */
-+ (void) strtoichar (dentword, dent->word, INPUTWORDLEN, 1);
-+ dword = dentword;
-+ limit = word + preadd;
-+ if (myupper (dword[prestrip]))
-+ {
-+ for (w = word; w < limit; w++)
-+ {
-+ if (mylower (*w))
-+ goto doublecontinue;
-+ }
-+ }
-+ else
-+ {
-+ for (w = word; w < limit; w++)
-+ {
-+ if (myupper (*w))
-+ goto doublecontinue;
-+ }
-+ }
-+ dword += prestrip;
-+ /* Do root part of word */
-+ limit = dword + len - preadd - sufadd;
-+ while (dword < limit)
-+ {
-+ if (*dword++ != *w++)
-+ goto doublecontinue;
-+ }
-+ /* Do suffix */
-+ dword = limit - 1;
-+ if (myupper (*dword))
-+ {
-+ for ( ; *w; w++)
-+ {
-+ if (mylower (*w))
-+ goto doublecontinue;
-+ }
-+ }
-+ else
-+ {
-+ for ( ; *w; w++)
-+ {
-+ if (myupper (*w))
-+ goto doublecontinue;
-+ }
-+ }
-+ /*
-+ ** All failure paths go to "doublecontinue,"
-+ ** so if we get here it must match.
-+ */
-+ if (entryhasaffixes (dent, hit))
-+ return True;
-+doublecontinue: ;
-+ }
-+ }
-+ if ((dent->flagfield & MOREVARIANTS) == 0)
-+ break;
-+ dent = dent->next;
-+ }
-+
-+ /* No matches found */
-+ return False;
-+}
-+
-+/*
-+** See if this particular capitalization (dent) is legal with these
-+** particular affixes.
-+*/
-+Local Logical
-+entryhasaffixes (register struct dent *dent, register struct success *hit)
-+{
-+
-+ if (hit->prefix && !TSTMASKBIT (dent->mask, hit->prefix->flagbit))
-+ return False;
-+ if (hit->suffix && !TSTMASKBIT (dent->mask, hit->suffix->flagbit))
-+ return False;
-+ return True; /* Yes, these affixes are legal */
-+}
-+#endif
-+
-+/*
-+ * Print a word and its flag, making sure the case of the output matches
-+ * the case of the original found in "orig_word".
-+ */
-+Public void
-+flagpr (register ichar_t *word, /* (Modified) word to print */
-+ int preflag, /* Prefix flag (if any) */
-+ int prestrip, /* Lth of pfx stripped off orig_word */
-+ int preadd, /* Length of prefix added to w */
-+ int sufflag, /* Suffix flag (if any) */
-+ int sufadd) /* Length of suffix added to w */
-+{
-+ register ichar_t * origp; /* Pointer into orig_word */
-+ int orig_len; /* Length of orig_word */
-+
-+ orig_len = icharlen (orig_word);
-+ /*
-+ * We refuse to print if the cases outside the modification
-+ * points don't match those just inside. This prevents things
-+ * like "OEM's" from being turned into "OEM/S" which expands
-+ * only to "OEM'S".
-+ */
-+ if (preflag > 0)
-+ {
-+ origp = orig_word + preadd;
-+ if (myupper (*origp))
-+ {
-+ for (origp = orig_word; origp < orig_word + preadd; origp++)
-+ {
-+ if (mylower (*origp))
-+ return;
-+ }
-+ }
-+ else
-+ {
-+ for (origp = orig_word; origp < orig_word + preadd; origp++)
-+ {
-+ if (myupper (*origp))
-+ return;
-+ }
-+ }
-+ }
-+ if (sufflag > 0)
-+ {
-+ origp = orig_word + orig_len - sufadd;
-+ if (myupper (origp[-1]))
-+ {
-+ for ( ; *origp != 0; origp++)
-+ {
-+ if (mylower (*origp))
-+ return;
-+ }
-+ }
-+ else
-+ {
-+ origp = orig_word + orig_len - sufadd;
-+ for ( ; *origp != 0; origp++)
-+ {
-+ if (myupper (*origp))
-+ return;
-+ }
-+ }
-+ }
-+ /*
-+ * The cases are ok. Put out the word, being careful that the
-+ * prefix/suffix cases match those in the original, and that the
-+ * unchanged characters from the original actually match it.
-+ */
-+ (void) putchar (' ');
-+ origp = orig_word + preadd;
-+ if (myupper (*origp))
-+ {
-+ while (--prestrip >= 0)
-+ (void) fputs (printichar ((int) *word++), stdout);
-+ }
-+ else
-+ {
-+ while (--prestrip >= 0)
-+ (void) fputs (printichar ((int) mytolower (*word++)), stdout);
-+ }
-+ for (prestrip = orig_len - preadd - sufadd; --prestrip >= 0; word++)
-+ (void) fputs (printichar ((int) *origp++), stdout);
-+ if (origp > orig_word)
-+ origp--;
-+ if (myupper (*origp))
-+ (void) fputs (ichartosstr (word, 0), stdout);
-+ else
-+ {
-+ while (*word)
-+ {
-+ (void) fputs (printichar ((int) mytolower (*word++)), stdout);
-+ }
-+ }
-+ /*
-+ * Now put out the flags
-+ */
-+ (void) putchar (hashheader.flagmarker);
-+ if (preflag > 0)
-+ (void) putchar (preflag);
-+ if (sufflag > 0)
-+ (void) putchar (sufflag);
-+}
-diff -urBbN vim64.org/src/spell/hash.c vim64/src/spell/hash.c
---- vim64.org/src/spell/hash.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/hash.c 2005-10-17 12:49:17.506835304 +0200
-@@ -0,0 +1,91 @@
-+/*
-+ * hash.c - a simple hash function for ispell
-+ *
-+ * Pace Willisson, 1983
-+ *
-+ * Copyright 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.20 1994/01/25 07:11:34 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+#include "ispell.h"
-+
-+/*
-+ * The following hash algorithm is due to Ian Dall, with slight modifications
-+ * by Geoff Kuenning to reflect the results of testing with the English
-+ * dictionaries actually distributed with ispell.
-+ */
-+#define HASHSHIFT 5
-+
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+#define HASHUPPER(c) c
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+#define HASHUPPER(c) mytoupper(c)
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+
-+Public int
-+hash (
-+ register ichar_t * s,
-+ register int hashtblsize)
-+{
-+ register long h = 0;
-+ register int i;
-+
-+#ifdef ICHAR_IS_CHAR
-+ for (i = 4; i-- && *s != 0; )
-+ h = (h << 8) | HASHUPPER (*s++);
-+#else /* ICHAR_IS_CHAR */
-+ for (i = 2; i-- && *s != 0; )
-+ h = (h << 16) | HASHUPPER (*s++);
-+#endif /* ICHAR_IS_CHAR */
-+ while (*s != 0)
-+ {
-+ /*
-+ * We have to do circular shifts the hard way, since C doesn't
-+ * have them even though the hardware probably does. Oh, well.
-+ */
-+ h = (h << HASHSHIFT) |
-+ ((h >> (32 - HASHSHIFT)) & ((1 << HASHSHIFT) - 1));
-+ h ^= HASHUPPER (*s++);
-+ }
-+ return (unsigned long) h % hashtblsize;
-+}
-diff -urBbN vim64.org/src/spell/i_proto.h vim64/src/spell/i_proto.h
---- vim64.org/src/spell/i_proto.h 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/i_proto.h 2005-10-17 12:49:17.507835152 +0200
-@@ -0,0 +1,112 @@
-+Global int addvheader (struct dent * ent);
-+Global void askmode (void);
-+Global void backup (void);
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+Global Logical cap_ok (ichar_t * word, struct success * hit, int len);
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+Global void chupcase (char * s);
-+Global void checkfile (void);
-+Global void checkline (FILE * ofile);
-+Global void chk_aff (ichar_t * word, ichar_t * ucword, int len,
-+ int ignoreflagbits, int allhits, int pfxopts, int sfxopts);
-+Global int combinecaps (struct dent * hdr, struct dent * newent);
-+Global int compoundgood (ichar_t * word, int pfxopts);
-+Global void copyout (char ** cc, int cnt);
-+Global void correct (char * ctok, int ctokl, ichar_t * itok, int itokl,
-+ char ** curchar);
-+Global char * do_regex_lookup (char * expr, int whence);
-+Global SIGNAL_TYPE done (int);
-+Global void dumpmode (void);
-+Global void erase (void);
-+Global int expand_pre (char * croot, ichar_t * rootword,
-+ MASKTYPE mask[], int option, char *extra);
-+Global int expand_suf (char * croot, ichar_t * rootword,
-+ MASKTYPE mask[], int crossonly, int option, char * extra);
-+Global int findfiletype (char * name, int searchnames,
-+ int * deformatter);
-+Global void flagpr (ichar_t * word, int preflag, int prestrip,
-+ int preadd, int sufflag, int sufadd);
-+Global void givehelp (int interactive);
-+Global int good (ichar_t * word, int ignoreflagbits, int allhits,
-+ int pfxopts, int sfxopts);
-+Global int hash (ichar_t * word, int hashtablesize);
-+#ifndef ICHAR_IS_CHAR
-+Global int icharcmp (ichar_t * s1, ichar_t * s2);
-+Global ichar_t * icharcpy (ichar_t * out, ichar_t * in);
-+Global int icharlen (ichar_t * str);
-+Global int icharncmp (ichar_t * s1, ichar_t * s2, int n);
-+#endif /* ICHAR_IS_CHAR */
-+Global int ichartostr (char * out, ichar_t * in, int outlen,
-+ int canonical);
-+Global char * ichartosstr (ichar_t * in, int canonical);
-+Global void inverse (void);
-+Global struct dent * lookup (ichar_t * word, int dotree);
-+Global void lowcase (ichar_t * string);
-+Global int makedent (char * lbuf, int lbuflen, struct dent * d);
-+Global void makepossibilities (ichar_t * word);
-+Global void move (int row, int col);
-+Global void normal (void);
-+Global char * printichar (int in);
-+#ifdef USESH
-+Global int shellescape (char * buf);
-+Global void shescape (char * buf);
-+#else /* USESH */
-+#ifndef REGEX_LOOKUP
-+Global int shellescape (char * buf);
-+#endif /* REGEX_LOOKUP */
-+#endif /* USESH */
-+Global char * skipoverword (char * bufp);
-+Global void stop (void);
-+Global int stringcharlen (char * bufp, int canonical);
-+Global int strtoichar (ichar_t * out, char * in, int outlen,
-+ int canonical);
-+Global ichar_t * strtosichar (char * in, int canonical);
-+Global void terminit (void);
-+Global void toutent (FILE * outfile, struct dent * hent, int onlykeep);
-+Global void treeinit (char * persdict, char * LibDict);
-+Global void treeinsert (char * word, int wordlen, int keep);
-+Global struct dent * treelookup (ichar_t * word);
-+Global void treeoutput (void);
-+Global void upcase (ichar_t * string);
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+Global long whatcap (ichar_t * word);
-+#endif
-+Global char * xgets (char * string, int size, FILE * stream);
-+Global void yyinit (void);
-+Global Logical yyopen (char * file);
-+Global int yyparse (void);
-+
-+#include <string.h>
-+
-+#ifdef REGEX_LOOKUP
-+# ifdef USG
-+Global char * regcmp (const char * expr, const char * terminator, ...);
-+Global char * regex (const char * pat, const char * subject, ...);
-+# else
-+Global char * re_comp (const char * expr);
-+Global int * re_exec (const char * pat);
-+# endif
-+#endif
-+/* WM
-+Global int tgetent (char * buf, const char * termname);
-+Global int tgetnum (const char * id);
-+Global char * tgetstr (const char * id, char ** area);
-+Global char * tgoto (const char * cm, int col, int row);
-+Global char * tputs (const char * str, int pad, int (*func) (int ch);
-+*/
-+
-+Global char * mypath_rindex(char const *str, char c);
-+Global void save_root_cap (ichar_t * word, ichar_t * pattern,
-+ int prestrip, int preadd, int sufstrip, int sufadd,
-+ struct dent * firstdent, struct flagent * pfxent,
-+ struct flagent * sufent,
-+ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN],
-+ int * nsaved);
-+Global int casecmp (char * a, char * b, int canonical);
-+Global int ins_root_cap (ichar_t * word, ichar_t * pattern,
-+ int prestrip, int preadd, int sufstrip, int sufadd,
-+ struct dent * firstdent, struct flagent * pfxent,
-+ struct flagent * sufent);
-+Global int insert(register ichar_t * word);
-+Global char * linit (char *);
-+Global char * last_slash (char *file);
-diff -urBbN vim64.org/src/spell/ispell.h vim64/src/spell/ispell.h
---- vim64.org/src/spell/ispell.h 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/ispell.h 2005-10-17 12:49:17.509834848 +0200
-@@ -0,0 +1,611 @@
-+/*
-+ * $Id$
-+ */
-+
-+/*
-+ * Copyright 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.68 1995/03/06 02:42:41 geoff
-+ * Be vastly more paranoid about parenthesizing macro arguments. This
-+ * fixes a bug in defmt.c where a complex argument was passed to
-+ * isstringch.
-+ *
-+ * Revision 1.67 1995/01/03 19:24:12 geoff
-+ * Get rid of a non-global declaration.
-+ *
-+ * Revision 1.66 1994/12/27 23:08:49 geoff
-+ * Fix a lot of subtly bad assumptions about the widths of ints and longs
-+ * which only show up on 64-bit machines like the Cray and the DEC Alpha.
-+ *
-+ * Revision 1.65 1994/11/02 06:56:10 geoff
-+ * Remove the anyword feature, which I've decided is a bad idea.
-+ *
-+ * Revision 1.64 1994/10/25 05:46:18 geoff
-+ * Add the FF_ANYWORD flag for defining an affix that will apply to any
-+ * word, even if not explicitly specified. (Good for French.)
-+ *
-+ * Revision 1.63 1994/09/16 04:48:28 geoff
-+ * Make stringdups and laststringch unsigned ints, and dupnos a plain
-+ * int, so that we can handle more than 128 stringchars and stringchar
-+ * types.
-+ *
-+ * Revision 1.62 1994/09/01 06:06:39 geoff
-+ * Change erasechar/killchar to uerasechar/ukillchar to avoid
-+ * shared-library problems on HP systems.
-+ *
-+ * Revision 1.61 1994/08/31 05:58:35 geoff
-+ * Add contextoffset, used in -a mode to handle extremely long lines.
-+ *
-+ * Revision 1.60 1994/05/17 06:44:15 geoff
-+ * Add support for controlled compound formation and the COMPOUNDONLY
-+ * option to affix flags.
-+ *
-+ * Revision 1.59 1994/03/15 06:25:16 geoff
-+ * Change deftflag's initialization so we can tell if -t/-n appeared.
-+ *
-+ * Revision 1.58 1994/02/07 05:53:28 geoff
-+ * Add typecasts to the the 7-bit versions of ichar* routines
-+ *
-+ * Revision 1.57 1994/01/25 07:11:48 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+#include <stdio.h>
-+#include "config.h"
-+
-+#ifdef NO8BIT
-+#define SET_SIZE 128
-+#else
-+#define SET_SIZE 256
-+#endif
-+
-+#define MASKSIZE (MASKBITS / MASKTYPE_WIDTH)
-+
-+/* The following is really testing for MASKSIZE <= 1, but cpp can't do that */
-+#if MASKBITS <= MASKTYPE_WIDTH
-+#define SETMASKBIT(mask, bit) ((mask)[0] |= (MASKTYPE) 1 << (bit))
-+#define CLRMASKBIT(mask, bit) ((mask)[0] &= (MASKTYPE) ~(1 << (bit)))
-+#define TSTMASKBIT(mask, bit) ((mask)[0] & ((MASKTYPE) 1 << (bit)))
-+#else
-+#define SETMASKBIT(mask, bit) \
-+ ((mask)[(bit) / MASKTYPE_WIDTH] |= \
-+ (MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1)))
-+#define CLRMASKBIT(mask, bit) \
-+ ((mask)[(bit) / MASKTYPE_WIDTH] &= \
-+ ~((MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1))))
-+#define TSTMASKBIT(mask, bit) \
-+ ((mask)[(bit) / MASKTYPE_WIDTH] & \
-+ ((MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1))))
-+#endif
-+
-+#if MASKBITS > 64
-+#define FULLMASKSET
-+#endif
-+
-+#if MASKBITS <= 32
-+# ifndef lint
-+#define BITTOCHAR(bit) ((bit) + 'A')
-+#define CHARTOBIT(ch) ((ch) - 'A')
-+# endif /* lint */
-+#define LARGESTFLAG 26 /* 5 are needed for flagfield below */
-+#define FLAGBASE ((MASKTYPE_WIDTH) - 6)
-+#else
-+# if MASKBITS <= 64
-+# ifndef lint
-+#define BITTOCHAR(bit) ((bit) + 'A')
-+#define CHARTOBIT(ch) ((ch) - 'A')
-+# endif /* lint */
-+#define LARGESTFLAG (64 - 6) /* 5 are needed for flagfield below */
-+#define FLAGBASE ((MASKTYPE_WIDTH) - 6)
-+# else
-+# ifndef lint
-+#define BITTOCHAR(bit) (bit)
-+#define CHARTOBIT(ch) (ch)
-+# endif /* lint */
-+#define LARGESTFLAG MASKBITS /* flagfield is a separate field */
-+#define FLAGBASE 0
-+# endif
-+#endif
-+
-+/*
-+** Data type for internal word storage. If necessary, we use shorts rather
-+** than chars so that string characters can be encoded as a single unit.
-+*/
-+#if (SET_SIZE + MAXSTRINGCHARS) <= 256
-+#ifndef lint
-+#define ICHAR_IS_CHAR
-+#endif /* lint */
-+#endif
-+
-+#ifdef ICHAR_IS_CHAR
-+typedef unsigned char ichar_t; /* Internal character */
-+#define icharlen(s) strlen ((char *) (s))
-+#define icharcpy(a, b) strcpy ((char *) (a), (char *) (b))
-+#define icharcmp(a, b) strcmp ((char *) (a), (char *) (b))
-+#define icharncmp(a, b, n) strncmp ((char *) (a), (char *) (b), (n))
-+#define chartoichar(x) ((ichar_t) (x))
-+#else
-+typedef unsigned short ichar_t; /* Internal character */
-+#define chartoichar(x) ((ichar_t) (unsigned char) (x))
-+#endif
-+
-+struct dent
-+ {
-+ struct dent * next;
-+ char * word;
-+ MASKTYPE mask[MASKSIZE];
-+#ifdef FULLMASKSET
-+ char flags;
-+#endif
-+ };
-+
-+/*
-+** Flags in the directory entry. If FULLMASKSET is undefined, these are
-+** stored in the highest bits of the last longword of the mask field. If
-+** FULLMASKSET is defined, they are stored in the extra "flags" field.
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+**
-+** If a word has only one capitalization form, and that form is not
-+** FOLLOWCASE, it will have exactly one entry in the dictionary. The
-+** legal capitalizations will be indicated by the 2-bit capitalization
-+** field, as follows:
-+**
-+** ALLCAPS The word must appear in all capitals.
-+** CAPITALIZED The word must be capitalized (e.g., London).
-+** It will also be accepted in all capitals.
-+** ANYCASE The word may appear in lowercase, capitalized,
-+** or all-capitals.
-+**
-+** Regardless of the capitalization flags, the "word" field of the entry
-+** will point to an all-uppercase copy of the word. This is to simplify
-+** the large portion of the code that doesn't care about capitalization.
-+** Ispell will generate the correct version when needed.
-+**
-+** If a word has more than one capitalization, there will be multiple
-+** entries for it, linked together by the "next" field. The initial
-+** entry for such words will be a dummy entry, primarily for use by code
-+** that ignores capitalization. The "word" field of this entry will
-+** again point to an all-uppercase copy of the word. The "mask" field
-+** will contain the logical OR of the mask fields of all variants.
-+** A header entry is indicated by a capitalization type of ALLCAPS,
-+** with the MOREVARIANTS bit set.
-+**
-+** The following entries will define the individual variants. Each
-+** entry except the last has the MOREVARIANTS flag set, and each
-+** contains one of the following capitalization options:
-+**
-+** ALLCAPS The word must appear in all capitals.
-+** CAPITALIZED The word must be capitalized (e.g., London).
-+** It will also be accepted in all capitals.
-+** FOLLOWCASE The word must be capitalized exactly like the
-+** sample in the entry. Prefix (suffix) characters
-+** must be rendered in the case of the first (last)
-+** "alphabetic" character. It will also be accepted
-+** in all capitals. ("Alphabetic" means "mentioned
-+** in a 'casechars' statement".)
-+** ANYCASE The word may appear in lowercase, capitalized,
-+** or all-capitals.
-+**
-+** The "mask" field for the entry contains only the affix flag bits that
-+** are legal for that capitalization. The "word" field will be null
-+** except for FOLLOWCASE entries, where it will point to the
-+** correctly-capitalized spelling of the root word.
-+**
-+** It is worth discussing why the ALLCAPS option is used in
-+** the header entry. The header entry accepts an all-capitals
-+** version of the root plus every affix (this is always legal, since
-+** words get capitalized in headers and so forth). Further, all of
-+** the following variant entries will reject any all-capitals form
-+** that is illegal due to an affix.
-+**
-+** Finally, note that variations in the KEEP flag can cause a multiple-variant
-+** entry as well. For example, if the personal dictionary contains "ALPHA",
-+** (KEEP flag set) and the user adds "alpha" with the KEEP flag clear, a
-+** multiple-variant entry will be created so that "alpha" will be accepted
-+** but only "ALPHA" will actually be kept.
-+#endif
-+*/
-+#ifdef FULLMASKSET
-+#define flagfield flags
-+#else
-+#define flagfield mask[MASKSIZE - 1]
-+#endif
-+#define USED ((MASKTYPE) 1 << (FLAGBASE + 0))
-+#define KEEP ((MASKTYPE) 1 << (FLAGBASE + 1))
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+#define ALLFLAGS (USED | KEEP)
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+#define ANYCASE ((MASKTYPE) 0 << (FLAGBASE + 2))
-+#define ALLCAPS ((MASKTYPE) 1 << (FLAGBASE + 2))
-+#define CAPITALIZED ((MASKTYPE) 2 << (FLAGBASE + 2))
-+#define FOLLOWCASE ((MASKTYPE) 3 << (FLAGBASE + 2))
-+#define CAPTYPEMASK ((MASKTYPE) 3 << (FLAGBASE + 2))
-+#define MOREVARIANTS ((MASKTYPE) 1 << (FLAGBASE + 4))
-+#define ALLFLAGS (USED | KEEP | CAPTYPEMASK | MOREVARIANTS)
-+#define captype(x) ((x) & CAPTYPEMASK)
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+
-+/*
-+ * Language tables used to encode prefix and suffix information.
-+ */
-+struct flagent
-+ {
-+ ichar_t * strip; /* String to strip off */
-+ ichar_t * affix; /* Affix to append */
-+ short flagbit; /* Flag bit this ent matches */
-+ short stripl; /* Length of strip */
-+ short affl; /* Length of affix */
-+ short numconds; /* Number of char conditions */
-+ short flagflags; /* Modifiers on this flag */
-+ char conds[SET_SIZE + MAXSTRINGCHARS]; /* Adj. char conds */
-+ };
-+
-+/*
-+ * Bits in flagflags
-+ */
-+#define FF_CROSSPRODUCT (1 << 0) /* Affix does cross-products */
-+#define FF_COMPOUNDONLY (1 << 1) /* Afx works in compounds */
-+
-+union ptr_union /* Aid for building flg ptrs */
-+ {
-+ struct flagptr * fp; /* Pointer to more indexing */
-+ struct flagent * ent; /* First of a list of ents */
-+ };
-+
-+struct flagptr
-+ {
-+ union ptr_union pu; /* Ent list or more indexes */
-+ int numents; /* If zero, pu.fp is valid */
-+ };
-+
-+/*
-+ * Description of a single string character type.
-+ */
-+struct strchartype
-+ {
-+ char * name; /* Name of the type */
-+ char * deformatter; /* Deformatter to use */
-+ char * suffixes; /* File suffixes, null seps */
-+ };
-+
-+/*
-+ * Header placed at the beginning of the hash file.
-+ */
-+struct hashheader
-+ {
-+ unsigned short magic; /* Magic number for ID */
-+ unsigned short compileoptions; /* How we were compiled */
-+ short maxstringchars; /* Max # strchrs we support */
-+ short maxstringcharlen; /* Max strchr len supported */
-+ short compoundmin; /* Min lth of compound parts */
-+ short compoundbit; /* Flag 4 compounding roots */
-+ unsigned int stringsize; /* Size of string table */
-+ int lstringsize; /* Size of lang. str tbl */
-+ unsigned int tblsize; /* No. entries in hash tbl */
-+ int stblsize; /* No. entries in sfx tbl */
-+ int ptblsize; /* No. entries in pfx tbl */
-+ int sortval; /* Largest sort ID assigned */
-+ int nstrchars; /* No. strchars defined */
-+ int nstrchartype; /* No. strchar types */
-+ int strtypestart; /* Start of strtype table */
-+ char nrchars[5]; /* Nroff special characters */
-+ char texchars[13]; /* TeX special characters */
-+#define TeXleftparen texchars[0]
-+#define TeXrightparen texchars[1]
-+#define TeXleftsquare texchars[2]
-+#define TeXrightsquare texchars[3]
-+#define TeXleftcurly texchars[4]
-+#define TeXrightcurly texchars[5]
-+#define TeXlefttangle texchars[6]
-+#define TeXrighttangle texchars[7]
-+#define TeXbackslash texchars[8]
-+#define TeXdollar texchars[9]
-+#define TeXstar texchars[10]
-+#define TeXdot texchars[11]
-+#define TeXpercent texchars[12]
-+ char compoundflag; /* Compund-word handling */
-+ char defhardflag; /* Default tryveryhard flag */
-+ char flagmarker; /* "Start-of-flags" char */
-+ unsigned short sortorder[SET_SIZE + MAXSTRINGCHARS]; /* Sort ordering */
-+ ichar_t lowerconv[SET_SIZE + MAXSTRINGCHARS]; /* Lower-conversion table */
-+ ichar_t upperconv[SET_SIZE + MAXSTRINGCHARS]; /* Upper-conversion table */
-+ char wordchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for chars found in wrds */
-+ char upperchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for uppercase chars */
-+ char lowerchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for lowercase chars */
-+ char boundarychars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for boundary chars */
-+ char stringstarts[SET_SIZE]; /* NZ if char can start str */
-+ char stringchars[MAXSTRINGCHARS][MAXSTRINGCHARLEN + 1]; /* String chars */
-+ unsigned int stringdups[MAXSTRINGCHARS]; /* No. of "base" char */
-+ int dupnos[MAXSTRINGCHARS]; /* Dup char ID # */
-+ unsigned short magic2; /* Second magic for dbl chk */
-+ };
-+
-+/* hash table magic number */
-+#define SPELL_MAGIC 0x9602
-+
-+/* compile options, put in the hash header for consistency checking */
-+# define MAGICNOTUSED1 0x01
-+# define MAGICNOTUSED2 0x02
-+#if MASKBITS <= 32
-+# define MAGICMASKSET 0x00
-+#else
-+# if MASKBITS <= 64
-+# define MAGICMASKSET 0x04
-+# else
-+# if MASKBITS <= 128
-+# define MAGICMASKSET 0x08
-+# else
-+# define MAGICMASKSET 0x0C
-+# endif
-+# endif
-+#endif
-+
-+#define COMPILEOPTIONS (MAGICNOTUSED1 | MAGICNOTUSED2 | MAGICMASKSET)
-+
-+/*
-+ * Structure used to record data about successful lookups; these values
-+ * are used in the ins_root_cap routine to produce correct capitalizations.
-+ */
-+struct success
-+ {
-+ struct dent * dictent; /* Header of dict entry chain for wd */
-+ struct flagent * prefix; /* Prefix flag used, or NULL */
-+ struct flagent * suffix; /* Suffix flag used, or NULL */
-+ };
-+
-+/*
-+** Offsets into the nroff special-character array
-+*/
-+#define NRLEFTPAREN hashheader.nrchars[0]
-+#define NRRIGHTPAREN hashheader.nrchars[1]
-+#define NRDOT hashheader.nrchars[2]
-+#define NRBACKSLASH hashheader.nrchars[3]
-+#define NRSTAR hashheader.nrchars[4]
-+
-+/*
-+** Values for compoundflag
-+*/
-+#define COMPOUND_NEVER 0 /* Compound words are never good */
-+#define COMPOUND_ANYTIME 1 /* Accept run-together words */
-+#define COMPOUND_CONTROLLED 2 /* Compounds controlled by afx flags */
-+
-+/*
-+** The isXXXX macros normally only check ASCII range, and don't support
-+** the character sets of other languages. These private versions handle
-+** whatever character sets have been defined in the affix files.
-+*/
-+#define myupper(X) (hashheader.upperchars[(X)])
-+#define mylower(X) (hashheader.lowerchars[(X)])
-+#define myspace(X) (((X) > 0) && ((X) < 0x80) \
-+ && isspace((unsigned char) (X)))
-+#define iswordch(X) (hashheader.wordchars[(X)])
-+#define isboundarych(X) (hashheader.boundarychars[(X)])
-+#define isstringstart(X) (hashheader.stringstarts[(unsigned char) (X)])
-+#define mytolower(X) (hashheader.lowerconv[(X)])
-+#define mytoupper(X) (hashheader.upperconv[(X)])
-+
-+/*
-+** These macros are similar to the ones above, but they take into account
-+** the possibility of string characters. Note well that they take a POINTER,
-+** not a character.
-+**
-+** The "l_" versions set "len" to the length of the string character as a
-+** handy side effect. (Note that the global "laststringch" is also set,
-+** and sometimes used, by these macros.)
-+**
-+** The "l1_" versions go one step further and guarantee that the "len"
-+** field is valid for *all* characters, being set to 1 even if the macro
-+** returns false. This macro is a great example of how NOT to write
-+** readable C.
-+*/
-+#define isstringch(ptr, canon) (isstringstart (*(ptr)) \
-+ && stringcharlen ((ptr), (canon)) > 0)
-+#define l_isstringch(ptr, len, canon) \
-+ (isstringstart (*(ptr)) \
-+ && (len = stringcharlen ((ptr), (canon))) \
-+ > 0)
-+#define l1_isstringch(ptr, len, canon) \
-+ (len = 1, \
-+ isstringstart (*(ptr)) \
-+ && ((len = \
-+ stringcharlen ((ptr), (canon))) \
-+ > 0 \
-+ ? 1 : (len = 1, 0)))
-+
-+/*
-+ * Sizes of buffers returned by ichartosstr/strtosichar.
-+ */
-+#define ICHARTOSSTR_SIZE (INPUTWORDLEN + 4 * MAXAFFIXLEN + 4)
-+#define STRTOSICHAR_SIZE ((INPUTWORDLEN + 4 * MAXAFFIXLEN + 4) \
-+ * sizeof (ichar_t))
-+
-+/*
-+ * termcap variables
-+ */
-+#ifdef MAIN
-+# define S_EXTERN /* nothing */
-+#define Global
-+#else
-+#define Global extern
-+# define S_EXTERN extern
-+#endif
-+
-+#include "wm.h"
-+
-+
-+S_EXTERN char * BC; /* backspace if not ^H */
-+S_EXTERN char * cd; /* clear to end of display */
-+S_EXTERN char * cl; /* clear display */
-+S_EXTERN char * cm; /* cursor movement */
-+S_EXTERN char * ho; /* home */
-+S_EXTERN char * nd; /* non-destructive space */
-+S_EXTERN char * so; /* standout */
-+S_EXTERN char * se; /* standout end */
-+S_EXTERN int sg; /* space taken by so/se */
-+S_EXTERN char * ti; /* terminal initialization sequence */
-+S_EXTERN char * te; /* terminal termination sequence */
-+S_EXTERN int li; /* lines */
-+S_EXTERN int co; /* columns */
-+
-+S_EXTERN int contextsize; /* number of lines of context to show */
-+S_EXTERN char contextbufs[MAXCONTEXT][BUFSIZ]; /* Context of current line */
-+S_EXTERN int contextoffset; /* Offset of line start in contextbufs[0] */
-+S_EXTERN char * currentchar; /* Location in contextbufs */
-+S_EXTERN char ctoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Current token as char */
-+S_EXTERN ichar_t itoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Ctoken as ichar_t str */
-+
-+S_EXTERN char termcap[2048]; /* termcap entry */
-+S_EXTERN char termstr[2048]; /* for string values */
-+S_EXTERN char * termptr; /* pointer into termcap, used by tgetstr */
-+
-+S_EXTERN int numhits; /* number of hits in dictionary lookups */
-+S_EXTERN struct success
-+ hits[MAX_HITS]; /* table of hits gotten in lookup */
-+
-+S_EXTERN char * hashstrings; /* Strings in hash table */
-+S_EXTERN struct hashheader
-+ hashheader; /* Header of hash table */
-+S_EXTERN struct dent *
-+ hashtbl; /* Main hash table, for dictionary */
-+S_EXTERN int hashsize; /* Size of main hash table */
-+
-+
-+S_EXTERN int aflag; /* NZ if -a or -A option specified */
-+S_EXTERN int cflag; /* NZ if -c (crunch) option */
-+S_EXTERN int lflag; /* NZ if -l (list) option */
-+S_EXTERN int incfileflag; /* whether xgets() acts exactly like gets() */
-+Global Logical nodictflag; /* NZ if dictionary not needed */
-+
-+S_EXTERN int uerasechar; /* User's erase character, from stty */
-+S_EXTERN int ukillchar; /* User's kill character */
-+
-+S_EXTERN unsigned int laststringch; /* Number of last string character */
-+S_EXTERN int defdupchar; /* Default duplicate string type */
-+
-+S_EXTERN unsigned int numpflags; /* Number of prefix flags in table */
-+S_EXTERN unsigned int numsflags; /* Number of suffix flags in table */
-+S_EXTERN struct flagptr *pflagindex;
-+ /* Fast index to pflaglist */
-+S_EXTERN struct flagent *pflaglist; /* Prefix flag control list */
-+S_EXTERN struct flagptr *sflagindex;
-+ /* Fast index to sflaglist */
-+S_EXTERN struct flagent *sflaglist; /* Suffix flag control list */
-+
-+S_EXTERN struct strchartype * /* String character type collection */
-+ chartypes;
-+
-+S_EXTERN FILE * infile; /* File being corrected */
-+S_EXTERN FILE * outfile; /* Corrected copy of infile */
-+
-+S_EXTERN char * askfilename; /* File specified in -f option */
-+
-+S_EXTERN int changes; /* NZ if changes made to cur. file */
-+S_EXTERN int readonly; /* NZ if current file is readonly */
-+S_EXTERN int quit; /* NZ if we're done with this file */
-+
-+#define MAXPOSSIBLE 100 /* Max no. of possibilities to generate */
-+
-+S_EXTERN char possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN];
-+ /* Table of possible corrections */
-+S_EXTERN int pcount; /* Count of possibilities generated */
-+S_EXTERN int maxposslen; /* Length of longest possibility */
-+S_EXTERN int easypossibilities; /* Number of "easy" corrections found */
-+ /* ..(defined as those using legal affixes) */
-+
-+Global Logical inited;
-+/*
-+ * The following array contains a list of characters that should be tried
-+ * in "missingletter." Note that lowercase characters are omitted.
-+ */
-+S_EXTERN int Trynum; /* Size of "Try" array */
-+S_EXTERN ichar_t Try[SET_SIZE + MAXSTRINGCHARS];
-+
-+/*
-+ * Initialized variables. These are generated using macros so that they
-+ * may be consistently declared in all programs. Numerous examples of
-+ * usage are given below.
-+ */
-+#ifdef MAIN
-+#define S_INIT(decl, init) decl = init
-+#else
-+#define S_INIT(decl, init) extern decl
-+#endif
-+
-+#ifdef MINIMENU
-+S_INIT (int minimenusize, 2); /* MUST be either 2 or zero */
-+#else /* MINIMENU */
-+S_INIT (int minimenusize, 0); /* MUST be either 2 or zero */
-+#endif /* MINIMENU */
-+
-+S_INIT (int eflag, 0); /* NZ for expand mode */
-+S_INIT (int dumpflag, 0); /* NZ to do dump mode */
-+S_INIT (int fflag, 0); /* NZ if -f specified */
-+#ifndef USG
-+S_INIT (int sflag, 0); /* NZ to stop self after EOF */
-+#endif
-+S_INIT (int vflag, 0); /* NZ to display characters as M-xxx */
-+S_INIT (int xflag, DEFNOBACKUPFLAG); /* NZ to suppress backups */
-+S_INIT (int deftflag, -1); /* NZ for TeX mode by default */
-+S_INIT (int tflag, DEFTEXFLAG); /* NZ for TeX mode in current file */
-+S_INIT (int prefstringchar, -1); /* Preferred string character type */
-+
-+S_INIT (int terse, 0); /* NZ for "terse" mode */
-+
-+S_INIT (char tempfile[MAXPATHLEN], ""); /* Name of file we're spelling into */
-+
-+S_INIT (int minword, MINWORD); /* Longest always-legal word */
-+S_INIT (int sortit, 1); /* Sort suggestions alphabetically */
-+S_INIT (int compoundflag, -1); /* How to treat compounds: see above */
-+S_INIT (int tryhardflag, -1); /* Always call tryveryhard */
-+
-+S_INIT (char * currentfile, NULL); /* Name of current input file */
-+
-+/* Odd numbers for math mode in LaTeX; even for LR or paragraph mode */
-+S_INIT (int math_mode, 0);
-+/* P -- paragraph or LR mode
-+ * b -- parsing a \begin statement
-+ * e -- parsing an \end statement
-+ * r -- parsing a \ref type of argument.
-+ * m -- looking for a \begin{minipage} argument.
-+ */
-+S_INIT (char LaTeX_Mode, 'P');
-+
-+#include "i_proto.h"
-diff -urBbN vim64.org/src/spell/local.h vim64/src/spell/local.h
---- vim64.org/src/spell/local.h 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/local.h 2005-10-17 12:49:17.510834696 +0200
-@@ -0,0 +1,338 @@
-+/*
-+ * Written by Eli Zaretskii <eliz@is.elta.co.il>
-+ *
-+ * This is local.h file suitable for compiling Ispell on MS-DOS systems
-+ * with version 2.x of DJGPP port of GNU C/C++ compiler.
-+ *
-+ * $Id$
-+ *
-+ * $Log$
-+ */
-+
-+/*
-+ * WARNING WARNING WARNING
-+ *
-+ * This file is *NOT* a normal C header file! Although it uses C
-+ * syntax and is included in C programs, it is also processed by shell
-+ * scripts that are very stupid about format.
-+ *
-+ * Do not try to use #if constructs to configure this file for more
-+ * than one configuration. Do not place whitespace after the "#" in
-+ * "#define". Do not attempt to disable lines by commenting them out.
-+ * Do not use backslashes to reduce the length of long lines.
-+ * None of these things will work the way you expect them to.
-+ *
-+ * WARNING WARNING WARNING
-+ */
-+
-+/*
-+** Things that normally go in a Makefile. Define these just like you
-+** might in the Makefile, except you should use #define instead of
-+** make's assignment syntax. Everything must be double-quoted, and
-+** (unlike make) you can't use any sort of $-syntax to pick up the
-+** values of other definitions.
-+*/
-+
-+#define CC "gcc"
-+#define CFLAGS "-O2 -g"
-+#define YACC "bison -y"
-+
-+/*
-+** TERMLIB - DJGPP doesn't have one, it uses direct screen writes.
-+*/
-+#define TERMLIB ""
-+
-+/*
-+** Where to install various components of ispell. BINDIR contains
-+** binaries. LIBDIR contains hash tables and affix files. ELISPDIR
-+** contains emacs lisp files (if any) and TEXINFODIR contains emacs
-+** TeXinfo files. MAN1DIR and MAN1EXT will hold the chapter-1 and
-+** chapter-4 manual pages, respectively.
-+**
-+** If you intend to use multiple dictionary files, I would suggest
-+** LIBDIR be a directory which will contain nothing else, so sensible
-+** names can be constructed for the -d option without conflict.
-+*/
-+#define BINDIR "/usr/bin"
-+#define LIBDIR "/usr/lib/ispell"
-+#define ELISPDIR "/usr/lib/emacs/site-lisp"
-+#define TEXINFODIR "/usr/share/info"
-+#define MAN1DIR "/usr/share/man/man1"
-+#define MAN4DIR "/usr/share/man/man4"
-+
-+/*
-+** List of all hash files (languages) which will be supported by ispell.
-+**
-+** This variable has a complex format so that many options can be
-+** specified. The format is as follows:
-+**
-+** <language>[,<make-options>...] [<language> [,<make-options> ...] ...]
-+**
-+** where
-+**
-+** language is the name of a subdirectory of the
-+** "languages" directory
-+** make-options are options that are to be passed to "make" in
-+** the specified directory. The make-options
-+** should not, in general, specify a target, as
-+** this will be provided by the make process.
-+**
-+** For example, if LANGUAGES is:
-+**
-+** "{american,EXTRADICT=/usr/dict/words /usr/dict/web2} {deutsch}",
-+**
-+** then the American-English and Deutsch (German) languages will be supported,
-+** and when the English dictionary is built, the variable
-+** 'EXTRADICT=/usr/dict/words /usr/dict/web2' will be passed to the makefile.
-+**
-+** Notes on the syntax: The makefile is not very robust. If you have
-+** make problems, or if make seems to in the language-subdirs
-+** dependency, check your syntax. The makefile adds single quotes to
-+** the individual variables in the LANGUAGES specification, so don't
-+** use quotes of any kind.
-+**
-+** In the future, the first language listed in this variable will
-+** become the default, and the DEFHASH, DEFLANG, and DEFPAFF,
-+** variables will all become obsolete. So be sure to put your default
-+** language first, to make later conversion easier!
-+**
-+** Notes on options for the various languages will be found in the
-+** Makefiles for those languages. Some of those languages may require
-+** you to also change various limits limits like MASKBITS or the
-+** length parameters.
-+**
-+** A special note on the English language: because the British and
-+** American dialects use different spelling, you should usually select
-+** one or the other of these. If you select both, the setting of
-+** MASTERHASH will determine which becomes the language linked to
-+** DEFHASH (which will usually be named english.hash).
-+**
-+** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-+** !!! Note the pathname for the `words' file: it might be different !!!
-+** !!! If you don't have this file, make EXTRADICT empty !!!
-+** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-+*/
-+#define LANGUAGES "{american,MASTERDICTS=americax.med,HASHFILES=amermedx.hash,EXTRADICT=/usr/lib/ispell/words}"
-+
-+/*
-+** Master hash file for DEFHASH. This is the name of a hash file
-+** built by a language Makefile. It should be the most-popular hash
-+** file on your system, because it is the one that will be used by
-+** default. It must be listed in LANGUAGES, above.
-+*/
-+#define MASTERHASH "polish.hash"
-+
-+/*
-+** Default native-language hash file. This is the name given to the
-+** hash table that will be used if no language is specified to
-+** ispell. It is a link to MASTERHASH, above.
-+*/
-+#define DEFHASH "polish.hash"
-+
-+/*
-+** If your sort command accepts the -T switch to set temp file
-+** locations (try it out; on some systems it exists but is
-+** undocumented), make the following variable the null string.
-+** Otherwise leave it as the sed script.
-+**
-+** With DJGPP, you will probably use GNU Sort which accepts -T, so:
-+*/
-+#define SORTTMP ""
-+
-+/*
-+** If your system has the rename(2) system call, define HAS_RENAME and
-+** ispell will use that call to rename backup files. Otherwise, it
-+** will use link/unlink. There is no harm in this except on MS-DOS,
-+** which might not support link/unlink (DJGPP does, but also has rename).
-+*/
-+#define HAS_RENAME 1
-+
-+/* environment variable for user's word list */
-+#ifndef PDICTVAR
-+#define PDICTVAR "WORDLIST"
-+#endif
-+
-+/*
-+** Prefix part of default private dictionary. Under MS-DOS 8.3
-+** filename limitation, we are in trouble...
-+*/
-+#define DEFPDICT ".ispell_"
-+
-+/* old place to look for default word list */
-+#define OLDPDICT ".isp."
-+
-+/*
-+** mktemp template for temporary file - MUST contain 6 consecutive X's.
-+** On MSDOS the directory part of TEMPNAME is only used if neither $TMP
-+** nor $TEMP nor $TMPDIR (in that order) are defined. If any of these
-+** variables is defined, the filename part of TEMPNAME is appended to
-+** their value.
-+*/
-+#define TEMPNAME "/tmp/isXXXXXX"
-+
-+/*
-+** If REGEX_LOOKUP is NOT defined, the lookup command (L) will use the look(1)
-+** command (if available) or the egrep command. If REGEX_LOOKUP is defined,
-+** the lookup command will use the internal dictionary and the
-+** regular-expression library (which you must supply separately.
-+** DJGPP v2 has POSIX regexp functions.
-+*/
-+#ifndef FEAT_SPELL_HL
-+#define REGEX_LOOKUP 1
-+#endif
-+
-+/*
-+** Choose the proper type of regular-expression routines here. BSD
-+** and public-domain systems have routines called re_comp and re_exec;
-+** System V uses regcmp and regex.
-+*/
-+#include <sys/types.h>
-+#include <regex.h>
-+#define REGCTYPE regex_t *
-+#define REGCMP(re,str) (regcomp (re, str, 0), re)
-+#define REGEX(re, str, dummy) \
-+ (re != 0 && regexec (re, str, 0, 0, 0) == 0 ? (char *)1 : NULL)
-+#define REGFREE(re) \
-+ do { \
-+ if (re == 0) \
-+ re = (regex_t *)calloc (1, sizeof (regex_t)); \
-+ else \
-+ regfree(re); \
-+ } while (0)
-+
-+/*
-+**
-+** The 2 following definitions are only meaningfull if you don't use
-+** any regex library.
-+*/
-+/* path to egrep (use speeded up version if available);
-+ defined without explicit path, since there are no
-+ standard places for programs on MS-DOS. */
-+#define EGREPCMD "egrep -i"
-+
-+/* path to wordlist for Lookup command (typically /usr/dict/{words|web2}) */
-+/* note that /usr/dict/web2 is usually a bad idea due to obscure words */
-+#undef WORDS
-+
-+/*
-+** FIXME: The filename truncation below is not flexible enough for DJGPP
-+** which can support long filenames on some platforms, since we
-+** will only know if the support is available at runtime.
-+*/
-+
-+/* max file name length (will truncate to fit BAKEXT) if not in sys/param.h */
-+#ifdef NAME_MAX
-+#define MAXNAMLEN NAME_MAX
-+#else
-+#define MAXNAMLEN 12
-+#endif
-+
-+#define MAXEXTLEN 4 /* max. extension length including '.' */
-+#define MAXBASENAMELEN 8 /* max. base filename length without ext */
-+
-+/* define if you want .bak file names truncated to MAXNAMLEN characters */
-+/* On MS-DOS, we really have no choice... */
-+#define TRUNCATEBAK 1
-+
-+/*
-+** This is the extension that will be added to backup files.
-+** On MS-DOS, it makes sense to use the shortest possible extension.
-+*/
-+#define BAKEXT "~"
-+
-+/*
-+** Define the following to suppress the 8-bit character feature.
-+** FIXME: does this defeat support of foreign languages?
-+*/
-+/*#define NO8BIT 1 */
-+#ifdef NO8BIT
-+#undef NO8BIT
-+#endif
-+
-+/*
-+** Define this if you want to use the shell for interpretation of commands
-+** issued via the "L" command, "^Z" under System V, and "!". If this is
-+** not defined then a direct spawnvp() will be used in place of the
-+** normal system(). This may speed up these operations if the SHELL
-+** environment variable points to a Unix-like shell (such as `sh' or `bash').
-+**
-+** However, if you undefine USESH, commands which use pipes, redirection
-+** and shell wildcards won't work, and you will need support for the SIGTSTP
-+** signal, for the above commands to work at all.
-+*/
-+
-+#define USESH 1
-+
-+/*
-+** Define this if you want to be able to type any command at a "type space
-+** to continue" prompt.
-+*/
-+#define COMMANDFORSPACE 1
-+
-+/*
-+** The next three variables are used to provide a variable-size context
-+** display at the bottom of the screen. Normally, the user will see
-+** a number of lines equal to CONTEXTPCT of his screen, rounded down
-+** (thus, with CONTEXTPCT == 10, a 24-line screen will produce two lines
-+** of context). The context will never be greater than MAXCONTEXT or
-+** less than MINCONTEXT. To disable this feature entirely, set MAXCONTEXT
-+** and MINCONTEXT to the same value. To round context percentages up,
-+** define CONTEXTROUNDUP.
-+**
-+** Warning: don't set MAXCONTEXT ridiculously large. There is a
-+** static buffer of size MAXCONTEXT*BUFSIZ; since BUFSIZ is frequently
-+** 1K or larger, this can create a remarkably large executable.
-+*/
-+#define CONTEXTPCT 20 /* Use 20% of the screen for context */
-+#define MINCONTEXT 2 /* Always show at least 2 lines of context */
-+#define MAXCONTEXT 10 /* Never show more than 10 lines of context */
-+#define CONTEXTROUNDUP 1 /* Round context up */
-+
-+/*
-+** Define this if you want the "mini-menu," which gives the most important
-+** options at the bottom of the screen, to be the default (in any case, it
-+** can be controlled with the "-M" switch).
-+*/
-+#define MINIMENU
-+
-+/*
-+** Redefine GETKEYSTROKE() to whatever appropriate on some MS-DOS systems
-+** where getchar() doesn't operate properly in raw mode.
-+*/
-+#ifdef __DJGPP__
-+#include <pc.h>
-+#include <keys.h>
-+#define GETKEYSTROKE() getxkey()
-+#else
-+#define GETKEYSTROKE() getchar()
-+#endif
-+
-+/*
-+** We include <fcntl.h> to have the definition of O_BINARY. The
-+** configuration script will notice this and define MSDOS_BINARY_OPEN.
-+*/
-+#include <fcntl.h>
-+
-+/*
-+** Environment variable to use to locate the home directory. On DOS
-+** systems we set this to ISPELL_HOME to avoid conflicts with
-+** other programs that look for a HOME environment variable. We're not on DOS.
-+*/
-+#define HOME "HOME"
-+#define PDICTHOME "."
-+#define OPTIONVAR "ISPELL_OPTIONS"
-+#define LIBRARYVAR "ISPELL_DICTDIR"
-+
-+/*
-+** On MS-DOS systems, we define the following variables so that
-+** ispell's files have legal suffixes. Note that these suffixes
-+** must agree with the way you've defined dictionary files which
-+** incorporate these suffixes.
-+**
-+** Actually, it is not recommended at all to change the suffixes,
-+** since they are hardwired in the Makefile's under languages/
-+** subdirectory, and MS-DOS will silently truncate excess letters anyway.
-+*/
-+#define HASHSUFFIX ".hash"
-+#define STATSUFFIX ".sta"
-+#define COUNTSUFFIX ".cnt"
-diff -urBbN vim64.org/src/spell/lookup.c vim64/src/spell/lookup.c
---- vim64.org/src/spell/lookup.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/lookup.c 2005-10-17 12:49:17.511834544 +0200
-@@ -0,0 +1,534 @@
-+#ifndef lint
-+static char Rcs_Id[] =
-+ "$Id$";
-+#endif
-+
-+/*
-+ * lookup.c - see if a word appears in the dictionary
-+ *
-+ * Pace Willisson, 1983
-+ *
-+ * Copyright 1987, 1988, 1989, 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.42 1995/01/08 23:23:42 geoff
-+ * Support MSDOS_BINARY_OPEN when opening the hash file to read it in.
-+ *
-+ * Revision 1.41 1994/01/25 07:11:51 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+#include "ispell.h"
-+#include "msgs.h"
-+#include <stdlib.h>
-+#include <fcntl.h>
-+#ifdef WIN32
-+#include <io.h>
-+#endif
-+
-+#ifdef INDEXDUMP
-+Local void dumpindex (struct flagptr * indexp, int depth);
-+#endif /* INDEXDUMP */
-+
-+Public Logical inited = False;
-+
-+char err_buf[256];
-+
-+Public char *
-+linit (char * hashname)
-+{
-+ int hashfd;
-+ register int i;
-+ register struct dent * dp;
-+ struct flagent * entry;
-+ struct flagptr * ind;
-+ int nextchar;
-+ int viazero;
-+ register ichar_t * cp;
-+
-+ if (inited)
-+ return(NULL);
-+
-+ if(hashtbl != NULL)
-+ free(hashtbl);
-+ numpflags = 0;
-+ numsflags = 0;
-+ if(pflagindex != NULL)
-+ free(pflagindex);
-+ pflagindex = NULL;
-+ if(sflagindex != NULL)
-+ free(sflagindex);
-+ sflagindex = NULL;
-+ if((pflagindex = (struct flagptr *)calloc(SET_SIZE + MAXSTRINGCHARS,
-+ sizeof(struct flagptr))) == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_HASH_SPACE);
-+ return(err_buf);
-+ }
-+ if((sflagindex = (struct flagptr *)calloc(SET_SIZE + MAXSTRINGCHARS,
-+ sizeof(struct flagptr))) == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_HASH_SPACE);
-+ return(err_buf);
-+ }
-+ hashtbl = NULL;
-+ if ((hashfd = open (hashname, 0 | MSDOS_BINARY_OPEN)) < 0)
-+ {
-+ (void) sprintf(err_buf, CANT_OPEN, hashname);
-+ return(err_buf);
-+ }
-+
-+ hashsize = read (hashfd, (char *) &hashheader, sizeof hashheader);
-+ if (hashsize < sizeof hashheader)
-+ {
-+ if (hashsize < 0)
-+ (void) sprintf(err_buf, LOOKUP_C_CANT_READ, hashname);
-+ else if (hashsize == 0)
-+ (void) sprintf(err_buf, LOOKUP_C_NULL_HASH, hashname);
-+ else
-+ (void) sprintf(err_buf, LOOKUP_C_SHORT_HASH (hashname, hashsize,
-+ (int) sizeof hashheader));
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ else if (hashheader.magic != SPELL_MAGIC)
-+ {
-+ (void) sprintf(err_buf,
-+ LOOKUP_C_BAD_MAGIC (hashname, (unsigned int) SPELL_MAGIC,
-+ (unsigned int) hashheader.magic));
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ else if (hashheader.magic2 != SPELL_MAGIC)
-+ {
-+ (void) sprintf(err_buf,
-+ LOOKUP_C_BAD_MAGIC2 (hashname, (unsigned int) SPELL_MAGIC,
-+ (unsigned int) hashheader.magic2));
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ else if (hashheader.compileoptions != COMPILEOPTIONS
-+ || hashheader.maxstringchars != MAXSTRINGCHARS
-+ || hashheader.maxstringcharlen != MAXSTRINGCHARLEN)
-+ {
-+ (void) sprintf(err_buf,
-+ LOOKUP_C_BAD_OPTIONS ((unsigned int) hashheader.compileoptions,
-+ hashheader.maxstringchars, hashheader.maxstringcharlen,
-+ (unsigned int) COMPILEOPTIONS, MAXSTRINGCHARS, MAXSTRINGCHARLEN));
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ if (nodictflag)
-+ {
-+ /*
-+ * Dictionary is not needed - create an empty dummy table. We
-+ * actually have to have one entry since the hash
-+ * algorithm involves a divide by the table size
-+ * (actually modulo, but zero is still unacceptable).
-+ * So we create an empty entry.
-+ */
-+ hashsize = 1; /* This prevents divides by zero */
-+ hashtbl = (struct dent *) calloc (1, sizeof (struct dent));
-+ if (hashtbl == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_HASH_SPACE);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ hashtbl[0].word = NULL;
-+ hashtbl[0].next = NULL;
-+ hashtbl[0].flagfield &= ~(USED | KEEP);
-+ /* The flag bits don't matter, but calloc cleared them. */
-+ if(hashstrings != NULL)
-+ free(hashstrings);
-+ if((hashstrings = (char *) calloc (1, (unsigned) hashheader.lstringsize))
-+ == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_HASH_SPACE);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ }
-+ else
-+ {
-+ if(hashtbl != NULL)
-+ free(hashtbl);
-+ if((hashtbl = (struct dent *)
-+ malloc ((unsigned) hashheader.tblsize * sizeof (struct dent))) == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_HASH_SPACE);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ hashsize = hashheader.tblsize;
-+ if(hashstrings != NULL)
-+ free(hashstrings);
-+ if((hashstrings = (char *) malloc ((unsigned) hashheader.stringsize)) == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_HASH_SPACE);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ }
-+ numsflags = hashheader.stblsize;
-+ numpflags = hashheader.ptblsize;
-+ if(sflaglist != NULL)
-+ free(sflaglist);
-+ if((sflaglist = (struct flagent *)
-+ malloc ((numsflags + numpflags) * sizeof (struct flagent))) == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_HASH_SPACE);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ pflaglist = sflaglist + numsflags;
-+
-+ if (nodictflag)
-+ {
-+ /*
-+ * Read just the strings for the language table, and
-+ * skip over the rest of the strings and all of the
-+ * hash table.
-+ */
-+ if (read (hashfd, hashstrings, (unsigned) hashheader.lstringsize)
-+ != hashheader.lstringsize)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_BAD_FORMAT);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ (void) lseek (hashfd,
-+ (long) hashheader.stringsize - (long) hashheader.lstringsize
-+ + (long) hashheader.tblsize * (long) sizeof (struct dent), 1);
-+ }
-+ else
-+ {
-+ if ((unsigned int)read (hashfd, hashstrings,
-+ (unsigned int) hashheader.stringsize) != hashheader.stringsize
-+ || (unsigned int)read (hashfd, (char *) hashtbl, (unsigned)
-+ hashheader.tblsize * sizeof (struct dent))
-+ != (unsigned int) hashheader.tblsize * sizeof (struct dent))
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_BAD_FORMAT);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ }
-+ if ((unsigned int)read (hashfd, (char *) sflaglist,
-+ (unsigned int) (numsflags + numpflags) * sizeof (struct flagent))
-+ != (unsigned int)(numsflags + numpflags) * sizeof (struct flagent))
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_BAD_FORMAT);
-+ (void) close (hashfd);
-+ return(err_buf);
-+ }
-+ (void) close (hashfd);
-+
-+ if (!nodictflag)
-+ {
-+ for (i = hashsize, dp = hashtbl; --i >= 0; dp++)
-+ {
-+ if (dp->word == (char *) -1)
-+ dp->word = NULL;
-+ else
-+ dp->word = &hashstrings [ (int)(dp->word) ];
-+ if (dp->next == (struct dent *) -1)
-+ dp->next = NULL;
-+ else
-+ dp->next = &hashtbl [ (int)(dp->next) ];
-+ }
-+ }
-+
-+ for (i = numsflags + numpflags, entry = sflaglist; --i >= 0; entry++)
-+ {
-+ if (entry->stripl)
-+ entry->strip = (ichar_t *) &hashstrings[(int) entry->strip];
-+ else
-+ entry->strip = NULL;
-+ if (entry->affl)
-+ entry->affix = (ichar_t *) &hashstrings[(int) entry->affix];
-+ else
-+ entry->affix = NULL;
-+ }
-+ /*
-+ ** Warning - 'entry' and 'i' are reset in the body of the loop
-+ ** below. Don't try to optimize it by (e.g.) moving the decrement
-+ ** of i into the loop condition.
-+ */
-+ for (i = numsflags, entry = sflaglist; i > 0; i--, entry++)
-+ {
-+ if (entry->affl == 0)
-+ {
-+ cp = NULL;
-+ ind = &sflagindex[0];
-+ viazero = 1;
-+ }
-+ else
-+ {
-+ cp = entry->affix + entry->affl - 1;
-+ ind = &sflagindex[*cp];
-+ viazero = 0;
-+ while (ind->numents == 0 && ind->pu.fp != NULL)
-+ {
-+ if (cp == entry->affix)
-+ {
-+ ind = &ind->pu.fp[0];
-+ viazero = 1;
-+ }
-+ else
-+ {
-+ ind = &ind->pu.fp[*--cp];
-+ viazero = 0;
-+ }
-+ }
-+ }
-+ if (ind->numents == 0)
-+ ind->pu.ent = entry;
-+ ind->numents++;
-+ /*
-+ ** If this index entry has more than MAXSEARCH flags in
-+ ** it, we will split it into subentries to reduce the
-+ ** searching. However, the split doesn't make sense in
-+ ** two cases: (a) if we are already at the end of the
-+ ** current affix, or (b) if all the entries in the list
-+ ** have identical affixes. Since the list is sorted, (b)
-+ ** is true if the first and last affixes in the list
-+ ** are identical.
-+ */
-+ if (!viazero && ind->numents >= MAXSEARCH &&
-+ icharcmp (entry->affix, ind->pu.ent->affix) != 0)
-+ {
-+ /* Sneaky trick: back up and reprocess */
-+ entry = ind->pu.ent - 1; /* -1 is for entry++ in loop */
-+ i = numsflags - (entry - sflaglist);
-+ if((ind->pu.fp = (struct flagptr *)
-+ calloc ((unsigned) (SET_SIZE + hashheader.nstrchars),
-+ sizeof (struct flagptr))) == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_LANG_SPACE);
-+ return(err_buf);
-+ }
-+ ind->numents = 0;
-+ }
-+ }
-+ /*
-+ ** Warning - 'entry' and 'i' are reset in the body of the loop
-+ ** below. Don't try to optimize it by (e.g.) moving the decrement
-+ ** of i into the loop condition.
-+ */
-+ for (i = numpflags, entry = pflaglist; i > 0; i--, entry++)
-+ {
-+ if (entry->affl == 0)
-+ {
-+ cp = NULL;
-+ ind = &pflagindex[0];
-+ viazero = 1;
-+ }
-+ else
-+ {
-+ cp = entry->affix;
-+ ind = &pflagindex[*cp++];
-+ viazero = 0;
-+ while (ind->numents == 0 && ind->pu.fp != NULL)
-+ {
-+ if (*cp == 0)
-+ {
-+ ind = &ind->pu.fp[0];
-+ viazero = 1;
-+ }
-+ else
-+ {
-+ ind = &ind->pu.fp[*cp++];
-+ viazero = 0;
-+ }
-+ }
-+ }
-+ if (ind->numents == 0)
-+ ind->pu.ent = entry;
-+ ind->numents++;
-+ /*
-+ ** If this index entry has more than MAXSEARCH flags in
-+ ** it, we will split it into subentries to reduce the
-+ ** searching. However, the split doesn't make sense in
-+ ** two cases: (a) if we are already at the end of the
-+ ** current affix, or (b) if all the entries in the list
-+ ** have identical affixes. Since the list is sorted, (b)
-+ ** is true if the first and last affixes in the list
-+ ** are identical.
-+ */
-+ if (!viazero && ind->numents >= MAXSEARCH
-+ && icharcmp (entry->affix, ind->pu.ent->affix) != 0)
-+ {
-+ /* Sneaky trick: back up and reprocess */
-+ entry = ind->pu.ent - 1; /* -1 is for entry++ in loop */
-+ i = numpflags - (entry - pflaglist);
-+ ind->pu.fp =
-+ (struct flagptr *) calloc (SET_SIZE + hashheader.nstrchars,
-+ sizeof (struct flagptr));
-+ if (ind->pu.fp == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_LANG_SPACE);
-+ return(err_buf);
-+ }
-+ ind->numents = 0;
-+ }
-+ }
-+#ifdef INDEXDUMP
-+ (void) sprintf(err_buf, "Prefix index table:");
-+ dumpindex (pflagindex, 0);
-+ (void) sprintf(err_buf, "Suffix index table:");
-+ dumpindex (sflagindex, 0);
-+#endif
-+ if (hashheader.nstrchartype == 0)
-+ chartypes = NULL;
-+ else
-+ {
-+ chartypes = (struct strchartype *)
-+ calloc (1, hashheader.nstrchartype * sizeof (struct strchartype));
-+ if (chartypes == NULL)
-+ {
-+ (void) sprintf(err_buf, LOOKUP_C_NO_LANG_SPACE);
-+ return(err_buf);
-+ }
-+ for (i = 0, nextchar = hashheader.strtypestart;
-+ i < hashheader.nstrchartype; i++)
-+ {
-+ chartypes[i].name = &hashstrings[nextchar];
-+ nextchar += strlen (chartypes[i].name) + 1;
-+ chartypes[i].deformatter = &hashstrings[nextchar];
-+ nextchar += strlen (chartypes[i].deformatter) + 1;
-+ chartypes[i].suffixes = &hashstrings[nextchar];
-+ while (hashstrings[nextchar] != '\0')
-+ nextchar += strlen (&hashstrings[nextchar]) + 1;
-+ nextchar++;
-+ }
-+ }
-+ inited = True;
-+ return (NULL);
-+}
-+
-+#ifdef INDEXDUMP
-+Local void
-+dumpindex (
-+ register struct flagptr * indexp,
-+ register int depth)
-+{
-+ register int i;
-+ int j;
-+ int k;
-+ char stripbuf[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4];
-+
-+ for (i = 0; i < SET_SIZE + hashheader.nstrchars; i++, indexp++)
-+ {
-+ if (indexp->numents == 0 && indexp->pu.fp != NULL)
-+ {
-+ for (j = depth; --j >= 0; )
-+ (void) putc (' ', stderr);
-+ if (i >= ' ' && i <= '~')
-+ (void) putc (i, stderr);
-+ else
-+ (void) fprintf (stderr, "0x%x", i);
-+ (void) putc ('\n', stderr);
-+ dumpindex (indexp->pu.fp, depth + 1);
-+ }
-+ else if (indexp->numents)
-+ {
-+ for (j = depth; --j >= 0; )
-+ (void) putc (' ', stderr);
-+ if (i >= ' ' && i <= '~')
-+ (void) putc (i, stderr);
-+ else
-+ (void) fprintf (stderr, "0x%x", i);
-+ (void) fprintf (stderr, " -> %d entries\n", indexp->numents);
-+ for (k = 0; k < indexp->numents; k++)
-+ {
-+ for (j = depth; --j >= 0; )
-+ (void) putc (' ', stderr);
-+ if (indexp->pu.ent[k].stripl)
-+ {
-+ (void) ichartostr (stripbuf, indexp->pu.ent[k].strip,
-+ sizeof stripbuf, 1);
-+ (void) fprintf (stderr, " entry %d (-%s,%s)\n",
-+ &indexp->pu.ent[k] - sflaglist,
-+ stripbuf,
-+ indexp->pu.ent[k].affl
-+ ? ichartosstr (indexp->pu.ent[k].affix, 1) : "-");
-+ }
-+ else
-+ (void) fprintf (stderr, " entry %d (%s)\n",
-+ &indexp->pu.ent[k] - sflaglist,
-+ ichartosstr (indexp->pu.ent[k].affix, 1));
-+ }
-+ }
-+ }
-+}
-+#endif
-+
-+/* n is length of s */
-+Public struct dent *
-+lookup (register ichar_t *s, int dotree)
-+
-+{
-+ register struct dent * dp;
-+ register char * s1;
-+ char schar[INPUTWORDLEN + MAXAFFIXLEN];
-+
-+ dp = &hashtbl[hash (s, hashsize)];
-+ if (ichartostr (schar, s, sizeof schar, 1))
-+ (void) fprintf (stderr, WORD_TOO_LONG (schar));
-+ for ( ; dp != NULL; dp = dp->next)
-+ {
-+ /* quick strcmp, but only for equality */
-+ s1 = dp->word;
-+ if (s1 && s1[0] == schar[0] && strcmp (s1 + 1, schar + 1) == 0)
-+ return dp;
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ while (dp->flagfield & MOREVARIANTS) /* Skip variations */
-+ dp = dp->next;
-+#endif
-+ }
-+ if (dotree)
-+ {
-+ dp = treelookup (s);
-+ return dp;
-+ }
-+ else
-+ return NULL;
-+}
-diff -urBbN vim64.org/src/spell/makedent.c vim64/src/spell/makedent.c
---- vim64.org/src/spell/makedent.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/makedent.c 2005-10-17 12:49:17.514834088 +0200
-@@ -0,0 +1,1107 @@
-+/*
-+ * Copyright 1988, 1989, 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.45 1994/12/27 23:08:52 geoff
-+ * Add code to makedent to reject words that contain non-word characters.
-+ * This helps protect people who use ISO 8-bit characters when ispell
-+ * isn't configured for that option.
-+ *
-+ * Revision 1.44 1994/10/25 05:46:20 geoff
-+ * Fix some incorrect declarations in the lint versions of some routines.
-+ *
-+ * Revision 1.43 1994/09/16 03:32:34 geoff
-+ * Issue an error message for bad affix flags
-+ *
-+ * Revision 1.42 1994/02/07 04:23:43 geoff
-+ * Correctly identify the deformatter when changing file types
-+ *
-+ * Revision 1.41 1994/01/25 07:11:55 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+#include "ispell.h"
-+#include <stdlib.h>
-+#include "msgs.h"
-+
-+Global int makedent(char * lbuf, int lbuflen, struct dent * ent);
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+Global long whatcap(ichar_t * word);
-+#endif
-+Global int addvheader(struct dent * ent);
-+Global int combinecaps(struct dent * hdr, struct dent * newent);
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+Local void forcevheader(struct dent * hdrp, struct dent * oldp,
-+ struct dent * newp);
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+Local int combine_two_entries(struct dent * hdrp,
-+ struct dent * oldp, struct dent * newp);
-+Local int acoversb(struct dent * enta, struct dent * entb);
-+Global void upcase(ichar_t * string);
-+Global void lowcase(ichar_t * string);
-+Global void chupcase(char * s);
-+Local int issubset(struct dent * ent1, struct dent * ent2);
-+Local void combineaffixes(struct dent * ent1, struct dent * ent2);
-+Global void toutent(FILE * outfile, struct dent * hent, int onlykeep);
-+Local void toutword(FILE * outfile, char * word, struct dent * cent);
-+Local void flagout(FILE * outfile, int flag);
-+Global int stringcharlen(char * bufp, int canonical);
-+Global int strtoichar(ichar_t * out, char * in, int outlen,
-+ int canonical);
-+Global int ichartostr(char * out, ichar_t * in, int outlen,
-+ int canonical);
-+Global ichar_t * strtosichar(char * in, int canonical);
-+Global char * ichartosstr(ichar_t * in, int canonical);
-+Global char * printichar(int in);
-+#ifndef ICHAR_IS_CHAR
-+Global ichar_t * icharcpy(ichar_t * out, ichar_t * in);
-+Global int icharlen(ichar_t * str);
-+Global int icharcmp(ichar_t * s1, ichar_t * s2);
-+Global int icharncmp(ichar_t * s1, ichar_t * s2, int n);
-+#endif /* ICHAR_IS_CHAR */
-+Global int findfiletype(char * name, int searchnames,
-+ int * deformatter);
-+
-+Local Logical has_marker;
-+
-+/*
-+ * Fill in a directory entry, including setting the capitalization flags, and
-+ * allocate and initialize memory for the d->word field. Returns -1
-+ * if there was trouble. The input word must be in canonical form.
-+ */
-+
-+Public int
-+makedent(
-+ char * lbuf,
-+ int lbuflen,
-+ struct dent * d)
-+{
-+ ichar_t ibuf[INPUTWORDLEN + MAXAFFIXLEN];
-+ ichar_t * ip;
-+ char * p;
-+ int bit;
-+ int len;
-+
-+ /* Strip off any trailing newline */
-+ len = strlen(lbuf) - 1;
-+ if(lbuf[len] == '\n')
-+ lbuf[len] = '\0';
-+
-+ d->next = NULL;
-+ /* WARNING: flagfield might be the same as mask! See ispell.h. */
-+ d->flagfield = 0;
-+ (void) bzero ((char *) d->mask, sizeof (d->mask));
-+ d->flagfield |= USED;
-+ d->flagfield &= ~KEEP;
-+
-+ p = index(lbuf, hashheader.flagmarker);
-+ if(p != NULL)
-+ *p = 0;
-+
-+ /*
-+ ** Convert the word to an ichar_t and back; this makes sure that
-+ ** it is in canonical form and thus that the length is correct.
-+ */
-+ if(strtoichar(ibuf, lbuf, INPUTWORDLEN * sizeof (ichar_t), 1)
-+ || ichartostr(lbuf, ibuf, lbuflen, 1))
-+ {
-+ (void) fprintf(stderr, WORD_TOO_LONG (lbuf));
-+ return(-1);
-+ }
-+ /*
-+ ** Make sure the word is well-formed(contains only legal characters).
-+ */
-+ for(ip = ibuf; *ip != 0; ip++)
-+ {
-+ if(!iswordch(*ip))
-+ {
-+ /* Boundary characters are legal as long as they're not at edges */
-+ if(!isboundarych(*ip) || ip == ibuf || ip[1] == 0)
-+ {
-+ (void) fprintf(stderr, MAKEDENT_C_BAD_WORD_CHAR, lbuf);
-+ return -1;
-+ }
-+ }
-+ }
-+ len = strlen(lbuf);
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ /*
-+ ** Figure out the capitalization rules from the capitalization of
-+ ** the sample entry.
-+ */
-+ d->flagfield |= whatcap(ibuf);
-+#endif
-+
-+ if(len > INPUTWORDLEN - 1)
-+ {
-+ (void) fprintf(stderr, WORD_TOO_LONG (lbuf));
-+ return(-1);
-+ }
-+
-+ d->word = malloc((unsigned) len + 1);
-+ if(d->word == NULL)
-+ {
-+ (void) fprintf(stderr, MAKEDENT_C_NO_WORD_SPACE, lbuf);
-+ return -1;
-+ }
-+
-+ (void) strcpy (d->word, lbuf);
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ chupcase(d->word);
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+ if(captype(d->flagfield) != FOLLOWCASE)
-+ chupcase(d->word);
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ if(p == NULL)
-+ return(0);
-+
-+ p++;
-+ while(*p != '\0' && *p != '\n')
-+ {
-+ bit = CHARTOBIT((unsigned char) *p);
-+ if(bit >= 0 && bit <= LARGESTFLAG)
-+ SETMASKBIT(d->mask, bit);
-+ else
-+ (void) fprintf (stderr, BAD_FLAG, (unsigned char) *p);
-+ p++;
-+ if(*p == hashheader.flagmarker)
-+ p++; /* Handle old-format dictionaries too */
-+ }
-+ return(0);
-+}
-+
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+/*
-+** Classify the capitalization of a sample entry. Returns one of the
-+** four capitalization codes ANYCASE, ALLCAPS, CAPITALIZED, or FOLLOWCASE.
-+*/
-+
-+Public long
-+whatcap(register ichar_t * word)
-+{
-+ register ichar_t * p;
-+
-+ for(p = word; *p; p++)
-+ {
-+ if(mylower(*p))
-+ break;
-+ }
-+ if(*p == '\0')
-+ return ALLCAPS;
-+ else
-+ {
-+ for(; *p; p++)
-+ if(myupper(*p))
-+ break;
-+ if(*p == '\0')
-+ {
-+ /*
-+ ** No uppercase letters follow the lowercase ones.
-+ ** If there is more than one uppercase letter, it's
-+ ** "followcase". If only the first one is capitalized,
-+ ** it's "capitalize". If there are no capitals
-+ ** at all, it's ANYCASE.
-+ */
-+ if(myupper(word[0]))
-+ {
-+ for(p = word + 1; *p != '\0'; p++)
-+ if(myupper(*p))
-+ return FOLLOWCASE;
-+ return CAPITALIZED;
-+ }
-+ else
-+ return ANYCASE;
-+ }
-+ else
-+ return FOLLOWCASE; /* .../lower/upper */
-+ }
-+}
-+
-+/*
-+** Add a variant-capitalization header to a word. This routine may be
-+** called even for a followcase word that doesn't yet have a header.
-+**
-+** Returns 0 if all was ok, -1 if allocation error.
-+*/
-+Public int
-+addvheader(register struct dent *dp) /* Entry to update */
-+{
-+ register struct dent * tdent; /* Copy of entry */
-+
-+ /*
-+ ** Add a second entry with the correct capitalization, and then make
-+ ** dp into a special dummy entry.
-+ */
-+ tdent = (struct dent *) malloc (sizeof (struct dent));
-+ if(tdent == NULL)
-+ {
-+ (void) fprintf(stderr, MAKEDENT_C_NO_WORD_SPACE, dp->word);
-+ return -1;
-+ }
-+ *tdent = *dp;
-+ if(captype(tdent->flagfield) != FOLLOWCASE)
-+ tdent->word = NULL;
-+ else
-+ {
-+ /* Followcase words need a copy of the capitalization */
-+ tdent->word = malloc((unsigned int) strlen (tdent->word) + 1);
-+ if(tdent->word == NULL)
-+ {
-+ (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, dp->word);
-+ free((char *) tdent);
-+ return -1;
-+ }
-+ (void) strcpy(tdent->word, dp->word);
-+ }
-+ chupcase(dp->word);
-+ dp->next = tdent;
-+ dp->flagfield &= ~CAPTYPEMASK;
-+ dp->flagfield |= (ALLCAPS | MOREVARIANTS);
-+ return 0;
-+}
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+
-+/*
-+** Combine and resolve the entries describing two capitalizations of the same
-+** word. This may require allocating yet more entries.
-+**
-+** Hdrp is a pointer into a hash table. If the word covered by hdrp has
-+** variations, hdrp must point to the header. Newp is a pointer to temporary
-+** storage, and space is malloc'ed if newp is to be kept. The newp->word
-+** field must have been allocated with mymalloc, so that this routine may free
-+** the space if it keeps newp but not the word.
-+**
-+** Return value: 0 if the word was added, 1 if the word was combined
-+** with an existing entry, and -1 if trouble occurred(e.g., malloc).
-+** If 1 is returned, newp->word may have been be freed using myfree.
-+**
-+** Life is made much more difficult by the KEEP flag's possibilities. We
-+** must ensure that a !KEEP word doesn't find its way into the personal
-+** dictionary as a result of this routine's actions. However, a !KEEP
-+** word that has affixes must have come from the main dictionary, so it
-+** is acceptable to combine entries in that case(got that?).
-+**
-+** The net result of all this is a set of rules that is a bloody pain
-+** to figure out. Basically, we want to choose one of the following actions:
-+**
-+** (1) Add newp's affixes and KEEP flag to oldp, and discard newp.
-+** (2) Add oldp's affixes and KEEP flag to newp, replace oldp with
-+** newp, and discard newp.
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+** (3) Insert newp as a new entry in the variants list. If there is
-+** currently no variant header, this requires adding one. Adding a
-+** header splits into two sub-cases:
-+**
-+** (3a) If oldp is ALLCAPS and the KEEP flags match, just turn it
-+** into the header.
-+** (3b) Otherwise, add a new entry to serve as the header.
-+** To ease list linking, this is done by copying oldp into
-+** the new entry, and then performing(3a).
-+**
-+** After newp has been added as a variant, its affixes and KEEP
-+** flag are OR-ed into the variant header.
-+#endif
-+**
-+** So how to choose which? The default is always case(3), which adds newp
-+** as a new entry in the variants list. Cases(1) and (2) are symmetrical
-+** except for which entry is discarded. We can use case(1) or (2) whenever
-+** one entry "covers" the other. "Covering" is defined as follows:
-+**
-+** (4) For entries with matching capitalization types, A covers B
-+** if:
-+**
-+** (4a) B's affix flags are a subset of A's, or the KEEP flags
-+** match, and
-+** (4b) either the KEEP flags match, or A's KEEP flag is set.
-+** (Since A has more suffixes, combining B with it won't
-+** cause any extra suffixes to be added to the dictionary.)
-+** (4c) If the words are FOLLOWCASE, the capitalizations match
-+** exactly.
-+**
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+** (5) For entries with mismatched capitalization types, A covers B
-+** if(4a) and(4b) are true, and:
-+**
-+** (5a) B is ALLCAPS, or
-+** (5b) A is ANYCASE, and B is CAPITALIZED.
-+#endif
-+**
-+** For any "hdrp" without variants, oldp is the same as hdrp. Otherwise,
-+** the above tests are applied using each variant in turn for oldp.
-+*/
-+Public int
-+combinecaps(
-+ struct dent * hdrp, /* Header of entry currently in dictionary */
-+ register struct dent * newp) /* Entry to add */
-+{
-+ register struct dent *
-+ oldp; /* Current "oldp" entry */
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ register struct dent *
-+ tdent; /* Entry we'll add to the dictionary */
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ register int retval = 0; /* Return value from combine_two_entries */
-+
-+ /*
-+ ** First, see if we can combine the two entries(cases 1 and 2). If
-+ ** combine_two_entries does so, it will return 1. If it has trouble,
-+ ** it will return zero.
-+ */
-+ oldp = hdrp;
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ retval = combine_two_entries(hdrp, oldp, newp);
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+ if((oldp->flagfield &(CAPTYPEMASK | MOREVARIANTS))
-+ == (ALLCAPS | MOREVARIANTS))
-+ {
-+ while(oldp->flagfield & MOREVARIANTS)
-+ {
-+ oldp = oldp->next;
-+ retval = combine_two_entries(hdrp, oldp, newp);
-+ if(retval != 0) /* Did we combine them? */
-+ break;
-+ }
-+ }
-+ else
-+ retval = combine_two_entries(hdrp, oldp, newp);
-+ if(retval == 0)
-+ {
-+ /*
-+ ** Couldn't combine the two entries. Add a new variant. For
-+ ** ease, we'll stick it right behind the header, rather than
-+ ** at the end of the list.
-+ */
-+ forcevheader(hdrp, oldp, newp);
-+ tdent = (struct dent *) malloc (sizeof (struct dent));
-+ if(tdent == NULL)
-+ {
-+ (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, newp->word);
-+ return -1;
-+ }
-+ *tdent = *newp;
-+ tdent->next = hdrp->next;
-+ hdrp->next = tdent;
-+ tdent->flagfield |= (hdrp->flagfield & MOREVARIANTS);
-+ hdrp->flagfield |= MOREVARIANTS;
-+ combineaffixes(hdrp, newp);
-+ hdrp->flagfield |= (newp->flagfield & KEEP);
-+ if(captype(newp->flagfield) == FOLLOWCASE)
-+ tdent->word = newp->word;
-+ else
-+ {
-+ tdent->word = NULL;
-+ free(newp->word); /* newp->word isn't needed */
-+ }
-+ }
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ return retval;
-+}
-+
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+/*
-+** The following routine implements steps 3a and 3b in the commentary
-+** for "combinecaps".
-+*/
-+Local void
-+forcevheader(
-+ register struct dent * hdrp,
-+ struct dent * oldp,
-+ struct dent * newp)
-+{
-+
-+ if((hdrp->flagfield &(CAPTYPEMASK | MOREVARIANTS)) == ALLCAPS
-+ && ((oldp->flagfield ^ newp->flagfield) & KEEP) == 0)
-+ return; /* Caller will set MOREVARIANTS */
-+ else if((hdrp->flagfield &(CAPTYPEMASK | MOREVARIANTS))
-+ != (ALLCAPS | MOREVARIANTS))
-+ (void) addvheader(hdrp);
-+}
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+
-+/*
-+** This routine implements steps 4 and 5 of the commentary for "combinecaps".
-+**
-+** Returns 1 if newp can be discarded, 0 if nothing done.
-+*/
-+Local int
-+combine_two_entries(
-+ struct dent *hdrp, /*(Possible) header of variant chain */
-+ register struct dent *oldp, /* Pre-existing dictionary entry */
-+ register struct dent *newp) /* Entry to possibly combine */
-+{
-+
-+ if(acoversb(oldp, newp))
-+ {
-+ /* newp is superfluous. Drop it, preserving affixes and keep flag */
-+ combineaffixes(oldp, newp);
-+ oldp->flagfield |= (newp->flagfield & KEEP);
-+ hdrp->flagfield |= (newp->flagfield & KEEP);
-+ free(newp->word);
-+ return 1;
-+ }
-+ else if(acoversb(newp, oldp))
-+ {
-+ /*
-+ ** oldp is superfluous. Replace it with newp, preserving affixes and
-+ ** the keep flag.
-+ */
-+ combineaffixes(newp, oldp);
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ newp->flagfield |= (oldp->flagfield & KEEP);
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+ newp->flagfield |= (oldp->flagfield & (KEEP | MOREVARIANTS));
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ hdrp->flagfield |= (newp->flagfield & KEEP);
-+ newp->next = oldp->next;
-+ /*
-+ ** We really want to free oldp->word, but that might be part of
-+ ** "hashstrings". So we'll futz around to arrange things so we can
-+ ** free newp->word instead. This depends very much on the fact
-+ ** that both words are the same length.
-+ */
-+ if(oldp->word != NULL)
-+ (void) strcpy (oldp->word, newp->word);
-+ free(newp->word); /* No longer needed */
-+ newp->word = oldp->word;
-+ *oldp = *newp;
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ /* We may need to add a header if newp is followcase */
-+ if(captype(newp->flagfield) == FOLLOWCASE
-+ && (hdrp->flagfield & (CAPTYPEMASK | MOREVARIANTS))
-+ != (ALLCAPS | MOREVARIANTS))
-+ (void) addvheader (hdrp);
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ return 1;
-+ }
-+ else
-+ return 0;
-+}
-+
-+/*
-+** Determine if enta covers entb, according to the rules in steps 4 and 5
-+** of the commentary for "combinecaps".
-+*/
-+Local int
-+acoversb(
-+ register struct dent * enta, /* "A" in the rules */
-+ register struct dent * entb) /* "B" in the rules */
-+{
-+ int subset; /* NZ if entb is a subset of enta */
-+
-+ if((subset = issubset(entb, enta)) != 0)
-+ {
-+ /* entb is a subset of enta; thus enta might cover entb */
-+ if(((enta->flagfield ^ entb->flagfield) & KEEP) != 0
-+ && (enta->flagfield & KEEP) == 0) /* Inverse of condition (4b) */
-+ return 0;
-+ }
-+ else
-+ {
-+ /* not a subset; KEEP flags must match exactly(both (4a) and (4b)) */
-+ if(((enta->flagfield ^ entb->flagfield) & KEEP) != 0)
-+ return 0;
-+ }
-+
-+ /* Rules(4a) and (4b) are satisfied; check for capitalization match */
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+#ifdef lint
-+ return subset; /* Just so it gets used */
-+#else /* lint */
-+ return 1; /* All words match */
-+#endif /* lint */
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+ if(((enta->flagfield ^ entb->flagfield) & CAPTYPEMASK) == 0)
-+ {
-+ if(captype(enta->flagfield) != FOLLOWCASE /* Condition (4c) */
-+ || strcmp(enta->word, entb->word) == 0)
-+ return 1; /* Perfect match */
-+ else
-+ return 0;
-+ }
-+ else if(subset == 0) /* No flag subset, refuse */
-+ return 0; /* ..near matches */
-+ else if(captype(entb->flagfield) == ALLCAPS)
-+ return 1;
-+ else if(captype(enta->flagfield) == ANYCASE
-+ && captype(entb->flagfield) == CAPITALIZED)
-+ return 1;
-+ else
-+ return 0;
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+}
-+
-+Public void
-+upcase(register ichar_t * s)
-+{
-+
-+ while(*s)
-+ {
-+ *s = mytoupper(*s);
-+ s++;
-+ }
-+}
-+
-+Public void
-+lowcase(register ichar_t * s)
-+{
-+
-+ while(*s)
-+ {
-+ *s = mytolower(*s);
-+ s++;
-+ }
-+}
-+
-+/*
-+ * Upcase variant that works on normal strings. Note that it is a lot
-+ * slower than the normal upcase. The input must be in canonical form.
-+ */
-+Public void
-+chupcase(char * s)
-+{
-+ ichar_t * is;
-+
-+ is = strtosichar(s, 1);
-+ upcase(is);
-+ (void) ichartostr (s, is, strlen (s) + 1, 1);
-+}
-+
-+/*
-+** See if one affix field is a subset of another. Returns NZ if ent1
-+** is a subset of ent2. The KEEP flag is not taken into consideration.
-+*/
-+Local int
-+issubset(
-+ register struct dent * ent1,
-+ register struct dent * ent2)
-+{
-+/* The following is really testing for MASKSIZE > 1, but cpp can't do that */
-+#if MASKBITS > 32
-+ register int flagword;
-+
-+#ifdef FULLMASKSET
-+#define MASKMAX MASKSIZE
-+#else
-+#define MASKMAX MASKSIZE - 1
-+#endif /* FULLMASKSET */
-+ for(flagword = MASKMAX; --flagword >= 0; )
-+ {
-+ if((ent1->mask[flagword] & ent2->mask[flagword])
-+ != ent1->mask[flagword])
-+ return 0;
-+ }
-+#endif /* MASKBITS > 32 */
-+#ifdef FULLMASKSET
-+ return((ent1->mask[MASKSIZE - 1] & ent2->mask[MASKSIZE - 1])
-+ == ent1->mask[MASKSIZE - 1]);
-+#else
-+ if(((ent1->mask[MASKSIZE - 1] & ent2->mask[MASKSIZE - 1])
-+ ^ ent1->mask[MASKSIZE - 1]) & ~ALLFLAGS)
-+ return 0;
-+ else
-+ return 1;
-+#endif /* FULLMASKSET */
-+}
-+
-+/*
-+** Add ent2's affix flags to ent1.
-+*/
-+Local void
-+combineaffixes(
-+ register struct dent * ent1,
-+ register struct dent * ent2)
-+{
-+/* The following is really testing for MASKSIZE > 1, but cpp can't do that */
-+#if MASKBITS > 32
-+ register int flagword;
-+
-+ if(ent1 == ent2)
-+ return;
-+ /* MASKMAX is defined in issubset, just above */
-+ for(flagword = MASKMAX; --flagword >= 0; )
-+ ent1->mask[flagword] |= ent2->mask[flagword];
-+#endif /* MASKBITS > 32 */
-+#ifndef FULLMASKSET
-+ ent1->mask[MASKSIZE - 1] |= ent2->mask[MASKSIZE - 1] & ~ALLFLAGS;
-+#endif
-+}
-+
-+/*
-+** Write out a dictionary entry, including capitalization variants.
-+** If onlykeep is true, only those variants with KEEP set will be
-+** written.
-+*/
-+Public void
-+toutent(
-+ register FILE * toutfile,
-+ struct dent * hent,
-+ register int onlykeep)
-+{
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ if(!onlykeep || (hent->flagfield & KEEP))
-+ toutword(toutfile, hent->word, hent);
-+#else
-+ register struct dent * cent;
-+ ichar_t wbuf[INPUTWORDLEN + MAXAFFIXLEN];
-+
-+ cent = hent;
-+ if(strtoichar(wbuf, cent->word, INPUTWORDLEN, 1))
-+ (void) fprintf(stderr, WORD_TOO_LONG (cent->word));
-+ for( ; ; )
-+ {
-+ if(!onlykeep || (cent->flagfield & KEEP))
-+ {
-+ switch(captype (cent->flagfield))
-+ {
-+ case ANYCASE:
-+ lowcase(wbuf);
-+ toutword(toutfile, ichartosstr (wbuf, 1), cent);
-+ break;
-+ case ALLCAPS:
-+ if((cent->flagfield & MOREVARIANTS) == 0 || cent != hent)
-+ {
-+ upcase(wbuf);
-+ toutword(toutfile, ichartosstr (wbuf, 1), cent);
-+ }
-+ break;
-+ case CAPITALIZED:
-+ lowcase(wbuf);
-+ wbuf[0] = mytoupper(wbuf[0]);
-+ toutword(toutfile, ichartosstr (wbuf, 1), cent);
-+ break;
-+ case FOLLOWCASE:
-+ toutword(toutfile, cent->word, cent);
-+ break;
-+ }
-+ }
-+ if(cent->flagfield & MOREVARIANTS)
-+ cent = cent->next;
-+ else
-+ break;
-+ }
-+#endif
-+}
-+
-+Local void
-+toutword(
-+ register FILE * toutfile,
-+ char * word,
-+ register struct dent * cent)
-+{
-+ register int bit;
-+
-+ has_marker = False;
-+ (void) fprintf (toutfile, "%s", word);
-+ for(bit = 0; bit < LARGESTFLAG; bit++)
-+ {
-+ if(TSTMASKBIT(cent->mask, bit))
-+ flagout(toutfile, BITTOCHAR (bit));
-+ }
-+ (void) fprintf (toutfile, "\n");
-+}
-+
-+Local void
-+flagout(
-+ register FILE * toutfile,
-+ int flag)
-+{
-+ if(!has_marker)
-+ (void) putc(hashheader.flagmarker, toutfile);
-+ has_marker = True;
-+ (void) putc (flag, toutfile);
-+}
-+
-+/*
-+ * If the string under the given pointer begins with a string character,
-+ * return the length of that "character". If not, return 0.
-+ * May be called any time, but it's best if "isstrstart" is first
-+ * used to filter out unnecessary calls.
-+ *
-+ * As a side effect, "laststringch" is set to the number of the string
-+ * found, or to -1 if none was found. This can be useful for such things
-+ * as case conversion.
-+ */
-+Public int
-+stringcharlen(
-+ char * bufp,
-+ int canonical) /* NZ if input is in canonical form */
-+{
-+#ifdef SLOWMULTIPLY
-+ static char * sp[MAXSTRINGCHARS];
-+ static int m_inited = 0;
-+#endif /* SLOWMULTIPLY */
-+ register char * bufcur;
-+ register char * stringcur;
-+ register int stringno;
-+ register int lowstringno;
-+ register int highstringno;
-+ int dupwanted;
-+
-+#ifdef SLOWMULTIPLY
-+ if(!m_inited)
-+ {
-+ m_inited = 1;
-+ for(stringno = 0; stringno < MAXSTRINGCHARS; stringno++)
-+ sp[stringno] = &hashheader.stringchars[stringno][0];
-+ }
-+#endif /* SLOWMULTIPLY */
-+ lowstringno = 0;
-+ highstringno = hashheader.nstrchars - 1;
-+ dupwanted = canonical ? 0 : defdupchar;
-+ while(lowstringno <= highstringno)
-+ {
-+ stringno = (lowstringno + highstringno) >> 1;
-+#ifdef SLOWMULTIPLY
-+ stringcur = sp[stringno];
-+#else /* SLOWMULTIPLY */
-+ stringcur = &hashheader.stringchars[stringno][0];
-+#endif /* SLOWMULTIPLY */
-+ bufcur = bufp;
-+ while(*stringcur)
-+ {
-+#ifdef NO8BIT
-+ if(((*bufcur++ ^ *stringcur) & 0x7F) != 0)
-+#else /* NO8BIT */
-+ if(*bufcur++ != *stringcur)
-+#endif /* NO8BIT */
-+ break;
-+ /*
-+ ** We can't use autoincrement above because of the
-+ ** test below.
-+ */
-+ stringcur++;
-+ }
-+ if(*stringcur == '\0')
-+ {
-+ if(hashheader.dupnos[stringno] == dupwanted)
-+ {
-+ /* We have a match */
-+ laststringch = hashheader.stringdups[stringno];
-+#ifdef SLOWMULTIPLY
-+ return stringcur - sp[stringno];
-+#else /* SLOWMULTIPLY */
-+ return stringcur - &hashheader.stringchars[stringno][0];
-+#endif /* SLOWMULTIPLY */
-+ }
-+ else
-+ --stringcur;
-+ }
-+ /* No match - choose which side to search on */
-+#ifdef NO8BIT
-+ if((*--bufcur & 0x7F) <(*stringcur & 0x7F))
-+ highstringno = stringno - 1;
-+ else if((*bufcur & 0x7F) >(*stringcur & 0x7F))
-+ lowstringno = stringno + 1;
-+#else /* NO8BIT */
-+ if(*--bufcur < *stringcur)
-+ highstringno = stringno - 1;
-+ else if(*bufcur > *stringcur)
-+ lowstringno = stringno + 1;
-+#endif /* NO8BIT */
-+ else if(dupwanted < hashheader.dupnos[stringno])
-+ highstringno = stringno - 1;
-+ else
-+ lowstringno = stringno + 1;
-+ }
-+ laststringch = -1;
-+ return 0; /* Not a string character */
-+}
-+
-+/*
-+ * Convert an external string to an ichar_t string. If necessary, the parity
-+ * bit is stripped off as part of the process.
-+ *
-+ * Returns NZ if the output string overflowed.
-+ */
-+Public int
-+strtoichar(
-+ register ichar_t * out, /* Where to put result */
-+ register char * in, /* String to convert */
-+ int outlen, /* Size of output buffer, *BYTES* */
-+ int canonical) /* NZ if input is in canonical form */
-+{
-+ register int len; /* Length of next character */
-+
-+ outlen /= sizeof(ichar_t); /* Convert to an ichar_t count */
-+ for( ; --outlen > 0 && *in != '\0'; in += len)
-+ {
-+ if(l1_isstringch(in, len, canonical))
-+ *out++ = SET_SIZE + laststringch;
-+ else
-+ *out++ = *in & S_NOPARITY;
-+ }
-+ *out = 0;
-+ return outlen <= 0;
-+}
-+
-+/*
-+ * Convert an ichar_t string to an external string.
-+ *
-+ * WARNING: the resulting string may wind up being longer than the
-+ * original. In fact, even the sequence strtoichar->ichartostr may
-+ * produce a result longer than the original, because the output form
-+ * may use a different string type set than the original input form.
-+ *
-+ * Returns NZ if the output string overflowed.
-+ */
-+Public int
-+ichartostr(
-+ register char * out, /* Where to put result */
-+ register ichar_t * in, /* String to convert */
-+ int outlen, /* Size of output buffer, bytes */
-+ int canonical) /* NZ for canonical form */
-+{
-+ register unsigned int ch; /* Next character to store */
-+ register unsigned int i; /* Index into duplicates list */
-+ register char * scharp; /* Pointer into a string char */
-+
-+ while(--outlen > 0 && (ch = *in++) != 0)
-+ {
-+ if(ch < SET_SIZE)
-+ *out++ = (char) ch;
-+ else
-+ {
-+ ch -= SET_SIZE;
-+ if(!canonical)
-+ {
-+ for(i = hashheader.nstrchars; --i >= 0; )
-+ {
-+ if(hashheader.dupnos[i] == defdupchar
-+ && hashheader.stringdups[i] == ch)
-+ {
-+ ch = i;
-+ break;
-+ }
-+ }
-+ }
-+ scharp = hashheader.stringchars[(unsigned) ch];
-+ while((*out++ = *scharp++) != '\0')
-+ ;
-+ out--;
-+ }
-+ }
-+ *out = '\0';
-+ return outlen <= 0;
-+}
-+
-+/*
-+ * Convert a string to an ichar_t, storing the result in a static area.
-+ */
-+Public ichar_t *
-+strtosichar(
-+ char * in, /* String to convert */
-+ int canonical) /* NZ if input is in canonical form */
-+{
-+ static ichar_t out[STRTOSICHAR_SIZE / sizeof(ichar_t)];
-+
-+ if(strtoichar(out, in, sizeof out, canonical))
-+ (void) fprintf(stderr, WORD_TOO_LONG (in));
-+ return out;
-+}
-+
-+/*
-+ * Convert an ichar_t to a string, storing the result in a static area.
-+ */
-+Public char *
-+ichartosstr(
-+ ichar_t * in, /* Internal string to convert */
-+ int canonical) /* NZ for canonical conversion */
-+{
-+ static char out[ICHARTOSSTR_SIZE];
-+
-+ if(ichartostr(out, in, sizeof out, canonical))
-+ (void) fprintf(stderr, WORD_TOO_LONG (out));
-+ return out;
-+}
-+
-+/*
-+ * Convert a single ichar to a printable string, storing the result in
-+ * a static area.
-+ */
-+Public char *
-+printichar(int in)
-+{
-+ static char out[MAXSTRINGCHARLEN + 1];
-+
-+ if(in < SET_SIZE)
-+ {
-+ out[0] = (char) in;
-+ out[1] = '\0';
-+ }
-+ else
-+ (void) strcpy(out, hashheader.stringchars[(unsigned) in - SET_SIZE]);
-+ return out;
-+}
-+
-+#ifndef ICHAR_IS_CHAR
-+/*
-+ * Copy an ichar_t.
-+ */
-+Public ichar_t *
-+icharcpy(
-+ register ichar_t * out, /* Destination */
-+ register ichar_t * in) /* Source */
-+{
-+ ichar_t * origout; /* Copy of destination for return */
-+
-+ origout = out;
-+ while((*out++ = *in++) != 0)
-+ ;
-+ return origout;
-+}
-+
-+/*
-+ * Return the length of an ichar_t.
-+ */
-+Public int
-+icharlen(register ichar_t * in) /* String to count */
-+{
-+ register int len; /* Length so far */
-+
-+ for(len = 0; *in++ != 0; len++)
-+ ;
-+ return len;
-+}
-+
-+/*
-+ * Compare two ichar_t's.
-+ */
-+Public int
-+icharcmp(
-+ register ichar_t * s1,
-+ register ichar_t * s2)
-+{
-+
-+ while(*s1 != 0)
-+ {
-+ if(*s1++ != *s2++)
-+ return *--s1 - *--s2;
-+ }
-+ return *s1 - *s2;
-+}
-+
-+/*
-+ * Strncmp for two ichar_t's.
-+ */
-+Public int
-+icharncmp(
-+ register ichar_t * s1,
-+ register ichar_t * s2,
-+ register int n)
-+{
-+
-+ while(--n >= 0 && *s1 != 0)
-+ {
-+ if(*s1++ != *s2++)
-+ return *--s1 - *--s2;
-+ }
-+ if(n < 0)
-+ return 0;
-+ else
-+ return *s1 - *s2;
-+}
-+
-+#endif /* ICHAR_IS_CHAR */
-+
-+Public int
-+findfiletype(
-+ char * name, /* Name to look up in suffix table */
-+ int searchnames, /* NZ to search name field of table */
-+ int * deformatter) /* Where to set deformatter type */
-+{
-+ char * cp; /* Pointer into suffix list */
-+ int cplen; /* Length of current suffix */
-+ register int i; /* Index into type table */
-+ int len; /* Length of the name */
-+
-+ /*
-+ * Note: for now, the deformatter is set to 1 for tex, 0 for nroff.
-+ * Further, we assume that it's one or the other, so that a test
-+ * for tex is sufficient. This needs to be generalized.
-+ */
-+ len = strlen(name);
-+ if(searchnames)
-+ {
-+ for(i = 0; i < hashheader.nstrchartype; i++)
-+ {
-+ if(strcmp(name, chartypes[i].name) == 0)
-+ {
-+ if(deformatter != NULL)
-+ *deformatter =
-+ (strcmp (chartypes[i].deformatter, "tex") == 0);
-+ return i;
-+ }
-+ }
-+ }
-+ for(i = 0; i < hashheader.nstrchartype; i++)
-+ {
-+ for(cp = chartypes[i].suffixes; *cp != '\0'; cp += cplen + 1)
-+ {
-+ cplen = strlen(cp);
-+ if(len >= cplen && strcmp(&name[len - cplen], cp) == 0)
-+ {
-+ if(deformatter != NULL)
-+ *deformatter =
-+ (strcmp (chartypes[i].deformatter, "tex") == 0);
-+ return i;
-+ }
-+ }
-+ }
-+ return -1;
-+}
-+
-+Public char *
-+mypath_rindex(char const *str, char c)
-+{
-+ register char *x;
-+
-+ x = (char *)str + strlen(str);
-+
-+ while(x >= str)
-+ {
-+ if(*x == '\\' || *x == '/' || *x == ':')
-+ return(NULL);
-+ else if(*x == c)
-+ return(x);
-+ else
-+ x--;
-+ }
-+ return(NULL);
-+}
-diff -urBbN vim64.org/src/spell/msgs.h vim64/src/spell/msgs.h
---- vim64.org/src/spell/msgs.h 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/msgs.h 2005-10-17 12:49:17.515833936 +0200
-@@ -0,0 +1,278 @@
-+/*
-+ * $Id$
-+ *
-+ * Copyright 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+
-+/*
-+ * Messages header file.
-+ *
-+ * This file contains all text strings that are written by any of the
-+ * C programs in the ispell package. The strings are collected here so that
-+ * you can have the option of translating them into your local language for
-+ * the benefit of your users.
-+ *
-+ * Anyone who goes to the effort of making a translation may wish to return
-+ * the translated strings to me, geoff@ITcorp.com, so that I can include
-+ * them in a later distribution under #ifdef control.
-+ *
-+ * Besides the strings in this header file, you may also want to translate
-+ * the strings in version.h, which give the version and copyright information.
-+ * However, any translation of these strings MUST accurately preserve the
-+ * legal rights under international law; you may wish to consult a lawyer
-+ * about this since you will be responsible for the results of any
-+ * incorrect translation.
-+ *
-+ * Most of the strings below are simple printf format strings. If the printf
-+ * takes more than one parameter, the string is given as a parameterized
-+ * macro in case your local language needs a different word order.
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.31 1994/12/27 23:08:57 geoff
-+ * Add a message to be issued if a word contains illegal characters.
-+ *
-+ * Revision 1.30 1994/10/25 05:46:40 geoff
-+ * Improve a couple of error messages relating to affix flags.
-+ *
-+ * Revision 1.29 1994/10/04 03:46:23 geoff
-+ * Add a missing carriage return in the help message
-+ *
-+ * Revision 1.28 1994/09/16 05:07:00 geoff
-+ * Add the BAD_FLAG message, and start a sentence in another message with
-+ * an uppercase letter.
-+ *
-+ * Revision 1.27 1994/07/28 05:11:38 geoff
-+ * Log message for previous revision: add BHASH_C_ZERO_COUNT.
-+ *
-+ * Revision 1.26 1994/07/28 04:53:49 geoff
-+ *
-+ * Revision 1.25 1994/05/24 04:54:36 geoff
-+ * Add error messages for affix-flag checking.
-+ *
-+ * Revision 1.24 1994/01/25 07:12:42 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+/*
-+ * The following strings are used in numerous places:
-+ */
-+#define BAD_FLAG "\nIllegal affix flag character '%c'\n"
-+#define CANT_OPEN "Can't open %s"
-+#define CANT_CREATE "Can't create %s\n"
-+#define WORD_TOO_LONG(w) "\nWord '%s' too long at line %d of %s, truncated\n", \
-+ w, __LINE__, __FILE__
-+
-+/*
-+ * The following strings are used in buildhash.c:
-+ */
-+#define BHASH_C_NO_DICT "No dictionary (%s)\n"
-+#define BHASH_C_NO_COUNT "No count file\n"
-+#define BHASH_C_BAD_COUNT "Bad count file\n"
-+#define BHASH_C_ZERO_COUNT "No words in dictionary\n"
-+ /* I think this message looks better when it's nearly 80 characters wide,
-+ * thus the ugly formatting in the next two defines. GK 9-87 */
-+#define BHASH_C_BAFF_1(max, excess) \
-+ " Warning: this language table may exceed the maximum total affix length\nof %d by up to %d bytes. You should either increase MAXAFFIXLEN in config.X\nor shorten your largest affix/strip string difference. (This is the\n", \
-+ max, excess
-+#define BHASH_C_BAFF_2 \
-+ "difference between the affix length and the strip length in a given\nreplacement rule, or the affix length if there is no strip string\nin that rule.)\n"
-+#define BHASH_C_OVERFLOW "Hash table overflowed by %d words\n"
-+#define BHASH_C_CANT_OPEN_DICT "Can't open dictionary\n"
-+#define BHASH_C_NO_SPACE "Couldn't allocate hash table\n"
-+#define BHASH_C_COLLISION_SPACE "\ncouldn't allocate space for collision\n"
-+#define BHASH_C_COUNTING "Counting words in dictionary ...\n"
-+#define BHASH_C_WORD_COUNT "\n%d words\n"
-+#define BHASH_C_USAGE "Usage: buildhash [-s] dict-file aff-file hash-file\n\tbuildhash -c count aff-file\n"
-+
-+/*
-+ * The following strings are used in correct.c:
-+ */
-+#define CORR_C_HELP_1 "Whenever a word is found that is not in the dictionary,\n"
-+#define CORR_C_HELP_2 "it is printed on the first line of the screen. If the dictionary\n"
-+#define CORR_C_HELP_3 "contains any similar words, they are listed with a number\n"
-+#define CORR_C_HELP_4 "next to each one. You have the option of replacing the word\n"
-+#define CORR_C_HELP_5 "completely, or choosing one of the suggested words.\n"
-+ /* You may add HELP_6 through HELP_9 if your language needs more lines */
-+#define CORR_C_HELP_6 ""
-+#define CORR_C_HELP_7 ""
-+#define CORR_C_HELP_8 ""
-+#define CORR_C_HELP_9 ""
-+#define CORR_C_HELP_COMMANDS "\nCommands are:\n\n"
-+#define CORR_C_HELP_R_CMD "R Replace the misspelled word completely.\n"
-+#define CORR_C_HELP_BLANK "Space Accept the word this time only.\n"
-+#define CORR_C_HELP_A_CMD "A Accept the word for the rest of this session.\n"
-+#define CORR_C_HELP_I_CMD "I Accept the word, and put it in your private dictionary.\n"
-+#define CORR_C_HELP_U_CMD "U Accept and add lowercase version to private dictionary.\n"
-+#define CORR_C_HELP_0_CMD "0-n Replace with one of the suggested words.\n"
-+#define CORR_C_HELP_L_CMD "L Look up words in system dictionary.\n"
-+#define CORR_C_HELP_X_CMD "X Write the rest of this file, ignoring misspellings,\n and start next file.\n"
-+#define CORR_C_HELP_Q_CMD "Q Quit immediately. Asks for confirmation.\n Leaves file unchanged.\n"
-+#define CORR_C_HELP_BANG "! Shell escape.\n"
-+#define CORR_C_HELP_REDRAW "^L Redraw screen.\n"
-+#define CORR_C_HELP_SUSPEND "^Z Suspend program.\n"
-+#define CORR_C_HELP_HELP "? Show this help screen.\n"
-+#define CORR_C_HELP_TYPE_SPACE "-- Type space to continue --"
-+
-+#define CORR_C_FILE_LABEL " File: %s"
-+#define CORR_C_READONLY "[READONLY]"
-+#define CORR_C_MINI_MENU "[SP] <number> R)epl A)ccept I)nsert L)ookup U)ncap Q)uit e(X)it or ? for help\n"
-+#define CORR_C_CONFIRM_QUIT "Are you sure you want to throw away your changes? "
-+#define CORR_C_REPLACE_WITH "Replace with: "
-+#define CORR_C_LOOKUP_PROMPT "Lookup string ('*' is wildcard): "
-+#define CORR_C_MORE_PROMPT "-- more --"
-+#define CORR_C_BLANK_MORE " "
-+#define CORR_C_END_LOOK "--end--"
-+
-+/*
-+ * The following strings are used in defmt.c:
-+ */
-+#define DEFMT_C_TEX_MATH_ERROR "****ERROR in parsing TeX math mode!\n"
-+#define DEFMT_C_LR_MATH_ERROR "***ERROR in LR to math-mode switch.\n"
-+
-+/*
-+ * The following strings are used in icombine.c:
-+ */
-+#define ICOMBINE_C_BAD_TYPE "icombine: unrecognized formatter type '%s'\n"
-+#define ICOMBINE_C_USAGE "Usage: icombine [-T suffix] [aff-file] < wordlist\n"
-+
-+/*
-+ * The following strings are used in ispell.c:
-+ */
-+#define ISPELL_C_USAGE1 "Usage: %s [-dfile | -pfile | -wchars | -Wn | -t | -n | -x | -b | -S | -B | -C | -P | -m | -Lcontext | -M | -N | -Ttype | -V] file .....\n"
-+#define ISPELL_C_USAGE2 " %s [-dfile | -pfile | -wchars | -Wn | -t | -n | -Ttype] -l\n"
-+#ifndef USG
-+#define ISPELL_C_USAGE3 " %s [-dfile | -pfile | -ffile | -Wn | -t | -n | -s | -B | -C | -P | -m | -Ttype] {-a | -A}\n"
-+#else
-+#define ISPELL_C_USAGE3 " %s [-dfile | -pfile | -ffile | -Wn | -t | -n | -B | -C | -P | -m | -Ttype] {-a | -A}\n"
-+#endif
-+#define ISPELL_C_USAGE4 " %s [-dfile] [-wchars | -Wn] -c\n"
-+#define ISPELL_C_USAGE5 " %s [-dfile] [-wchars] -e[1-4]\n"
-+#define ISPELL_C_USAGE6 " %s [-dfile] [-wchars] -D\n"
-+#define ISPELL_C_USAGE7 " %s -v\n"
-+#define ISPELL_C_TEMP_DISAPPEARED "temporary file disappeared (%s)\n"
-+#define ISPELL_C_BAD_TYPE "ispell: unrecognized formatter type '%s'\n"
-+#define ISPELL_C_NO_FILE "ispell: specified file does not exist\n"
-+#define ISPELL_C_NO_FILES "ispell: specified files do not exist\n"
-+#define ISPELL_C_CANT_WRITE "Warning: Can't write to %s\n"
-+#define ISPELL_C_OPTIONS_ARE "Compiled-in options:\n"
-+#ifdef MSDOS
-+#define ISPELL_C_NO_OPTIONS_SPACE "ispell: no memory to read default options\n"
-+#endif
-+
-+/*
-+ * The following strings are used in lookup.c:
-+ */
-+#define LOOKUP_C_CANT_READ "Trouble reading hash table %s"
-+#define LOOKUP_C_NULL_HASH "Null hash table %s"
-+#define LOOKUP_C_SHORT_HASH(name, gotten, wanted) \
-+ "Truncated hash table %s: got %d bytes, expected %d", \
-+ name, gotten, wanted
-+#define LOOKUP_C_BAD_MAGIC(name, wanted, gotten) \
-+ "Illegal format hash table %s - expected magic 0x%x, got 0x%x", \
-+ name, wanted, gotten
-+#define LOOKUP_C_BAD_MAGIC2(name, wanted, gotten) \
-+ "Illegal format hash table %s - \nexpected magic2 0x%x, got 0x%x", \
-+ name, wanted, gotten
-+#define LOOKUP_C_BAD_OPTIONS(gotopts, gotchars, gotlen, wantedopts, wantedchars, wantedlen) \
-+ "Hash table options don't agree with buildhash - 0x%x/%d/%d vs. 0x%x/%d/%d", \
-+ gotopts, gotchars, gotlen, \
-+ wantedopts, wantedchars, wantedlen
-+#define LOOKUP_C_NO_HASH_SPACE "Couldn't allocate space for hash table"
-+#define LOOKUP_C_BAD_FORMAT "Illegal format hash table"
-+#define LOOKUP_C_NO_LANG_SPACE "Couldn't allocate space for language tables"
-+
-+/*
-+ * The following strings are used in makedent.c:
-+ */
-+#define MAKEDENT_C_NO_WORD_SPACE "\nCouldn't allocate space for word '%s'\n"
-+#define MAKEDENT_C_BAD_WORD_CHAR "\nWord '%s' contains illegal characters\n"
-+
-+/*
-+ * The following strings are used in parse.y:
-+ */
-+#define PARSE_Y_8_BIT "Eighth bit ignored (recompile ispell without NO8BIT)"
-+#define PARSE_Y_NO_WORD_STRINGS "wordchars statement may not specify string characters"
-+#define PARSE_Y_UNMATCHED "Unmatched charset lengths"
-+#define PARSE_Y_NO_BOUNDARY_STRINGS "boundarychars statement may not specify string characters"
-+#define PARSE_Y_LONG_STRING "String character is too long"
-+#define PARSE_Y_NULL_STRING "String character must have nonzero length"
-+#define PARSE_Y_MANY_STRINGS "Too many string characters"
-+#define PARSE_Y_NO_SUCH_STRING "No such string character"
-+#define PARSE_Y_MULTIPLE_STRINGS "Alternate string character was already defined"
-+#define PARSE_Y_LENGTH_MISMATCH "Upper and lower versions of string character must be same length"
-+#define PARSE_Y_WRONG_NROFF "Incorrect character count in nroffchars statement"
-+#define PARSE_Y_WRONG_TEX "Incorrect character count in TeXchars statement"
-+#define PARSE_Y_DOUBLE_COMPOUND "Compoundwords option may only appear once"
-+#define PARSE_Y_LONG_FLAG "Flag must be single character"
-+#define PARSE_Y_BAD_FLAG "Flag must be alphabetic"
-+#define PARSE_Y_DUP_FLAG "Duplicate flag"
-+#define PARSE_Y_NO_SPACE "Out of memory"
-+#define PARSE_Y_NEED_BLANK "Single characters must be separated by a blank"
-+#define PARSE_Y_MANY_CONDS "Too many conditions; 8 maximum"
-+#define PARSE_Y_EOF "Unexpected EOF in quoted string"
-+#define PARSE_Y_LONG_QUOTE "Quoted string too long, max 256 characters"
-+#define PARSE_Y_ERROR_FORMAT(file, lineno, error) \
-+ "%s line %d: %s\n", file, lineno, error
-+#define PARSE_Y_MALLOC_TROUBLE "yyopen: trouble allocating memory\n"
-+#define PARSE_Y_UNGRAB_PROBLEM "Internal error: ungrab buffer overflow"
-+#define PARSE_Y_BAD_DEFORMATTER "Deformatter must be either 'nroff' or 'tex'"
-+#define PARSE_Y_BAD_NUMBER "Illegal digit in number"
-+
-+/*
-+ * The following strings are used in term.c:
-+ */
-+#define TERM_C_SMALL_SCREEN "Screen too small: need at least %d lines\n"
-+#define TERM_C_NO_BATCH "Can't deal with non-interactive use yet.\n"
-+#define TERM_C_CANT_FORK "Couldn't fork, try later.\n"
-+#define TERM_C_TYPE_SPACE "\n-- Type space to continue --"
-+
-+/*
-+ * The following strings are used in tree.c:
-+ */
-+#define TREE_C_CANT_UPDATE "Warning: Cannot update personal dictionary (%s)\n"
-+#define TREE_C_NO_SPACE "Ran out of space for personal dictionary\n"
-+#define TREE_C_TRY_ANYWAY "Continuing anyway (with reduced performance).\n"
-+
-+/*
-+ * The following strings are used in unsq.c:
-+ */
-+#define UNSQ_C_BAD_COUNT "Illegal count character 0x%x\n"
-+#define UNSQ_C_SURPRISE_EOF "Unexpected EOF\n"
-diff -urBbN vim64.org/src/spell/tgood.c vim64/src/spell/tgood.c
---- vim64.org/src/spell/tgood.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/tgood.c 2005-10-17 12:49:17.517833632 +0200
-@@ -0,0 +1,654 @@
-+/*
-+ * Copyright 1987, 1988, 1989, 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * Table-driven version of good.c.
-+ *
-+ * Geoff Kuenning, July 1987
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.32 1994/11/02 06:56:16 geoff
-+ * Remove the anyword feature, which I've decided is a bad idea.
-+ *
-+ * Revision 1.31 1994/10/25 05:46:25 geoff
-+ * Add support for the FF_ANYWORD (affix applies to all words, even if
-+ * flag bit isn't set) flag option.
-+ *
-+ * Revision 1.30 1994/05/24 06:23:08 geoff
-+ * Don't create a hit if "allhits" is clear and capitalization
-+ * mismatches. This cures a bug where a word could be in the dictionary
-+ * and yet not found.
-+ *
-+ * Revision 1.29 1994/05/17 06:44:21 geoff
-+ * Add support for controlled compound formation and the COMPOUNDONLY
-+ * option to affix flags.
-+ *
-+ * Revision 1.28 1994/01/25 07:12:13 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+#include <ctype.h>
-+#include "ispell.h"
-+
-+Global void chk_aff (ichar_t * word, ichar_t * ucword, int len,
-+ int ignoreflagbits, int allhits, int pfxopts, int sfxopts);
-+Local void pfx_list_chk (ichar_t * word, ichar_t * ucword,
-+ int len, int optflags, int sfxopts, struct flagptr * ind,
-+ int ignoreflagbits, int allhits);
-+Local void chk_suf (ichar_t * word, ichar_t * ucword, int len,
-+ int optflags, struct flagent * pfxent, int ignoreflagbits,
-+ int allhits);
-+Local void suf_list_chk (ichar_t * word, ichar_t * ucword, int len,
-+ struct flagptr * ind, int optflags, struct flagent * pfxent,
-+ int ignoreflagbits, int allhits);
-+Global int expand_pre (char * croot, ichar_t * rootword,
-+ MASKTYPE mask[], int option, char * extra);
-+Local int pr_pre_expansion (char * croot, ichar_t * rootword,
-+ struct flagent * flent, MASKTYPE mask[], int option,
-+ char * extra);
-+Global int expand_suf (char * croot, ichar_t * rootword,
-+ MASKTYPE mask[], int optflags, int option, char * extra);
-+Local int pr_suf_expansion (char * croot, ichar_t * rootword,
-+ struct flagent * flent, int option, char * extra);
-+Local void forcelc (ichar_t * dst, int len);
-+
-+/* Check possible affixes */
-+Public void
-+chk_aff (
-+ ichar_t * word, /* Word to be checked */
-+ ichar_t * ucword, /* Upper-case-only copy of word */
-+ int len, /* The length of word/ucword */
-+ int ignoreflagbits, /* Ignore whether affix is legal */
-+ int allhits, /* Keep going after first hit */
-+ int pfxopts, /* Options to apply to prefixes */
-+ int sfxopts) /* Options to apply to suffixes */
-+ {
-+ register ichar_t * cp; /* Pointer to char to index on */
-+ struct flagptr * ind; /* Flag index table to test */
-+
-+ pfx_list_chk (word, ucword, len, pfxopts, sfxopts, &pflagindex[0],
-+ ignoreflagbits, allhits);
-+ cp = ucword;
-+ ind = &pflagindex[*cp++];
-+ while (ind->numents == 0 && ind->pu.fp != NULL)
-+ {
-+ if (*cp == 0)
-+ return;
-+ if (ind->pu.fp[0].numents)
-+ {
-+ pfx_list_chk (word, ucword, len, pfxopts, sfxopts, &ind->pu.fp[0],
-+ ignoreflagbits, allhits);
-+ if (numhits && !allhits && !cflag && !ignoreflagbits)
-+ return;
-+ }
-+ ind = &ind->pu.fp[*cp++];
-+ }
-+ pfx_list_chk (word, ucword, len, pfxopts, sfxopts, ind, ignoreflagbits,
-+ allhits);
-+ if (numhits && !allhits && !cflag && !ignoreflagbits)
-+ return;
-+ chk_suf (word, ucword, len, sfxopts, (struct flagent *) NULL,
-+ ignoreflagbits, allhits);
-+ }
-+
-+/* Check some prefix flags */
-+Local void
-+pfx_list_chk(
-+ ichar_t * word, /* Word to be checked */
-+ ichar_t * ucword, /* Upper-case-only word */
-+ int len, /* The length of ucword */
-+ int optflags, /* Options to apply */
-+ int sfxopts, /* Options to apply to suffixes */
-+ struct flagptr * ind, /* Flag index table */
-+ int ignoreflagbits, /* Ignore whether affix is legal */
-+ int allhits) /* Keep going after first hit */
-+ {
-+ int cond; /* Condition number */
-+ register ichar_t * cp; /* Pointer into end of ucword */
-+ struct dent * dent; /* Dictionary entry we found */
-+ int entcount; /* Number of entries to process */
-+ register struct flagent *
-+ flent; /* Current table entry */
-+ int preadd; /* Length added to tword2 as prefix */
-+ register int tlen; /* Length of tword */
-+ ichar_t tword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; /* Tmp cpy */
-+ ichar_t tword2[sizeof tword]; /* 2nd copy for ins_root_cap */
-+
-+ for (flent = ind->pu.ent, entcount = ind->numents;
-+ entcount > 0; flent++, entcount--)
-+ {
-+ /*
-+ * If this is a compound-only affix, ignore it unless we're
-+ * looking for that specific thing.
-+ */
-+ if ((flent->flagflags & FF_COMPOUNDONLY) != 0
-+ && (optflags & FF_COMPOUNDONLY) == 0)
-+ continue;
-+ /*
-+ * In COMPOUND_CONTROLLED mode, the FF_COMPOUNDONLY bit must
-+ * match exactly.
-+ */
-+ if (compoundflag == COMPOUND_CONTROLLED
-+ && ((flent->flagflags ^ optflags) & FF_COMPOUNDONLY) != 0)
-+ continue;
-+ /*
-+ * See if the prefix matches.
-+ */
-+ tlen = len - flent->affl;
-+ if (tlen > 0 && (flent->affl == 0 ||
-+ icharncmp (flent->affix, ucword, flent->affl) == 0) &&
-+ tlen + flent->stripl >= flent->numconds)
-+ {
-+ /*
-+ * The prefix matches. Remove it, replace it by the "strip"
-+ * string (if any), and check the original conditions.
-+ */
-+ if (flent->stripl)
-+ (void) icharcpy (tword, flent->strip);
-+ (void) icharcpy (tword + flent->stripl, ucword + flent->affl);
-+ cp = tword;
-+ for (cond = 0; cond < flent->numconds; cond++)
-+ {
-+ if ((flent->conds[*cp++] & (1 << cond)) == 0)
-+ break;
-+ }
-+ if (cond >= flent->numconds)
-+ {
-+ /*
-+ * The conditions match. See if the word is in the
-+ * dictionary.
-+ */
-+ tlen += flent->stripl;
-+ if (cflag)
-+ flagpr (tword, BITTOCHAR (flent->flagbit), flent->stripl,
-+ flent->affl, -1, 0);
-+ else if (ignoreflagbits)
-+ {
-+ if ((dent = lookup (tword, 1)) != NULL)
-+ {
-+ cp = tword2;
-+ if (flent->affl)
-+ {
-+ (void) icharcpy (cp, flent->affix);
-+ cp += flent->affl;
-+ *cp++ = '+';
-+ }
-+ preadd = cp - tword2;
-+ (void) icharcpy (cp, tword);
-+ cp += tlen;
-+ if (flent->stripl)
-+ {
-+ *cp++ = '-';
-+ (void) icharcpy (cp, flent->strip);
-+ }
-+ (void) ins_root_cap (tword2, word,
-+ flent->stripl, preadd,
-+ 0, (cp - tword2) - tlen - preadd,
-+ dent, flent, (struct flagent *) NULL);
-+ }
-+ }
-+ else if ((dent = lookup (tword, 1)) != NULL
-+ && TSTMASKBIT (dent->mask, flent->flagbit))
-+ {
-+ if (numhits < MAX_HITS)
-+ {
-+ hits[numhits].dictent = dent;
-+ hits[numhits].prefix = flent;
-+ hits[numhits].suffix = NULL;
-+ numhits++;
-+ }
-+ if (!allhits)
-+ {
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ if (cap_ok (word, &hits[0], len))
-+ return;
-+ numhits = 0;
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+ return;
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ }
-+ }
-+ /*
-+ * Handle cross-products.
-+ */
-+ if (flent->flagflags & FF_CROSSPRODUCT)
-+ chk_suf (word, tword, tlen, sfxopts | FF_CROSSPRODUCT,
-+ flent, ignoreflagbits, allhits);
-+ }
-+ }
-+ }
-+ }
-+
-+/* Check possible suffixes */
-+Local void
-+chk_suf(
-+ ichar_t * word, /* Word to be checked */
-+ ichar_t * ucword, /* Upper-case-only word */
-+ int len, /* The length of ucword */
-+ int optflags, /* Affix option flags */
-+ struct flagent * pfxent, /* Prefix flag entry if cross-prod */
-+ int ignoreflagbits, /* Ignore whether affix is legal */
-+ int allhits) /* Keep going after first hit */
-+ {
-+ register ichar_t * cp; /* Pointer to char to index on */
-+ struct flagptr * ind; /* Flag index table to test */
-+
-+ suf_list_chk (word, ucword, len, &sflagindex[0], optflags, pfxent,
-+ ignoreflagbits, allhits);
-+ cp = ucword + len - 1;
-+ ind = &sflagindex[*cp];
-+ while (ind->numents == 0 && ind->pu.fp != NULL)
-+ {
-+ if (cp == ucword)
-+ return;
-+ if (ind->pu.fp[0].numents)
-+ {
-+ suf_list_chk (word, ucword, len, &ind->pu.fp[0],
-+ optflags, pfxent, ignoreflagbits, allhits);
-+ if (numhits != 0 && !allhits && !cflag && !ignoreflagbits)
-+ return;
-+ }
-+ ind = &ind->pu.fp[*--cp];
-+ }
-+ suf_list_chk (word, ucword, len, ind, optflags, pfxent,
-+ ignoreflagbits, allhits);
-+ }
-+
-+Local void
-+suf_list_chk (
-+ ichar_t * word, /* Word to be checked */
-+ ichar_t * ucword, /* Upper-case-only word */
-+ int len, /* The length of ucword */
-+ struct flagptr * ind, /* Flag index table */
-+ int optflags, /* Affix option flags */
-+ struct flagent * pfxent, /* Prefix flag entry if crossonly */
-+ int ignoreflagbits, /* Ignore whether affix is legal */
-+ int allhits) /* Keep going after first hit */
-+{
-+ register ichar_t * cp; /* Pointer into end of ucword */
-+ int cond; /* Condition number */
-+ struct dent * dent; /* Dictionary entry we found */
-+ int entcount; /* Number of entries to process */
-+ register struct flagent *
-+ flent; /* Current table entry */
-+ int preadd; /* Length added to tword2 as prefix */
-+ register int tlen; /* Length of tword */
-+ ichar_t tword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; /* Tmp cpy */
-+ ichar_t tword2[sizeof tword]; /* 2nd copy for ins_root_cap */
-+
-+ (void) icharcpy (tword, ucword);
-+ for (flent = ind->pu.ent, entcount = ind->numents;
-+ entcount > 0;
-+ flent++, entcount--)
-+ {
-+ if ((optflags & FF_CROSSPRODUCT) != 0
-+ && (flent->flagflags & FF_CROSSPRODUCT) == 0)
-+ continue;
-+ /*
-+ * If this is a compound-only affix, ignore it unless we're
-+ * looking for that specific thing.
-+ */
-+ if ((flent->flagflags & FF_COMPOUNDONLY) != 0
-+ && (optflags & FF_COMPOUNDONLY) == 0)
-+ continue;
-+ /*
-+ * In COMPOUND_CONTROLLED mode, the FF_COMPOUNDONLY bit must
-+ * match exactly.
-+ */
-+ if (compoundflag == COMPOUND_CONTROLLED
-+ && ((flent->flagflags ^ optflags) & FF_COMPOUNDONLY) != 0)
-+ continue;
-+ /*
-+ * See if the suffix matches.
-+ */
-+ tlen = len - flent->affl;
-+ if (tlen > 0
-+ && (flent->affl == 0
-+ || icharcmp (flent->affix, ucword + tlen) == 0)
-+ && tlen + flent->stripl >= flent->numconds)
-+ {
-+ /*
-+ * The suffix matches. Remove it, replace it by the "strip"
-+ * string (if any), and check the original conditions.
-+ */
-+ (void) icharcpy (tword, ucword);
-+ cp = tword + tlen;
-+ if (flent->stripl)
-+ {
-+ (void) icharcpy (cp, flent->strip);
-+ tlen += flent->stripl;
-+ cp = tword + tlen;
-+ }
-+ else
-+ *cp = '\0';
-+ for (cond = flent->numconds; --cond >= 0; )
-+ {
-+ if ((flent->conds[*--cp] & (1 << cond)) == 0)
-+ break;
-+ }
-+ if (cond < 0)
-+ {
-+ /*
-+ * The conditions match. See if the word is in the
-+ * dictionary.
-+ */
-+ if (cflag)
-+ {
-+ if (optflags & FF_CROSSPRODUCT)
-+ flagpr (tword, BITTOCHAR (pfxent->flagbit),
-+ pfxent->stripl, pfxent->affl,
-+ BITTOCHAR (flent->flagbit), flent->affl);
-+ else
-+ flagpr (tword, -1, 0, 0,
-+ BITTOCHAR (flent->flagbit), flent->affl);
-+ }
-+ else if (ignoreflagbits)
-+ {
-+ if ((dent = lookup (tword, 1)) != NULL)
-+ {
-+ cp = tword2;
-+ if ((optflags & FF_CROSSPRODUCT)
-+ && pfxent->affl != 0)
-+ {
-+ (void) icharcpy (cp, pfxent->affix);
-+ cp += pfxent->affl;
-+ *cp++ = '+';
-+ }
-+ preadd = cp - tword2;
-+ (void) icharcpy (cp, tword);
-+ cp += tlen;
-+ if ((optflags & FF_CROSSPRODUCT)
-+ && pfxent->stripl != 0)
-+ {
-+ *cp++ = '-';
-+ (void) icharcpy (cp, pfxent->strip);
-+ cp += pfxent->stripl;
-+ }
-+ if (flent->stripl)
-+ {
-+ *cp++ = '-';
-+ (void) icharcpy (cp, flent->strip);
-+ cp += flent->stripl;
-+ }
-+ if (flent->affl)
-+ {
-+ *cp++ = '+';
-+ (void) icharcpy (cp, flent->affix);
-+ cp += flent->affl;
-+ }
-+ (void) ins_root_cap (tword2, word,
-+ (optflags & FF_CROSSPRODUCT) ? pfxent->stripl : 0,
-+ preadd,
-+ flent->stripl, (cp - tword2) - tlen - preadd,
-+ dent, pfxent, flent);
-+ }
-+ }
-+ else if ((dent = lookup (tword, 1)) != NULL
-+ && TSTMASKBIT (dent->mask, flent->flagbit)
-+ && ((optflags & FF_CROSSPRODUCT) == 0
-+ || TSTMASKBIT (dent->mask, pfxent->flagbit)))
-+ {
-+ if (numhits < MAX_HITS)
-+ {
-+ hits[numhits].dictent = dent;
-+ hits[numhits].prefix = pfxent;
-+ hits[numhits].suffix = flent;
-+ numhits++;
-+ }
-+ if (!allhits)
-+ {
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ if (cap_ok (word, &hits[0], len))
-+ return;
-+ numhits = 0;
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+ return;
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ }
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+/*
-+ * Expand a dictionary prefix entry
-+ */
-+Public int
-+expand_pre(
-+ char * croot, /* Char version of rootword */
-+ ichar_t * rootword, /* Root word to expand */
-+ register MASKTYPE mask[], /* Mask bits to expand on */
-+ int option, /* Option, see expandmode */
-+ char * extra) /* Extra info to add to line */
-+{
-+ int entcount; /* No. of entries to process */
-+ int explength; /* Length of expansions */
-+ register struct flagent *
-+ flent; /* Current table entry */
-+
-+ for (flent = pflaglist, entcount = numpflags, explength = 0;
-+ entcount > 0; flent++, entcount--)
-+ {
-+ if (TSTMASKBIT (mask, flent->flagbit))
-+ explength +=
-+ pr_pre_expansion (croot, rootword, flent, mask, option, extra);
-+ }
-+ return explength;
-+}
-+
-+/* Print a prefix expansion */
-+Local int
-+pr_pre_expansion(
-+ char * croot, /* Char version of rootword */
-+ register ichar_t * rootword, /* Root word to expand */
-+ register struct flagent * flent, /* Current table entry */
-+ MASKTYPE mask[], /* Mask bits to expand on */
-+ int option, /* Option, see expandmode */
-+ char * extra) /* Extra info to add to line */
-+{
-+ int cond; /* Current condition number */
-+ register ichar_t * nextc; /* Next case choice */
-+ int tlen; /* Length of tword */
-+ ichar_t tword[INPUTWORDLEN + MAXAFFIXLEN]; /* Temp */
-+
-+ tlen = icharlen (rootword);
-+ if (flent->numconds > tlen)
-+ return 0;
-+ tlen -= flent->stripl;
-+ if (tlen <= 0)
-+ return 0;
-+ tlen += flent->affl;
-+ for (cond = 0, nextc = rootword; cond < flent->numconds; cond++)
-+ {
-+ if ((flent->conds[mytoupper (*nextc++)] & (1 << cond)) == 0)
-+ return 0;
-+ }
-+ /*
-+ * The conditions are satisfied. Copy the word, add the prefix,
-+ * and make it the proper case. This code is carefully written
-+ * to match that ins_cap and cap_ok. Note that the affix, as
-+ * inserted, is uppercase.
-+ *
-+ * There is a tricky bit here: if the root is capitalized, we
-+ * want a capitalized result. If the root is followcase, however,
-+ * we want to duplicate the case of the first remaining letter
-+ * of the root. In other words, "Loved/U" should generate "Unloved",
-+ * but "LOved/U" should generate "UNLOved" and "lOved/U" should
-+ * produce "unlOved".
-+ */
-+ if (flent->affl)
-+ {
-+ (void) icharcpy (tword, flent->affix);
-+ nextc = tword + flent->affl;
-+ }
-+ (void) icharcpy (nextc, rootword + flent->stripl);
-+ if (myupper (rootword[0]))
-+ {
-+ /* We must distinguish followcase from capitalized and all-upper */
-+ for (nextc = rootword + 1; *nextc; nextc++)
-+ {
-+ if (!myupper (*nextc))
-+ break;
-+ }
-+ if (*nextc)
-+ {
-+ /* It's a followcase or capitalized word. Figure out which. */
-+ for ( ; *nextc; nextc++)
-+ {
-+ if (myupper (*nextc))
-+ break;
-+ }
-+ if (*nextc)
-+ {
-+ /* It's followcase. */
-+ if (!myupper (tword[flent->affl]))
-+ forcelc (tword, flent->affl);
-+ }
-+ else
-+ {
-+ /* It's capitalized */
-+ forcelc (tword + 1, tlen - 1);
-+ }
-+ }
-+ }
-+ else
-+ {
-+ /* Followcase or all-lower, we don't care which */
-+ if (!myupper (*nextc))
-+ forcelc (tword, flent->affl);
-+ }
-+ if (option == 3)
-+ (void) printf ("\n%s", croot);
-+ if (option != 4)
-+ (void) printf (" %s%s", ichartosstr (tword, 1), extra);
-+ if (flent->flagflags & FF_CROSSPRODUCT)
-+ return tlen
-+ + expand_suf (croot, tword, mask, FF_CROSSPRODUCT, option, extra);
-+ else
-+ return tlen;
-+}
-+
-+/*
-+ * Expand a dictionary suffix entry
-+ */
-+int expand_suf (croot, rootword, mask, optflags, option, extra)
-+ char * croot; /* Char version of rootword */
-+ ichar_t * rootword; /* Root word to expand */
-+ register MASKTYPE mask[]; /* Mask bits to expand on */
-+ int optflags; /* Affix option flags */
-+ int option; /* Option, see expandmode */
-+ char * extra; /* Extra info to add to line */
-+ {
-+ int entcount; /* No. of entries to process */
-+ int explength; /* Length of expansions */
-+ register struct flagent *
-+ flent; /* Current table entry */
-+
-+ for (flent = sflaglist, entcount = numsflags, explength = 0;
-+ entcount > 0;
-+ flent++, entcount--)
-+ {
-+ if (TSTMASKBIT (mask, flent->flagbit))
-+ {
-+ if ((optflags & FF_CROSSPRODUCT) == 0
-+ || (flent->flagflags & FF_CROSSPRODUCT))
-+ explength +=
-+ pr_suf_expansion (croot, rootword, flent, option, extra);
-+ }
-+ }
-+ return explength;
-+ }
-+
-+/* Print a suffix expansion */
-+static int pr_suf_expansion (croot, rootword, flent, option, extra)
-+ char * croot; /* Char version of rootword */
-+ register ichar_t * rootword; /* Root word to expand */
-+ register struct flagent * flent; /* Current table entry */
-+ int option; /* Option, see expandmode */
-+ char * extra; /* Extra info to add to line */
-+ {
-+ int cond; /* Current condition number */
-+ register ichar_t * nextc; /* Next case choice */
-+ int tlen; /* Length of tword */
-+ ichar_t tword[INPUTWORDLEN + MAXAFFIXLEN]; /* Temp */
-+
-+ tlen = icharlen (rootword);
-+ cond = flent->numconds;
-+ if (cond > tlen)
-+ return 0;
-+ if (tlen - flent->stripl <= 0)
-+ return 0;
-+ for (nextc = rootword + tlen; --cond >= 0; )
-+ {
-+ if ((flent->conds[mytoupper (*--nextc)] & (1 << cond)) == 0)
-+ return 0;
-+ }
-+ /*
-+ * The conditions are satisfied. Copy the word, add the suffix,
-+ * and make it match the case of the last remaining character of the
-+ * root. Again, this code carefully matches ins_cap and cap_ok.
-+ */
-+ (void) icharcpy (tword, rootword);
-+ nextc = tword + tlen - flent->stripl;
-+ if (flent->affl)
-+ {
-+ (void) icharcpy (nextc, flent->affix);
-+ if (!myupper (nextc[-1]))
-+ forcelc (nextc, flent->affl);
-+ }
-+ else
-+ *nextc = 0;
-+ if (option == 3)
-+ (void) printf ("\n%s", croot);
-+ if (option != 4)
-+ (void) printf (" %s%s", ichartosstr (tword, 1), extra);
-+ return tlen + flent->affl - flent->stripl;
-+ }
-+
-+static void forcelc (dst, len) /* Force to lowercase */
-+ register ichar_t * dst; /* Destination to modify */
-+ register int len; /* Length to copy */
-+ {
-+
-+ for ( ; --len >= 0; dst++)
-+ *dst = mytolower (*dst);
-+ }
-diff -urBbN vim64.org/src/spell/tree.c vim64/src/spell/tree.c
---- vim64.org/src/spell/tree.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/tree.c 2005-10-17 12:49:17.518833480 +0200
-@@ -0,0 +1,748 @@
-+/*
-+ * tree.c - a hash style dictionary for user's personal words
-+ *
-+ * Pace Willisson, 1983
-+ * Hash support added by Geoff Kuenning, 1987
-+ *
-+ * Copyright 1987, 1988, 1989, 1992, 1993, Geoff Kuenning, Granada Hills, CA
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All modifications to the source code must be clearly marked as
-+ * such. Binary redistributions based on modified source code
-+ * must be clearly marked as modified versions in the documentation
-+ * and/or other materials provided with the distribution.
-+ * 4. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgment:
-+ * This product includes software developed by Geoff Kuenning and
-+ * other unpaid contributors.
-+ * 5. The name of Geoff Kuenning may not be used to endorse or promote
-+ * products derived from this software without specific prior
-+ * written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * $Log$
-+ * Revision 1.56 1995/01/08 23:23:49 geoff
-+ * Support PDICTHOME for DOS purposes.
-+ *
-+ * Revision 1.55 1994/10/25 05:46:27 geoff
-+ * Fix a comment that looked to some compilers like it might be nested.
-+ *
-+ * Revision 1.54 1994/01/25 07:12:15 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-+
-+#include <ctype.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include "ispell.h"
-+#include "msgs.h"
-+
-+Local FILE * trydict (char * dictname, char * home,
-+ char * prefix, char * suffix);
-+Local void treeload (FILE * dictf);
-+Local struct dent * tinsert (struct dent * proto);
-+#if SORTPERSONAL != 0
-+Local int pdictcmp (struct dent ** enta, struct dent **entb);
-+#endif /* SORTPERSONAL != 0 */
-+#ifdef REGEX_LOOKUP
-+#endif /* REGEX_LOOKUP */
-+
-+Local int cantexpand = 0; /* NZ if an expansion fails */
-+Local struct dent * pershtab; /* Aux hash table for personal dict */
-+Local int pershsize = 0; /* Space available in aux hash table */
-+Local int hcount = 0; /* Number of items in hash table */
-+
-+/*
-+ * Hash table sizes. Prime is probably a good idea, though in truth I
-+ * whipped the algorithm up on the spot rather than looking it up, so
-+ * who knows what's really best? If we overflow the table, we just
-+ * use a double-and-add-1 algorithm.
-+ */
-+static int goodsizes[] =
-+ {
-+ 53, 223, 907, 3631
-+ };
-+
-+Local char personaldict[MAXPATHLEN];
-+Local FILE * dictf;
-+Local newwords = 0;
-+
-+Public void
-+treeinit (
-+ char * p, /* Value specified in -p switch */
-+ char * LibDict) /* Root of default dict name */
-+{
-+ int abspath; /* NZ if p is abs path name */
-+ char * h; /* Home directory name */
-+ char seconddict[MAXPATHLEN]; /* Name of secondary dict */
-+ FILE * secondf; /* Access to second dict file */
-+
-+ /*
-+ ** If -p was not specified, try to get a default name from the
-+ ** environment. After this point, if p is null, the the value in
-+ ** personaldict is the only possible name for the personal dictionary.
-+ ** If p is non-null, then there is a possibility that we should
-+ ** prepend HOME to get the correct dictionary name.
-+ */
-+ if (p == NULL)
-+ p = getenv (PDICTVAR);
-+ /*
-+ ** if p exists and begins with '/' we don't really need HOME,
-+ ** but it's not very likely that HOME isn't set anyway (on non-DOS
-+ ** systems).
-+ */
-+ {
-+ int i;
-+ struct dent *x;
-+
-+ for(i = 0; i < pershsize; i++)
-+ {
-+ x = &pershtab[i];
-+ if(x->word != NULL)
-+ free(x->word);
-+ for(x = x->next; x != NULL;)
-+ {
-+ struct dent *y;
-+
-+ if(x->word != NULL)
-+ free(x->word);
-+ y = x;
-+ x = x->next;
-+ free(y);
-+ }
-+ }
-+ if(pershtab != NULL)
-+ free(pershtab);
-+ pershtab = NULL;
-+ pershsize = 0;
-+ hcount = 0;
-+ }
-+ if ((h = getenv (HOME)) == NULL)
-+ {
-+#ifdef PDICTHOME
-+ h = PDICTHOME;
-+#else /* PDICTHOME */
-+ return;
-+#endif /* PDICTHOME */
-+ }
-+
-+ if (p == NULL)
-+ {
-+ /*
-+ * No -p and no PDICTVAR. We will use LibDict and DEFPAFF to
-+ * figure out the name of the personal dictionary and where it
-+ * is. The rules are as follows:
-+ *
-+ * (1) If there is a local dictionary and a HOME dictionary,
-+ * both are loaded, but changes are saved in the local one.
-+ * The dictionary to save changes in is named "personaldict".
-+ * (2) Dictionaries named after the affix file take precedence
-+ * over dictionaries with the default suffix (DEFPAFF).
-+ * (3) Dictionaries named with the new default names
-+ * (DEFPDICT/DEFPAFF) take precedence over the old ones
-+ * (OLDPDICT/OLDPAFF).
-+ * (4) Dictionaries aren't combined unless they follow the same
-+ * naming scheme.
-+ * (5) If no dictionary can be found, a new one is created in
-+ * the home directory, named after DEFPDICT and the affix
-+ * file.
-+ */
-+ dictf = trydict (personaldict, (char *) NULL, DEFPDICT, LibDict);
-+ secondf = trydict (seconddict, h, DEFPDICT, LibDict);
-+ if (dictf == NULL && secondf == NULL)
-+ {
-+ dictf = trydict (personaldict, (char *) NULL, DEFPDICT, DEFPAFF);
-+ secondf = trydict (seconddict, h, DEFPDICT, DEFPAFF);
-+ }
-+ if (dictf == NULL && secondf == NULL)
-+ {
-+ dictf = trydict (personaldict, (char *) NULL, OLDPDICT, LibDict);
-+ secondf = trydict (seconddict, h, OLDPDICT, LibDict);
-+ }
-+ if (dictf == NULL && secondf == NULL)
-+ {
-+ dictf = trydict (personaldict, (char *) NULL, OLDPDICT, OLDPAFF);
-+ secondf = trydict (seconddict, h, OLDPDICT, OLDPAFF);
-+ }
-+ if (personaldict[0] == '\0')
-+ {
-+ if (seconddict[0] != '\0')
-+ (void) strcpy (personaldict, seconddict);
-+ else
-+ (void) sprintf (personaldict, "%s/%s%s", h, DEFPDICT, LibDict);
-+ }
-+ if (dictf != NULL)
-+ {
-+ treeload (dictf);
-+ (void) fclose (dictf);
-+ }
-+ if (secondf != NULL)
-+ {
-+ treeload (secondf);
-+ (void) fclose (secondf);
-+ }
-+ }
-+ else
-+ {
-+ /*
-+ ** Figure out if p is an absolute path name. Note that beginning
-+ ** with "./" and "../" is considered an absolute path, since this
-+ ** still means we can't prepend HOME.
-+ */
-+ abspath = (*p == '/' || strncmp (p, "./", 2) == 0
-+ || strncmp (p, "../", 3) == 0);
-+#ifdef MSDOS
-+ if (!abspath)
-+ abspath = (*p == '\\' || strncmp (p, ".\\", 2) == 0
-+ || strncmp (p, "..\\", 3) == 0
-+ || (p[0] && p[1] == ':'));
-+#endif
-+ if (abspath)
-+ {
-+ (void) strcpy (personaldict, p);
-+ if ((dictf = fopen (personaldict, "r")) != NULL)
-+ {
-+ treeload (dictf);
-+ (void) fclose (dictf);
-+ }
-+ }
-+ else
-+ {
-+ /*
-+ ** The user gave us a relative pathname. We will try it
-+ ** locally, and if that doesn't work, we'll try the home
-+ ** directory. If neither exists, it will be created in
-+ ** the home directory if words are added.
-+ */
-+ (void) strcpy (personaldict, p);
-+ if ((dictf = fopen (personaldict, "r")) != NULL)
-+ {
-+ treeload (dictf);
-+ (void) fclose (dictf);
-+ }
-+ else if (!abspath)
-+ {
-+ /* Try the home */
-+ (void) sprintf (personaldict, "%s/%s", h, p);
-+ if ((dictf = fopen (personaldict, "r")) != NULL)
-+ {
-+ treeload (dictf);
-+ (void) fclose (dictf);
-+ }
-+ }
-+ /*
-+ * If dictf is null, we couldn't open the dictionary
-+ * specified in the -p switch. Complain.
-+ */
-+ if (dictf == NULL)
-+ {
-+ (void) fprintf (stderr, CANT_OPEN, p);
-+ perror ("");
-+ return;
-+ }
-+ }
-+ }
-+
-+#ifndef FEAT_SPELL_HL
-+ if (!lflag && !aflag
-+ && access (personaldict, 2) < 0 && errno != ENOENT)
-+ {
-+ (void) fprintf (stderr, TREE_C_CANT_UPDATE, personaldict);
-+ (void) sleep ((unsigned) 2);
-+ }
-+#endif
-+}
-+
-+/*
-+ * Try to open a dictionary. As a side effect, leaves the dictionary
-+ * name in "filename" if one is found, and leaves a null string there
-+ * otherwise.
-+ */
-+Local FILE *
-+trydict (
-+ char * filename, /* Where to store the file name */
-+ char * home, /* Home directory */
-+ char * prefix, /* Prefix for dictionary */
-+ char * suffix) /* Suffix for dictionary */
-+{
-+ FILE * dictf; /* Access to dictionary file */
-+
-+ if (home == NULL)
-+ (void) sprintf (filename, "%s%s", prefix, suffix);
-+ else
-+ (void) sprintf (filename, "%s/%s%s", home, prefix, suffix);
-+ dictf = fopen (filename, "r");
-+ if (dictf == NULL)
-+ filename[0] = '\0';
-+ return dictf;
-+}
-+
-+Local void
-+treeload (
-+ register FILE * loadfile) /* File to load words from */
-+{
-+ char buf[BUFSIZ]; /* Buffer for reading pers dict */
-+
-+ while (fgets (buf, sizeof buf, loadfile) != NULL)
-+ treeinsert (buf, sizeof(buf), 1);
-+ newwords = 0;
-+}
-+
-+Public void
-+treeinsert (
-+ char * word, /* Word to insert - must be canonical */
-+ int wordlen, /* Length of the word buffer */
-+ int keep)
-+{
-+ register int i, len;
-+ struct dent wordent;
-+ register struct dent * dp;
-+ struct dent * olddp;
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ struct dent * newdp;
-+#endif
-+ struct dent * oldhtab;
-+ int oldhsize;
-+ ichar_t nword[INPUTWORDLEN + MAXAFFIXLEN];
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ int isvariant;
-+#endif
-+
-+ len = strlen(word);
-+ if((word[len - 1] == '\n') || (word[len - 1] == '\r'))
-+ word[len - 1] = '\0', len--;
-+ if((word[len - 1] == '\n') || (word[len - 1] == '\r'))
-+ word[len - 1] = '\0';
-+ /*
-+ * Expand hash table when it is MAXPCT % full.
-+ */
-+ if (!cantexpand && (hcount * 100) / MAXPCT >= pershsize)
-+ {
-+ oldhsize = pershsize;
-+ oldhtab = pershtab;
-+ for (i = 0; i < sizeof goodsizes / sizeof (goodsizes[0]); i++)
-+ if (goodsizes[i] > pershsize)
-+ break;
-+ if (i >= sizeof goodsizes / sizeof goodsizes[0])
-+ pershsize += pershsize + 1;
-+ else
-+ pershsize = goodsizes[i];
-+ pershtab =
-+ (struct dent *) calloc ((unsigned) pershsize, sizeof (struct dent));
-+ if (pershtab == NULL)
-+ {
-+ (void) fprintf (stderr, TREE_C_NO_SPACE);
-+ /*
-+ * Try to continue anyway, since our overflow
-+ * algorithm can handle an overfull (100%+) table,
-+ * and the malloc very likely failed because we
-+ * already have such a huge table, so small mallocs
-+ * for overflow entries will still work.
-+ */
-+ if (oldhtab == NULL)
-+ exit (1); /* No old table, can't go on */
-+ (void) fprintf (stderr, TREE_C_TRY_ANYWAY);
-+ cantexpand = 1; /* Suppress further messages */
-+ pershsize = oldhsize; /* Put things back */
-+ pershtab = oldhtab; /* ... */
-+ newwords = 1; /* And pretend it worked */
-+ }
-+ else
-+ {
-+ /*
-+ * Re-insert old entries into new table
-+ */
-+ for (i = 0; i < oldhsize; i++)
-+ {
-+ dp = &oldhtab[i];
-+ if (dp->flagfield & USED)
-+ {
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ (void) tinsert (dp);
-+#else
-+ newdp = tinsert (dp);
-+ isvariant = (dp->flagfield & MOREVARIANTS);
-+#endif
-+ dp = dp->next;
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ while (dp != NULL)
-+ {
-+ (void) tinsert (dp);
-+ olddp = dp;
-+ dp = dp->next;
-+ free ((char *) olddp);
-+ }
-+#else
-+ while (dp != NULL)
-+ {
-+ if (isvariant)
-+ {
-+ isvariant = dp->flagfield & MOREVARIANTS;
-+ olddp = newdp->next;
-+ newdp->next = dp;
-+ newdp = dp;
-+ dp = dp->next;
-+ newdp->next = olddp;
-+ }
-+ else
-+ {
-+ isvariant = dp->flagfield & MOREVARIANTS;
-+ newdp = tinsert (dp);
-+ olddp = dp;
-+ dp = dp->next;
-+ free ((char *) olddp);
-+ }
-+ }
-+#endif
-+ }
-+ }
-+ if (oldhtab != NULL)
-+ free ((char *) oldhtab);
-+ }
-+ }
-+
-+ /*
-+ ** We're ready to do the insertion. Start by creating a sample
-+ ** entry for the word.
-+ */
-+ if (makedent (word, wordlen, &wordent) < 0)
-+ return; /* Word must be too big or something */
-+ if (keep)
-+ wordent.flagfield |= KEEP;
-+ /*
-+ ** Now see if word or a variant is already in the table. We use the
-+ ** capitalized version so we'll find the header, if any.
-+ **/
-+ (void) strtoichar (nword, word, sizeof nword, 1);
-+ upcase (nword);
-+ if ((dp = lookup (nword, 1)) != NULL)
-+ {
-+ /* It exists. Combine caps and set the keep flag. */
-+ if (combinecaps (dp, &wordent) < 0)
-+ {
-+ free (wordent.word);
-+ return;
-+ }
-+ }
-+ else
-+ {
-+ /* It's new. Insert the word. */
-+ dp = tinsert (&wordent);
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ if (captype (dp->flagfield) == FOLLOWCASE)
-+ (void) addvheader (dp);
-+#endif
-+ }
-+ newwords |= keep;
-+ hcount++;
-+}
-+
-+Local struct dent *
-+tinsert (
-+ struct dent * proto) /* Prototype entry to copy */
-+{
-+ ichar_t iword[INPUTWORDLEN + MAXAFFIXLEN];
-+ register int hcode;
-+ register struct dent * hp; /* Next trial entry in hash table */
-+ register struct dent * php; /* Prev. value of hp, for chaining */
-+
-+ if (strtoichar (iword, proto->word, sizeof iword, 1))
-+ (void) fprintf (stderr, WORD_TOO_LONG (proto->word));
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ upcase (iword);
-+#endif
-+ hcode = hash (iword, pershsize);
-+ php = NULL;
-+ hp = &pershtab[hcode];
-+ if (hp->flagfield & USED)
-+ {
-+ while (hp != NULL)
-+ {
-+ php = hp;
-+ hp = hp->next;
-+ }
-+ hp = (struct dent *) calloc (1, sizeof (struct dent));
-+ if (hp == NULL)
-+ {
-+ (void) fprintf (stderr, TREE_C_NO_SPACE);
-+ exit (1);
-+ }
-+ }
-+ *hp = *proto;
-+ if (php != NULL)
-+ php->next = hp;
-+ hp->next = NULL;
-+ return hp;
-+}
-+
-+Public struct dent *
-+treelookup (register ichar_t * word)
-+
-+{
-+ register int hcode;
-+ register struct dent * hp;
-+ char chword[INPUTWORDLEN + MAXAFFIXLEN];
-+
-+ if (pershsize <= 0)
-+ return NULL;
-+ (void) ichartostr (chword, word, sizeof chword, 1);
-+ hcode = hash (word, pershsize);
-+ hp = &pershtab[hcode];
-+ while (hp != NULL && (hp->flagfield & USED))
-+ {
-+ if (strcmp (chword, hp->word) == 0)
-+ break;
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ while (hp->flagfield & MOREVARIANTS)
-+ hp = hp->next;
-+#endif
-+ hp = hp->next;
-+ }
-+ if (hp != NULL && (hp->flagfield & USED))
-+ return hp;
-+ else
-+ return NULL;
-+}
-+
-+#if SORTPERSONAL != 0
-+/* Comparison routine for sorting the personal dictionary with qsort */
-+Local int
-+pdictcmp (
-+ struct dent ** enta,
-+ struct dent ** entb)
-+{
-+
-+ /* The parentheses around *enta and *entb below are NECESSARY!
-+ ** Otherwise the compiler reads it as *(enta->word), or
-+ ** enta->word[0], which is illegal (but pcc takes it and
-+ ** produces wrong code).
-+ **/
-+ return casecmp ((*enta)->word, (*entb)->word, 1);
-+}
-+#endif
-+
-+Public void
-+treeoutput ()
-+
-+{
-+ register struct dent * cent; /* Current entry */
-+ register struct dent * lent; /* Linked entry */
-+#if SORTPERSONAL != 0
-+ int pdictsize; /* Number of entries to write */
-+ struct dent ** sortlist; /* List of entries to be sorted */
-+ register struct dent ** sortptr; /* Handy pointer into sortlist */
-+#endif
-+ register struct dent * ehtab; /* End of pershtab, for fast looping */
-+
-+ if (newwords == 0)
-+ return;
-+
-+ if ((dictf = fopen (personaldict, "w")) == NULL)
-+ {
-+ (void) fprintf (stderr, CANT_CREATE, personaldict);
-+ return;
-+ }
-+
-+#if SORTPERSONAL != 0
-+ /*
-+ ** If we are going to sort the personal dictionary, we must know
-+ ** how many items are going to be sorted.
-+ */
-+ pdictsize = 0;
-+ if (hcount >= SORTPERSONAL)
-+ sortlist = NULL;
-+ else
-+ {
-+ for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab;
-+ cent++)
-+ {
-+ for (lent = cent; lent != NULL; lent = lent->next)
-+ {
-+ if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP))
-+ pdictsize++;
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ while (lent->flagfield & MOREVARIANTS)
-+ lent = lent->next;
-+#endif
-+ }
-+ }
-+ for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++)
-+ {
-+ if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP))
-+ {
-+ /*
-+ ** We only want to count variant headers
-+ ** and standalone entries. These happen
-+ ** to share the characteristics in the
-+ ** test below. This test will appear
-+ ** several more times in this routine.
-+ */
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ if (captype (cent->flagfield) != FOLLOWCASE
-+ && cent->word != NULL)
-+#endif
-+ pdictsize++;
-+ }
-+ }
-+ sortlist = (struct dent **) malloc (pdictsize * sizeof (struct dent));
-+ }
-+ if (sortlist == NULL)
-+ {
-+#endif
-+ for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab;
-+ cent++)
-+ {
-+ for (lent = cent; lent != NULL; lent = lent->next)
-+ {
-+ if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP))
-+ {
-+ toutent (dictf, lent, 1);
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ while (lent->flagfield & MOREVARIANTS)
-+ lent = lent->next;
-+#endif
-+ }
-+ }
-+ }
-+ for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++)
-+ {
-+ if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP))
-+ {
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ if (captype (cent->flagfield) != FOLLOWCASE
-+ && cent->word != NULL)
-+#endif
-+ toutent (dictf, cent, 1);
-+ }
-+ }
-+#if SORTPERSONAL != 0
-+ return;
-+ }
-+ /*
-+ ** Produce dictionary in sorted order. We used to do this
-+ ** destructively, but that turns out to fail because in some modes
-+ ** the dictionary is written more than once. So we build an
-+ ** auxiliary pointer table (in sortlist) and sort that. This
-+ ** is faster anyway, though it uses more memory.
-+ */
-+ sortptr = sortlist;
-+ for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab; cent++)
-+ {
-+ for (lent = cent; lent != NULL; lent = lent->next)
-+ {
-+ if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP))
-+ {
-+ *sortptr++ = lent;
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ while (lent->flagfield & MOREVARIANTS)
-+ lent = lent->next;
-+#endif
-+ }
-+ }
-+ }
-+ for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++)
-+ {
-+ if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP))
-+ {
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ if (captype (cent->flagfield) != FOLLOWCASE
-+ && cent->word != NULL)
-+#endif
-+ *sortptr++ = cent;
-+ }
-+ }
-+ /* Sort the list */
-+ qsort ((char *) sortlist, (unsigned) pdictsize,
-+ sizeof (sortlist[0]),
-+ (int (*) (const void *, const void *)) pdictcmp);
-+ /* Write it out */
-+ for (sortptr = sortlist; --pdictsize >= 0; )
-+ toutent (dictf, *sortptr++, 1);
-+ free ((char *) sortlist);
-+#endif
-+
-+ newwords = 0;
-+
-+ (void) fclose (dictf);
-+}
-+
-+#ifdef REGEX_LOOKUP
-+
-+/* check the hashed dictionary for words matching the regex. return the */
-+/* a matching string if found else return NULL */
-+char *
-+do_regex_lookup (
-+ char * expr, /* regular expression to use in the match */
-+ int whence) /* 0 = start at the beg with new regx, else */
-+ /* continue from cur point w/ old regex */
-+{
-+ static struct dent * curent;
-+ static int curindex;
-+ static struct dent * curpersent;
-+ static int curpersindex;
-+ static REGCTYPE cmp_expr = (REGCTYPE)0;
-+ char dummy[INPUTWORDLEN + MAXAFFIXLEN];
-+ ichar_t * is;
-+
-+ if (whence == 0)
-+ {
-+ is = strtosichar (expr, 0);
-+ upcase (is);
-+ expr = ichartosstr (is, 1);
-+ REGFREE (cmp_expr); /* free previous compiled pattern, if any */
-+ cmp_expr = REGCMP (cmp_expr, expr);
-+ curent = hashtbl;
-+ curindex = 0;
-+ curpersent = pershtab;
-+ curpersindex = 0;
-+ }
-+
-+ /* search the dictionary until the word is found or the words run out */
-+ for ( ; curindex < hashsize; curent++, curindex++)
-+ {
-+ if (curent->word != NULL
-+ && REGEX (cmp_expr, curent->word, dummy) != NULL)
-+ {
-+ curindex++;
-+ /* Everybody's gotta write a wierd expression once in a while! */
-+ return curent++->word;
-+ }
-+ }
-+ /* Try the personal dictionary too */
-+ for ( ; curpersindex < pershsize; curpersent++, curpersindex++)
-+ {
-+ if ((curpersent->flagfield & USED) != 0
-+ && curpersent->word != NULL
-+ && REGEX (cmp_expr, curpersent->word, dummy) != NULL)
-+ {
-+ curpersindex++;
-+ /* Everybody's gotta write a wierd expression once in a while! */
-+ return curpersent++->word;
-+ }
-+ }
-+ return NULL;
-+}
-+#endif /* REGEX_LOOKUP */
-diff -urBbN vim64.org/src/spell/util.c vim64/src/spell/util.c
---- vim64.org/src/spell/util.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/util.c 2005-10-17 12:49:17.520833176 +0200
-@@ -0,0 +1,351 @@
-+#include <ctype.h>
-+#include "ispell.h"
-+
-+Local char *myrindex(char *s, char c);
-+
-+Public int
-+casecmp (
-+ char * a,
-+ char * b,
-+ int canonical) /* NZ for canonical string chars */
-+{
-+ register ichar_t * ap;
-+ register ichar_t * bp;
-+ ichar_t inta[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4];
-+ ichar_t intb[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4];
-+
-+ (void) strtoichar (inta, a, sizeof inta, canonical);
-+ (void) strtoichar (intb, b, sizeof intb, canonical);
-+ for (ap = inta, bp = intb; *ap != 0; ap++, bp++)
-+ {
-+ if (*ap != *bp)
-+ {
-+ if (*bp == '\0')
-+ return hashheader.sortorder[*ap];
-+ else if (mylower (*ap))
-+ {
-+ if (mylower (*bp) || mytoupper (*ap) != *bp)
-+ return (int) hashheader.sortorder[*ap] -
-+ (int) hashheader.sortorder[*bp];
-+ }
-+ else
-+ {
-+ if (myupper (*bp) || mytolower (*ap) != *bp)
-+ return (int) hashheader.sortorder[*ap] -
-+ (int) hashheader.sortorder[*bp];
-+ }
-+ }
-+ }
-+ if (*bp != '\0')
-+ return -(int) hashheader.sortorder[*bp];
-+ for (ap = inta, bp = intb; *ap; ap++, bp++)
-+ {
-+ if (*ap != *bp)
-+ {
-+ return (int) hashheader.sortorder[*ap] -
-+ (int) hashheader.sortorder[*bp];
-+ }
-+ }
-+ return 0;
-+}
-+
-+Public int
-+ins_root_cap (
-+ register ichar_t * word,
-+ register ichar_t * pattern,
-+ int prestrip,
-+ int preadd,
-+ int sufstrip,
-+ int sufadd,
-+ struct dent * firstdent,
-+ struct flagent * pfxent,
-+ struct flagent * sufent)
-+{
-+ int i; /* Index into savearea */
-+ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN];
-+ int nsaved; /* Number of words saved */
-+
-+ nsaved = 0;
-+ save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd,
-+ firstdent, pfxent, sufent, savearea, &nsaved);
-+ for (i = 0; i < nsaved; i++)
-+ {
-+ if (insert (savearea[i]) < 0)
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+Public void
-+save_root_cap(
-+ register ichar_t * word, /* Word to be saved */
-+ register ichar_t * pattern, /* Capitalization pattern */
-+ int prestrip, /* No. chars stripped from front */
-+ int preadd, /* No. chars added to front of root */
-+ int sufstrip, /* No. chars stripped from back */
-+ int sufadd, /* No. chars added to back of root */
-+ struct dent * firstdent, /* First dent for root */
-+ struct flagent * pfxent, /* Pfx-flag entry for word */
-+ struct flagent * sufent, /* Sfx-flag entry for word */
-+ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN],
-+ /* Room to save words */
-+ int * nsaved) /* Number saved so far (updated) */
-+{
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ register struct dent * dent;
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+ int firstisupper;
-+ ichar_t newword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4];
-+#ifndef NO_CAPITALIZATION_SUPPORT
-+ register ichar_t * p;
-+ int len;
-+ int i;
-+ int limit;
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+
-+ if (*nsaved >= MAX_CAPS)
-+ return;
-+ (void) icharcpy (newword, word);
-+ firstisupper = myupper (pattern[0]);
-+#ifdef NO_CAPITALIZATION_SUPPORT
-+ /*
-+ ** Apply the old, simple-minded capitalization rules.
-+ */
-+ if (firstisupper)
-+ {
-+ if (myupper (pattern[1]))
-+ upcase (newword);
-+ else
-+ {
-+ lowcase (newword);
-+ newword[0] = mytoupper (newword[0]);
-+ }
-+ }
-+ else
-+ lowcase (newword);
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ return;
-+#else /* NO_CAPITALIZATION_SUPPORT */
-+#define flagsareok(dent) \
-+ ((pfxent == NULL \
-+ || TSTMASKBIT (dent->mask, pfxent->flagbit)) \
-+ && (sufent == NULL \
-+ || TSTMASKBIT (dent->mask, sufent->flagbit)))
-+
-+ dent = firstdent;
-+ if ((dent->flagfield & (CAPTYPEMASK | MOREVARIANTS)) == ALLCAPS)
-+ {
-+ upcase (newword); /* Uppercase required */
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ return;
-+ }
-+ for (p = pattern; *p; p++)
-+ {
-+ if (mylower (*p))
-+ break;
-+ }
-+ if (*p == 0)
-+ {
-+ upcase (newword); /* Pattern was all caps */
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ return;
-+ }
-+ for (p = pattern + 1; *p; p++)
-+ {
-+ if (myupper (*p))
-+ break;
-+ }
-+ if (*p == 0)
-+ {
-+ /*
-+ ** The pattern was all-lower or capitalized. If that's
-+ ** legal, insert only that version.
-+ */
-+ if (firstisupper)
-+ {
-+ if (captype (dent->flagfield) == CAPITALIZED
-+ || captype (dent->flagfield) == ANYCASE)
-+ {
-+ lowcase (newword);
-+ newword[0] = mytoupper (newword[0]);
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ return;
-+ }
-+ }
-+ else
-+ {
-+ if (captype (dent->flagfield) == ANYCASE)
-+ {
-+ lowcase (newword);
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ return;
-+ }
-+ }
-+ while (dent->flagfield & MOREVARIANTS)
-+ {
-+ dent = dent->next;
-+ if (captype (dent->flagfield) == FOLLOWCASE
-+ || !flagsareok (dent))
-+ continue;
-+ if (firstisupper)
-+ {
-+ if (captype (dent->flagfield) == CAPITALIZED)
-+ {
-+ lowcase (newword);
-+ newword[0] = mytoupper (newword[0]);
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ return;
-+ }
-+ }
-+ else
-+ {
-+ if (captype (dent->flagfield) == ANYCASE)
-+ {
-+ lowcase (newword);
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ return;
-+ }
-+ }
-+ }
-+ }
-+ /*
-+ ** Either the sample had complex capitalization, or the simple
-+ ** capitalizations (all-lower or capitalized) are illegal.
-+ ** Insert all legal capitalizations, including those that are
-+ ** all-lower or capitalized. If the prototype is capitalized,
-+ ** capitalized all-lower samples. Watch out for affixes.
-+ */
-+ dent = firstdent;
-+ p = strtosichar (dent->word, 1);
-+ len = icharlen (p);
-+ if (dent->flagfield & MOREVARIANTS)
-+ dent = dent->next; /* Skip place-holder entry */
-+ for ( ; ; )
-+ {
-+ if (flagsareok (dent))
-+ {
-+ if (captype (dent->flagfield) != FOLLOWCASE)
-+ {
-+ lowcase (newword);
-+ if (firstisupper || captype (dent->flagfield) == CAPITALIZED)
-+ newword[0] = mytoupper (newword[0]);
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ if (*nsaved >= MAX_CAPS)
-+ return;
-+ }
-+ else
-+ {
-+ /* Followcase is the tough one. */
-+ p = strtosichar (dent->word, 1);
-+ (void) bcopy ((char *) (p + prestrip),
-+ (char *) (newword + preadd),
-+ (len - prestrip - sufstrip) * sizeof (ichar_t));
-+ if (myupper (p[prestrip]))
-+ {
-+ for (i = 0; i < preadd; i++)
-+ newword[i] = mytoupper (newword[i]);
-+ }
-+ else
-+ {
-+ for (i = 0; i < preadd; i++)
-+ newword[i] = mytolower (newword[i]);
-+ }
-+ limit = len + preadd + sufadd - prestrip - sufstrip;
-+ i = len + preadd - prestrip - sufstrip;
-+ p += len - sufstrip - 1;
-+ if (myupper (*p))
-+ {
-+ for (p = newword + i; i < limit; i++, p++)
-+ *p = mytoupper (*p);
-+ }
-+ else
-+ {
-+ for (p = newword + i; i < limit; i++, p++)
-+ *p = mytolower (*p);
-+ }
-+ (void) icharcpy (savearea[*nsaved], newword);
-+ (*nsaved)++;
-+ if (*nsaved >= MAX_CAPS)
-+ return;
-+ }
-+ }
-+ if ((dent->flagfield & MOREVARIANTS) == 0)
-+ break; /* End of the line */
-+ dent = dent->next;
-+ }
-+ return;
-+#endif /* NO_CAPITALIZATION_SUPPORT */
-+}
-+Public int
-+insert(register ichar_t * word)
-+{
-+ register int i;
-+ register char * realword;
-+
-+ realword = ichartosstr (word, 0);
-+ for (i = 0; i < pcount; i++)
-+ if (strcmp (possibilities[i], realword) == 0)
-+ return (0);
-+
-+ (void) strcpy (possibilities[pcount++], realword);
-+ i = strlen (realword);
-+ if (i > maxposslen)
-+ maxposslen = i;
-+ if (pcount >= MAXPOSSIBLE)
-+ return (-1);
-+ else
-+ return (0);
-+}
-+/*
-+** A trivial wrapper for rindex (file '/') on Unix, but
-+** saves a lot of ifdef-ing on MS-DOS.
-+*/
-+
-+Public char *
-+last_slash (char *file)
-+
-+{
-+ char *slash = myrindex (file, '/');
-+#ifdef MSDOS
-+ /*
-+ ** Can have a backslash or a colon; both mean the basename
-+ ** begins right after them.
-+ */
-+ char *bs = myrindex (file, '\\');
-+
-+ /*
-+ ** We can have both forward- and backslashes; return the
-+ ** place of rightmost one of either gender.
-+ */
-+ if (slash == NULL || (bs != NULL && bs > slash))
-+ slash = bs;
-+ if (slash == NULL && file[0] != '\0' && file[1] == ':')
-+ slash = file + 1;
-+#endif
-+ return slash;
-+}
-+
-+Local char *
-+myrindex(char *s, register char c)
-+
-+{
-+ register char *x;
-+
-+ x = s + strlen(s) - 1;
-+
-+ while(x >= s)
-+ {
-+ if(*x == c)
-+ return(x);
-+ x--;
-+ }
-+ return(NULL);
-+}
-diff -urBbN vim64.org/src/spell/version.h vim64/src/spell/version.h
---- vim64.org/src/spell/version.h 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/version.h 2005-10-17 12:49:17.521833024 +0200
-@@ -0,0 +1,124 @@
-+/*
-+ * Since the strings in this file are printed out when the "-v" switch is
-+ * given to ispell, you may want to translate them into your native language.
-+ * However, any translation of these strings MUST accurately preserve the
-+ * legal rights under international law; you may wish to consult a lawyer
-+ * about this since you will be responsible for the results of any
-+ * incorrect translation.
-+ */
-+
-+Local char *Version_ID[] = {
-+ "@(#) International Ispell Version 3.1.20 10/10/95",
-+ "@(#) Copyright (c), 1983, by Pace Willisson",
-+ "@(#) International version Copyright (c) 1987, 1988, 1990-1995,",
-+ "@(#) by Geoff Kuenning, Granada Hills, CA. All rights reserved.",
-+ "@(#)",
-+ "@(#) Redistribution and use in source and binary forms, with or without",
-+ "@(#) modification, are permitted provided that the following conditions",
-+ "@(#) are met:",
-+ "@(#)",
-+ "@(#) 1. Redistributions of source code must retain the above copyright",
-+ "@(#) notice, this list of conditions and the following disclaimer.",
-+ "@(#) 2. Redistributions in binary form must reproduce the above",
-+ "@(#) copyright notice, this list of conditions and the following",
-+ "@(#) disclaimer in the documentation and/or other materials provided",
-+ "@(#) with the distribution.",
-+ "@(#) 3. All modifications to the source code must be clearly marked as",
-+ "@(#) such. Binary redistributions based on modified source code",
-+ "@(#) must be clearly marked as modified versions in the documentation",
-+ "@(#) and/or other materials provided with the distribution.",
-+ "@(#) 4. All advertising materials mentioning features or use of this",
-+ "@(#) software must display the following acknowledgment:",
-+ "@(#) This product includes software developed by Geoff Kuenning and",
-+ "@(#) other unpaid contributors.",
-+ "@(#) 5. The name of Geoff Kuenning may not be used to endorse or promote",
-+ "@(#) products derived from this software without specific prior",
-+ "@(#) written permission.",
-+ "@(#)",
-+ "@(#) THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS",
-+ "@(#) IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT",
-+ "@(#) LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS",
-+ "@(#) FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF",
-+ "@(#) KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,",
-+ "@(#) INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES",
-+ "@(#) (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR",
-+ "@(#) SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)",
-+ "@(#) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,",
-+ "@(#) STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)",
-+ "@(#) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED",
-+ "@(#) OF THE POSSIBILITY OF SUCH DAMAGE.",
-+ NULL
-+};
-+
-+static char RCS_Version_ID[] =
-+ "$Id$";
-+
-+/*
-+ * $Log$
-+ * Revision 1.44 1995/10/11 05:03:28 geoff
-+ * Upgrade to patch level 20
-+ *
-+ * Revision 1.43 1995/10/11 04:58:26 geoff
-+ * Upgrade to patch 19
-+ *
-+ * Revision 1.42 1995/01/15 01:23:26 geoff
-+ * Upgrade to patch level 18
-+ *
-+ * Revision 1.41 1995/01/15 01:14:30 geoff
-+ * Upgrade to patch level 17
-+ *
-+ * Revision 1.40 1995/01/15 01:03:55 geoff
-+ * Upgrade to patch level 16
-+ *
-+ * Revision 1.39 1995/01/15 01:01:01 geoff
-+ * Upgrade to patch level 15
-+ *
-+ * Revision 1.38 1995/01/15 00:54:19 geoff
-+ * Upgrade to patch level 14
-+ *
-+ * Revision 1.37 1994/11/21 07:03:01 geoff
-+ * Update to patch level 13.
-+ *
-+ * Revision 1.36 1994/11/01 06:28:31 geoff
-+ * Update to patch level 12
-+ *
-+ * Revision 1.35 1994/11/01 06:12:42 geoff
-+ * Update to patch level 11
-+ *
-+ * Revision 1.34 1994/11/01 06:01:15 geoff
-+ * Update to patch level 10
-+ *
-+ * Revision 1.33 1994/11/01 05:36:43 geoff
-+ * Update to patch level 9
-+ *
-+ * Revision 1.32 1994/05/25 04:38:59 geoff
-+ * Update to patch level 8
-+ *
-+ * Revision 1.31 1994/05/18 03:07:26 geoff
-+ * Update to patch level 7
-+ *
-+ * Revision 1.30 1994/05/17 06:21:05 geoff
-+ * Version update for ispell.el release
-+ *
-+ * Revision 1.29 1994/04/27 04:14:18 geoff
-+ * Update to patch level 5
-+ *
-+ * Revision 1.28 1994/03/21 02:00:50 geoff
-+ * Update to patch level 4
-+ *
-+ * Revision 1.27 1994/02/23 04:52:31 geoff
-+ * Update to latest version.
-+ *
-+ * Revision 1.26 1994/02/08 05:59:20 geoff
-+ * Update version
-+ *
-+ * Revision 1.25 1994/02/07 08:58:28 geoff
-+ * Get rid of a comma that confuses patch
-+ *
-+ * Revision 1.24 1994/02/07 08:24:23 geoff
-+ * Upate patch level
-+ *
-+ * Revision 1.23 1994/01/25 07:12:21 geoff
-+ * Get rid of all old RCS log lines in preparation for the 3.1 release.
-+ *
-+ */
-diff -urBbN vim64.org/src/spell/wm.h vim64/src/spell/wm.h
---- vim64.org/src/spell/wm.h 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell/wm.h 2005-10-17 12:49:17.521833024 +0200
-@@ -0,0 +1,12 @@
-+#ifndef Public
-+enum _logical {False,True};
-+typedef enum _logical Logical;
-+
-+#define EOS '\0'
-+
-+typedef unsigned int Word;
-+typedef unsigned char Byte;
-+
-+#define Public
-+#define Local static
-+#endif
-diff -urBbN vim64.org/src/spell.c vim64/src/spell.c
---- vim64.org/src/spell.c 1970-01-01 01:00:00.000000000 +0100
-+++ vim64/src/spell.c 2005-10-17 12:49:17.522832872 +0200
-@@ -0,0 +1,183 @@
-+#include "spell/wm.h"
-+#include "vim.h"
-+#define MAIN 1
-+#include "ispell.h"
-+#define MAXWORDLEN 80
-+
-+#ifdef FEAT_SPELL_HL
-+
-+int spell_flag = 0;
-+Local char *err;
-+void
-+ex_spell(exarg_T *eap)
-+
-+{
-+ if(strcmp(eap->arg, "on") == 0)
-+ {
-+ spell_flag = 1;
-+ if(!inited)
-+ {
-+ if(!reload_dict())
-+ return;
-+ }
-+ }
-+ else if(STRCMP(eap->arg, "off") == 0)
-+ spell_flag = 0;
-+ else
-+ EMSG2("Invalid :spell %s", eap->arg);
-+ redraw_all_later(NOT_VALID);
-+ return;
-+}
-+
-+int
-+reload_dict()
-+
-+{
-+ if(spell_flag == 0)
-+ return(TRUE);
-+ spell_save_private_dict();
-+ inited = 0;
-+ if(STRCMP(p_spell_lang, "") == 0)
-+ {
-+ EMSG("dictionary not defined");
-+ do_cmdline((char_u *)"spell off", NULL, NULL, DOCMD_VERBOSE);
-+ spell_flag = 0;
-+ return(FALSE);
-+ }
-+ if ((err = linit(hashname)) != NULL)
-+ {
-+ EMSG(err);
-+ do_cmdline((char_u *)"spell off", NULL, NULL, DOCMD_VERBOSE);
-+ spell_flag = 0;
-+ return(FALSE);
-+ }
-+ treeinit (NULL, p_spell_lang);
-+ return(TRUE);
-+}
-+
-+static colnr_T last_col;
-+static ichar_t curr_word[MAXWORDLEN + 1]; /* assume max. keyword len is 80 */
-+static char word_to_spell[MAXWORDLEN + 1];
-+ int last_attr;
-+static Logical in_word;
-+
-+int my_is_char(char_u ccc);
-+
-+int
-+get_spell_attr(spell_col, col, line)
-+ colnr_T spell_col;
-+ colnr_T col;
-+ char_u *line;
-+{
-+ char_u *line_ptr;
-+ colnr_T curr_col;
-+ unsigned int i;
-+
-+ if(spell_col == 0)
-+ last_col = 0, in_word = False, last_attr = 0;
-+
-+ if((spell_col < last_col) && in_word)
-+ return(last_attr);
-+ else if(spell_col >= last_col)
-+ {
-+ last_attr = 0;
-+ in_word = False;
-+ line_ptr = &line[spell_col];
-+ curr_col = spell_col;
-+ if(iswordch((ichar_t)(*line_ptr)) && *line_ptr)
-+ {
-+ while((spell_col > 0) && my_is_char(*(line_ptr - 1)))
-+ spell_col--, line_ptr--;
-+ while(isboundarych((ichar_t)(*(line_ptr))))
-+ spell_col++, line_ptr++;
-+
-+ line_ptr = &line[spell_col];
-+ curr_col = spell_col;
-+ while(my_is_char(*line_ptr) && *line_ptr &&
-+ ((curr_col - spell_col) < MAXWORDLEN))
-+ curr_col++, line_ptr++;
-+ while(isboundarych((ichar_t)(*(line_ptr - 1))))
-+ curr_col--, line_ptr--;
-+ }
-+ if(curr_col - spell_col > 1)
-+ {
-+ /*for(i = 0; i < curr_col - spell_col; i++)
-+ curr_word[i] = line[spell_col + i];
-+ curr_word[curr_col - spell_col] = NUL;*/
-+ strtoichar(curr_word,line+spell_col,(curr_col-spell_col+1)*sizeof(ichar_t),0);
-+ in_word = True;
-+
-+/* for(i = 0; curr_word[i]; i++)
-+ fprintf(stderr, "%c", curr_word[i]);
-+ fprintf(stderr, "-%d\n", good((ichar_t *)curr_word, 0, 0, 0, 0)); wm */
-+ if(good((ichar_t *)curr_word, 0, 0, 0, 0) == 0)
-+ last_attr = hl_attr(HLF_SPELL);
-+ last_col = curr_col;
-+ }
-+ }
-+ return(last_attr);
-+}
-+
-+int
-+my_is_char(ccc)
-+ char_u ccc;
-+{
-+ if(iswordch((ichar_t)ccc) || isboundarych((ichar_t)ccc))
-+ return(TRUE);
-+ else
-+ return(FALSE);
-+
-+}
-+
-+static ichar_t *itok;
-+
-+int
-+set_to_private_dict(char *line, int cursor_col, int convert_to_lower)
-+
-+{
-+ int i;
-+ char_u *b,
-+ *e;
-+
-+ b = line + cursor_col;
-+ e = b;
-+ if(inited == 0)
-+ return(TRUE);
-+ if(iswordch((ichar_t)(*b)) || isboundarych((ichar_t)(*b)))
-+ {
-+ while((iswordch((ichar_t)(*(b - 1))) ||
-+ isboundarych((ichar_t)(*(b - 1)))) &&
-+ cursor_col > 0)
-+ b--, cursor_col--;
-+ while(isboundarych((ichar_t)(*b)))
-+ b++;
-+ while((iswordch((ichar_t)(*(e))) || isboundarych((ichar_t)(*(e)))) &&
-+ *e)
-+ e++;
-+ while(isboundarych((ichar_t)(*(e - 1))))
-+ e--;
-+ for(i = 0; b < e;)
-+ word_to_spell[i++] = *b++;
-+ word_to_spell[i] = '\0';
-+ if(!convert_to_lower)
-+ treeinsert (ichartosstr (strtosichar (word_to_spell, 0), 1),
-+ ICHARTOSSTR_SIZE, 1);
-+ else
-+ {
-+ itok = strtosichar (word_to_spell, 0);
-+ lowcase (itok);
-+ treeinsert (ichartosstr (itok, 1), ICHARTOSSTR_SIZE, 1);
-+ }
-+ redraw_all_later(NOT_VALID);
-+ }
-+ return(FALSE);
-+}
-+
-+void
-+spell_save_private_dict(void)
-+
-+{
-+ if(inited)
-+ treeoutput ();
-+}
-+#endif
-diff -urBbN vim64.org/src/syntax.c vim64/src/syntax.c
---- vim64.org/src/syntax.c 2005-07-24 19:39:04.000000000 +0200
-+++ vim64/src/syntax.c 2005-10-17 12:49:17.527832112 +0200
-@@ -5935,6 +5935,9 @@
- "VertSplit term=reverse cterm=reverse gui=reverse",
- "Visual term=reverse cterm=reverse gui=reverse guifg=Grey guibg=fg",
- "VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold",
-+#ifdef FEAT_SPELL_HL
-+ "Spell term=reverse ctermbg=NONE ctermfg=White guibg=NONE guifg=Red",
-+#endif
- "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red",
- NULL
- };
-@@ -5955,6 +5958,9 @@
- "FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue",
- "SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue",
- "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue",
-+#ifdef FEAT_SPELL_HL
-+ "Spell term=reverse ctermbg=NONE ctermfg=White guibg=NONE guifg=Red",
-+#endif
- "DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta",
- "DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan gui=bold guifg=Blue guibg=LightCyan",
- NULL
-@@ -5976,6 +5982,9 @@
- "FoldColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan",
- "SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan",
- "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue",
-+#ifdef FEAT_SPELL_HL
-+ "Spell term=reverse ctermbg=NONE ctermfg=White guibg=NONE guifg=Red",
-+#endif
- "DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta",
- "DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan",
- NULL
-diff -urBbN vim64.org/src/version.c vim64/src/version.c
---- vim64.org/src/version.c 2005-10-17 12:43:54.788895000 +0200
-+++ vim64/src/version.c 2005-10-17 12:49:17.529831808 +0200
-@@ -474,6 +474,11 @@
- #else
- "-syntax",
- #endif
-+#ifdef FEAT_SPELL_HL
-+ "+spell",
-+#else
-+ "-spell",
-+#endif
- /* only interesting on Unix systems */
- #if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
- "+system()",
-@@ -1135,7 +1140,7 @@
- int add_version;
- int attr;
- {
-- char_u vers[20];
-+ char_u vers[80];
- int col;
- char_u *p;
- int l;
-diff -urBbN vim64.org/src/version.h vim64/src/version.h
---- vim64.org/src/version.h 2005-10-15 13:21:16.000000000 +0200
-+++ vim64/src/version.h 2005-10-17 12:50:20.563249272 +0200
-@@ -35,6 +35,10 @@
- */
- #define VIM_VERSION_NODOT "vim64"
- #define VIM_VERSION_SHORT "6.4"
-+#ifdef FEAT_SPELL_HL
-+#define VIM_VERSION_MEDIUM "6.4 + ispell 3.1.20 WM-3"
-+#else
- #define VIM_VERSION_MEDIUM "6.4"
-+#endif
- #define VIM_VERSION_LONG "VIM - Vi IMproved 6.4 (2005 Oct 15)"
- #define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 6.4 (2005 Oct 15, compiled "
-diff -urBbN vim64.org/src/vim.h vim64/src/vim.h
---- vim64.org/src/vim.h 2005-10-08 16:22:05.000000000 +0200
-+++ vim64/src/vim.h 2005-10-17 12:49:17.532831352 +0200
-@@ -1076,13 +1076,14 @@
- , HLF_DED /* Deleted diff line */
- , HLF_TXD /* Text Changed in diff line */
- , HLF_SC /* Sign column */
-+ , HLF_SPELL /* spell - string in dictionary WM */
- , HLF_COUNT /* MUST be the last one */
- };
-
- /* the HL_FLAGS must be in the same order as the HLF_ enums! */
- #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
- 'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
-- 'f', 'F', 'A', 'C', 'D', 'T', '>'}
-+ 'f', 'F', 'A', 'C', 'D', 'T', '>', 'Z'}
-
- /*
- * Boolean constants
+++ /dev/null
-diff -urN vim63.orig/src/option.c vim63.new/src/option.c
---- vim63.orig/src/option.c 2005-07-05 20:58:20.000000000 +0200
-+++ vim63.new/src/option.c 2005-07-05 20:59:44.981064920 +0200
-@@ -1952,7 +1952,7 @@
- {"spelldirectory", "spelldir", P_STRING|P_ALLOCED|P_VI_DEF|P_EXPAND,
- #ifdef FEAT_SPELL_HL
- (char_u *)&p_spelldirectory, PV_SPELL_DIR,
-- {(char_u *)"/usr/lib/ispell", (char_u *)0L}},
-+ {(char_u *)"/usr/lib64/ispell", (char_u *)0L}},
- #else
- (char_u *)NULL, PV_NONE,
- {(char_u *)"", (char_u *)0L}},
-diff -urN vim63.orig/src/spell/config.h vim63.new/src/spell/config.h
---- vim63.orig/src/spell/config.h 2005-07-05 20:58:20.000000000 +0200
-+++ vim63.new/src/spell/config.h 2005-07-05 21:00:02.452408872 +0200
-@@ -101,10 +101,10 @@
- #define BINDIR "/usr/bin"
- #endif
- #ifndef LIBDIR
--#define LIBDIR "/usr/lib/ispell"
-+#define LIBDIR "/usr/lib64/ispell"
- #endif
- #ifndef ELISPDIR
--#define ELISPDIR "/usr/lib/emacs/site-lisp"
-+#define ELISPDIR "/usr/lib64/emacs/site-lisp"
- #endif
- #ifndef TEXINFODIR
- #define TEXINFODIR "/usr/share/info"
-diff -urN vim63.orig/src/spell/local.h vim63.new/src/spell/local.h
---- vim63.orig/src/spell/local.h 2005-07-05 20:58:20.000000000 +0200
-+++ vim63.new/src/spell/local.h 2005-07-05 21:00:29.314325240 +0200
-@@ -54,8 +54,8 @@
- ** names can be constructed for the -d option without conflict.
- */
- #define BINDIR "/usr/bin"
--#define LIBDIR "/usr/lib/ispell"
--#define ELISPDIR "/usr/lib/emacs/site-lisp"
-+#define LIBDIR "/usr/lib64/ispell"
-+#define ELISPDIR "/usr/lib64/emacs/site-lisp"
- #define TEXINFODIR "/usr/share/info"
- #define MAN1DIR "/usr/share/man/man1"
- #define MAN4DIR "/usr/share/man/man4"
-@@ -112,7 +112,7 @@
- ** !!! If you don't have this file, make EXTRADICT empty !!!
- ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- */
--#define LANGUAGES "{american,MASTERDICTS=americax.med,HASHFILES=amermedx.hash,EXTRADICT=/usr/lib/ispell/words}"
-+#define LANGUAGES "{american,MASTERDICTS=americax.med,HASHFILES=amermedx.hash,EXTRADICT=/usr/lib64/ispell/words}"
-
- /*
- ** Master hash file for DEFHASH. This is the name of a hash file
+++ /dev/null
---- vim61/src/configure.in~ Mon Sep 30 08:19:44 2002
-+++ vim61/src/configure.in Mon Sep 30 08:19:44 2002
-@@ -1764,9 +1764,9 @@
- AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
- AC_MSG_RESULT(no))
-
--dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
--AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
-- AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"],,),)
-+dnl dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
-+dnl AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
-+dnl AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"],,),)
-
- AC_MSG_CHECKING(for POSIX ACL support)
- AC_TRY_LINK([
+++ /dev/null
---- vim-5.7/src/vimtutor Mon Dec 27 09:27:02 1999
-+++ vim-5.7.acme/src/vimtutor Thu Sep 14 13:40:49 2000
-@@ -3,7 +3,11 @@
- # Start Vim on a copy of the tutor file.
-
- # Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
--TUTORCOPY=/tmp/tutor$$
-+#
-+# Tue Aug 24 12:30:09 EST 1999 - Conectiva
-+# - fixed tmp race
-+#
-+TUTORCOPY=`mktemp ${TMPDIR:-/tmp}/tutorXXXXXX`
- export TUTORCOPY
- vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor' -c 'w! $TUTORCOPY' -c 'q'
-
+++ /dev/null
-diff -Naur vim61.old/runtime/indent/ocaml.vim vim61/runtime/indent/ocaml.vim
---- vim61.old/runtime/indent/ocaml.vim Wed Oct 30 22:10:31 2002
-+++ vim61/runtime/indent/ocaml.vim Wed Oct 30 22:12:09 2002
-@@ -1,11 +1,12 @@
- " Vim indent file
- " Language: OCaml
--" Maintainers: Mike Leary <leary@nwlink.com>
--" Markus Mottl <markus@oefai.at>
--" URL: http://www.ai.univie.ac.at/~markus/vim/indent/ocaml.vim
--" Last Change: 2001 Oct 03 - minor addition (MM)
--" 2001 Sep 02 - set option 'expandtab' (MM)
--" 2001 Aug 29 - revised all rules (MM)
-+" Maintainers: Jean-Francois Yuen <jfyuen@ifrance.com>
-+" Mike Leary <leary@nwlink.com>
-+" Markus Mottl <markus@oefai.at>
-+" URL: http://www.oefai.at/~markus/vim/indent/ocaml.vim
-+" Last Change: 2002 Oct 28 - Fixed bug with indentation of ']' (MM)
-+" 2002 Oct 22 - Major rewrite (JY)
-+" 2002 Sep 08 - improved ';;' handling (JY)
-
- " Only load this indent file when no other was loaded.
- if exists("b:did_indent")
-@@ -15,16 +16,68 @@
-
- setlocal expandtab
- setlocal indentexpr=GetOCamlIndent()
--setlocal indentkeys+=0=done,0=end,0=if,0=then,0=else,0=and,0=in,0=with,0=>],0=\|],0},0],0)
-+setlocal indentkeys+=0=and,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=initializer,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0=;;,0=>\],0=\|\],0=\|,0=*),0},0\],0)
- setlocal nolisp
- setlocal nosmartindent
- setlocal textwidth=80
-
-+" Comment formatting
-+if (has("comments"))
-+ set comments=sr:(*,mb:*,ex:*)
-+ set fo=cqort
-+endif
-+
- " Only define the function once.
- if exists("*GetOCamlIndent")
- finish
- endif
-
-+" Define some patterns:
-+let s:beflet = '^\s*\(try\|method\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|;\)\s*$'
-+let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'
-+let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'
-+let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'
-+let s:module = '\<\%(begin\|sig\|struct\|object\)\>'
-+let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'
-+let s:type = '^\s*\%(let\|type\)\>.*='
-+let s:val = '^\s*\(val\|external\)\>.*:'
-+
-+" Skipping pattern, for comments
-+function s:SkipPattern(lnum, pat)
-+ let def = prevnonblank(a:lnum - 1)
-+ while def > 0 && getline(def) =~ a:pat
-+ let def = prevnonblank(def - 1)
-+ endwhile
-+ return def
-+endfunction
-+
-+" Indent for ';;' to match multiple 'let'
-+function s:GetInd(lnum, pat, lim)
-+ let llet = search(a:pat, 'bW')
-+ let old = indent(a:lnum)
-+ while llet > 0
-+ let old = indent(llet)
-+ let nb = s:SkipPattern(llet, '^\s*(\*.*\*)\s*$')
-+ if getline(nb) =~ a:lim
-+ return old
-+ endif
-+ let llet = search(a:pat, 'bW')
-+ endwhile
-+ return old
-+endfunction
-+
-+" Indent pairs
-+function s:FindPair(pstart, pmid, pend)
-+ call search(a:pend, 'bW')
-+ return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
-+endfunction
-+
-+" Indent 'let'
-+function s:FindLet(pstart, pmid, pend)
-+ call search(a:pend, 'bW')
-+ return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ "^\\s*let\\>.*=\\s*$\\|" . s:beflet'))
-+endfunction
-+
- function GetOCamlIndent()
- " Find a non-blank line above the current line.
- let lnum = prevnonblank(v:lnum - 1)
-@@ -34,8 +87,8 @@
- return 0
- endif
-
-- let ind=indent(lnum)
-- let lline=getline(lnum)
-+ let ind = indent(lnum)
-+ let lline = getline(lnum)
-
- " Return double 'shiftwidth' after lines matching:
- if lline =~ '^\s*|.*->\s*$'
-@@ -43,17 +96,118 @@
- endif
-
- " Add a 'shiftwidth' after lines ending with:
-- if lline =~ '\(:\|=\|->\|<-\|(\|[\|{\|[|\|[<\|(\*\|\<\(begin\|struct\|sig\|functor\|object\|try\|do\|if\|then\|else\|fun\|function\|parser\)\>\)\s*$'
-+ if lline =~ '\(:\|=\|->\|<-\|(\|[\|{\|[|\|[<\|\<\(begin\|struct\|sig\|functor\|object\|try\|do\|if\|then\|else\|fun\|function\|parser\)\|\<object\s*(.*)\)\s*$'
- let ind = ind + &sw
-+
-+ " Back to normal indent after lines ending with ';;':
-+ elseif lline =~ ';;\s*$' && lline !~ '^\s*;;'
-+ let ind = s:GetInd(v:lnum, s:letpat, s:letlim)
-+
-+ " Back to normal indent after lines ending with 'end':
-+ elseif lline =~ '\<end\s*$' && lline !~ '^\s*end\>'
-+ let ind = s:FindPair(s:module, '','\<end\>')
-+
-+ " Back to normal indent after lines ending with 'in':
-+ elseif lline =~ '\<in\s*$' && lline !~ '^\s*in\>'
-+ let ind = s:FindPair('\<let\>', '', '\<in\>')
-+
-+ " Back to normal indent after lines ending with 'done':
-+ elseif lline =~ '\<done\s*$' && lline !~ '^\s*done\>'
-+ let ind = s:FindPair('\<do\>', '','\<done\>')
-+
-+ " Back to normal indent after lines ending with '}':
-+ elseif lline =~ '}\s*$' && lline !~ '^\s*}'
-+ let ind = s:FindPair('{', '','}')
-+
-+ " Back to normal indent after lines ending with '>]':
-+ elseif lline =~ '>\]\s*$' && lline !~ '^\s*>\]'
-+ let ind = s:FindPair('\[<', '','>\]')
-+
-+ " Back to normal indent after lines ending with '|]':
-+ elseif lline =~ '|\]\s*$' && lline !~ '^\s*|\]'
-+ let ind = s:FindPair('\[|', '','|\]')
-+
-+ " Back to normal indent after lines ending with ']':
-+ elseif lline =~ '\]\s*$' && lline !~ '^\s*\]'
-+ let ind = s:FindPair('\[', '','\]')
-+
-+ " Back to normal indent after comments:
-+ elseif lline =~ '\*)\s*$' && lline !~ '^\s*\*)'
-+ call search('\*)', 'bW')
-+ let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
-+
-+ " Back to normal indent after lines ending with ')':
-+ elseif lline =~ ')\s*$' && lline !~ '^\s*)'
-+ let ind = s:FindPair('(', '',')')
-+
-+ endif
-+
-+ " Subtract a 'shiftwidth' after lines matching 'match ... with parser':
-+ if lline =~ '^\s*match\>.*\<with\>\s*\<parser\s*$'
-+ let ind = ind - &sw
- endif
-
-- let line=getline(v:lnum)
-+ let line = getline(v:lnum)
-
-- " Subtract a 'shiftwidth' if current line begins with:
-- if line =~ '^\s*\(\(done\|end\)\>\|>]\||]\|}\|]\|)\)'
-- return ind - &sw
-+ " Indent if current line begins with 'end'
-+ " for 'sig', 'struct', 'object' and 'begin':
-+ if line =~ '^\s*end\>'
-+ return s:FindPair(s:module, '','\<end\>')
-+
-+ " Indent if current line begins with 'done' for 'do':
-+ elseif line =~ '^\s*done\>'
-+ return s:FindPair('\<do\>', '','\<done\>')
-+
-+ " Indent if current line begins with '}':
-+ elseif line =~ '^\s*}'
-+ return s:FindPair('{', '','}')
-+
-+ " Indent if current line begins with '>]':
-+ elseif line =~ '^\s*>\]'
-+ return s:FindPair('\[<', '','>\]')
-+
-+ " Indent if current line begins with '|]':
-+ elseif line =~ '^\s*|\]'
-+ return s:FindPair('\[|', '','|\]')
-+
-+ " Indent if current line begins with ']':
-+ elseif line =~ '^\s*\]'
-+ return s:FindPair('\[', '','\]')
-+
-+ " Indent if current line begins with ')':
-+ elseif line =~ '^\s*)'
-+ return s:FindPair('(', '',')')
-+
-+ " Indent if current line begins with 'let'
-+ " and last line does not begin with 'let' or end with 'in' or ';;':
-+ elseif line =~ '^\s*let\>'
-+ if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet
-+ return s:FindLet(s:type, '','\<let\s*$')
-+ else return ind
-+ endif
-
-- " Subtract a 'shiftwidth' if current line begins with 'if' and last
-+ " Indent if current line begins with 'type'
-+ " and last line does not end with 'and' or ';;':
-+ elseif line =~ '^\s*type\>'
-+ if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim
-+ return s:FindLet(s:type, '','\<type\s*$')
-+ else return ind
-+ endif
-+
-+ " Indent for pattern matching:
-+ elseif line =~ '^\s*|'
-+ if lline !~ '^\s*\(|\|\(match\|with\|type\)\>\)\|\<\(function\|parser\|with\)\s*$'
-+ return s:FindPair('^\s*\(type\|match\)\>\|\<\(with\|function\|parser\)\s*$', '', '|')
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with ';;':
-+ elseif line =~ '^\s*;;'
-+ if lline !~ ';;\s*$'
-+ return s:GetInd(v:lnum, s:letpat, s:letlim)
-+ endif
-+
-+ " Subtract a 'shiftwidth' if current line begins with 'if' and previous
- " line ends with 'else':
- elseif line =~ '^\s*if\>'
- if lline =~ '\<else\s*$'
-@@ -61,39 +215,114 @@
- else return ind
- endif
-
-- " Subtract a 'shiftwidth' if current line begins with 'in' and last
-+ " Indent if current line begins with 'in' and previous
- " line does not start with 'let' or 'and':
- elseif line =~ '^\s*in\>'
- if lline !~ '^\s*\(let\|and\)\>'
-- return ind - &sw
-+ return s:FindPair('\<let\>', '', '\<in\>')
- else return ind
- endif
-
-- " Subtract a 'shiftwidth' if current line begins with 'else' or 'then'
-- " and previous line does not start with 'if', 'then' or 'else'
-- elseif line =~ '^\s*\(else\|then\)\>'
-+ " Indent if current line begins with 'else'
-+ " and previous line does not start with 'if', 'then' or 'else':
-+ elseif line =~ '^\s*else\>'
- if lline !~ '^\s*\(if\|else\|then\)\>'
-- return ind - &sw
-+ return s:FindPair('\<if\>', '', '\<else\>')
- else return ind
- endif
-
-- " Subtract a 'shiftwidth' if current line begins with 'and' and previous
-- " line does not start with 'let', 'and' or 'type' or end with 'end'
-- " (for classes):
-+ " Indent if current line begins with 'then'
-+ " and previous line does not start with 'if', 'then' or 'else':
-+ elseif line =~ '^\s*then\>'
-+ if lline !~ '^\s*\(if\|else\|then\)\>'
-+ return s:FindPair('\<if\>', '', '\<then\>')
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'and' and previous
-+ " line does not start with 'let', 'and' or 'type':
- elseif line =~ '^\s*and\>'
-- if lline !~ '^\s*\(let\|and\|type\)\>\|\<end\s*$'
-- return ind - &sw
-+ if lline !~ '^\s*\(and\|let\|type\)\>'
-+ return s:FindPair('^\s*\%(let\|type\|class\)\>', '', '\<and\>')
- else return ind
- endif
-
-- " Subtract a 'shiftwidth' if current line begins with 'with'
-+ " Indent if current line begins with 'with'
- " and previous line does not start with 'match' or 'try':
- elseif line =~ '^\s*with\>'
- if lline !~ '^\s*\(match\|try\)\>'
-- return ind - &sw
-+ return s:FindPair('\<\%(match\|try\)\>', '','\<with\>')
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'exception':
-+ elseif line =~ '^\s*exception\>'
-+ if lline !~ s:lim . '\|' . s:letlim
-+ return indent(search(s:val . '\|^\s*\(external\|include\|open\|type\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'external':
-+ elseif line =~ '^\s*external\>'
-+ if lline !~ s:lim . '\|' . s:letlim
-+ return indent(search(s:val . '\|^\s*\(exception\|include\|open\|type\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'include':
-+ elseif line =~ '^\s*include\>'
-+ if lline !~ s:lim . '\|' . s:letlim
-+ return indent(search(s:val . '\|^\s*\(exception\|external\|open\|type\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'open':
-+ elseif line =~ '^\s*open\>'
-+ if lline !~ s:lim . '\|' . s:letlim
-+ return indent(search(s:val . '\|^\s*\(exception\|external\|include\|type\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'val':
-+ elseif line =~ '^\s*val\>'
-+ if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim
-+ return indent(search(s:val . '\|^\s*\(exception\|include\|initializer\|method\|open\|type\)\>', 'bW'))
- else return ind
- endif
-
-+ " Indent if current line begins with 'constraint':
-+ elseif line =~ '^\s*constraint\>'
-+ if lline !~ s:obj
-+ return indent(search('^\s*\(inherit\|initializer\|method\|val\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'inherit':
-+ elseif line =~ '^\s*inherit\>'
-+ if lline !~ s:obj
-+ return indent(search('^\s*\(constraint\|initializer\|method\|val\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'inherit':
-+ elseif line =~ '^\s*initializer\>'
-+ if lline !~ s:obj
-+ return indent(search('^\s*\(constraint\|inherit\|method\|val\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent if current line begins with 'method':
-+ elseif line =~ '^\s*method\>'
-+ if lline !~ s:obj
-+ return indent(search('^\s*\(constraint\|inherit\|initializer\|val\)\>'))
-+ else return ind
-+ endif
-+
-+ " Indent back to normal after comments:
-+ elseif line =~ '^\s*\*)'
-+ call search('\*)', 'bW')
-+ return indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
-+
- endif
-
- return ind
-diff -Naur vim61.old/runtime/syntax/ocaml.vim vim61/runtime/syntax/ocaml.vim
---- vim61.old/runtime/syntax/ocaml.vim Wed Oct 30 22:10:33 2002
-+++ vim61/runtime/syntax/ocaml.vim Wed Oct 30 22:11:41 2002
-@@ -3,12 +3,11 @@
- " Filenames: *.ml *.mli *.mll *.mly
- " Maintainers: Markus Mottl <markus@oefai.at>
- " Karl-Heinz Sylla <Karl-Heinz.Sylla@gmd.de>
--" URL: http://www.ai.univie.ac.at/~markus/vim/syntax/ocaml.vim
--" Last Change: 2001 Nov 20 - Fixed small bug with modules (MM)
--" 2001 Sep 01 - Fixed small bug with '\'' (MM)
--" 2001 Aug 29 - Added rules for scripting directives (MM)
--" 2001 Aug 28 - Upgraded URL & mail address (MM)
--" 2001 Apr 26 - upgraded for new Vim version (MM)
-+" Issac Trotts <<ijtrotts@ucdavis.edu>
-+" URL: http://www.oefai.at/~markus/vim/syntax/ocaml.vim
-+" Last Change: 2002 Oct 30 - New variable "ocaml_revised" (MM)
-+" 2002 Oct 24 - Small fix for "module type" (MM)
-+" 2002 Jun 16 - Added "&&", "<" and ">" as operators (MM)
-
- " For version 5.x: Clear all syntax items
- " For version 6.x: Quit when a syntax file was already loaded
-@@ -42,7 +41,11 @@
-
- syn match ocamlCountErr "\<downto\>"
- syn match ocamlCountErr "\<to\>"
--syn match ocamlDoErr "\<do\>"
-+
-+if !exists("ocaml_revised")
-+ syn match ocamlDoErr "\<do\>"
-+endif
-+
- syn match ocamlDoneErr "\<done\>"
- syn match ocamlThenErr "\<then\>"
-
-@@ -79,7 +82,9 @@
-
-
- " Blocks
--syn region ocamlEnd matchgroup=ocamlKeyword start="\<begin\>" matchgroup=ocamlKeyword end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
-+if !exists("ocaml_revised")
-+ syn region ocamlEnd matchgroup=ocamlKeyword start="\<begin\>" matchgroup=ocamlKeyword end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
-+endif
-
-
- " "for"
-@@ -87,8 +92,9 @@
-
-
- " "do"
--syn region ocamlDo matchgroup=ocamlKeyword start="\<do\>" matchgroup=ocamlKeyword end="\<done\>" contains=ALLBUT,@ocamlContained,ocamlDoneErr
--
-+if !exists("ocaml_revised")
-+ syn region ocamlDo matchgroup=ocamlKeyword start="\<do\>" matchgroup=ocamlKeyword end="\<done\>" contains=ALLBUT,@ocamlContained,ocamlDoneErr
-+endif
-
- " "if"
- syn region ocamlNone matchgroup=ocamlKeyword start="\<if\>" matchgroup=ocamlKeyword end="\<then\>" contains=ALLBUT,@ocamlContained,ocamlThenErr
-@@ -134,12 +140,13 @@
- syn region ocamlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@ocamlContained
-
- " "module type"
--syn region ocamlKeyword start="\<module\s*type\>" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
-+syn region ocamlKeyword start="\<module\>\s*\<type\>" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
- syn match ocamlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s
-
- syn keyword ocamlKeyword and as assert class
- syn keyword ocamlKeyword constraint else
--syn keyword ocamlKeyword exception external fun function
-+syn keyword ocamlKeyword exception external fun
-+
- syn keyword ocamlKeyword in inherit initializer
- syn keyword ocamlKeyword land lazy let match
- syn keyword ocamlKeyword method mutable new of
-@@ -147,12 +154,20 @@
- syn keyword ocamlKeyword try type
- syn keyword ocamlKeyword val virtual when while with
-
-+if exists("ocaml_revised")
-+ syn keyword ocamlKeyword do value
-+ syn keyword ocamlBoolean True False
-+else
-+ syn keyword ocamlKeyword function
-+ syn keyword ocamlBoolean true false
-+ syn match ocamlKeyChar "!"
-+endif
-+
- syn keyword ocamlType array bool char exn float format int
- syn keyword ocamlType list option string unit
-
--syn keyword ocamlOperator asr lor lsl lsr lxor mod not or
-+syn keyword ocamlOperator asr lor lsl lsr lxor mod not
-
--syn keyword ocamlBoolean true false
- syn match ocamlConstructor "(\s*)"
- syn match ocamlConstructor "\[\s*\]"
- syn match ocamlConstructor "\[|\s*>|]"
-@@ -175,9 +190,11 @@
- syn match ocamlTopStop ";;"
- syn match ocamlOperator "\^"
- syn match ocamlOperator "::"
--syn match ocamlOperator "<-"
-+
-+syn match ocamlOperator "&&"
-+syn match ocamlOperator "<"
-+syn match ocamlOperator ">"
- syn match ocamlAnyVar "\<_\>"
--syn match ocamlKeyChar "!"
- syn match ocamlKeyChar "|[^\]]"me=e-1
- syn match ocamlKeyChar ";"
- syn match ocamlKeyChar "\~"
-@@ -185,6 +202,12 @@
- syn match ocamlKeyChar "\*"
- syn match ocamlKeyChar "="
-
-+if exists("ocaml_revised")
-+ syn match ocamlErr "<-"
-+else
-+ syn match ocamlOperator "<-"
-+endif
-+
- syn match ocamlNumber "\<-\=\d\+\>"
- syn match ocamlNumber "\<-\=0[x|X]\x\+\>"
- syn match ocamlNumber "\<-\=0[o|O]\o\+\>"
-@@ -201,9 +224,17 @@
- syn sync minlines=50
- syn sync maxlines=500
-
--syn sync match ocamlDoSync grouphere ocamlDo "\<do\>"
--syn sync match ocamlDoSync groupthere ocamlDo "\<done\>"
--syn sync match ocamlEndSync grouphere ocamlEnd "\<\(begin\|object\)\>"
-+if !exists("ocaml_revised")
-+ syn sync match ocamlDoSync grouphere ocamlDo "\<do\>"
-+ syn sync match ocamlDoSync groupthere ocamlDo "\<done\>"
-+endif
-+
-+if exists("ocaml_revised")
-+ syn sync match ocamlEndSync grouphere ocamlEnd "\<\(object\)\>"
-+else
-+ syn sync match ocamlEndSync grouphere ocamlEnd "\<\(begin\|object\)\>"
-+endif
-+
- syn sync match ocamlEndSync groupthere ocamlEnd "\<end\>"
- syn sync match ocamlStructSync grouphere ocamlStruct "\<struct\>"
- syn sync match ocamlStructSync groupthere ocamlStruct "\<end\>"
-@@ -236,6 +267,8 @@
-
- HiLink ocamlCharErr Error
-
-+ HiLink ocamlErr Error
-+
- HiLink ocamlComment Comment
-
- HiLink ocamlModPath Include
+++ /dev/null
---- vim64/src/po/pl.po.orig 2004-06-11 10:58:45.000000000 +0200
-+++ vim64/src/po/pl.po 2005-10-28 23:34:15.523950872 +0200
-@@ -7,11 +7,11 @@
- #
- msgid ""
- msgstr ""
--"Project-Id-Version: pl\n"
-+"Project-Id-Version: vim 6.4\n"
- "POT-Creation-Date: 2004-05-23 21:41+0200\n"
- "PO-Revision-Date: 2004-05-23 22:00+0200\n"
- "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
--"Language-Team: Polish <pl@li.org>\n"
-+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
- "MIME-Version: 1.0\n"
- "Content-Type: text/plain; charset=ISO-8859-2\n"
- "Content-Transfer-Encoding: 8bit\n"
-@@ -1102,8 +1102,8 @@
-
- #: ex_cmds.c:5441
- #, c-format
--msgid "E154: Duplicate tag \"%s\" in file %s"
--msgstr "E154: Dwukrotny znacznik \"%s\" w pliku %s"
-+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-+msgstr "E154: Dwukrotny znacznik \"%s\" w pliku %s/%s"
-
- #: ex_cmds.c:5553
- #, c-format
-@@ -2277,11 +2277,20 @@
- "\n"
- "Wysy³am zawiadomienie koñcz±ce proces pochodny.\n"
-
-+#: gui_w32.c:839
-+#, c-format
-+msgid "E671: Cannot find window title \"%s\""
-+msgstr "E671: Nie mogê znale¼æ tytu³u okna \"%s\""
-+
- #: gui_w32.c:830
- #, c-format
- msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
- msgstr "E243: Argument nie jest wspomagany: \"-%s\"; U¿ywaj wersji OLE."
-
-+#: gui_w32.c:1100
-+msgid "E672: Unable to open window inside MDI application"
-+msgstr "E672: Nie mogê otworzyæ okna w aplikacji MDI"
-+
- #: gui_w48.c:2090
- msgid "Find string (use '\\\\' to find a '\\')"
- msgstr "Znajd¼ ci±g (u¿yj '\\\\' do szukania '\\')"
-@@ -2328,8 +2337,8 @@
-
- #: gui_x11.c:2184
- #, c-format
--msgid "Font%d width is not twice that of font0\n"
--msgstr "szeroko¶æ font%d nie jest podwójn± szeroko¶ci± font0\n"
-+msgid "Font%ld width is not twice that of font0\n"
-+msgstr "szeroko¶æ font%ld nie jest podwójn± szeroko¶ci± font0\n"
-
- #: gui_x11.c:2185
- #, c-format
-@@ -4331,6 +4340,10 @@
- msgid "E352: Cannot erase folds with current 'foldmethod'"
- msgstr "E352: Nie mogê skasowaæ zwiniêcia z bie¿±c± 'foldmethod'"
-
-+#: normal.c:6762
-+msgid "E664: changelist is empty"
-+msgstr "E664: lista zmian jest pusta"
-+
- #: normal.c:6740
- msgid "E662: At start of changelist"
- msgstr "E662: Na pocz±tku listy zmian"
-@@ -5455,6 +5484,10 @@
- msgid "E410: Invalid :syntax subcommand: %s"
- msgstr "E410: Niew³a¶ciwa podkomenda :syntax : %s"
-
-+#: syntax.c:6045
-+msgid "E679: recursive loop loading syncolor.vim"
-+msgstr "E679: rekurencyjna pêtla przy wczytywaniu syncolor.vim"
-+
- #: syntax.c:6136
- #, c-format
- msgid "E411: highlight group not found: %s"
-@@ -6042,11 +6075,11 @@
-
- #: version.c:2089
- msgid "type :help cp-default<Enter> for info on this"
--msgstr "wprowad¼ :help cp-default<Enter> dla informacji to tym "
-+msgstr "wprowad¼ :help cp-default<Enter> dla informacji o tym "
-
- #: version.c:2104
- msgid "menu Help->Orphans for information "
--msgstr "wprowad¼ :help iccf<Enter> dla informacji to tym "
-+msgstr "menu Pomoc->Kibaale Children's Center dla informacji o tym"
-
- #: version.c:2106
- msgid "Running modeless, typed text is inserted"
-@@ -6094,7 +6127,7 @@
-
- #: version.c:2180
- msgid "type :help windows95<Enter> for info on this"
--msgstr "wprowad¼ :help windows95<Enter> dla informacji to tym "
-+msgstr "wprowad¼ :help windows95<Enter> dla informacji o tym "
-
- #: window.c:203
- msgid "E441: There is no preview window"
+++ /dev/null
-diff -Nur vim62.orig/runtime/ftplugin/python.vim vim62/runtime/ftplugin/python.vim
---- vim62.orig/runtime/ftplugin/python.vim Sat May 24 14:59:06 2003
-+++ vim62/runtime/ftplugin/python.vim Wed Aug 20 00:01:02 2003
-@@ -13,9 +13,6 @@
- " setlocal comments-=:%
- setlocal commentstring=#%s
-
--" Python always uses a 'tabstop' of 8.
--setlocal ts=8
--
- set wildignore+=*.pyc
-
- nnoremap <silent> <buffer> ]] :call <SID>Python_jump('/^\(class\\|def\)')<cr>
+++ /dev/null
---- vim62/runtime/syntax/spec.vim.orig Tue Jul 15 13:16:17 2003
-+++ vim62/runtime/syntax/spec.vim Tue Jul 15 13:17:28 2003
-@@ -70,11 +70,11 @@
- syn keyword specSpecialVariablesNames contained RPM_BUILD_ROOT RPM_BUILD_DIR RPM_SOURCE_DIR RPM_OPT_FLAGS LDFLAGS CC CC_FLAGS CPPNAME CFLAGS CXX CXXFLAGS CPPFLAGS
-
- "valid macro names from /usr/lib/rpm/macros
--syn keyword specMacroNameOther contained buildroot buildsubdir distribution disturl ix86 name nil optflags packager perl_sitearch release requires_eq vendor version epoch
-+syn keyword specMacroNameOther contained buildroot buildsubdir debugcflags date distribution disturl ix86 kgcc kgcc_package name nil optflags packager perl_archlib perl_privlib perl_sitearch perl_sitelib perl_vendorarch perl_vendorlib release requires_eq rpmcflags rpmldflags tmpdir vendor version epoch
- syn match specMacroNameOther contained '\<\(PATCH\|SOURCE\)\d*\>'
-
- "valid _macro names from /usr/lib/rpm/macros
--syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_arch _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gnu _gpg_name _gpg_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _includedir _infodir _initrddir _install_langs _install_script_path _instchangelog _javaclasspath _javadir _javadocdir _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _package_version _pgpbin _pgp_name _pgp_path _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _smp_mflags _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _usrsrc _var _vendor
-+syn keyword specMacroNameLocal contained _aclocaldir _applnkdir _arch _binary_payload _bindir _build _build_arch _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _desktopdir _docdir _examplesdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _fontsdir _ftpport _ftpproxy _gnu _gpg_name _gpg_path _gtkdocdir _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _iconsdir _includedir _infodir _initrddir _install_langs _install_script_path _instchangelog _javaclasspath _javadir _javadocdir _kernelsrcdir _kernel_ver _kernel_ver_str _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _omf_dest_dir _os _package_version _pgpbin _pgp_name _pgp_path _pixmapsdir _pkgconfigdir _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _smp_mflags _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _usrsrc _var _vendor
-
-
- "------------------------------------------------------------------------------
-@@ -83,8 +83,8 @@
-
- "One line macros - valid in all ScriptAreas
- "tip: remember do include new itens on specScriptArea's skip section
--syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|patch\d*\|setup\|configure\|GNUconfigure\|find_lang\|makeinstall\)\>' end='$' contains=specCommandOpts,specMacroIdentifier
--syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure\|GNUconfigure\|find_lang\|makeinstall\)}' end='$' contains=specCommandOpts,specMacroIdentifier
-+syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|patch\d*\|setup\|configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\)\>' end='$' contains=specCommandOpts,specMacroIdentifier
-+syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\)}' end='$' contains=specCommandOpts,specMacroIdentifier
-
- "%% Files Section %%
- "TODO %config valid parameters: missingok\|noreplace
-@@ -114,7 +114,7 @@
- syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
-
- "%% Scripts Section %%
--syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|triggerin\|triggerun\|triggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
-+syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|triggerin\|triggerun\|triggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure2_13\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
-
- "%% Changelog Section %%
- syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
-@@ -137,7 +137,7 @@
- syn match shOperator contained '[><|!&;]\|[!=]='
- syn region shDo transparent matchgroup=specBlock start="\<do\>" end="\<done\>" contains=ALLBUT,shFunction,shDoError,shCase,specPreAmble,@specListedFiles
-
--syn region specIf matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|%if\|%else" end='%endif' contains=ALLBUT, specIfError, shCase
-+syn region specIf matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|ifdef\|ifndef\|%if\|%else" end='%endif' contains=ALLBUT, specIfError, shCase
-
- syn region shIf transparent matchgroup=specBlock start="\<if\>" end="\<fi\>" contains=ALLBUT,shFunction,shIfError,shCase,@specListedFiles
-
+++ /dev/null
---- vim62/runtime/syntax/spec.vim.orig 2003-05-11 20:20:37.000000000 +0200
-+++ vim62/runtime/syntax/spec.vim 2003-07-08 00:31:22.000000000 +0200
-@@ -70,11 +70,11 @@
- syn keyword specSpecialVariablesNames contained RPM_BUILD_ROOT RPM_BUILD_DIR RPM_SOURCE_DIR RPM_OPT_FLAGS LDFLAGS CC CC_FLAGS CPPNAME CFLAGS CXX CXXFLAGS CPPFLAGS
-
- "valid macro names from /usr/lib/rpm/macros
--syn keyword specMacroNameOther contained buildroot buildsubdir distribution disturl ix86 name nil optflags perl_sitearch release requires_eq vendor version
-+syn keyword specMacroNameOther contained buildroot buildsubdir distribution disturl ix86 name nil optflags packager perl_sitearch release requires_eq vendor version epoch
- syn match specMacroNameOther contained '\<\(PATCH\|SOURCE\)\d*\>'
-
- "valid _macro names from /usr/lib/rpm/macros
--syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gpg_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _includedir _infodir _install_langs _install_script_path _instchangelog _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _pgpbin _pgp_path _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _usrsrc _var _vendor
-+syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_arch _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gnu _gpg_name _gpg_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _includedir _infodir _initrddir _install_langs _install_script_path _instchangelog _javaclasspath _javadir _javadocdir _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _package_version _pgpbin _pgp_name _pgp_path _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _smp_mflags _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _usrsrc _var _vendor
-
-
- "------------------------------------------------------------------------------
-@@ -89,9 +89,9 @@
- "%% Files Section %%
- "TODO %config valid parameters: missingok\|noreplace
- "TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\)
--syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
-+syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\|exclude\|dev\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
- "tip: remember to include new itens in specFilesArea above
--syn match specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>'
-+syn match specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\|exclude\|dev\)\>'
-
- "valid options for certain section headers
- syn match specDescriptionOpts contained '\s-[ln]\s*\a'ms=s+1,me=e-1
-@@ -105,7 +105,7 @@
- "%% PreAmble Section %%
- "Copyright and Serial were deprecated by License and Epoch
- syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
--syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Icon\|URL\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
-+syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Icon\|URL\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReqProv\|AutoReq\|AutoProv\|Epoch\|NoSource\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
-
- "%% Description Section %%
- syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment
-@@ -114,7 +114,7 @@
- syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
-
- "%% Scripts Section %%
--syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
-+syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|triggerin\|triggerun\|triggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
-
- "%% Changelog Section %%
- syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
-@@ -137,7 +137,7 @@
- syn match shOperator contained '[><|!&;]\|[!=]='
- syn region shDo transparent matchgroup=specBlock start="\<do\>" end="\<done\>" contains=ALLBUT,shFunction,shDoError,shCase,specPreAmble,@specListedFiles
-
--syn region specIf matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|%else" end='%endif' contains=ALLBUT, specIfError, shCase
-+syn region specIf matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|%if\|%else" end='%endif' contains=ALLBUT, specIfError, shCase
-
- syn region shIf transparent matchgroup=specBlock start="\<if\>" end="\<fi\>" contains=ALLBUT,shFunction,shIfError,shCase,@specListedFiles
-
+++ /dev/null
---- vim62/runtime/syntax/spec.vim.orig 2004-04-09 17:04:52.516737648 +0200
-+++ vim62/runtime/syntax/spec.vim 2004-04-10 00:30:42.532117184 +0200
-@@ -15,7 +15,7 @@
-
- syn sync minlines=1000
-
--syn match specSpecialChar contained '[][!$()\\|>^;:{}]'
-+syn match specSpecialChar contained '[][!$()\\|>^;:]'
- syn match specColon contained ':'
- syn match specPercent contained '%'
-
-@@ -23,7 +23,9 @@
- syn match specVariables contained '\${\w*}' contains=specSpecialVariablesNames,specSpecialChar
-
- syn match specMacroIdentifier contained '%\h\w*' contains=specMacroNameLocal,specMacroNameOther,specPercent
--syn match specMacroIdentifier contained '%{\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar
-+"syn match specMacroIdentifier contained '%{\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar
-+syn region specMacroIdentifier oneline matchgroup=Special start='%{' skip='\\}' end='}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar
-+syn match specBcond contained '%{with\(out\)\?\s\+[a-zA-Z0-9_-]\+}'
-
- syn match specSpecialVariables contained '\$[0-9]\|\${[0-9]}'
- syn match specCommandOpts contained '\s\(-\w\+\|--\w[a-zA-Z_-]\+\)'ms=s+1
-@@ -83,8 +85,9 @@
-
- "One line macros - valid in all ScriptAreas
- "tip: remember do include new itens on specScriptArea's skip section
--syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|patch\d*\|setup\|configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\)\>' end='$' contains=specCommandOpts,specMacroIdentifier
-+syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(\(un\)\?define\|patch\d*\|setup\|configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\|bcond_with\(out\)\?\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier,specSectionMacroBcondArea
- syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\)}' end='$' contains=specCommandOpts,specMacroIdentifier
-+syn region specSectionMacroBcondArea oneline matchgroup=specBlock start='%{!\??\(with\(out\)\?_[a-zA-Z0-9_]\+\|debug\):' skip='\\}' end='}' contains=ALLBUT,shCase
-
- "%% Files Section %%
- "TODO %config valid parameters: missingok\|noreplace
-@@ -105,7 +108,7 @@
- "%% PreAmble Section %%
- "Copyright and Serial were deprecated by License and Epoch
- syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
--syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Icon\|URL\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReqProv\|AutoReq\|AutoProv\|Epoch\|NoSource\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
-+syn region specPreAmble oneline matchgroup=specCommand start='\(^\|\(^%{!\??with\(out\)\?_[a-zA-Z0-9_]\+:\)\@<=\)\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Icon\|URL\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReqProv\|AutoReq\|AutoProv\|Epoch\|NoSource\)' end='$\|}\@=' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier,specSectionMacroBcondArea
-
- "%% Description Section %%
- syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment
-@@ -114,7 +117,7 @@
- syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
-
- "%% Scripts Section %%
--syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|triggerin\|triggerun\|triggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure2_13\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
-+syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|triggerin\|triggerun\|triggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure2_13\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2,specSectionMacroBcondArea
-
- "%% Changelog Section %%
- syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
-@@ -132,7 +135,7 @@
- syn match shComment contained '#.*$'
-
- syn region shQuote1 contained matchgroup=shQuoteDelim start=+'+ skip=+\\'+ end=+'+ contains=specMacroIdentifier
--syn region shQuote2 contained matchgroup=shQuoteDelim start=+"+ skip=+\\"+ end=+"+ contains=specVariables,specMacroIdentifier
-+syn region shQuote2 contained matchgroup=shQuoteDelim start=+"+ skip=+\\"+ end=+"+ contains=specVariables,specMacroIdentifier,specSectionMacroBcondArea
-
- syn match shOperator contained '[><|!&;]\|[!=]='
- syn region shDo transparent matchgroup=specBlock start="\<do\>" end="\<done\>" contains=ALLBUT,shFunction,shDoError,shCase,specPreAmble,@specListedFiles
-@@ -192,6 +195,7 @@
-
- "spec colors
- HiLink specBlock Function
-+ HiLink specBcond Function
- HiLink specColon Special
- HiLink specCommand Statement
- HiLink specCommandOpts specOpts
-diff -Nura vim62.bef/runtime/syntax/spec.vim vim62.new/runtime/syntax/spec.vim
---- vim62.bef/runtime/syntax/spec.vim 2004-06-06 07:05:21.000000000 +0200
-+++ vim62.new/runtime/syntax/spec.vim 2004-06-06 07:15:34.000000000 +0200
-@@ -85,7 +85,7 @@
-
- "One line macros - valid in all ScriptAreas
- "tip: remember do include new itens on specScriptArea's skip section
--syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(\(un\)\?define\|patch\d*\|setup\|configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\|bcond_with\(out\)\?\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier,specSectionMacroBcondArea
-+syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(\(un\)\?define\|dump\|trace\|patch\d*\|setup\|configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\|bcond_with\(out\)\?\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier,specSectionMacroBcondArea
- syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure2_13\|configure\|GNUconfigure\|find_lang\|makeinstall\)}' end='$' contains=specCommandOpts,specMacroIdentifier
- syn region specSectionMacroBcondArea oneline matchgroup=specBlock start='%{!\??\(with\(out\)\?_[a-zA-Z_]\+\|debug\):' skip='\\}' end='}' contains=ALLBUT,shCase
-