]> git.pld-linux.org Git - packages/vim.git/commitdiff
- up to 7.3.189 auto/th/vim-7_3_189-1
authorElan Ruusamäe <glen@pld-linux.org>
Wed, 11 May 2011 11:11:19 +0000 (11:11 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    7.3.171 -> 1.1
    7.3.172 -> 1.1
    7.3.173 -> 1.1
    7.3.174 -> 1.1
    7.3.175 -> 1.1
    7.3.176 -> 1.1
    7.3.177 -> 1.1
    7.3.178 -> 1.1
    7.3.179 -> 1.1
    7.3.180 -> 1.1
    7.3.181 -> 1.1
    7.3.182 -> 1.1
    7.3.183 -> 1.1
    7.3.184 -> 1.1
    7.3.185 -> 1.1
    7.3.186 -> 1.1
    7.3.187 -> 1.1
    7.3.188 -> 1.1
    7.3.189 -> 1.1
    vim.spec -> 1.556

20 files changed:
7.3.171 [new file with mode: 0644]
7.3.172 [new file with mode: 0644]
7.3.173 [new file with mode: 0644]
7.3.174 [new file with mode: 0644]
7.3.175 [new file with mode: 0644]
7.3.176 [new file with mode: 0644]
7.3.177 [new file with mode: 0644]
7.3.178 [new file with mode: 0644]
7.3.179 [new file with mode: 0644]
7.3.180 [new file with mode: 0644]
7.3.181 [new file with mode: 0644]
7.3.182 [new file with mode: 0644]
7.3.183 [new file with mode: 0644]
7.3.184 [new file with mode: 0644]
7.3.185 [new file with mode: 0644]
7.3.186 [new file with mode: 0644]
7.3.187 [new file with mode: 0644]
7.3.188 [new file with mode: 0644]
7.3.189 [new file with mode: 0644]
vim.spec

diff --git a/7.3.171 b/7.3.171
new file mode 100644 (file)
index 0000000..f965e0a
--- /dev/null
+++ b/7.3.171
@@ -0,0 +1,142 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.171
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.171
+Problem:    When the clipboard isn't supported: ":yank*" gives a confusing
+           error message.
+Solution:   Specifically mention that the register name is invalid.
+           (Jean-Rene David)
+Files:     runtime/doc/change.txt, src/ex_docmd.c, src/globals.h
+
+
+*** ../vim-7.3.170/runtime/doc/change.txt      2010-08-15 21:57:18.000000000 +0200
+--- runtime/doc/change.txt     2011-05-05 13:48:00.000000000 +0200
+***************
+*** 916,923 ****
+  {Visual}["x]Y                Yank the highlighted lines [into register x] (for
+                       {Visual} see |Visual-mode|).  {not in Vi}
+  
+!                                                      *:y* *:yank*
+! :[range]y[ank] [x]   Yank [range] lines [into register x].
+  
+  :[range]y[ank] [x] {count}
+                       Yank {count} lines, starting with last line number
+--- 917,926 ----
+  {Visual}["x]Y                Yank the highlighted lines [into register x] (for
+                       {Visual} see |Visual-mode|).  {not in Vi}
+  
+!                                                      *:y* *:yank* *E850*
+! :[range]y[ank] [x]   Yank [range] lines [into register x]. Yanking to the
+!                      "* or "+ registers is possible only in GUI versions or
+!                      when the |+xterm_clipboard| feature is included.
+  
+  :[range]y[ank] [x] {count}
+                       Yank {count} lines, starting with last line number
+*** ../vim-7.3.170/src/ex_docmd.c      2011-04-11 21:35:03.000000000 +0200
+--- src/ex_docmd.c     2011-05-05 13:48:57.000000000 +0200
+***************
+*** 2424,2448 ****
+      if (       (ea.argt & REGSTR)
+           && *ea.arg != NUL
+  #ifdef FEAT_USR_CMDS
+-          && valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+-                                                 && USER_CMDIDX(ea.cmdidx)))
+           /* Do not allow register = for user commands */
+           && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+- #else
+-          && valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+  #endif
+           && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+      {
+!      ea.regname = *ea.arg++;
+! #ifdef FEAT_EVAL
+!      /* for '=' register: accept the rest of the line as an expression */
+!      if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+       {
+!          set_expr_line(vim_strsave(ea.arg));
+!          ea.arg += STRLEN(ea.arg);
+       }
+  #endif
+!      ea.arg = skipwhite(ea.arg);
+      }
+  
+      /*
+--- 2424,2462 ----
+      if (       (ea.argt & REGSTR)
+           && *ea.arg != NUL
+  #ifdef FEAT_USR_CMDS
+           /* Do not allow register = for user commands */
+           && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+  #endif
+           && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+      {
+! #ifndef FEAT_CLIPBOARD
+!      /* check these explicitly for a more specific error message */
+!      if (*ea.arg == '*' || *ea.arg == '+')
+       {
+!          errormsg = (char_u *)_(e_invalidreg);
+!          goto doend;
+       }
+  #endif
+!      if (
+! #ifdef FEAT_USR_CMDS
+!          valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+!                                                 && USER_CMDIDX(ea.cmdidx)))
+! #else
+!          valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+! #endif
+!         )
+!      {
+!          ea.regname = *ea.arg++;
+! #ifdef FEAT_EVAL
+!          /* for '=' register: accept the rest of the line as an expression */
+!          if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+!          {
+!              set_expr_line(vim_strsave(ea.arg));
+!              ea.arg += STRLEN(ea.arg);
+!          }
+! #endif
+!          ea.arg = skipwhite(ea.arg);
+!      }
+      }
+  
+      /*
+*** ../vim-7.3.170/src/globals.h       2011-02-15 17:39:14.000000000 +0100
+--- src/globals.h      2011-05-05 13:47:44.000000000 +0200
+***************
+*** 1561,1566 ****
+--- 1561,1569 ----
+       (defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
+  EXTERN char_u e_notset[]     INIT(= N_("E764: Option '%s' is not set"));
+  #endif
++ #ifndef FEAT_CLIPBOARD
++ EXTERN char_u e_invalidreg[]    INIT(= N_("E850: Invalid register name"));
++ #endif
+  
+  #ifdef MACOS_X_UNIX
+  EXTERN short disallow_gui    INIT(= FALSE);
+*** ../vim-7.3.170/src/version.c       2011-04-28 19:05:01.000000000 +0200
+--- src/version.c      2011-05-05 14:24:39.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     171,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+53. To find out what time it is, you send yourself an e-mail and check the
+    "Date:" field.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.172 b/7.3.172
new file mode 100644 (file)
index 0000000..66a7852
--- /dev/null
+++ b/7.3.172
@@ -0,0 +1,268 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.172
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.172
+Problem:    MS-Windows: rename() might delete the file if the name differs but
+           it's actually the same file.
+Solution:   Use the file handle to check if it's the same file. (Yukihiro
+           Nakadaira)
+Files:     src/if_cscope.c, src/fileio.c, src/os_win32.c,
+           src/proto/os_win32.pro, src/vim.h
+
+
+*** ../vim-7.3.171/src/if_cscope.c     2011-03-03 15:01:25.000000000 +0100
+--- src/if_cscope.c    2011-05-05 16:16:38.000000000 +0200
+***************
+*** 1412,1428 ****
+  {
+      short    i, j;
+  #ifndef UNIX
+-     HANDLE   hFile;
+      BY_HANDLE_FILE_INFORMATION bhfi;
+  
+-     vim_memset(&bhfi, 0, sizeof(bhfi));
+      /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
+      if (!mch_windows95())
+      {
+!      hFile = CreateFile(fname, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
+!                                               FILE_ATTRIBUTE_NORMAL, NULL);
+!      if (hFile == INVALID_HANDLE_VALUE)
+       {
+           if (p_csverbose)
+           {
+               char *cant_msg = _("E625: cannot open cscope database: %s");
+--- 1412,1426 ----
+  {
+      short    i, j;
+  #ifndef UNIX
+      BY_HANDLE_FILE_INFORMATION bhfi;
+  
+      /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
+      if (!mch_windows95())
+      {
+!      switch (win32_fileinfo(fname, &bhfi))
+       {
++      case FILEINFO_ENC_FAIL:         /* enc_to_utf16() failed */
++      case FILEINFO_READ_FAIL:        /* CreateFile() failed */
+           if (p_csverbose)
+           {
+               char *cant_msg = _("E625: cannot open cscope database: %s");
+***************
+*** 1438,1452 ****
+                   (void)EMSG2(cant_msg, fname);
+           }
+           return -1;
+!      }
+!      if (!GetFileInformationByHandle(hFile, &bhfi))
+!      {
+!          CloseHandle(hFile);
+           if (p_csverbose)
+               (void)EMSG(_("E626: cannot get cscope database information"));
+           return -1;
+       }
+-      CloseHandle(hFile);
+      }
+  #endif
+  
+--- 1436,1447 ----
+                   (void)EMSG2(cant_msg, fname);
+           }
+           return -1;
+! 
+!      case FILEINFO_INFO_FAIL:    /* GetFileInformationByHandle() failed */
+           if (p_csverbose)
+               (void)EMSG(_("E626: cannot get cscope database information"));
+           return -1;
+       }
+      }
+  #endif
+  
+*** ../vim-7.3.171/src/fileio.c        2011-04-11 21:35:03.000000000 +0200
+--- src/fileio.c       2011-05-05 16:22:22.000000000 +0200
+***************
+*** 6555,6560 ****
+--- 6555,6575 ----
+           use_tmp_file = TRUE;
+      }
+  #endif
++ #ifdef WIN3264
++     {
++      BY_HANDLE_FILE_INFORMATION info1, info2;
++ 
++      /* It's possible for the source and destination to be the same file.
++       * In that case go through a temp file name.  This makes rename("foo",
++       * "./foo") a no-op (in a complicated way). */
++      if (win32_fileinfo(from, &info1) == FILEINFO_OK
++              && win32_fileinfo(to, &info2) == FILEINFO_OK
++              && info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
++              && info1.nFileIndexHigh == info2.nFileIndexHigh
++              && info1.nFileIndexLow == info2.nFileIndexLow)
++          use_tmp_file = TRUE;
++     }
++ #endif
+  
+  #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
+      if (use_tmp_file)
+*** ../vim-7.3.171/src/os_win32.c      2011-02-01 13:48:47.000000000 +0100
+--- src/os_win32.c     2011-05-05 16:24:17.000000000 +0200
+***************
+*** 2645,2669 ****
+      int
+  mch_is_linked(char_u *fname)
+  {
+      HANDLE   hFile;
+!     int              res = 0;
+!     BY_HANDLE_FILE_INFORMATION inf;
+  #ifdef FEAT_MBYTE
+      WCHAR    *wn = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+       wn = enc_to_utf16(fname, NULL);
+      if (wn != NULL)
+      {
+       hFile = CreateFileW(wn,         /* file name */
+                   GENERIC_READ,       /* access mode */
+!                  0,                  /* share mode */
+                   NULL,               /* security descriptor */
+                   OPEN_EXISTING,      /* creation disposition */
+!                  0,                  /* file attributes */
+                   NULL);              /* handle to template file */
+       if (hFile == INVALID_HANDLE_VALUE
+!              && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+       {
+           /* Retry with non-wide function (for Windows 98). */
+           vim_free(wn);
+--- 2645,2688 ----
+      int
+  mch_is_linked(char_u *fname)
+  {
++     BY_HANDLE_FILE_INFORMATION info;
++ 
++     return win32_fileinfo(fname, &info) == FILEINFO_OK
++                                                 && info.nNumberOfLinks > 1;
++ }
++ 
++ /*
++  * Get the by-handle-file-information for "fname".
++  * Returns FILEINFO_OK when OK.
++  * returns FILEINFO_ENC_FAIL when enc_to_utf16() failed.
++  * Returns FILEINFO_READ_FAIL when CreateFile() failed.
++  * Returns FILEINFO_INFO_FAIL when GetFileInformationByHandle() failed.
++  */
++     int
++ win32_fileinfo(char_u *fname, BY_HANDLE_FILE_INFORMATION *info)
++ {
+      HANDLE   hFile;
+!     int              res = FILEINFO_READ_FAIL;
+  #ifdef FEAT_MBYTE
+      WCHAR    *wn = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++     {
+       wn = enc_to_utf16(fname, NULL);
++      if (wn == NULL)
++          res = FILEINFO_ENC_FAIL;
++     }
+      if (wn != NULL)
+      {
+       hFile = CreateFileW(wn,         /* file name */
+                   GENERIC_READ,       /* access mode */
+!                  FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
+                   NULL,               /* security descriptor */
+                   OPEN_EXISTING,      /* creation disposition */
+!                  FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
+                   NULL);              /* handle to template file */
+       if (hFile == INVALID_HANDLE_VALUE
+!                            && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+       {
+           /* Retry with non-wide function (for Windows 98). */
+           vim_free(wn);
+***************
+*** 2674,2690 ****
+  #endif
+       hFile = CreateFile(fname,       /* file name */
+                   GENERIC_READ,       /* access mode */
+!                  0,                  /* share mode */
+                   NULL,               /* security descriptor */
+                   OPEN_EXISTING,      /* creation disposition */
+!                  0,                  /* file attributes */
+                   NULL);              /* handle to template file */
+  
+      if (hFile != INVALID_HANDLE_VALUE)
+      {
+!      if (GetFileInformationByHandle(hFile, &inf) != 0
+!              && inf.nNumberOfLinks > 1)
+!          res = 1;
+       CloseHandle(hFile);
+      }
+  
+--- 2693,2710 ----
+  #endif
+       hFile = CreateFile(fname,       /* file name */
+                   GENERIC_READ,       /* access mode */
+!                  FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
+                   NULL,               /* security descriptor */
+                   OPEN_EXISTING,      /* creation disposition */
+!                  FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
+                   NULL);              /* handle to template file */
+  
+      if (hFile != INVALID_HANDLE_VALUE)
+      {
+!      if (GetFileInformationByHandle(hFile, info) != 0)
+!          res = FILEINFO_OK;
+!      else
+!          res = FILEINFO_INFO_FAIL;
+       CloseHandle(hFile);
+      }
+  
+*** ../vim-7.3.171/src/proto/os_win32.pro      2010-10-23 14:02:48.000000000 +0200
+--- src/proto/os_win32.pro     2011-05-05 16:17:42.000000000 +0200
+***************
+*** 21,26 ****
+--- 21,27 ----
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
+  int mch_is_linked __ARGS((char_u *fname));
++ int win32_fileinfo __ARGS((char_u *name, BY_HANDLE_FILE_INFORMATION *lpFileInfo));
+  int mch_writable __ARGS((char_u *name));
+  int mch_can_exe __ARGS((char_u *name));
+  int mch_nodetype __ARGS((char_u *name));
+*** ../vim-7.3.171/src/vim.h   2011-04-11 21:35:03.000000000 +0200
+--- src/vim.h  2011-05-05 16:16:57.000000000 +0200
+***************
+*** 2217,2220 ****
+--- 2217,2226 ----
+  #define KEYLEN_PART_MAP -2   /* keylen value for incomplete mapping */
+  #define KEYLEN_REMOVED  9999 /* keylen value for removed sequence */
+  
++ /* Return values from win32_fileinfo(). */
++ #define FILEINFO_OK       0
++ #define FILEINFO_ENC_FAIL    1       /* enc_to_utf16() failed */
++ #define FILEINFO_READ_FAIL   2       /* CreateFile() failed */
++ #define FILEINFO_INFO_FAIL   3       /* GetFileInformationByHandle() failed */
++ 
+  #endif /* VIM__H */
+*** ../vim-7.3.171/src/version.c       2011-05-05 14:26:37.000000000 +0200
+--- src/version.c      2011-05-05 16:39:35.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     172,
+  /**/
+
+-- 
+Q: What is a patch 22?
+A: A patch you need to include to make it possible to include patches.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.173 b/7.3.173
new file mode 100644 (file)
index 0000000..ac8cffb
--- /dev/null
+++ b/7.3.173
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.173
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.173
+Problem:    After using setqflist() to make the quickfix list empty ":cwindow"
+           may open the window anyway.  Also after ":vimgrep".
+Solution:   Correctly check whether the list is empty. (Ingo Karkat)
+Files:     src/quickfix.c
+
+
+*** ../vim-7.3.172/src/quickfix.c      2011-04-28 17:27:05.000000000 +0200
+--- src/quickfix.c     2011-05-05 16:55:47.000000000 +0200
+***************
+*** 1164,1170 ****
+  
+       /* When no valid entries are present in the list, qf_ptr points to
+        * the first item in the list */
+!      if (to_qfl->qf_nonevalid == TRUE)
+           to_qfl->qf_ptr = to_qfl->qf_start;
+      }
+  
+--- 1164,1170 ----
+  
+       /* When no valid entries are present in the list, qf_ptr points to
+        * the first item in the list */
+!      if (to_qfl->qf_nonevalid)
+           to_qfl->qf_ptr = to_qfl->qf_start;
+      }
+  
+***************
+*** 2243,2248 ****
+--- 2243,2249 ----
+       * it if we have errors; otherwise, leave it closed.
+       */
+      if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
++          || qi->qf_lists[qi->qf_curlist].qf_count == 0
+           || qi->qf_curlist >= qi->qf_listcount)
+      {
+       if (win != NULL)
+***************
+*** 3711,3717 ****
+      }
+  
+      if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
+!      /* empty list or no valid entry */
+       qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
+      else
+       qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+--- 3712,3718 ----
+      }
+  
+      if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
+!      /* no valid entry */
+       qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
+      else
+       qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+*** ../vim-7.3.172/src/version.c       2011-05-05 16:41:19.000000000 +0200
+--- src/version.c      2011-05-05 17:11:57.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     173,
+  /**/
+
+-- 
+"I can't complain, but sometimes I still do."   (Joe Walsh)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.174 b/7.3.174
new file mode 100644 (file)
index 0000000..33d6003
--- /dev/null
+++ b/7.3.174
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.174
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.174
+Problem:    When Exuberant ctags binary is exctags it's not found.
+Solution:   Add configure check for exctags. (Hong Xu)
+Files:     src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.173/src/configure.in    2011-02-09 17:42:53.000000000 +0100
+--- src/configure.in   2011-05-05 17:18:21.000000000 +0200
+***************
+*** 2619,2625 ****
+    dnl  On HP-UX 10.10 termcap or termlib should be used instead of
+    dnl  curses, because curses is much slower.
+    dnl  Newer versions of ncurses are preferred over anything, except
+!   dnl  when tinfo has been split off, it conains all we need.
+    dnl  Older versions of ncurses have bugs, get a new one!
+    dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
+    dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
+--- 2619,2625 ----
+    dnl  On HP-UX 10.10 termcap or termlib should be used instead of
+    dnl  curses, because curses is much slower.
+    dnl  Newer versions of ncurses are preferred over anything, except
+!   dnl  when tinfo has been split off, it contains all we need.
+    dnl  Older versions of ncurses have bugs, get a new one!
+    dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
+    dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
+***************
+*** 3370,3376 ****
+  AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
+  
+  dnl Check how we can run ctags.  Default to "ctags" when nothing works.
+! dnl --version for Exuberant ctags (preferred)
+  dnl       Add --fields=+S to get function signatures for omni completion.
+  dnl -t for typedefs (many ctags have this)
+  dnl -s for static functions (Elvis ctags only?)
+--- 3370,3376 ----
+  AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
+  
+  dnl Check how we can run ctags.  Default to "ctags" when nothing works.
+! dnl Use --version to detect Exuberant ctags (preferred)
+  dnl       Add --fields=+S to get function signatures for omni completion.
+  dnl -t for typedefs (many ctags have this)
+  dnl -s for static functions (Elvis ctags only?)
+***************
+*** 3378,3384 ****
+  dnl -i+m to test for older Exuberant ctags
+  AC_MSG_CHECKING(how to create tags)
+  test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+--- 3378,3386 ----
+  dnl -i+m to test for older Exuberant ctags
+  AC_MSG_CHECKING(how to create tags)
+  test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+!   TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+*** ../vim-7.3.173/src/auto/configure  2011-02-09 17:42:53.000000000 +0100
+--- src/auto/configure 2011-05-05 17:19:26.000000000 +0200
+***************
+*** 12031,12037 ****
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+  $as_echo_n "checking how to create tags... " >&6; }
+  test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+--- 12031,12039 ----
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+  $as_echo_n "checking how to create tags... " >&6; }
+  test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+!   TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+*** ../vim-7.3.173/src/version.c       2011-05-05 17:14:07.000000000 +0200
+--- src/version.c      2011-05-05 17:19:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     174,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+54. You start tilting your head sideways to smile. :-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.175 b/7.3.175
new file mode 100644 (file)
index 0000000..57fbc4a
--- /dev/null
+++ b/7.3.175
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.175
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.175
+Problem:    When 'colorcolumn' is set locally to a window, ":new" opens a
+           window with the same highlighting but 'colorcolumn' is empty.
+           (Tyru)
+Solution:   Call check_colorcolumn() after clearing and copying options.
+           (Christian Brabandt)
+Files:     src/buffer.c
+
+
+*** ../vim-7.3.174/src/buffer.c        2011-04-11 16:56:29.000000000 +0200
+--- src/buffer.c       2011-05-05 17:28:24.000000000 +0200
+***************
+*** 2527,2532 ****
+--- 2527,2535 ----
+      if (p_fdls >= 0)
+       curwin->w_p_fdl = p_fdls;
+  #endif
++ #ifdef FEAT_SYN_HL
++     check_colorcolumn(curwin);
++ #endif
+  }
+  
+  /*
+*** ../vim-7.3.174/src/version.c       2011-05-05 17:23:58.000000000 +0200
+--- src/version.c      2011-05-05 17:30:32.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     175,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+55. You ask your doctor to implant a gig in your brain.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.176 b/7.3.176
new file mode 100644 (file)
index 0000000..fcf4880
--- /dev/null
+++ b/7.3.176
@@ -0,0 +1,165 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.176
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.176
+Problem:    Ruby linking doesn't work properly on Mac OS X.
+Solution:   Fix the configure check for Ruby. (Bjorn Winckler)
+Files:     src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.175/src/configure.in    2011-05-05 17:23:58.000000000 +0200
+--- src/configure.in   2011-05-05 18:03:38.000000000 +0200
+***************
+*** 1387,1396 ****
+  AC_MSG_RESULT($enable_rubyinterp)
+  if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+    AC_MSG_CHECKING(--with-ruby-command argument)
+    AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
+!      RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
+       RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
+-   AC_SUBST(vi_cv_path_ruby)
+    AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
+    if test "X$vi_cv_path_ruby" != "X"; then
+      AC_MSG_CHECKING(Ruby version)
+--- 1387,1396 ----
+  AC_MSG_RESULT($enable_rubyinterp)
+  if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+    AC_MSG_CHECKING(--with-ruby-command argument)
++   AC_SUBST(vi_cv_path_ruby)
+    AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
+!      RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
+       RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
+    AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
+    if test "X$vi_cv_path_ruby" != "X"; then
+      AC_MSG_CHECKING(Ruby version)
+***************
+*** 1412,1429 ****
+         RUBY_LIBS="$rubylibs"
+       fi
+       librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+!      if test -f "$rubyhdrdir/$librubyarg"; then
+!        librubyarg="$rubyhdrdir/$librubyarg"
+!      else
+!        rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+!        if test -f "$rubylibdir/$librubyarg"; then
+!          librubyarg="$rubylibdir/$librubyarg"
+!        elif test "$librubyarg" = "libruby.a"; then
+!          dnl required on Mac OS 10.3 where libruby.a doesn't exist
+!          librubyarg="-lruby"
+!        else
+!          librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+!        fi
+       fi
+  
+       if test "X$librubyarg" != "X"; then
+--- 1412,1426 ----
+         RUBY_LIBS="$rubylibs"
+       fi
+       librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+!      librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBY_A"]])'`
+!   rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+!      if test -f "$rubylibdir/$librubya"; then
+!        librubyarg="$librubyarg"
+!     RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+!   elif test "$librubyarg" = "libruby.a"; then
+!     dnl required on Mac OS 10.3 where libruby.a doesn't exist
+!     librubyarg="-lruby"
+!     RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+       fi
+  
+       if test "X$librubyarg" != "X"; then
+*** ../vim-7.3.175/src/auto/configure  2011-05-05 17:23:58.000000000 +0200
+--- src/auto/configure 2011-05-05 18:06:47.000000000 +0200
+***************
+*** 6218,6233 ****
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+  $as_echo_n "checking --with-ruby-command argument... " >&6; }
+  
+  # Check whether --with-ruby-command was given.
+  if test "${with_ruby_command+set}" = set; then :
+!   withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+  $as_echo "$RUBY_CMD" >&6; }
+  else
+    RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
+  $as_echo "defaulting to $RUBY_CMD" >&6; }
+  fi
+  
+- 
+    # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
+  set dummy $RUBY_CMD; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+--- 6218,6233 ----
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+  $as_echo_n "checking --with-ruby-command argument... " >&6; }
+  
++ 
+  # Check whether --with-ruby-command was given.
+  if test "${with_ruby_command+set}" = set; then :
+!   withval=$with_ruby_command; RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+  $as_echo "$RUBY_CMD" >&6; }
+  else
+    RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
+  $as_echo "defaulting to $RUBY_CMD" >&6; }
+  fi
+  
+    # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
+  set dummy $RUBY_CMD; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+***************
+*** 6292,6308 ****
+         RUBY_LIBS="$rubylibs"
+       fi
+       librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+!      if test -f "$rubyhdrdir/$librubyarg"; then
+!        librubyarg="$rubyhdrdir/$librubyarg"
+!      else
+!        rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+!        if test -f "$rubylibdir/$librubyarg"; then
+!          librubyarg="$rubylibdir/$librubyarg"
+!        elif test "$librubyarg" = "libruby.a"; then
+!                  librubyarg="-lruby"
+!        else
+!          librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+!        fi
+       fi
+  
+       if test "X$librubyarg" != "X"; then
+--- 6292,6305 ----
+         RUBY_LIBS="$rubylibs"
+       fi
+       librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+!      librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBY_A"])'`
+!   rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+!      if test -f "$rubylibdir/$librubya"; then
+!        librubyarg="$librubyarg"
+!     RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+!   elif test "$librubyarg" = "libruby.a"; then
+!         librubyarg="-lruby"
+!     RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+       fi
+  
+       if test "X$librubyarg" != "X"; then
+*** ../vim-7.3.175/src/version.c       2011-05-05 17:32:40.000000000 +0200
+--- src/version.c      2011-05-05 18:08:52.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     176,
+  /**/
+
+-- 
+"I simultaneously try to keep my head in the clouds and my feet on the
+ground.  Sometimes it's a stretch, though."              -- Larry Wall
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.177 b/7.3.177
new file mode 100644 (file)
index 0000000..895b3b1
--- /dev/null
+++ b/7.3.177
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.177
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.177
+Problem:    MS-Windows: mkdir() doesn't work properly when 'encoding' is
+           "utf-8".
+Solution:   Convert to utf-16. (Yukihiro Nakadaira)
+Files:     src/os_win32.c, src/os_win32.h, src/proto/os_win32.pro
+
+
+*** ../vim-7.3.176/src/os_win32.c      2011-05-05 16:41:19.000000000 +0200
+--- src/os_win32.c     2011-05-05 18:24:36.000000000 +0200
+***************
+*** 2640,2645 ****
+--- 2640,2669 ----
+  }
+  
+  /*
++  * Create directory "name".
++  * Return 0 on success, -1 on error.
++  */
++     int
++ mch_mkdir(char_u *name)
++ {
++ #ifdef FEAT_MBYTE
++     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++     {
++      WCHAR   *p;
++      int     retval;
++ 
++      p = enc_to_utf16(name, NULL);
++      if (p == NULL)
++          return -1;
++      retval = _wmkdir(p);
++      vim_free(p);
++      return retval;
++     }
++ #endif
++     return _mkdir(name);
++ }
++ 
++ /*
+   * Return TRUE if file "fname" has more than one link.
+   */
+      int
+*** ../vim-7.3.176/src/os_win32.h      2010-08-15 21:57:30.000000000 +0200
+--- src/os_win32.h     2011-05-05 18:25:44.000000000 +0200
+***************
+*** 191,195 ****
+  #ifdef __BORLANDC__
+  # define vim_mkdir(x, y) mkdir(x)
+  #else
+! # define vim_mkdir(x, y) _mkdir(x)
+  #endif
+--- 191,195 ----
+  #ifdef __BORLANDC__
+  # define vim_mkdir(x, y) mkdir(x)
+  #else
+! # define vim_mkdir(x, y) mch_mkdir(x)
+  #endif
+*** ../vim-7.3.176/src/proto/os_win32.pro      2011-05-05 16:41:19.000000000 +0200
+--- src/proto/os_win32.pro     2011-05-05 18:26:20.000000000 +0200
+***************
+*** 20,25 ****
+--- 20,26 ----
+  int mch_setperm __ARGS((char_u *name, long perm));
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
++ int mch_mkdir __ARGS((char_u *name));
+  int mch_is_linked __ARGS((char_u *fname));
+  int win32_fileinfo __ARGS((char_u *name, BY_HANDLE_FILE_INFORMATION *lpFileInfo));
+  int mch_writable __ARGS((char_u *name));
+*** ../vim-7.3.176/src/version.c       2011-05-05 18:10:11.000000000 +0200
+--- src/version.c      2011-05-05 18:27:56.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     177,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+56. You leave the modem speaker on after connecting because you think it
+    sounds like the ocean wind...the perfect soundtrack for "surfing the net".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.178 b/7.3.178
new file mode 100644 (file)
index 0000000..9b6ca7c
--- /dev/null
+++ b/7.3.178
@@ -0,0 +1,163 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.178
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.178
+Problem:    C-indent doesn't handle code right after { correctly.
+Solution:   Fix detecting unterminated line. (Lech Lorens)
+Files:      src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+    
+
+*** ../vim-7.3.177/src/misc1.c 2011-04-28 17:48:39.000000000 +0200
+--- src/misc1.c        2011-05-10 11:35:09.000000000 +0200
+***************
+*** 4983,4989 ****
+  }
+  
+  /*
+!  * Return TRUE if there there is no code at *s.  White space and comments are
+   * not considered code.
+   */
+      static int
+--- 4983,4989 ----
+  }
+  
+  /*
+!  * Return TRUE if there is no code at *s.  White space and comments are
+   * not considered code.
+   */
+      static int
+***************
+*** 5458,5465 ****
+  }
+  
+  /*
+!  * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+   * Don't consider "} else" a terminated line.
+   * Return the character terminating the line (ending char's have precedence if
+   * both apply in order to determine initializations).
+   */
+--- 5458,5468 ----
+  }
+  
+  /*
+!  * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+!  * '}'.
+   * Don't consider "} else" a terminated line.
++  * Don't consider a line where there are unmatched opening braces before '}',
++  * ';' or ',' a terminated line.
+   * Return the character terminating the line (ending char's have precedence if
+   * both apply in order to determine initializations).
+   */
+***************
+*** 5470,5475 ****
+--- 5473,5479 ----
+      int              incl_comma;     /* recognize a trailing comma */
+  {
+      char_u found_start = 0;
++     unsigned n_open = 0;
+  
+      s = cin_skipcomment(s);
+  
+***************
+*** 5480,5489 ****
+      {
+       /* skip over comments, "" strings and 'c'haracters */
+       s = skip_string(cin_skipcomment(s));
+!      if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
+!                                               || (incl_comma && *s == ','))
+               && cin_nocode(s + 1))
+           return *s;
+  
+       if (*s)
+           s++;
+--- 5484,5502 ----
+      {
+       /* skip over comments, "" strings and 'c'haracters */
+       s = skip_string(cin_skipcomment(s));
+!      if (*s == '}' && n_open > 0)
+!          --n_open;
+!      if (n_open == 0
+!              && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+               && cin_nocode(s + 1))
+           return *s;
++      else if (*s == '{')
++      {
++          if (incl_open && cin_nocode(s + 1))
++              return *s;
++          else
++              ++n_open;
++      }
+  
+       if (*s)
+           s++;
+*** ../vim-7.3.177/src/testdir/test3.in        2011-04-28 13:01:59.000000000 +0200
+--- src/testdir/test3.in       2011-05-10 11:34:13.000000000 +0200
+***************
+*** 1344,1349 ****
+--- 1344,1365 ----
+  }
+  
+  STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++ 
++ void func(void)
++ {
++      if(x==y)
++              if(y==z)
++                      foo=1;
++              else { bar=1;
++                      baz=2;
++              }
++      printf("Foo!\n");
++ }
++ 
++ STARTTEST
+  :g/^STARTTEST/.,/^ENDTEST/d
+  :1;/start of AUTO/,$wq! test.out
+  ENDTEST
+*** ../vim-7.3.177/src/testdir/test3.ok        2011-04-28 13:01:59.000000000 +0200
+--- src/testdir/test3.ok       2011-05-10 11:34:13.000000000 +0200
+***************
+*** 1204,1206 ****
+--- 1204,1218 ----
+  {
+  }
+  
++ 
++ void func(void)
++ {
++      if(x==y)
++              if(y==z)
++                      foo=1;
++              else { bar=1;
++                      baz=2;
++              }
++      printf("Foo!\n");
++ }
++ 
+*** ../vim-7.3.177/src/version.c       2011-05-05 18:31:54.000000000 +0200
+--- src/version.c      2011-05-10 11:37:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     178,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+69. Yahoo welcomes you with your own start page
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.179 b/7.3.179
new file mode 100644 (file)
index 0000000..f175b26
--- /dev/null
+++ b/7.3.179
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.179
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.179
+Problem:    C-indent doesn't handle colon in string correctly.
+Solution:   Skip the string. (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.178/src/misc1.c 2011-05-10 11:39:13.000000000 +0200
+--- src/misc1.c        2011-05-10 11:50:14.000000000 +0200
+***************
+*** 5801,5807 ****
+               continue;
+       }
+  
+!      if (s[0] == ':')
+       {
+           if (s[1] == ':')
+           {
+--- 5801,5809 ----
+               continue;
+       }
+  
+!      if (s[0] == '"')
+!          s = skip_string(s) + 1;
+!      else if (s[0] == ':')
+       {
+           if (s[1] == ':')
+           {
+*** ../vim-7.3.178/src/testdir/test3.in        2011-05-10 11:39:13.000000000 +0200
+--- src/testdir/test3.in       2011-05-10 11:53:02.000000000 +0200
+***************
+*** 1360,1365 ****
+--- 1360,1378 ----
+  }
+  
+  STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++ 
++ void func(void)
++ {
++      cout << "a"
++      << "b"
++      << ") :"
++      << "c";
++ }
++ 
++ STARTTEST
+  :g/^STARTTEST/.,/^ENDTEST/d
+  :1;/start of AUTO/,$wq! test.out
+  ENDTEST
+*** ../vim-7.3.178/src/testdir/test3.ok        2011-05-10 11:39:13.000000000 +0200
+--- src/testdir/test3.ok       2011-05-10 11:50:14.000000000 +0200
+***************
+*** 1216,1218 ****
+--- 1216,1227 ----
+       printf("Foo!\n");
+  }
+  
++ 
++ void func(void)
++ {
++      cout << "a"
++              << "b"
++              << ") :"
++              << "c";
++ }
++ 
+*** ../vim-7.3.178/src/version.c       2011-05-10 11:39:13.000000000 +0200
+--- src/version.c      2011-05-10 11:53:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     179,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+71. You wonder how people walk
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.180 b/7.3.180
new file mode 100644 (file)
index 0000000..5997bfb
--- /dev/null
+++ b/7.3.180
@@ -0,0 +1,295 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.180
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.180
+Problem:    When both a middle part of 'comments' matches and an end part, the
+           middle part was used errornously.
+Solution:   After finding the middle part match continue looking for a better
+           end part match. (partly by Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.179/src/misc1.c 2011-05-10 11:56:26.000000000 +0200
+--- src/misc1.c        2011-05-10 13:24:38.000000000 +0200
+***************
+*** 1561,1566 ****
+--- 1561,1569 ----
+      char_u   part_buf[COM_MAX_LEN];  /* buffer for one option part */
+      char_u   *string;                /* pointer to comment string */
+      char_u   *list;
++     int              middle_match_len = 0;
++     char_u   *prev_list;
++     char_u   *saved_flags;
+  
+      i = 0;
+      while (vim_iswhite(line[i]))    /* leading white space is ignored */
+***************
+*** 1569,1575 ****
+      /*
+       * Repeat to match several nested comment strings.
+       */
+!     while (line[i])
+      {
+       /*
+        * scan through the 'comments' option for a match
+--- 1572,1578 ----
+      /*
+       * Repeat to match several nested comment strings.
+       */
+!     while (line[i] != NUL)
+      {
+       /*
+        * scan through the 'comments' option for a match
+***************
+*** 1577,1658 ****
+       found_one = FALSE;
+       for (list = curbuf->b_p_com; *list; )
+       {
+!          /*
+!           * Get one option part into part_buf[].  Advance list to next one.
+!           * put string at start of string.
+!           */
+!          if (!got_com && flags != NULL)  /* remember where flags started */
+!              *flags = list;
+           (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+           string = vim_strchr(part_buf, ':');
+           if (string == NULL)     /* missing ':', ignore this part */
+               continue;
+           *string++ = NUL;        /* isolate flags from string */
+  
+!          /*
+!           * When already found a nested comment, only accept further
+!           * nested comments.
+!           */
+           if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+               continue;
+  
+!          /* When 'O' flag used don't use for "O" command */
+           if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+               continue;
+  
+!          /*
+!           * Line contents and string must match.
+            * When string starts with white space, must have some white space
+            * (but the amount does not need to match, there might be a mix of
+!           * TABs and spaces).
+!           */
+           if (vim_iswhite(string[0]))
+           {
+               if (i == 0 || !vim_iswhite(line[i - 1]))
+!                  continue;
+               while (vim_iswhite(string[0]))
+                   ++string;
+           }
+           for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+               ;
+           if (string[j] != NUL)
+!              continue;
+  
+!          /*
+!           * When 'b' flag used, there must be white space or an
+!           * end-of-line after the string in the line.
+!           */
+           if (vim_strchr(part_buf, COM_BLANK) != NULL
+                          && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+               continue;
+  
+!          /*
+!           * We have found a match, stop searching.
+!           */
+!          i += j;
+!          got_com = TRUE;
+           found_one = TRUE;
+           break;
+       }
+  
+!      /*
+!       * No match found, stop scanning.
+!       */
+       if (!found_one)
+           break;
+  
+!      /*
+!       * Include any trailing white space.
+!       */
+       while (vim_iswhite(line[i]))
+           ++i;
+  
+!      /*
+!       * If this comment doesn't nest, stop here.
+!       */
+       if (vim_strchr(part_buf, COM_NEST) == NULL)
+           break;
+      }
+      return (got_com ? i : 0);
+  }
+  #endif
+--- 1580,1683 ----
+       found_one = FALSE;
+       for (list = curbuf->b_p_com; *list; )
+       {
+!          /* Get one option part into part_buf[].  Advance "list" to next
+!           * one.  Put "string" at start of string.  */
+!          if (!got_com && flags != NULL)
+!              *flags = list;      /* remember where flags started */
+!          prev_list = list;
+           (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+           string = vim_strchr(part_buf, ':');
+           if (string == NULL)     /* missing ':', ignore this part */
+               continue;
+           *string++ = NUL;        /* isolate flags from string */
+  
+!          /* If we found a middle match previously, use that match when this
+!           * is not a middle or end. */
+!          if (middle_match_len != 0
+!                  && vim_strchr(part_buf, COM_MIDDLE) == NULL
+!                  && vim_strchr(part_buf, COM_END) == NULL)
+!              break;
+! 
+!          /* When we already found a nested comment, only accept further
+!           * nested comments. */
+           if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+               continue;
+  
+!          /* When 'O' flag present and using "O" command skip this one. */
+           if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+               continue;
+  
+!          /* Line contents and string must match.
+            * When string starts with white space, must have some white space
+            * (but the amount does not need to match, there might be a mix of
+!           * TABs and spaces). */
+           if (vim_iswhite(string[0]))
+           {
+               if (i == 0 || !vim_iswhite(line[i - 1]))
+!                  continue;  /* missing shite space */
+               while (vim_iswhite(string[0]))
+                   ++string;
+           }
+           for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+               ;
+           if (string[j] != NUL)
+!              continue;  /* string doesn't match */
+  
+!          /* When 'b' flag used, there must be white space or an
+!           * end-of-line after the string in the line. */
+           if (vim_strchr(part_buf, COM_BLANK) != NULL
+                          && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+               continue;
+  
+!          /* We have found a match, stop searching unless this is a middle
+!           * comment. The middle comment can be a substring of the end
+!           * comment in which case it's better to return the length of the
+!           * end comment and its flags.  Thus we keep searching with middle
+!           * and end matches and use an end match if it matches better. */
+!          if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
+!          {
+!              if (middle_match_len == 0)
+!              {
+!                  middle_match_len = j;
+!                  saved_flags = prev_list;
+!              }
+!              continue;
+!          }
+!          if (middle_match_len != 0 && j > middle_match_len)
+!              /* Use this match instead of the middle match, since it's a
+!               * longer thus better match. */
+!              middle_match_len = 0;
+! 
+!          if (middle_match_len == 0)
+!              i += j;
+           found_one = TRUE;
+           break;
+       }
+  
+!      if (middle_match_len != 0)
+!      {
+!          /* Use the previously found middle match after failing to find a
+!           * match with an end. */
+!          if (!got_com && flags != NULL)
+!              *flags = saved_flags;
+!          i += middle_match_len;
+!          found_one = TRUE;
+!      }
+! 
+!      /* No match found, stop scanning. */
+       if (!found_one)
+           break;
+  
+!      /* Include any trailing white space. */
+       while (vim_iswhite(line[i]))
+           ++i;
+  
+!      /* If this comment doesn't nest, stop here. */
+!      got_com = TRUE;
+       if (vim_strchr(part_buf, COM_NEST) == NULL)
+           break;
+      }
++ 
+      return (got_com ? i : 0);
+  }
+  #endif
+*** ../vim-7.3.179/src/testdir/test3.in        2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.in       2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1373,1378 ****
+--- 1373,1390 ----
+  }
+  
+  STARTTEST
++ :set com=s1:/*,m:*,ex:*/
++ ]]3jofoo();\e
++ ENDTEST
++ 
++ void func(void)
++ {
++      /*
++       * This is a comment.
++       */
++ }
++ 
++ STARTTEST
+  :g/^STARTTEST/.,/^ENDTEST/d
+  :1;/start of AUTO/,$wq! test.out
+  ENDTEST
+*** ../vim-7.3.179/src/testdir/test3.ok        2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.ok       2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1225,1227 ****
+--- 1225,1236 ----
+               << "c";
+  }
+  
++ 
++ void func(void)
++ {
++      /*
++       * This is a comment.
++       */
++      foo();
++ }
++ 
+*** ../vim-7.3.179/src/version.c       2011-05-10 11:56:26.000000000 +0200
+--- src/version.c      2011-05-10 13:37:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     180,
+  /**/
+
+-- 
+"Thou shalt not follow the Null Pointer, for at its end Chaos and
+Madness lie."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.181 b/7.3.181
new file mode 100644 (file)
index 0000000..3151d44
--- /dev/null
+++ b/7.3.181
@@ -0,0 +1,171 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.181
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.181
+Problem:    When repeating the insert of CTRL-V or a digraph the display may
+           not be updated correctly.
+Solution:   Only call edit_unputchar() after edit_putchar(). (Lech Lorens)
+Files:     src/edit.c
+
+
+*** ../vim-7.3.180/src/edit.c  2010-11-10 17:11:29.000000000 +0100
+--- src/edit.c 2011-05-10 14:16:41.000000000 +0200
+***************
+*** 1553,1564 ****
+--- 1553,1568 ----
+  ins_ctrl_v()
+  {
+      int              c;
++     int              did_putchar = FALSE;
+  
+      /* may need to redraw when no more chars available now */
+      ins_redraw(FALSE);
+  
+      if (redrawing() && !char_avail())
++     {
+       edit_putchar('^', TRUE);
++      did_putchar = TRUE;
++     }
+      AppendToRedobuff((char_u *)CTRL_V_STR);  /* CTRL-V */
+  
+  #ifdef FEAT_CMDL_INFO
+***************
+*** 1566,1573 ****
+  #endif
+  
+      c = get_literal();
+!     edit_unputchar();  /* when line fits in 'columns' the '^' is at the start
+!                        of the next line and will not be redrawn */
+  #ifdef FEAT_CMDL_INFO
+      clear_showcmd();
+  #endif
+--- 1570,1579 ----
+  #endif
+  
+      c = get_literal();
+!     if (did_putchar)
+!      /* when the line fits in 'columns' the '^' is at the start of the next
+!       * line and will not removed by the redraw */
+!      edit_unputchar();
+  #ifdef FEAT_CMDL_INFO
+      clear_showcmd();
+  #endif
+***************
+*** 9637,9642 ****
+--- 9643,9649 ----
+  {
+      int          c;
+      int          cc;
++     int          did_putchar = FALSE;
+  
+      pc_status = PC_STATUS_UNSET;
+      if (redrawing() && !char_avail())
+***************
+*** 9645,9650 ****
+--- 9652,9658 ----
+       ins_redraw(FALSE);
+  
+       edit_putchar('?', TRUE);
++      did_putchar = TRUE;
+  #ifdef FEAT_CMDL_INFO
+       add_to_showcmd_c(Ctrl_K);
+  #endif
+***************
+*** 9661,9668 ****
+      c = plain_vgetc();
+      --no_mapping;
+      --allow_keys;
+!     edit_unputchar();  /* when line fits in 'columns' the '?' is at the start
+!                        of the next line and will not be redrawn */
+  
+      if (IS_SPECIAL(c) || mod_mask)       /* special key */
+      {
+--- 9669,9678 ----
+      c = plain_vgetc();
+      --no_mapping;
+      --allow_keys;
+!     if (did_putchar)
+!      /* when the line fits in 'columns' the '?' is at the start of the next
+!       * line and will not be removed by the redraw */
+!      edit_unputchar();
+  
+      if (IS_SPECIAL(c) || mod_mask)       /* special key */
+      {
+***************
+*** 9674,9679 ****
+--- 9684,9690 ----
+      }
+      if (c != ESC)
+      {
++      did_putchar = FALSE;
+       if (redrawing() && !char_avail())
+       {
+           /* may need to redraw when no more chars available now */
+***************
+*** 9681,9691 ****
+  
+           if (char2cells(c) == 1)
+           {
+-              /* first remove the '?', otherwise it's restored when typing
+-               * an ESC next */
+-              edit_unputchar();
+               ins_redraw(FALSE);
+               edit_putchar(c, TRUE);
+           }
+  #ifdef FEAT_CMDL_INFO
+           add_to_showcmd_c(c);
+--- 9692,9700 ----
+  
+           if (char2cells(c) == 1)
+           {
+               ins_redraw(FALSE);
+               edit_putchar(c, TRUE);
++              did_putchar = TRUE;
+           }
+  #ifdef FEAT_CMDL_INFO
+           add_to_showcmd_c(c);
+***************
+*** 9696,9703 ****
+       cc = plain_vgetc();
+       --no_mapping;
+       --allow_keys;
+!      edit_unputchar();  /* when line fits in 'columns' the '?' is at the
+!                            start of the next line and will not be redrawn */
+       if (cc != ESC)
+       {
+           AppendToRedobuff((char_u *)CTRL_V_STR);
+--- 9705,9714 ----
+       cc = plain_vgetc();
+       --no_mapping;
+       --allow_keys;
+!      if (did_putchar)
+!          /* when the line fits in 'columns' the '?' is at the start of the
+!           * next line and will not be removed by a redraw */
+!          edit_unputchar();
+       if (cc != ESC)
+       {
+           AppendToRedobuff((char_u *)CTRL_V_STR);
+*** ../vim-7.3.180/src/version.c       2011-05-10 13:38:23.000000000 +0200
+--- src/version.c      2011-05-10 14:20:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     181,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+74. Your most erotic dreams are about cybersex
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.182 b/7.3.182
new file mode 100644 (file)
index 0000000..509b68b
--- /dev/null
+++ b/7.3.182
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.182
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.182 (after 7.3.180)
+Problem:    Compiler warning for uninitialized variable.
+Solution:   Add dummy initializer.
+Files:     src/misc1.c
+
+
+*** ../vim-7.3.181/src/misc1.c 2011-05-10 13:38:23.000000000 +0200
+--- src/misc1.c        2011-05-10 14:37:39.000000000 +0200
+***************
+*** 1563,1569 ****
+      char_u   *list;
+      int              middle_match_len = 0;
+      char_u   *prev_list;
+!     char_u   *saved_flags;
+  
+      i = 0;
+      while (vim_iswhite(line[i]))    /* leading white space is ignored */
+--- 1563,1569 ----
+      char_u   *list;
+      int              middle_match_len = 0;
+      char_u   *prev_list;
+!     char_u   *saved_flags = NULL;
+  
+      i = 0;
+      while (vim_iswhite(line[i]))    /* leading white space is ignored */
+*** ../vim-7.3.181/src/version.c       2011-05-10 14:22:10.000000000 +0200
+--- src/version.c      2011-05-10 14:38:39.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     182,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+75. You start wondering whether you could actually upgrade your brain
+    with a Pentium Pro microprocessor 80.  The upgrade works just fine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.183 b/7.3.183
new file mode 100644 (file)
index 0000000..23178c0
--- /dev/null
+++ b/7.3.183
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.183
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.183 (after 7.3.174)
+Problem:    When Exuberant ctags binary is exuberant-ctags it's not found.
+Solution:   Add configure check for exuberant-ctags.
+Files:     src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.182/src/configure.in    2011-05-05 18:10:11.000000000 +0200
+--- src/configure.in   2011-05-10 15:39:38.000000000 +0200
+***************
+*** 3375,3384 ****
+  dnl -i+m to test for older Exuberant ctags
+  AC_MSG_CHECKING(how to create tags)
+  test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+!   TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+    (eval etags           /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
+--- 3375,3386 ----
+  dnl -i+m to test for older Exuberant ctags
+  AC_MSG_CHECKING(how to create tags)
+  test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
++ elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++   TAGPRG="exctags -I INIT+ --fields=+S"
++ elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++   TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+    (eval etags           /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
+*** ../vim-7.3.182/src/auto/configure  2011-05-05 18:10:11.000000000 +0200
+--- src/auto/configure 2011-05-10 15:39:41.000000000 +0200
+***************
+*** 12028,12037 ****
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+  $as_echo_n "checking how to create tags... " >&6; }
+  test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+!   TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+    (eval etags           /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
+--- 12028,12039 ----
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+  $as_echo_n "checking how to create tags... " >&6; }
+  test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+    TAGPRG="ctags -I INIT+ --fields=+S"
++ elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++   TAGPRG="exctags -I INIT+ --fields=+S"
++ elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++   TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+  else
+    TAGPRG="ctags"
+    (eval etags           /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
+*** ../vim-7.3.182/src/version.c       2011-05-10 14:44:07.000000000 +0200
+--- src/version.c      2011-05-10 15:40:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     183,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+78. You find yourself dialing IP numbers on the phone.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.184 b/7.3.184
new file mode 100644 (file)
index 0000000..3b0cfc6
--- /dev/null
+++ b/7.3.184
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.184
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.184
+Problem:    Static code analysis errors in riscOS.
+Solution:   Make buffer size bigger. (Dominique Pelle)
+Files:     src/gui_riscos.c
+
+
+*** ../vim-7.3.183/src/gui_riscos.c    2010-08-15 21:57:28.000000000 +0200
+--- src/gui_riscos.c   2011-05-10 15:49:56.000000000 +0200
+***************
+*** 1756,1762 ****
+  
+       if (button & 0x444)
+       {
+!          int     front_block[10];
+           /* Dragging with Select - bring window to front first */
+           front_block[0] = gui.window_handle;
+           swi(Wimp_GetWindowState, 0, front_block);
+--- 1756,1762 ----
+  
+       if (button & 0x444)
+       {
+!          int     front_block[64];
+           /* Dragging with Select - bring window to front first */
+           front_block[0] = gui.window_handle;
+           swi(Wimp_GetWindowState, 0, front_block);
+***************
+*** 1874,1880 ****
+  
+      if (ro_dragging == DRAG_RESIZE_WINDOW)
+      {
+!      /* Resizeing the main window. */
+       block[2] = y;
+       block[3] = x;
+       ro_open_main(block);
+--- 1874,1880 ----
+  
+      if (ro_dragging == DRAG_RESIZE_WINDOW)
+      {
+!      /* Resizing the main window. */
+       block[2] = y;
+       block[3] = x;
+       ro_open_main(block);
+***************
+*** 2651,2657 ****
+      long_u   length;
+  
+      block[0] = 48;                   /* Size of block. */
+!     block[3] = 0;                    /* Orinial message. */
+      block[4] = 0x10;                 /* Data request. */
+      block[5] = gui.window_handle;
+      block[6] = RO_LOAD_CLIPBOARD;    /* Internal handle. */
+--- 2651,2657 ----
+      long_u   length;
+  
+      block[0] = 48;                   /* Size of block. */
+!     block[3] = 0;                    /* Original message. */
+      block[4] = 0x10;                 /* Data request. */
+      block[5] = gui.window_handle;
+      block[6] = RO_LOAD_CLIPBOARD;    /* Internal handle. */
+*** ../vim-7.3.183/src/version.c       2011-05-10 15:41:59.000000000 +0200
+--- src/version.c      2011-05-10 15:51:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     184,
+  /**/
+
+-- 
+If bankers can count, how come they have eight windows and
+only four tellers?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.185 b/7.3.185
new file mode 100644 (file)
index 0000000..7b3ed18
--- /dev/null
+++ b/7.3.185
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.185
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.185
+Problem:    ":windo g/pattern/q" closes windows and reports "N more lines".
+           (Tim Chase)
+Solution:   Remember what buffer ":global" started in. (Jean-Rene David)
+Files:     src/ex_cmds.c
+
+
+*** ../vim-7.3.184/src/ex_cmds.c       2011-04-11 21:35:03.000000000 +0200
+--- src/ex_cmds.c      2011-05-10 15:58:48.000000000 +0200
+***************
+*** 5365,5372 ****
+  global_exe(cmd)
+      char_u   *cmd;
+  {
+!     linenr_T old_lcount;     /* b_ml.ml_line_count before the command */
+!     linenr_T lnum;           /* line number according to old situation */
+  
+      /*
+       * Set current position only once for a global command.
+--- 5365,5373 ----
+  global_exe(cmd)
+      char_u   *cmd;
+  {
+!     linenr_T old_lcount;     /* b_ml.ml_line_count before the command */
+!     buf_T    *old_buf = curbuf;      /* remember what buffer we started in */
+!     linenr_T lnum;           /* line number according to old situation */
+  
+      /*
+       * Set current position only once for a global command.
+***************
+*** 5410,5417 ****
+       msg_didout = FALSE;
+  
+      /* If substitutes done, report number of substitutes, otherwise report
+!      * number of extra or deleted lines. */
+!     if (!do_sub_msg(FALSE))
+       msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+  }
+  
+--- 5411,5420 ----
+       msg_didout = FALSE;
+  
+      /* If substitutes done, report number of substitutes, otherwise report
+!      * number of extra or deleted lines.
+!      * Don't report extra or deleted lines in the edge case where the buffer
+!      * we are in after execution is different from the buffer we started in. */
+!     if (!do_sub_msg(FALSE) && curbuf == old_buf)
+       msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+  }
+  
+*** ../vim-7.3.184/src/version.c       2011-05-10 15:52:10.000000000 +0200
+--- src/version.c      2011-05-10 15:57:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     185,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+79. All of your most erotic dreams have a scrollbar at the right side.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.186 b/7.3.186
new file mode 100644 (file)
index 0000000..d834c37
--- /dev/null
+++ b/7.3.186
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.186
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.186
+Problem:    When 'clipboard' contains "unnamed" or "unnamedplus" the value of
+           v:register is wrong for operators without a specific register.
+Solution:   Adjust the register according to 'clipboard'. (Ingo Karkat)
+Files:     src/normal.c
+
+
+*** ../vim-7.3.185/src/normal.c        2010-12-17 18:52:56.000000000 +0100
+--- src/normal.c       2011-05-10 16:07:49.000000000 +0200
+***************
+*** 1202,1208 ****
+      {
+       clearop(oap);
+  #ifdef FEAT_EVAL
+!      set_reg_var('"');
+  #endif
+      }
+  
+--- 1202,1214 ----
+      {
+       clearop(oap);
+  #ifdef FEAT_EVAL
+!      {
+!          int regname = 0;
+!          /* Adjust the register according to 'clipboard', so that when
+!           * "unnamed" is present it becomes '*' or '+' instead of '"'. */
+!          adjust_clip_reg(&regname);
+!          set_reg_var(regname);
+!      }
+  #endif
+      }
+  
+*** ../vim-7.3.185/src/version.c       2011-05-10 16:00:43.000000000 +0200
+--- src/version.c      2011-05-10 16:10:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     186,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.187 b/7.3.187
new file mode 100644 (file)
index 0000000..7bf82ce
--- /dev/null
+++ b/7.3.187
@@ -0,0 +1,6621 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.187
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.187
+Problem:    The RISC OS port has obvious errors and is not being maintained.
+Solution:   Remove the RISC OS files and code.
+Files:     src/ascii.h, src/eval.c, src/ex_cmds.c, src/ex_cmds2.c,
+           src/ex_docmd.c, src/fileio.c, src/globals.h, src/gui.c, src/gui.h,
+           src/main.c, src/memfile.c, src/memline.c, src/misc1.c,
+           src/proto.h, src/quickfix.c, src/search.c, src/structs.h,
+           src/term.c, src/termlib.c, src/version.c, src/vim.h,
+           src/gui_riscos.h, src/os_riscos.h, src/gui_riscos.c,
+           src/os_riscos.c, runtime/doc/os_risc.txt
+
+
+*** ../vim-7.3.186/src/ascii.h 2010-08-15 21:57:25.000000000 +0200
+--- src/ascii.h        2011-05-10 16:22:08.000000000 +0200
+***************
+*** 183,193 ****
+  # define PATHSEP     psepc
+  # define PATHSEPSTR  pseps
+  #else
+! # ifdef RISCOS
+! #  define PATHSEP    '.'
+! #  define PATHSEPSTR "."
+! # else
+! #  define PATHSEP    '/'
+! #  define PATHSEPSTR "/"
+! # endif
+  #endif
+--- 183,188 ----
+  # define PATHSEP     psepc
+  # define PATHSEPSTR  pseps
+  #else
+! # define PATHSEP     '/'
+! # define PATHSEPSTR  "/"
+  #endif
+*** ../vim-7.3.186/src/eval.c  2011-04-21 14:27:21.000000000 +0200
+--- src/eval.c 2011-05-10 16:22:21.000000000 +0200
+***************
+*** 11818,11826 ****
+  #ifdef __QNX__
+       "qnx",
+  #endif
+- #ifdef RISCOS
+-      "riscos",
+- #endif
+  #ifdef UNIX
+       "unix",
+  #endif
+--- 11818,11823 ----
+*** ../vim-7.3.186/src/ex_cmds.c       2011-05-10 16:00:43.000000000 +0200
+--- src/ex_cmds.c      2011-05-10 16:23:22.000000000 +0200
+***************
+*** 899,907 ****
+   * Handle the ":!cmd" command.       Also for ":r !cmd" and ":w !cmd"
+   * Bangs in the argument are replaced with the previously entered command.
+   * Remember the argument.
+-  *
+-  * RISCOS: Bangs only replaced when followed by a space, since many
+-  * pathnames contain one.
+   */
+      void
+  do_bang(addr_count, eap, forceit, do_in, do_out)
+--- 899,904 ----
+***************
+*** 980,990 ****
+       trailarg = NULL;
+       while (*p)
+       {
+!          if (*p == '!'
+! #ifdef RISCOS
+!                      && (p[1] == ' ' || p[1] == NUL)
+! #endif
+!                                      )
+           {
+               if (p > newcmd && p[-1] == '\\')
+                   STRMOVE(p - 1, p);
+--- 977,983 ----
+       trailarg = NULL;
+       while (*p)
+       {
+!          if (*p == '!')
+           {
+               if (p > newcmd && p[-1] == '\\')
+                   STRMOVE(p - 1, p);
+***************
+*** 1578,1591 ****
+           if (p != NULL)
+               *p = NUL;
+       }
+- # ifdef RISCOS
+-      STRCAT(buf, " { < ");   /* Use RISC OS notation for input. */
+-      STRCAT(buf, itmp);
+-      STRCAT(buf, " } ");
+- # else
+       STRCAT(buf, " <");      /* " < " causes problems on Amiga */
+       STRCAT(buf, itmp);
+- # endif
+       if (*p_shq == NUL)
+       {
+           p = vim_strchr(cmd, '|');
+--- 1571,1578 ----
+***************
+*** 1634,1649 ****
+      else
+       vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
+  #ifdef FEAT_QUICKFIX
+- # ifndef RISCOS
+-              opt != p_sp ? " %s%s" :
+- # endif
+               " %s %s",
+  #else
+- # ifndef RISCOS
+               " %s%s",        /* " > %s" causes problems on Amiga */
+- # else
+-              " %s %s",       /* But is needed for 'shellpipe' and RISC OS */
+- # endif
+  #endif
+               (char *)opt, (char *)fname);
+  }
+--- 1621,1629 ----
+***************
+*** 1844,1854 ****
+  #ifdef VMS
+                                   (char_u *)"-tmp",
+  #else
+- # ifdef RISCOS
+-                                  (char_u *)"/tmp",
+- # else
+                                   (char_u *)".tmp",
+- # endif
+  #endif
+                                   FALSE);
+           if (tempname == NULL)               /* out of memory */
+--- 1824,1830 ----
+*** ../vim-7.3.186/src/ex_cmds2.c      2011-04-11 21:35:03.000000000 +0200
+--- src/ex_cmds2.c     2011-05-10 16:23:47.000000000 +0200
+***************
+*** 500,517 ****
+       /* Expand the file name in the same way as do_source().  This means
+        * doing it twice, so that $DIR/file gets expanded when $DIR is
+        * "~/dir". */
+- #ifdef RISCOS
+-      q = mch_munge_fname(p);
+- #else
+       q = expand_env_save(p);
+- #endif
+       if (q == NULL)
+           return FAIL;
+- #ifdef RISCOS
+-      p = mch_munge_fname(q);
+- #else
+       p = expand_env_save(q);
+- #endif
+       vim_free(q);
+       if (p == NULL)
+           return FAIL;
+--- 500,509 ----
+***************
+*** 2940,2950 ****
+      proftime_T                   wait_start;
+  #endif
+  
+- #ifdef RISCOS
+-     p = mch_munge_fname(fname);
+- #else
+      p = expand_env_save(fname);
+- #endif
+      if (p == NULL)
+       return retval;
+      fname_exp = fix_fname(p);
+--- 2932,2938 ----
+*** ../vim-7.3.186/src/ex_docmd.c      2011-05-05 14:26:37.000000000 +0200
+--- src/ex_docmd.c     2011-05-10 16:24:18.000000000 +0200
+***************
+*** 9702,9715 ****
+                   valid = 0;      /* Must have ":p:h" to be valid */
+               }
+               else
+- #ifdef RISCOS
+-                  /* Always use the full path for RISC OS if possible. */
+-                  result = curbuf->b_ffname;
+-                  if (result == NULL)
+-                      result = curbuf->b_fname;
+- #else
+                   result = curbuf->b_fname;
+- #endif
+               break;
+  
+       case SPEC_HASH:         /* '#' or "#99": alternate file */
+--- 9702,9708 ----
+***************
+*** 9854,9864 ****
+       if (src[*usedlen] == '<')       /* remove the file name extension */
+       {
+           ++*usedlen;
+- #ifdef RISCOS
+-          if ((s = vim_strrchr(result, '/')) != NULL && s >= gettail(result))
+- #else
+           if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
+- #endif
+               resultlen = (int)(s - result);
+       }
+  #ifdef FEAT_MODIFY_FNAME
+--- 9847,9853 ----
+***************
+*** 10875,10882 ****
+           else if (vim_ispathsep(*p))
+           {
+               *s++ = '=';
+! #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(RISCOS) \
+!      || defined(VMS)
+               if (*p == ':')
+                   *s++ = '-';
+               else
+--- 10864,10870 ----
+           else if (vim_ispathsep(*p))
+           {
+               *s++ = '=';
+! #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
+               if (*p == ':')
+                   *s++ = '-';
+               else
+*** ../vim-7.3.186/src/fileio.c        2011-05-05 16:41:19.000000000 +0200
+--- src/fileio.c       2011-05-10 16:26:06.000000000 +0200
+***************
+*** 504,521 ****
+  
+      if (newfile && !read_stdin && !read_buffer)
+      {
+!      /* Remember time of file.
+!       * For RISCOS, also remember the filetype.
+!       */
+       if (mch_stat((char *)fname, &st) >= 0)
+       {
+           buf_store_time(curbuf, &st, fname);
+           curbuf->b_mtime_read = curbuf->b_mtime;
+- 
+- #if defined(RISCOS) && defined(FEAT_OSFILETYPE)
+-          /* Read the filetype into the buffer local filetype option. */
+-          mch_read_filetype(fname);
+- #endif
+  #ifdef UNIX
+           /*
+            * Use the protection bits of the original file for the swap file.
+--- 504,514 ----
+  
+      if (newfile && !read_stdin && !read_buffer)
+      {
+!      /* Remember time of file. */
+       if (mch_stat((char *)fname, &st) >= 0)
+       {
+           buf_store_time(curbuf, &st, fname);
+           curbuf->b_mtime_read = curbuf->b_mtime;
+  #ifdef UNIX
+           /*
+            * Use the protection bits of the original file for the swap file.
+***************
+*** 557,563 ****
+  
+  /*
+   * for UNIX: check readonly with perm and mch_access()
+-  * for RISCOS: same as Unix, otherwise file gets re-datestamped!
+   * for MSDOS and Amiga: check readonly by trying to open the file for writing
+   */
+      file_readonly = FALSE;
+--- 550,555 ----
+***************
+*** 3804,3816 ****
+  
+       /* make sure we have a valid backup extension to use */
+       if (*p_bex == NUL)
+-      {
+- #ifdef RISCOS
+-          backup_ext = (char_u *)"/bak";
+- #else
+           backup_ext = (char_u *)".bak";
+- #endif
+-      }
+       else
+           backup_ext = p_bex;
+  
+--- 3796,3802 ----
+***************
+*** 4724,4734 ****
+  #endif
+      if (perm >= 0)           /* set perm. of new file same as old file */
+       (void)mch_setperm(wfname, perm);
+- #ifdef RISCOS
+-     if (!append && !filtering)
+-      /* Set the filetype after writing the file. */
+-      mch_set_filetype(wfname, buf->b_p_oft);
+- #endif
+  #ifdef HAVE_ACL
+      /* Probably need to set the ACL before changing the user (can't set the
+       * ACL on a file the user doesn't own). */
+--- 4710,4715 ----
+***************
+*** 6262,6280 ****
+       */
+      for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+      {
+- #ifndef RISCOS
+       if (*ext == '.'
+! # ifdef USE_LONG_FNAME
+                   && (!USE_LONG_FNAME || shortname)
+! # else
+! #  ifndef SHORT_FNAME
+                   && shortname
+- #  endif
+  # endif
+                                                               )
+           if (*ptr == '.')    /* replace '.' by '_' */
+               *ptr = '_';
+- #endif
+       if (vim_ispathsep(*ptr))
+       {
+           ++ptr;
+--- 6243,6259 ----
+       */
+      for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+      {
+       if (*ext == '.'
+! #ifdef USE_LONG_FNAME
+                   && (!USE_LONG_FNAME || shortname)
+! #else
+! # ifndef SHORT_FNAME
+                   && shortname
+  # endif
++ #endif
+                                                               )
+           if (*ptr == '.')    /* replace '.' by '_' */
+               *ptr = '_';
+       if (vim_ispathsep(*ptr))
+       {
+           ++ptr;
+***************
+*** 6309,6331 ****
+       if (fname == NULL || *fname == NUL
+                                  || vim_ispathsep(fname[STRLEN(fname) - 1]))
+       {
+- #ifdef RISCOS
+-          if (*ext == '/')
+- #else
+           if (*ext == '.')
+- #endif
+               *s++ = '_';
+       }
+       /*
+        * If the extension starts with '.', truncate the base name at 8
+        * characters
+        */
+- #ifdef RISCOS
+-      /* We normally use '/', but swap files are '_' */
+-      else if (*ext == '/' || *ext == '_')
+- #else
+       else if (*ext == '.')
+- #endif
+       {
+           if ((size_t)(s - ptr) > (size_t)8)
+           {
+--- 6288,6301 ----
+***************
+*** 6337,6349 ****
+        * If the extension doesn't start with '.', and the file name
+        * doesn't have an extension yet, append a '.'
+        */
+- #ifdef RISCOS
+-      else if ((e = vim_strchr(ptr, '/')) == NULL)
+-          *s++ = '/';
+- #else
+       else if ((e = vim_strchr(ptr, '.')) == NULL)
+           *s++ = '.';
+- #endif
+       /*
+        * If the extension doesn't start with '.', and there already is an
+        * extension, it may need to be truncated
+--- 6307,6314 ----
+***************
+*** 6371,6393 ****
+      /*
+       * Prepend the dot.
+       */
+!     if (prepend_dot && !shortname && *(e = gettail(retval)) !=
+! #ifdef RISCOS
+!          '/'
+! #else
+!          '.'
+! #endif
+  #ifdef USE_LONG_FNAME
+           && USE_LONG_FNAME
+  #endif
+                               )
+      {
+       STRMOVE(e + 1, e);
+- #ifdef RISCOS
+-      *e = '/';
+- #else
+       *e = '.';
+- #endif
+      }
+  #endif
+  
+--- 6336,6349 ----
+      /*
+       * Prepend the dot.
+       */
+!     if (prepend_dot && !shortname && *(e = gettail(retval)) != '.'
+  #ifdef USE_LONG_FNAME
+           && USE_LONG_FNAME
+  #endif
+                               )
+      {
+       STRMOVE(e + 1, e);
+       *e = '.';
+      }
+  #endif
+  
+***************
+*** 10205,10223 ****
+                   ++p;
+               break;
+           case '.':
+- #ifdef RISCOS
+-              if (allow_dirs != NULL)
+-                   *allow_dirs = TRUE;
+-              /* FALLTHROUGH */
+- #endif
+           case '~':
+               reg_pat[i++] = '\\';
+               reg_pat[i++] = *p;
+               break;
+           case '?':
+- #ifdef RISCOS
+-          case '#':
+- #endif
+               reg_pat[i++] = '.';
+               break;
+           case '\\':
+--- 10161,10171 ----
+*** ../vim-7.3.186/src/globals.h       2011-05-05 14:26:37.000000000 +0200
+--- src/globals.h      2011-05-10 16:26:13.000000000 +0200
+***************
+*** 1513,1519 ****
+  EXTERN char_u e_sandbox[]    INIT(= N_("E48: Not allowed in sandbox"));
+  #endif
+  EXTERN char_u e_secure[]     INIT(= N_("E523: Not allowed here"));
+! #if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
+       || defined(UNIX) || defined(VMS) || defined(OS2)
+  EXTERN char_u e_screenmode[] INIT(= N_("E359: Screen mode setting not supported"));
+  #endif
+--- 1513,1519 ----
+  EXTERN char_u e_sandbox[]    INIT(= N_("E48: Not allowed in sandbox"));
+  #endif
+  EXTERN char_u e_secure[]     INIT(= N_("E523: Not allowed here"));
+! #if defined(AMIGA) || defined(MACOS) || defined(MSWIN)  \
+       || defined(UNIX) || defined(VMS) || defined(OS2)
+  EXTERN char_u e_screenmode[] INIT(= N_("E359: Screen mode setting not supported"));
+  #endif
+*** ../vim-7.3.186/src/gui.c   2011-01-17 20:08:03.000000000 +0100
+--- src/gui.c  2011-05-10 16:26:53.000000000 +0200
+***************
+*** 2156,2162 ****
+  
+      if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
+      {
+! #if defined(AMIGA) || defined(RISCOS)
+       gui_mch_set_colors(bg_color, fg_color);
+  #else
+       gui_mch_set_fg_color(bg_color);
+--- 2156,2162 ----
+  
+      if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
+      {
+! #if defined(AMIGA)
+       gui_mch_set_colors(bg_color, fg_color);
+  #else
+       gui_mch_set_fg_color(bg_color);
+***************
+*** 2165,2171 ****
+      }
+      else
+      {
+! #if defined(AMIGA) || defined(RISCOS)
+       gui_mch_set_colors(fg_color, bg_color);
+  #else
+       gui_mch_set_fg_color(fg_color);
+--- 2165,2171 ----
+      }
+      else
+      {
+! #if defined(AMIGA)
+       gui_mch_set_colors(fg_color, bg_color);
+  #else
+       gui_mch_set_fg_color(fg_color);
+***************
+*** 2193,2199 ****
+      if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
+       return FAIL;
+  
+! #if defined(RISCOS) || defined(FEAT_GUI_GTK)
+      /* If there's no italic font, then fake it.
+       * For GTK2, we don't need a different font for italic style. */
+      if (hl_mask_todo & HL_ITALIC)
+--- 2193,2199 ----
+      if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
+       return FAIL;
+  
+! #if defined(FEAT_GUI_GTK)
+      /* If there's no italic font, then fake it.
+       * For GTK2, we don't need a different font for italic style. */
+      if (hl_mask_todo & HL_ITALIC)
+***************
+*** 2985,3010 ****
+           did_clip = TRUE;
+       }
+       /* Allow the left button to start the selection */
+-      else if (button ==
+- # ifdef RISCOS
+-              /* Only start a drag on a drag event. Otherwise
+-               * we don't get a release event. */
+-                  MOUSE_DRAG
+- # else
+-                  MOUSE_LEFT
+- # endif
+-                              )
+-      {
+-          clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+-          did_clip = TRUE;
+-      }
+- # ifdef RISCOS
+       else if (button == MOUSE_LEFT)
+       {
+!          clip_clear_selection();
+           did_clip = TRUE;
+       }
+- # endif
+  
+       /* Always allow pasting */
+       if (button != MOUSE_MIDDLE)
+--- 2985,2995 ----
+           did_clip = TRUE;
+       }
+       /* Allow the left button to start the selection */
+       else if (button == MOUSE_LEFT)
+       {
+!          clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+           did_clip = TRUE;
+       }
+  
+       /* Always allow pasting */
+       if (button != MOUSE_MIDDLE)
+*** ../vim-7.3.186/src/gui.h   2010-08-15 21:57:25.000000000 +0200
+--- src/gui.h  2011-05-10 16:27:19.000000000 +0200
+***************
+*** 52,61 ****
+  # include <SegLoad.h>*/
+  #endif
+  
+- #ifdef RISCOS
+- # include "gui_riscos.h"
+- #endif
+- 
+  #ifdef FEAT_GUI_PHOTON
+  # include <Ph.h>
+  # include <Pt.h>
+--- 52,57 ----
+***************
+*** 151,157 ****
+  #define DRAW_BOLD            0x02    /* draw bold text */
+  #define DRAW_UNDERL          0x04    /* draw underline text */
+  #define DRAW_UNDERC          0x08    /* draw undercurl text */
+! #if defined(RISCOS) || defined(FEAT_GUI_GTK)
+  # define DRAW_ITALIC         0x10    /* draw italic text */
+  #endif
+  #define DRAW_CURSOR          0x20    /* drawing block cursor (win32) */
+--- 147,153 ----
+  #define DRAW_BOLD            0x02    /* draw bold text */
+  #define DRAW_UNDERL          0x04    /* draw underline text */
+  #define DRAW_UNDERC          0x08    /* draw undercurl text */
+! #if defined(FEAT_GUI_GTK)
+  # define DRAW_ITALIC         0x10    /* draw italic text */
+  #endif
+  #define DRAW_CURSOR          0x20    /* drawing block cursor (win32) */
+***************
+*** 219,227 ****
+  #ifdef FEAT_GUI_MAC
+      ControlHandle id;                /* A handle to the scrollbar */
+  #endif
+- #ifdef RISCOS
+-     int              id;             /* Window handle of scrollbar window */
+- #endif
+  #ifdef FEAT_GUI_PHOTON
+      PtWidget_t       *id;
+  #endif
+--- 215,220 ----
+***************
+*** 450,463 ****
+      int              visibility;         /* Is window partially/fully obscured? */
+  #endif
+  
+- #ifdef RISCOS
+-     int              window_handle;
+-     char_u   *window_title;
+-     int              window_title_size;
+-     int              fg_colour;              /* in 0xBBGGRR format */
+-     int              bg_colour;
+- #endif
+- 
+  #ifdef FEAT_GUI_PHOTON
+      PtWidget_t       *vimWindow;             /* PtWindow */
+      PtWidget_t       *vimTextArea;           /* PtRaw */
+--- 443,448 ----
+*** ../vim-7.3.186/src/main.c  2011-04-11 21:35:03.000000000 +0200
+--- src/main.c 2011-05-10 16:27:33.000000000 +0200
+***************
+*** 3276,3286 ****
+      main_msg(_("+reverse\t\tDon't use reverse video (also: +rv)"));
+      main_msg(_("-xrm <resource>\tSet the specified resource"));
+  #endif /* FEAT_GUI_X11 */
+- #if defined(FEAT_GUI) && defined(RISCOS)
+-     mch_msg(_("\nArguments recognised by gvim (RISC OS version):\n"));
+-     main_msg(_("--columns <number>\tInitial width of window in columns"));
+-     main_msg(_("--rows <number>\tInitial height of window in rows"));
+- #endif
+  #ifdef FEAT_GUI_GTK
+      mch_msg(_("\nArguments recognised by gvim (GTK+ version):\n"));
+      main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
+--- 3276,3281 ----
+*** ../vim-7.3.186/src/memfile.c       2011-03-22 18:10:34.000000000 +0100
+--- src/memfile.c      2011-05-10 16:27:38.000000000 +0200
+***************
+*** 1307,1313 ****
+       * fname cannot be NameBuff, because it must have been allocated.
+       */
+      mf_set_ffname(mfp);
+! #if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+      /*
+       * A ":!cd e:xxx" may change the directory without us knowning, use the
+       * full pathname always.  Careful: This frees fname!
+--- 1307,1313 ----
+       * fname cannot be NameBuff, because it must have been allocated.
+       */
+      mf_set_ffname(mfp);
+! #if defined(MSDOS) || defined(MSWIN)
+      /*
+       * A ":!cd e:xxx" may change the directory without us knowning, use the
+       * full pathname always.  Careful: This frees fname!
+*** ../vim-7.3.186/src/memline.c       2011-02-15 11:56:56.000000000 +0100
+--- src/memline.c      2011-05-10 16:28:40.000000000 +0200
+***************
+*** 748,754 ****
+           continue;
+       if (mf_open_file(mfp, fname) == OK)     /* consumes fname! */
+       {
+! #if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+           /*
+            * set full pathname for swap file now, because a ":!cd dir" may
+            * change directory without us knowing it.
+--- 748,754 ----
+           continue;
+       if (mf_open_file(mfp, fname) == OK)     /* consumes fname! */
+       {
+! #if defined(MSDOS) || defined(MSWIN)
+           /*
+            * set full pathname for swap file now, because a ":!cd dir" may
+            * change directory without us knowing it.
+***************
+*** 933,939 ****
+       b0p->b0_fname[0] = NUL;
+      else
+      {
+! #if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS)
+       /* Systems that cannot translate "~user" back into a path: copy the
+        * file name unmodified.  Do use slashes instead of backslashes for
+        * portability. */
+--- 933,939 ----
+       b0p->b0_fname[0] = NUL;
+      else
+      {
+! #if defined(MSDOS) || defined(MSWIN) || defined(AMIGA)
+       /* Systems that cannot translate "~user" back into a path: copy the
+        * file name unmodified.  Do use slashes instead of backslashes for
+        * portability. */
+***************
+*** 1103,1109 ****
+       fname = (char_u *)"";
+      len = (int)STRLEN(fname);
+      if (len >= 4 &&
+! #if defined(VMS) || defined(RISCOS)
+           STRNICMP(fname + len - 4, "_s" , 2)
+  #else
+           STRNICMP(fname + len - 4, ".s" , 2)
+--- 1103,1109 ----
+       fname = (char_u *)"";
+      len = (int)STRLEN(fname);
+      if (len >= 4 &&
+! #if defined(VMS)
+           STRNICMP(fname + len - 4, "_s" , 2)
+  #else
+           STRNICMP(fname + len - 4, ".s" , 2)
+***************
+*** 1773,1783 ****
+  #ifdef VMS
+               names[0] = vim_strsave((char_u *)"*_sw%");
+  #else
+- # ifdef RISCOS
+-              names[0] = vim_strsave((char_u *)"*_sw#");
+- # else
+               names[0] = vim_strsave((char_u *)"*.sw?");
+- # endif
+  #endif
+  #if defined(UNIX) || defined(WIN3264)
+               /* For Unix names starting with a dot are special.  MS-Windows
+--- 1773,1779 ----
+***************
+*** 1804,1814 ****
+  #ifdef VMS
+               names[0] = concat_fnames(dir_name, (char_u *)"*_sw%", TRUE);
+  #else
+- # ifdef RISCOS
+-              names[0] = concat_fnames(dir_name, (char_u *)"*_sw#", TRUE);
+- # else
+               names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
+- # endif
+  #endif
+  #if defined(UNIX) || defined(WIN3264)
+               /* For Unix names starting with a dot are special.  MS-Windows
+--- 1800,1806 ----
+***************
+*** 1877,1883 ****
+           char_u          *swapname;
+  
+           swapname = modname(fname_res,
+! #if defined(VMS) || defined(RISCOS)
+                              (char_u *)"_swp", FALSE
+  #else
+                              (char_u *)".swp", TRUE
+--- 1869,1875 ----
+           char_u          *swapname;
+  
+           swapname = modname(fname_res,
+! #if defined(VMS)
+                              (char_u *)"_swp", FALSE
+  #else
+                              (char_u *)".swp", TRUE
+***************
+*** 2176,2186 ****
+  #ifdef VMS
+      names[num_names] = concat_fnames(path, (char_u *)"_sw%", FALSE);
+  #else
+- # ifdef RISCOS
+-     names[num_names] = concat_fnames(path, (char_u *)"_sw#", FALSE);
+- # else
+      names[num_names] = concat_fnames(path, (char_u *)".sw?", FALSE);
+- # endif
+  #endif
+      if (names[num_names] == NULL)
+       goto end;
+--- 2168,2174 ----
+***************
+*** 2207,2217 ****
+  #ifdef VMS
+      names[num_names] = modname(path, (char_u *)"_sw%", FALSE);
+  #else
+- # ifdef RISCOS
+-     names[num_names] = modname(path, (char_u *)"_sw#", FALSE);
+- # else
+      names[num_names] = modname(path, (char_u *)".sw?", FALSE);
+- # endif
+  #endif
+      if (names[num_names] == NULL)
+       goto end;
+--- 2195,2201 ----
+***************
+*** 3205,3211 ****
+       mf_free(mfp, hp);       /* free the data block */
+       buf->b_ml.ml_locked = NULL;
+  
+!      for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; --stack_idx)
+       {
+           buf->b_ml.ml_stack_top = 0;     /* stack is invalid when failing */
+           ip = &(buf->b_ml.ml_stack[stack_idx]);
+--- 3189,3196 ----
+       mf_free(mfp, hp);       /* free the data block */
+       buf->b_ml.ml_locked = NULL;
+  
+!      for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0;
+!                                                                --stack_idx)
+       {
+           buf->b_ml.ml_stack_top = 0;     /* stack is invalid when failing */
+           ip = &(buf->b_ml.ml_stack[stack_idx]);
+***************
+*** 3956,3969 ****
+  #else
+           (buf->b_p_sn || buf->b_shortname),
+  #endif
+- #ifdef RISCOS
+-          /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
+-          ffname,
+- #else
+           fname_res,
+- #endif
+           (char_u *)
+! #if defined(VMS) || defined(RISCOS)
+           "_swp",
+  #else
+           ".swp",
+--- 3941,3949 ----
+  #else
+           (buf->b_p_sn || buf->b_shortname),
+  #endif
+           fname_res,
+           (char_u *)
+! #if defined(VMS)
+           "_swp",
+  #else
+           ".swp",
+***************
+*** 4427,4440 ****
+                   }
+                   close(fd);
+               }
+- #ifdef RISCOS
+-              else
+-                  /* Can't open swap file, though it does exist.
+-                   * Assume that the user is editing two files with
+-                   * the same name in different directories. No error.
+-                   */
+-                  differ = TRUE;
+- #endif
+  
+               /* give the ATTENTION message when there is an old swap file
+                * for the current file, and the buffer was not recovered. */
+--- 4407,4412 ----
+*** ../vim-7.3.186/src/misc1.c 2011-05-10 14:44:07.000000000 +0200
+--- src/misc1.c        2011-05-10 16:29:29.000000000 +0200
+***************
+*** 4589,4613 ****
+  vim_ispathsep(c)
+      int c;
+  {
+! #ifdef RISCOS
+!     return (c == '.' || c == ':');
+! #else
+! # ifdef UNIX
+      return (c == '/');           /* UNIX has ':' inside file names */
+! # else
+! #  ifdef BACKSLASH_IN_FILENAME
+      return (c == ':' || c == '/' || c == '\\');
+! #  else
+! #   ifdef VMS
+      /* server"user passwd"::device:[full.path.name]fname.extension;version" */
+      return (c == ':' || c == '[' || c == ']' || c == '/'
+           || c == '<' || c == '>' || c == '"' );
+! #   else             /* Amiga */
+      return (c == ':' || c == '/');
+! #   endif /* VMS */
+! #  endif
+  # endif
+! #endif /* RISC OS */
+  }
+  
+  #if defined(FEAT_SEARCHPATH) || defined(PROTO)
+--- 4589,4609 ----
+  vim_ispathsep(c)
+      int c;
+  {
+! #ifdef UNIX
+      return (c == '/');           /* UNIX has ':' inside file names */
+! #else
+! # ifdef BACKSLASH_IN_FILENAME
+      return (c == ':' || c == '/' || c == '\\');
+! # else
+! #  ifdef VMS
+      /* server"user passwd"::device:[full.path.name]fname.extension;version" */
+      return (c == ':' || c == '[' || c == ']' || c == '/'
+           || c == '<' || c == '>' || c == '"' );
+! #  else
+      return (c == ':' || c == '/');
+! #  endif /* VMS */
+  # endif
+! #endif
+  }
+  
+  #if defined(FEAT_SEARCHPATH) || defined(PROTO)
+*** ../vim-7.3.186/src/proto.h 2010-08-15 21:57:29.000000000 +0200
+--- src/proto.h        2011-05-10 16:29:45.000000000 +0200
+***************
+*** 62,70 ****
+  # ifdef __BEOS__
+  #  include "os_beos.pro"
+  # endif
+- # ifdef RISCOS
+- #  include "os_riscos.pro"
+- # endif
+  # ifdef __QNX__
+  #  include "os_qnx.pro"
+  # endif
+--- 62,67 ----
+***************
+*** 245,253 ****
+  #  ifdef FEAT_GUI_X11
+  #   include "gui_x11.pro"
+  #  endif
+- #  ifdef RISCOS
+- #   include "gui_riscos.pro"
+- #  endif
+  #  ifdef FEAT_GUI_PHOTON
+  #   include "gui_photon.pro"
+  #  endif
+--- 242,247 ----
+*** ../vim-7.3.186/src/quickfix.c      2011-05-05 17:14:07.000000000 +0200
+--- src/quickfix.c     2011-05-10 16:30:18.000000000 +0200
+***************
+*** 1182,1202 ****
+      if (fname == NULL || *fname == NUL)              /* no file name */
+       return 0;
+      {
+- #ifdef RISCOS
+-      /* Name is reported as `main.c', but file is `c.main' */
+-      return ro_buflist_add(fname);
+- #else
+       char_u      *ptr;
+       int         fnum;
+  
+! # ifdef VMS
+       vms_remove_version(fname);
+! # endif
+! # ifdef BACKSLASH_IN_FILENAME
+       if (directory != NULL)
+           slash_adjust(directory);
+       slash_adjust(fname);
+! # endif
+       if (directory != NULL && !vim_isAbsName(fname)
+               && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+       {
+--- 1182,1198 ----
+      if (fname == NULL || *fname == NUL)              /* no file name */
+       return 0;
+      {
+       char_u      *ptr;
+       int         fnum;
+  
+! #ifdef VMS
+       vms_remove_version(fname);
+! #endif
+! #ifdef BACKSLASH_IN_FILENAME
+       if (directory != NULL)
+           slash_adjust(directory);
+       slash_adjust(fname);
+! #endif
+       if (directory != NULL && !vim_isAbsName(fname)
+               && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+       {
+***************
+*** 1221,1227 ****
+           return fnum;
+       }
+       return buflist_add(fname, 0);
+- #endif
+      }
+  }
+  
+--- 1217,1222 ----
+*** ../vim-7.3.186/src/search.c        2011-02-25 18:38:29.000000000 +0100
+--- src/search.c       2011-05-10 16:30:38.000000000 +0200
+***************
+*** 4581,4589 ****
+      char_u   *already = NULL;
+      char_u   *startp = NULL;
+      char_u   *inc_opt = NULL;
+- #ifdef RISCOS
+-     int              previous_munging = __riscosify_control;
+- #endif
+  #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+      win_T    *curwin_save = NULL;
+  #endif
+--- 4581,4586 ----
+***************
+*** 4596,4606 ****
+      if (file_line == NULL)
+       return;
+  
+- #ifdef RISCOS
+-     /* UnixLib knows best how to munge c file names - turn munging back on. */
+-     int __riscosify_control = 0;
+- #endif
+- 
+      if (type != CHECK_PATH && type != FIND_DEFINE
+  #ifdef FEAT_INS_EXPAND
+       /* when CONT_SOL is set compare "ptr" with the beginning of the line
+--- 4593,4598 ----
+***************
+*** 5228,5238 ****
+      vim_free(regmatch.regprog);
+      vim_free(incl_regmatch.regprog);
+      vim_free(def_regmatch.regprog);
+- 
+- #ifdef RISCOS
+-    /* Restore previous file munging state. */
+-     __riscosify_control = previous_munging;
+- #endif
+  }
+  
+      static void
+--- 5220,5225 ----
+*** ../vim-7.3.186/src/structs.h       2011-03-22 18:10:34.000000000 +0100
+--- src/structs.h      2011-05-10 16:30:49.000000000 +0200
+***************
+*** 2366,2376 ****
+      MenuHandle       menu_handle;
+      MenuHandle       submenu_handle;
+  #endif
+- #ifdef RISCOS
+-     int              *id;                /* Not used, but gui.c needs it */
+-     int              greyed_out;         /* Flag */
+-     int              hidden;
+- #endif
+  #ifdef FEAT_GUI_PHOTON
+      PtWidget_t       *id;
+      PtWidget_t       *submenu_id;
+--- 2366,2371 ----
+*** ../vim-7.3.186/src/term.c  2010-12-30 14:47:32.000000000 +0100
+--- src/term.c 2011-05-10 16:31:41.000000000 +0200
+***************
+*** 52,58 ****
+  
+  /*
+   * Here are the builtin termcap entries.  They are not stored as complete
+!  * Tcarr structures, as such a structure is too big.
+   *
+   * The entries are compact, therefore they normally are included even when
+   * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
+--- 52,58 ----
+  
+  /*
+   * Here are the builtin termcap entries.  They are not stored as complete
+!  * structures with all entries, as such a structure is too big.
+   *
+   * The entries are compact, therefore they normally are included even when
+   * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
+***************
+*** 199,269 ****
+  #endif
+  
+  #ifndef NO_BUILTIN_TCAPS
+- # if defined(RISCOS) || defined(ALL_BUILTIN_TCAPS)
+- /*
+-  * Default for the Acorn.
+-  */
+-     {(int)KS_NAME,   "riscos"},
+-     {(int)KS_CL,     "\014"},                /* Cls and Home Cursor */
+-     {(int)KS_CM,     "\001%d\001%d\002"},    /* Position cursor */
+- 
+-     {(int)KS_CCO,    "16"},                  /* Allow 16 colors */
+- 
+-     {(int)KS_CAF,    "\001%d\021"},          /* Set foreground colour */
+-     {(int)KS_CAB,    "\001%d\022"},          /* Set background colour */
+- 
+- 
+-     {(int)KS_ME,     "\004"},                /* Normal mode */
+-     {(int)KS_MR,     "\005"},                /* Reverse */
+- 
+-     {(int)KS_VI,     "\016"},                /* Cursor invisible */
+-     {(int)KS_VE,     "\017"},                /* Cursor visible */
+-     {(int)KS_VS,     "\020"},                /* Cursor very visible */
+- 
+-     {(int)KS_CS,     "\001%d\001%d\003"},    /* Set scroll region */
+-     {(int)KS_SR,     "\023"},                /* Scroll text down */
+-     {K_UP,           "\217"},
+-     {K_DOWN,         "\216"},
+-     {K_LEFT,         "\214"},
+-     {K_RIGHT,                "\215"},
+-     {K_S_UP,         "\237"},
+-     {K_S_DOWN,               "\236"},
+-     {K_S_LEFT,               "\234"},
+-     {K_S_RIGHT,              "\235"},
+- 
+-     {K_F1,           "\201"},
+-     {K_F2,           "\202"},
+-     {K_F3,           "\203"},
+-     {K_F4,           "\204"},
+-     {K_F5,           "\205"},
+-     {K_F6,           "\206"},
+-     {K_F7,           "\207"},
+-     {K_F8,           "\210"},
+-     {K_F9,           "\211"},
+-     {K_F10,          "\312"},
+-     {K_F11,          "\313"},
+-     {K_F12,          "\314"},
+-     {K_S_F1,         "\221"},
+-     {K_S_F2,         "\222"},
+-     {K_S_F3,         "\223"},
+-     {K_S_F4,         "\224"},
+-     {K_S_F5,         "\225"},
+-     {K_S_F6,         "\226"},
+-     {K_S_F7,         "\227"},
+-     {K_S_F8,         "\230"},
+-     {K_S_F9,         "\231"},
+-     {K_S_F10,                "\332"},
+-     {K_S_F11,                "\333"},
+-     {K_S_F12,                "\334"},
+-     {K_BS,           "\010"},
+-     {K_INS,          "\315"},
+-     {K_DEL,          "\177"},
+-     {K_HOME,         "\036"},
+-     {K_END,          "\213"},
+-     {K_PAGEUP,               "\237"},
+-     {K_PAGEDOWN,     "\236"},
+- # endif      /* Acorn terminal */
+- 
+  
+  # if defined(AMIGA) || defined(ALL_BUILTIN_TCAPS)
+  /*
+--- 199,204 ----
+***************
+*** 1399,1408 ****
+  /*
+   * DEFAULT_TERM is used, when no terminal is specified with -T option or $TERM.
+   */
+- #ifdef RISCOS
+- # define DEFAULT_TERM        (char_u *)"riscos"
+- #endif
+- 
+  #ifdef AMIGA
+  # define DEFAULT_TERM        (char_u *)"amiga"
+  #endif
+--- 1334,1339 ----
+*** ../vim-7.3.186/src/termlib.c       2010-08-15 21:57:30.000000000 +0200
+--- src/termlib.c      2011-05-10 16:31:58.000000000 +0200
+***************
+*** 13,19 ****
+  #include "vim.h"
+  #include "termlib.pro"
+  
+! #if !defined(AMIGA) && !defined(VMS) && !defined(MACOS) && !defined(RISCOS)
+  # include <sgtty.h>
+  #endif
+  
+--- 13,19 ----
+  #include "vim.h"
+  #include "termlib.pro"
+  
+! #if !defined(AMIGA) && !defined(VMS) && !defined(MACOS)
+  # include <sgtty.h>
+  #endif
+  
+*** ../vim-7.3.186/src/version.c       2011-05-10 16:12:40.000000000 +0200
+--- src/version.c      2011-05-10 16:37:20.000000000 +0200
+***************
+*** 1205,1213 ****
+  # endif
+  #endif
+  
+- #ifdef RISCOS
+-     MSG_PUTS(_("\nRISC OS version"));
+- #endif
+  #ifdef VMS
+      MSG_PUTS(_("\nOpenVMS version"));
+  # ifdef HAVE_PATHDEF
+--- 1207,1212 ----
+*** ../vim-7.3.186/src/vim.h   2011-05-05 16:41:19.000000000 +0200
+--- src/vim.h  2011-05-10 16:32:40.000000000 +0200
+***************
+*** 184,192 ****
+  #  define SIZEOF_INT 2
+  # endif
+  #endif
+- #ifdef RISCOS
+- # define SIZEOF_INT 4
+- #endif
+  
+  
+  #include "feature.h" /* #defines for optionals and features */
+--- 184,189 ----
+***************
+*** 340,349 ****
+  # include "os_mac.h"
+  #endif
+  
+- #ifdef RISCOS
+- # include "os_riscos.h"
+- #endif
+- 
+  #ifdef __QNX__
+  # include "os_qnx.h"
+  #endif
+--- 337,342 ----
+*** ../vim-7.3.186/src/gui_riscos.h    2010-08-15 21:57:28.000000000 +0200
+--- src/gui_riscos.h   1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,32 ****
+- /* vi:set ts=8 sts=4 sw=4:
+-  *
+-  * VIM - Vi IMproved by Bram Moolenaar
+-  *
+-  * Do ":help uganda"  in Vim to read copying and usage conditions.
+-  * Do ":help credits" in Vim to see a list of people who contributed.
+-  */
+- 
+- #define FEAT_BROWSE
+- 
+- #define TASK 0x4b534154
+- 
+- /* Nested wimp flags: */
+- #define CHILD_FIX_TO_WORKAREA        0
+- #define CHILD_FIX_TO_LEFT    1
+- #define CHILD_FIX_TO_BOTTOM  1
+- #define CHILD_FIX_TO_RIGHT   2
+- #define CHILD_FIX_TO_TOP     2
+- 
+- #define CHILD_SELF_SCROLL    0
+- #define CHILD_PARENT_SCROLL  1
+- 
+- #define CHILD_LEFT           16
+- #define CHILD_BOTTOM         18
+- #define CHILD_RIGHT          20
+- #define CHILD_TOP            22
+- #define CHILD_SCROLL_X               24
+- #define CHILD_SCROLL_Y               26
+- 
+- int wimp_poll(int mask, int *block);
+- int wimp_poll_idle(int mask, int *block, int end_time);
+- void ro_open_main(int *block);
+--- 0 ----
+*** ../vim-7.3.186/src/os_riscos.h     2010-08-15 21:57:30.000000000 +0200
+--- src/os_riscos.h    1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,166 ****
+- /* vi:set ts=8 sts=4 sw=4:
+-  *
+-  * VIM - Vi IMproved by Bram Moolenaar
+-  *
+-  * Do ":help uganda"  in Vim to read copying and usage conditions.
+-  * Do ":help credits" in Vim to see a list of people who contributed.
+-  */
+- 
+- #include <sys/types.h>
+- #include <sys/stat.h>
+- #include <sys/ioctl.h>
+- #include <termios.h>
+- #include <stdlib.h>
+- #include <unixlib/local.h>
+- #include <errno.h>
+- #include <fcntl.h>
+- 
+- #define CASE_INSENSITIVE_FILENAME
+- #define FEAT_MODIFY_FNAME
+- #define FEAT_OSFILETYPE
+- #define DFLT_OFT     "Text"
+- #define USE_TERM_CONSOLE
+- #define HAVE_AVAIL_MEM
+- 
+- /* Longer filenames now accessible to all */
+- #ifndef BASENAMELEN
+- # define BASENAMELEN 64 /* Same length as unzip */
+- #endif
+- 
+- #ifndef TEMNAME
+- # define TEMPNAME    "<Wimp$ScrapDir>.v?XXXXXX"
+- # define TEMPNAMELEN 25
+- #endif
+- 
+- #ifndef DFLT_HELPFILE
+- # define DFLT_HELPFILE "Vim:doc.help"
+- #endif
+- 
+- #ifndef DFLT_BDIR
+- # define DFLT_BDIR   ".,<Wimp$ScrapDir>."    /* default for 'backupdir' */
+- #endif
+- 
+- /* Paths to try putting swap file in. */
+- #ifndef DFLT_DIR
+- # define DFLT_DIR    "<Wimp$ScrapDir>.,."    /* default for 'directory' */
+- #endif
+- 
+- #ifndef DFLT_VDIR
+- # define DFLT_VDIR   "Choices:Vim.view"      /* default for 'viewdir' */
+- #endif
+- 
+- #ifndef TERMCAPFILE
+- # define TERMCAPFILE "Vim:TermCap"
+- #endif
+- #define HAVE_TGETENT
+- 
+- #ifndef SYNTAX_FNAME
+- # define SYNTAX_FNAME        "Vim:Syntax.%s"
+- #endif
+- 
+- #ifndef EVIM_FILE
+- # define EVIM_FILE   "Vim:Evim"
+- #endif
+- 
+- #define FEAT_VIMINFO
+- 
+- #ifndef VIMINFO_FILE
+- # define VIMINFO_FILE        "<Choices$Write>.Vim.VimInfo"
+- #endif
+- #ifndef VIMINFO_FILE2
+- # define VIMINFO_FILE2       "Choices:Vim.VimInfo"
+- #endif
+- 
+- #ifndef VIMRC_FILE
+- # define VIMRC_FILE  "/vimrc"
+- #endif
+- #ifndef EXRC_FILE
+- # define EXRC_FILE   "/exrc"
+- #endif
+- #ifndef GVIMRC_FILE
+- # define GVIMRC_FILE "/gvimrc"
+- #endif
+- #ifndef USR_VIMRC_FILE
+- # define USR_VIMRC_FILE      "Vim:Evim"
+- #endif
+- #ifndef SESSION_FILE
+- # define SESSION_FILE        "/Session.vim"
+- #endif
+- #ifndef USR_VIMRC_FILE
+- # define USR_VIMRC_FILE      "Choices:Vim.VimRC"
+- #endif
+- #ifndef USR_GVIMRC_FILE
+- # define USR_GVIMRC_FILE    "Choices:Vim.GVimRC"
+- #endif
+- #ifndef USR_EXRC_FILE
+- # define USR_EXRC_FILE    "Choices:Vim.ExRC"
+- #endif
+- #ifndef SYS_VIMRC_FILE
+- # define SYS_VIMRC_FILE          "Vim:VimRC"
+- #endif
+- #ifndef SYS_GVIMRC_FILE
+- # define SYS_GVIMRC_FILE    "Vim:GVimRC"
+- #endif
+- #ifndef SYS_MENU_FILE
+- # define SYS_MENU_FILE           "Vim:Menu"
+- #endif
+- #ifndef SYS_OPTWIN_FILE
+- # define SYS_OPTWIN_FILE    "Vim:Optwin"
+- #endif
+- #ifndef FILETYPE_FILE
+- # define FILETYPE_FILE           "Vim:Filetype"
+- #endif
+- #ifndef FTPLUGIN_FILE
+- # define FTPLUGIN_FILE           "Vim:Ftplugin/vim"
+- #endif
+- #ifndef INDENT_FILE
+- # define INDENT_FILE     "Vim:Indent/vim"
+- #endif
+- #ifndef FTOFF_FILE
+- # define FTOFF_FILE      "Vim:Ftoff"
+- #endif
+- #ifndef FTPLUGOF_FILE
+- # define FTPLUGOF_FILE           "Vim:Ftplugof"
+- #endif
+- #ifndef INDOFF_FILE
+- # define INDOFF_FILE     "Vim:Indoff"
+- #endif
+- 
+- #define DFLT_ERRORFILE               "errors/vim"
+- #define DFLT_RUNTIMEPATH     "Choices:Vim,Vim:,Choices:Vim.after"
+- 
+- /*
+-  * RISC PCs have plenty of memory, use large buffers
+-  */
+- #define CMDBUFFSIZE 1024     /* size of the command processing buffer */
+- #define MAXPATHL    256              /* paths are always quite short though */
+- 
+- #ifndef DFLT_MAXMEM
+- # define DFLT_MAXMEM (5*1024)    /* use up to 5 Mbyte for a buffer */
+- #endif
+- 
+- #ifndef DFLT_MAXMEMTOT
+- # define DFLT_MAXMEMTOT      (10*1024)    /* use up to 10 Mbyte for Vim */
+- #endif
+- 
+- #ifdef HAVE_SIGSET
+- # define signal sigset
+- #endif
+- 
+- #define n_flag (1<<31)
+- #define z_flag (1<<30)
+- #define c_flag (1<<29)
+- #define v_flag (1<<28)
+- 
+- /* These take r0-r7 as inputs, returns r0-r7 in global variables. */
+- void swi(int swinum, ...);      /* Handles errors itself */
+- int xswi(int swinum, ...);      /* Returns errors using v flag */
+- extern int r0, r1, r2, r3, r4, r5, r6, r7;  /* For return values */
+- 
+- #include <kernel.h>
+- #include <swis.h>
+- 
+- #define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
+- #define mch_rename(src, dst) rename(src, dst)
+- #define mch_getenv(x) (char_u *)getenv((char *)x)
+- #define mch_setenv(name, val, x) setenv(name, val, x)
+--- 0 ----
+*** ../vim-7.3.186/src/gui_riscos.c    2011-05-10 15:52:10.000000000 +0200
+--- src/gui_riscos.c   1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,3558 ****
+- /* vi:set ts=8 sts=4 sw=4:
+-  *
+-  * VIM - Vi IMproved by Bram Moolenaar
+-  *
+-  * Do ":help uganda"  in Vim to read copying and usage conditions.
+-  * Do ":help credits" in Vim to see a list of people who contributed.
+-  * See README.txt for an overview of the Vim source code.
+-  */
+- 
+- #include "vim.h"
+- #include <string.h>
+- 
+- /*
+-  * gui_riscos.c
+-  *
+-  * Thomas Leonard <tal197@ecs.soton.ac.uk>
+-  * Updated by Andy Wingate <andy@sparse.net>
+-  */
+- 
+- extern int time_of_last_poll;
+- 
+- int task_handle = 0;         /* Zero means we are not yet a Wimp task */
+- int child_handle = 0;                /* Task handle of our child process (zero if none). */
+- int *wimp_menu = (int *) -1; /* Pointer to a Wimp menu structure (or -1) */
+- int save_window = -1;                /* Save As window handle */
+- 
+- int *redraw_block = NULL;    /* NULL means not in a redraw loop. */
+- int ro_return_early = FALSE; /* Break out of gui_mch_wait_for_chars() */
+- 
+- int leaf_ref = 0;            /* Wimp message number - send via Wimp$Scrap */
+- char_u *leaf_name = NULL;    /* Leaf name from DataSave */
+- 
+- int default_columns = 120;   /* These values are used if the --rows and --columns */
+- int default_rows = 32;               /* options aren't used on startup. */
+- 
+- #define DRAG_FALSE       0
+- #define DRAG_SELECTION           1
+- #define DRAG_RESIZE_WINDOW  2
+- int ro_dragging = DRAG_FALSE;
+- int drag_button;
+- int drag_modifiers;
+- int drag_x_offset;
+- int drag_y_offset;
+- 
+- int nested_wimp = FALSE;     /* Bool - can we use the new wimp? */
+- 
+- int changed_mode = FALSE;
+- int x_eigen_factor;
+- int y_eigen_factor;
+- 
+- /* If ro_current_font is non-zero then use the outline font with that handle,
+-  * otherwise, if zap_redraw is TRUE then use ZapRedraw, otherwise use the
+-  * system font.
+-  *
+-  * If zap_redraw is TRUE then zap_file[] contains valid Zap font file
+-  * pointers (or NULLs).
+-  */
+- int ro_current_font = 0;     /* 0 is system font, or ZapRedraw */
+- int font_x_offset   = 0;     /* Where to position each char in its box */
+- int font_y_offset   = 0;
+- 
+- int zap_redraw           = FALSE;
+- int double_height   = FALSE; /* Plot each line twice? */
+- 
+- #define grgb(r,g,b) ((b<<16) + (g<<8) + (r))
+- #define UNUSED_COLOUR (gui.back_pixel)
+- 
+- #define RO_LOAD_CLIPBOARD -2 /* Internal handle for DataSave message. */
+- 
+- /* Changes by John Kortink, 22-23 July 1998
+-  *
+-  * Stuff to make redraw a lot faster. Almost all of it is right here below,
+-  * elsewhere changes are marked with 'JK230798'. Apart from a small change in
+-  * 'gui.c' all changes are limited to this file, 'gui_riscos.c'. The change in
+-  * 'gui.c' is to make Vim stop being 'smart' not redrawing characters that are
+-  * 'already there' (i.e. from the previous line, by coincidence). This caused a
+-  * lot more calls to the redraw code, which we want to avoid because a few nice
+-  * big strings at a time is a lot faster than a truckload of small ones. ('Dear
+-  * Bram ...').
+-  */
+- 
+- /* The ZapRedraw structure */
+- 
+- static struct
+- {
+-     int              r_flags;
+-     int              r_minx;
+-     int              r_miny;
+-     int              r_maxx;
+-     int              r_maxy;
+-     int              r_screen;
+-     int              r_bpl;
+-     int              r_bpp;
+-     int              r_charw;
+-     int              r_charh;
+-     char     *r_caddr;
+-     int              r_cbpl;
+-     int              r_cbpc;
+-     int              r_linesp;
+-     int              r_data;
+-     int              r_scrollx;
+-     int              r_scrolly;
+-     int              *r_palette;
+-     int              r_for;
+-     int              r_bac;
+-     char     *r_workarea;
+-     int              r_magx;
+-     int              r_magy;
+-     int              r_xsize;
+-     int              r_ysize;
+-     int              r_mode;
+- }
+- zap_redraw_block;
+- 
+- /* Other globals */
+- 
+- static int   zap_redraw_initialised = FALSE;
+- static int   zap_redraw_update_colours;
+- static int   zap_redraw_colours[2];
+- static int   zap_redraw_palette[16];
+- 
+- /* Holds the current Zap font file(s).
+-  * The font is recreated from this block on a mode change.
+-  * When using zap, element ZAP_NORMAL is always valid, but
+-  * the others can be NULL.
+-  */
+- 
+- #define ZAP_NORMAL  0
+- #define ZAP_BOLD    1
+- #define ZAP_ITALIC  2
+- #define ZAP_BITALIC 3
+- #define ZAP_STYLES  4
+- 
+- /* Zap font file format data */
+- static char  *zap_file[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+- 
+- /* r_caddr format for current mode */
+- static char  *zap_caddr[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+- 
+- static void ro_remove_menu(int *menu);
+- 
+- /*
+-  * Initialise all the ZapRedraw stuff.
+-  * Call this when changing font and after each mode change.
+-  * zap_redraw_bitmap must contain a valid Zap font file (possibly
+-  * created from the system font).
+-  *
+-  * Return FAIL to revert to system font (if we can't use ZapRedraw).
+-  */
+-     int
+- ro_zap_redraw_initialise()
+- {
+-     int          bytes_per_bitmap_char;
+-     int          first, last;
+-     int          i;
+- 
+-     /* Can't have initialisers for struct members :-(, ok, this way then ... */
+-     if (!zap_redraw_initialised)
+-     {
+-      zap_redraw_block.r_workarea = NULL;
+-      zap_redraw_initialised = TRUE;
+-     }
+- 
+-     /* We redraw in DSA mode */
+-     zap_redraw_block.r_flags = 0x0;
+- 
+-     /* Let ZapRedraw get the screen address for us */
+-     zap_redraw_block.r_screen = 0;
+- 
+-     /* Read the font width and height from the font file header.
+-      * Assume that all styles are the same size.
+-      * ZAP_NORMAL is always present.
+-      */
+-     zap_redraw_block.r_charw = ((int *) zap_file[ZAP_NORMAL])[2];
+-     zap_redraw_block.r_charh = ((int *) zap_file[ZAP_NORMAL])[3];
+- 
+-     /* We have no linespacing */
+-     zap_redraw_block.r_linesp = 0;
+- 
+-     /* Fix foreground = colour 1 */
+-     zap_redraw_block.r_for = 1;
+- 
+-     /* Fix background = colour 0 */
+-     zap_redraw_block.r_bac = 0;
+- 
+-     /* Colour mask buffer */
+-     zap_redraw_block.r_palette = zap_redraw_palette;
+- 
+-     /* Allocate local workspace (for the few calls following here) */
+-     if (zap_redraw_block.r_workarea != NULL)
+-      free(zap_redraw_block.r_workarea);
+-     zap_redraw_block.r_workarea = (char*) malloc(128);
+-     if (!zap_redraw_block.r_workarea)
+-      return FAIL;    /* Out of memory */
+- 
+-     /* Fill in VDU variables */
+-     if (xswi(ZapRedraw_ReadVduVars, 0, &zap_redraw_block) & v_flag)
+-      return FAIL;        /* Can't find ZapRedraw module - use VDU instead */
+- 
+-     /* Determine cbpl and cbpc */
+-     swi(ZapRedraw_CachedCharSize, zap_redraw_block.r_bpp, 0,
+-      zap_redraw_block.r_charw, zap_redraw_block.r_charh);
+-     zap_redraw_block.r_cbpl = r2;
+-     zap_redraw_block.r_cbpc = r3;
+- 
+-     /* Allocate general workspace (for the calls outside) */
+-     if (zap_redraw_block.r_workarea != NULL)
+-      free(zap_redraw_block.r_workarea);
+-     zap_redraw_block.r_workarea = (char*) malloc(128 + zap_redraw_block.r_cbpl);
+-     if (!zap_redraw_block.r_workarea)
+-      return FAIL;    /* Out of memory */
+- 
+-     /* Now convert the 1 bpp character data ready for the current mode */
+- 
+-     bytes_per_bitmap_char = (zap_redraw_block.r_charw * zap_redraw_block.r_charh + 7) / 8;
+- 
+-     /* Convert the fonts from 1bpp to a format suitable for the
+-      * current mode.
+-      */
+-     for (i = 0; i < ZAP_STYLES; i++)
+-     {
+-      first = ((int *) zap_file[i])[4];
+-      last  = ((int *) zap_file[i])[5];
+- 
+-      if (last > 255)
+-          last = 255; /* Don't convert cursors (overwrites memory!) */
+- 
+-      /* Allocate the font cache */
+-      vim_free(zap_caddr[i]);
+-      if (zap_file[i])
+-          zap_caddr[i] = (char*) malloc(zap_redraw_block.r_cbpc * 256);
+-      else
+-          zap_caddr[i] = NULL;    /* No file for this style */
+- 
+-      if (zap_caddr[i])
+-      {
+-          zap_redraw_block.r_caddr = zap_caddr[i];
+- 
+-          swi(ZapRedraw_ConvertBitmap, 0, &zap_redraw_block,
+-                  first, last,                /* Range of characters to convert */
+-                  zap_file[i] + 0x20  /* Addr of first char provided by font */
+-                  - first * bytes_per_bitmap_char);
+-      }
+-     }
+- 
+-     if (!zap_caddr[ZAP_NORMAL])
+-     {
+-      zap_redraw = FALSE;     /* Out of memory */
+-      return FAIL;
+-     }
+- 
+-     /* Next time we need them, we have to update the colour masks */
+-     zap_redraw_update_colours = TRUE;
+- 
+-     return OK;
+- }
+- 
+- /*
+-  * Redraw a string at OS coordinates <x,y> (top-left, x inclusive, y exclusive).
+-  * Graphics clip window is window[0..3] as in R1+28..40 of Wimp_RedrawWindow.
+-  * Returns (possibly modified) flags.
+-  */
+-     int
+- ro_zap_redraw_draw_string(x, y, string, length, flags, clip)
+-     int          x;
+-     int          y;
+-     char    *string;
+-     int          length;
+-     int          flags;      /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL, DRAW_ITALIC */
+-     int          *clip;
+- {
+-     char redraw_data[1024];
+-     int clip_minx;
+-     int clip_miny;
+-     int clip_maxx;
+-     int clip_maxy;
+-     int os_xshift = zap_redraw_block.r_magx;
+-     int os_yshift = zap_redraw_block.r_magy;
+- 
+-     if (flags & DRAW_TRANSP)
+-      return flags;   /* We don't do transparent plotting yet. */
+- 
+-     if (flags & DRAW_BOLD)
+-     {
+-      if (flags & DRAW_ITALIC && zap_caddr[ZAP_BITALIC])
+-          zap_redraw_block.r_caddr = zap_caddr[ZAP_BITALIC];
+-      else
+-          zap_redraw_block.r_caddr = zap_caddr[ZAP_BOLD];
+-     }
+-     else
+-     {
+-      if (flags & DRAW_ITALIC)
+-          zap_redraw_block.r_caddr = zap_caddr[ZAP_ITALIC];
+-      else
+-          zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+-     }
+-     if (!zap_redraw_block.r_caddr)
+-     {
+-      zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+-      flags |= DRAW_UNDERL;       /* Style missing - we can always underline */
+-     }
+- 
+-     /* Set the vertical scaling flag */
+-     if (double_height)
+-      zap_redraw_block.r_flags = 1 << 1;
+-     else
+-      zap_redraw_block.r_flags = 0;
+- 
+-     /* Update the colour masks (if needed) */
+-     if (zap_redraw_update_colours)
+-     {
+-      swi(ZapRedraw_CreatePalette, 2,
+-              &zap_redraw_block,
+-              zap_redraw_colours,
+-              zap_redraw_block.r_palette, 2);
+-      zap_redraw_update_colours = FALSE;
+-     }
+- 
+-     /* Target rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+-     zap_redraw_block.r_minx = x >> os_xshift;                                        /* inclusive */
+-     zap_redraw_block.r_miny = zap_redraw_block.r_ysize - (y >> os_yshift);   /* inclusive */
+-     zap_redraw_block.r_maxx = (x + length * gui.char_width) >> os_xshift;    /* exclusive */
+-     zap_redraw_block.r_maxy = zap_redraw_block.r_ysize - ((y - gui.char_height) >> os_yshift);
+-                                                                              /* exclusive */
+- 
+-     /* Clip rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+-     clip_minx = clip[0] >> os_xshift;                                        /* inclusive */
+-     clip_miny = zap_redraw_block.r_ysize - (clip[3] >> os_yshift);   /* inclusive */
+-     clip_maxx = clip[2] >> os_xshift;                                        /* exclusive */
+-     clip_maxy = zap_redraw_block.r_ysize - (clip[1] >> os_yshift);   /* exclusive */
+- 
+-     /* Clip target rectangle against the current graphics window */
+-     if (zap_redraw_block.r_minx < clip_minx)
+-     {
+-      zap_redraw_block.r_scrollx = clip_minx - zap_redraw_block.r_minx;
+-      zap_redraw_block.r_minx = clip_minx;
+-     }
+-     else
+-      zap_redraw_block.r_scrollx = 0;
+-     if (zap_redraw_block.r_miny < clip_miny)
+-     {
+-      zap_redraw_block.r_scrolly = clip_miny - zap_redraw_block.r_miny;
+-      zap_redraw_block.r_miny = clip_miny;
+-     }
+-     else
+-      zap_redraw_block.r_scrolly = 0;
+-     if (zap_redraw_block.r_maxx > clip_maxx)
+-      zap_redraw_block.r_maxx = clip_maxx;
+-     if (zap_redraw_block.r_maxy > clip_maxy)
+-      zap_redraw_block.r_maxy = clip_maxy;
+- 
+-     /* Fill in the character data structure */
+-     if (length > (sizeof(redraw_data) - 2 * 4 - 2))
+-      length = sizeof(redraw_data) - 2 * 4 - 2;
+-     ((int*) redraw_data)[0] = 2 * 4;
+-     ((int*) redraw_data)[1] = 0;
+-     strncpy(redraw_data + 2 * 4, string, length);
+-     redraw_data[2 * 4 + length + 0] = '\0';
+-     redraw_data[2 * 4 + length + 1] = '\x2';
+-     zap_redraw_block.r_data = (int) redraw_data;
+- 
+-     /* Perform the draw */
+-     swi(ZapRedraw_RedrawArea, 0, &zap_redraw_block);
+- 
+-     return flags;
+- }
+- 
+- /*
+-  * Okay that was it from me, back to Thomas ...
+-  */
+- 
+- /*
+-  * Parse the GUI related command-line arguments.  Any arguments used are
+-  * deleted from argv, and *argc is decremented accordingly.  This is called
+-  * when vim is started, whether or not the GUI has been started.
+-  */
+-     void
+- gui_mch_prepare(int *argc, char **argv)
+- {
+-     int          arg = 1;
+- 
+-     while (arg < *argc - 1)
+-     {
+-      if (strcmp(argv[arg], "--rows") == 0 || strcmp(argv[arg], "--columns") == 0)
+-      {
+-          int     value;
+- 
+-          value = atoi(argv[arg + 1]);
+- 
+-          if (argv[arg][2] == 'r')
+-              default_rows = value;
+-          else
+-              default_columns = value;
+- 
+-          /* Delete argument from argv[]. (hope this is read/write!) */
+- 
+-          *argc -= 2;
+-          if (*argc > arg)
+-          mch_memmove(&argv[arg], &argv[arg + 2], (*argc - arg)
+-                  * sizeof(char *));
+-      }
+-      else
+-          arg++;
+-     }
+- }
+- 
+- /* Fatal error on initialisation - report it and die. */
+-     void
+- ro_die(error)
+-     char_u *error;   /* RISC OS error block */
+- {
+-     swi(Wimp_ReportError, error, 5, "GVim");
+-     exit(EXIT_FAILURE);
+- }
+- 
+- /* Find the sizes of the window tools:
+-  *
+-  * Create a test window.
+-  * Find inner and outer sizes.
+-  * Find the difference.
+-  * Delete window.
+-  *
+-  * While we're here, find the eigen values too.
+-  */
+-     void
+- ro_measure_tools()
+- {
+-     int block[10];
+-     int vdu[] = { 4, 5, -1};
+-     int test_window[] =
+-      {
+-          -100, -100,         /* Visible area : min X,Y */
+-          -50, -50,           /*                max X,Y */
+-          0,   0,             /* Scroll offsets */
+-          -1,                 /* Window in front */
+-          0xd0800150,         /* Window flags */
+-          0xff070207,         /* Colours */
+-          0x000c0103,         /* More colours */
+-          0, -0x4000,         /* Workarea extent */
+-          0x4000, 0,          /* max X,Y */
+-          0x00000000,         /* No title */
+-          0 << 12,            /* No workarea button type */
+-          1,                  /* Wimp sprite area */
+-          0x00010001,         /* Minimum width, height */
+-          0, 0, 0,            /* Title data (none) */
+-          0                   /* No icons */
+-      };
+-     int inner_max_x, inner_min_y;
+- 
+-     swi(Wimp_CreateWindow, 0, test_window);
+- 
+-     block[0] = r0;
+-     /* Open the window (and read state).
+-      * GetWindowOutline needs it too if the wimp isn't nested.
+-      */
+-     swi(Wimp_OpenWindow, 0, block);
+-     inner_max_x = block[3];
+-     inner_min_y = block[2];
+- 
+-     swi(Wimp_GetWindowOutline, 0, block);
+- 
+-     gui.scrollbar_width = block[3] - inner_max_x;
+-     gui.scrollbar_height = inner_min_y - block[2];
+- 
+-     swi(Wimp_DeleteWindow, 0, block);
+- 
+-     /* Read the size of one pixel. */
+-     swi(OS_ReadVduVariables, vdu, vdu);
+-     x_eigen_factor = vdu[0];
+-     y_eigen_factor = vdu[1];
+- }
+- 
+- /* Load a template from the current templates file.
+-  * Create the window and return its handle.
+-  */
+-     int
+- ro_load_template(str_name, title, title_size)
+-     char_u  *str_name;      /* Identifier of window in file (max 12 chars)   */
+-     char_u  **title;     /* If not NULL then return pointer to title here */
+-     int     *title_size;    /* If not NULL then return the title length here */
+- {
+-     int     *window;
+-     char    *data;
+-     int     name[4];
+- 
+-     strcpy( (char *) name, str_name);
+- 
+-     /* Find how big we must make the buffers */
+- 
+-     if (xswi(Wimp_LoadTemplate, 0, 0, 0, 0, -1, name, 0) & v_flag)
+-      ro_die( (char *) r0);
+- 
+-     window = malloc(r1);     /* Don't print text messages from alloc() */
+-     data = malloc(r2);
+-     if (window == NULL || data == NULL)
+-      ro_die("\0\0\0\0Out of memory - Can't load templates");
+- 
+-     /* Load the template into the buffers */
+- 
+-     swi(Wimp_LoadTemplate, 0,
+-                              window,         /* Temp block */
+-                              data,           /* Icon data */
+-                              data + r2 + 1,  /* End of icon data */
+-                              -1,             /* No fonts */
+-                              name, 0);       /* First match */
+-     if (r6 == 0)
+-      ro_die("\0\0\0\0Can't find window in Templates file");
+- 
+-     /* Create the window */
+- 
+-     if (xswi(Wimp_CreateWindow, 0, window) & v_flag)
+-      ro_die( (char *) r0);
+- 
+-     if (title)
+-      *title = (char_u *) window[18];
+-     if (title_size)
+-      *title_size = window[20];
+- 
+-     free(window);    /* Free temp block */
+-     return r0;               /* Return the window handle */
+- }
+- 
+- /*
+-  * Check if the GUI can be started.  Called before gvimrc is sourced.
+-  * Return OK or FAIL.
+-  */
+-     int
+- gui_mch_init_check()
+- {
+-     return OK;               /* TODO: GUI can always be started? */
+- }
+- 
+- /*
+-  * Initialise the RISC OS GUI.
+-  * Create all the windows.
+-  * Returns OK for success, FAIL when the GUI can't be started.
+-  */
+-     int
+- gui_mch_init()
+- {
+-     int     messages[] = {
+-          1, 2, 3, 4, /* DataSave, DataSaveAck, DataLoad, DataLoadAck */
+-          8,          /* PreQuit */
+-          0xf,        /* ClaimEntity (for clipboard) */
+-          0x10,       /* DataRequest (for clipboard) */
+-          0x400c1,    /* Mode change */
+-          0x400c3,    /* TaskCloseDown */
+-          0x400c9,    /* MenusDeleted */
+-          0x808c1,    /* TW_Output */
+-          0x808c2,    /* TW_Ego */
+-          0x808c3,    /* TW_Morio */
+-          0x808c4,    /* TW_Morite */
+-          0};         /* End-of-list. */
+- 
+- 
+-     /* There may have been some errors reported in the
+-      * command window before we get here. Wait if so.
+-      */
+-     swi(Wimp_ReadSysInfo, 3);
+-     if (r0 == 0)
+-      swi(Wimp_CommandWindow, 0);     /* Window opened - close with prompt */
+- 
+-     if (xswi(Wimp_Initialise, 310, 0x4b534154, "GVim", messages) & v_flag)
+-      return FAIL;
+-     nested_wimp = r0 >= 397;
+-     task_handle = r1;
+- 
+-     /* Load the templates. */
+- 
+-     if (xswi(Wimp_OpenTemplate, 0, "Vim:Templates") & v_flag)
+-      ro_die( (char *) r0);
+- 
+-     gui.window_handle = ro_load_template("editor",
+-          &gui.window_title,
+-          &gui.window_title_size);
+- 
+-     save_window = ro_load_template("save", NULL, NULL);
+- 
+-     swi(Wimp_CloseTemplate);
+- 
+-     /* Set default foreground and background colours. */
+- 
+-     gui.norm_pixel = gui.def_norm_pixel;
+-     gui.back_pixel = gui.def_back_pixel;
+- 
+-     /* Get the colours from the "Normal" and "Menu" group (set in syntax.c or
+-      * in a vimrc file) */
+- 
+-     set_normal_colors();
+- 
+-     /*
+-      * Check that none of the colors are the same as the background color
+-      */
+- 
+-     gui_check_colors();
+- 
+-     /* Get the colours for the highlight groups (gui_check_colors() might have
+-      * changed them) */
+- 
+-     highlight_gui_started();         /* re-init colours and fonts */
+- 
+-     /* Set geometry based on values read on initialisation. */
+- 
+-     gui.num_cols = Columns = default_columns;
+-     gui.num_rows = Rows    = default_rows;
+- 
+-     /* Get some information about our environment. */
+- 
+-     ro_measure_tools();
+- 
+-     return OK;
+- }
+- 
+- /*
+-  * Called when the foreground or background colour has been changed.
+-  */
+-     void
+- gui_mch_new_colors()
+- {
+- }
+- 
+- /*
+-  * Open the GUI window which was created by a call to gui_mch_init().
+-  */
+-     int
+- gui_mch_open(void)
+- {
+-     int block[10];
+- 
+-     block[0] = gui.window_handle;
+-     swi(Wimp_GetWindowState, 0, block);
+-     block[7] = -1;               /* Open at the top of the stack */
+-     swi(Wimp_OpenWindow, 0, block);
+- 
+-     /* Give the new window the input focus */
+-     swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+- 
+-     if (gui_win_x != -1 && gui_win_y != -1)
+-      gui_mch_set_winpos(gui_win_x, gui_win_y);
+- 
+-     return OK;
+- }
+- 
+-     void
+- gui_mch_exit(int rc)
+- {
+-     int          block[64];
+- 
+-     /* Close window. Stops us from getting troublesome events
+-      * if we take a while to die.
+-      */
+-     block[0] = gui.window_handle;
+-     swi(Wimp_CloseWindow, 0, block);
+- 
+-     if (child_handle)
+-     {
+-      /* We still have a sub-task running - kill it */
+-      block[0] = 20;
+-      block[3] = 0;
+-      block[4] = 0;       /* Quit */
+-      if ((xswi(Wimp_SendMessage, 17, block, child_handle) & v_flag) == 0)
+-      {
+-          /* Idle until child dies. */
+-          while (child_handle)
+-          {
+-              process_event(wimp_poll(1, block), block);
+-          }
+-      }
+-     }
+- 
+-     exit(rc);
+- }
+- 
+- /*
+-  * Get the position of the top left corner of the window.
+-  */
+-     int
+- gui_mch_get_winpos(int *x, int *y)
+- {
+-     /* TODO */
+-     return FAIL;
+- }
+- 
+- /*
+-  * Set the position of the top left corner of the window to the given
+-  * coordinates.
+-  */
+-     void
+- gui_mch_set_winpos(int x, int y)
+- {
+-     /* TODO */
+- }
+- 
+-     void
+- gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
+-     int width;               /* In OS units */
+-     int height;
+-     int min_width;   /* Smallest permissible window size (ignored) */
+-     int min_height;
+-     int base_width;  /* Space for scroll bars, etc */
+-     int base_height;
+-     int direction;
+- {
+-     int s_width, s_height;
+-     int block[] = {
+-      gui.window_handle,
+-      0,
+-      -height + 1,
+-      width,
+-      1};
+- 
+-     gui_mch_get_screen_dimensions(&s_width, &s_height);
+-     s_width -= base_width;
+-     s_height -= base_height;             /* Underestimate - ignores titlebar */
+- 
+-     swi(Wimp_GetWindowState, 0, block);
+-     block[3]  = block[1] + width;
+-     block[2]  = block[4] - height;
+-     if (block[3] > s_width)
+-     {
+-      block[3] = s_width;
+-      block[1] = block[3] - width;
+-     }
+-     if (block[2] < gui.scrollbar_height)
+-     {
+-      block[2] = gui.scrollbar_height;
+-      block[4] = block[2] + height;
+-     }
+-     swi(Wimp_OpenWindow, 0, block);
+-     swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+- }
+- 
+-     void
+- gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+- {
+-     int block[] = {4, 5, 11, 12, -1};
+- 
+-     swi(OS_ReadVduVariables, block, block);
+-     *screen_w = (block[2] + 1) << block[0];
+-     *screen_h = (block[3] + 1) << block[1];
+- }
+- 
+- /* Take a font name with options and return a font handle, or
+-  * zero for failure.
+-  * Replace extension with 'Bold' or 'Italic' depending on modifiers.
+-  */
+-     int
+- ro_get_font(fullname, weight)
+-     char_u   *fullname;
+-     int              weight;         /* Initial weights:
+-                               * BIT      MEANING
+-                               * 0        bold
+-                               * 1        italic
+-                               */
+- {
+-     char_u   *arg;
+-     char_u   font[41];
+-     int              width = -1;
+-     int              height = -1;
+-     int              name_len;
+-     int              i;
+-     char_u   c;
+- 
+-     for (i = 0; i < 39;)
+-     {
+-      c = fullname[i];
+-      if (c == ':' || c == NUL || c == '.')
+-          break;
+-      font[i++] = c;
+-     }
+- 
+-     /* find the first modifier, NULL if none */
+-     arg = strchr(fullname + i, ':');
+- 
+-     while (arg)
+-     {
+-      switch (*++arg)
+-      {
+-          case 'h':
+-              height = strtol(arg + 1, (char **) &arg, 10);
+-              break;
+-          case 'w':
+-              width = strtol(arg + 1, (char **) &arg, 10);
+-              break;
+-          case 'b':
+-              weight |= 1;
+-              break;
+-          case 'i':
+-              weight |= 2;
+-              break;
+-          default:
+-              return 0;
+-      }
+-      arg = strchr(arg, ':');
+-     }
+- 
+-     if ((weight & 1) && i < 35)
+-     {
+-      /* Bold goes instead of given suffix */
+-      strncpy(font + i, ".Bold", 5);
+-      i += 5;
+-     }
+-     else
+-     {
+-      /* Copy rest of name unless we are using Bold */
+-      while (i < 39)
+-      {
+-          c = fullname[i];
+-          if (c == ':' || c == NUL)
+-              break;
+-          font[i++] = c;
+-      }
+-     }
+-     if ((weight & 2) && i < 32)
+-     {
+-      strncpy(font + i, ".Oblique", 8);
+-      i += 8;
+-     }
+- 
+-     font[i] = 0;
+- 
+-     if (height < 1 && width < 1)
+-      height = width = 10;    /* Default to 10pt */
+-     else if (height < 1)
+-      height = width;
+-     else if (width < 1)
+-      width = height;
+- 
+-     if (xswi(Font_FindFont, 0, font, width << 4, height << 4, 0, 0) & v_flag)
+-      return NOFONT;          /* Can't find font */
+- 
+-     return r0;
+- }
+- 
+- /* Load a file into allocated memory and check it is valid.
+-  * Return a pointer to the allocated block on success.
+-  */
+-     char    *
+- zap_load_file(name, style)
+-     char_u  *name;       /* Name of directory containing styles */
+-     char_u  *style;      /* Name of style within directory */
+- {
+-     char_u  fname[256];
+-     char_u  *file;
+- 
+-     if (strlen(name) + strlen(style) > 254)
+-      return NULL;        /* Names too long */
+- 
+-     sprintf(fname, "%s.%s", name, style);
+- 
+-     /* Load the named font in 1bpp format. */
+-     if (xswi(OS_File, 13, fname, 0, 0, "VimFonts:") & v_flag || r0 != 1)
+-      return NULL;        /* Error reading file info, or not a file */
+- 
+-     /* Allocate enough memory to load the whole file */
+-     file = (char *) alloc(r4);
+-     if (!file)
+-      return NULL;    /* Out of memory */
+- 
+-     if (xswi(OS_File, 12, fname, file, 0, "VimFonts:") & v_flag)
+-      return NULL;    /* Unable to load file */
+- 
+-     if (strncmp(file, "ZapFont\015", 8) == 0)
+-      return file;    /* Loaded OK! */
+- 
+-     vim_free(file);
+-     return NULL;     /* Not a valid font file */
+- }
+- 
+- /* Load and convert the named font.
+-  * If name is NULL or a null string then convert the system font.
+-  * Return OK on success; FAIL and we revert to using the VDU drivers.
+-  *
+-  * 'name' is the name of a directory.
+-  * Tries to load 'name.0', 'name.B', 'name.I' and 'name.IB'.
+-  */
+-     int
+- zap_load_font(name)
+-     char_u  *name;
+- {
+-     int          i;
+- 
+-     /* Free the existing font files, if any */
+-     for (i = 0; i < ZAP_STYLES; i++)
+-     {
+-      vim_free(zap_file[i]);
+-      zap_file[i] = NULL;
+-     }
+- 
+-     if (name && *name == '!')
+-     {
+-      name++;
+-      double_height = TRUE;
+-     }
+-     else
+-      double_height = FALSE;
+- 
+-     if (name && *name)
+-     {
+-      zap_file[ZAP_NORMAL]    = zap_load_file(name, "0");
+-      if (!zap_file[ZAP_NORMAL])
+-          return FAIL;        /* Can't load the 'normal' style - error */
+- 
+-      zap_file[ZAP_BOLD]      = zap_load_file(name, "B");
+-      zap_file[ZAP_ITALIC]    = zap_load_file(name, "I");
+-      zap_file[ZAP_BITALIC]   = zap_load_file(name, "IB");
+-     }
+-     else
+-     {
+-      int     *header;
+-      char    workarea[16];
+-      char    *old_wa;
+- 
+-      /* Allocate memory for system font (8 x 8 x 256 bits, plus header) */
+-      header = (int *) alloc(0x20 + 8 * 256);
+-      if (header == NULL)
+-          return FAIL;
+-      zap_file[ZAP_NORMAL] = (char *) header;
+- 
+-      /* Store details about the system font */
+-      header[2] = 8;      /* Width */
+-      header[3] = 8;      /* Height */
+-      header[4] = 0;      /* First char */
+-      header[5] = 255;    /* Last char */
+-      header[6] = header[7] = 0;  /* Reserved */
+- 
+-      /* Get system font bitmap */
+-      old_wa = zap_redraw_block.r_workarea;
+-      zap_redraw_block.r_workarea = workarea;
+-      swi(ZapRedraw_ReadSystemChars, zap_file[ZAP_NORMAL] + 0x20, &zap_redraw_block);
+-      zap_redraw_block.r_workarea = old_wa;
+-     }
+- 
+-     return ro_zap_redraw_initialise();
+- }
+- 
+- /*
+-  * Initialise vim to use the font with the given name.
+-  * Return FAIL if the font could not be loaded, OK otherwise.
+-  */
+-     int
+- gui_mch_init_font(char_u *font_name, int fontset)
+- {
+-     int          new_handle  = 0;        /* Use the system font by default */
+- 
+-     if (font_name[0] == '!')
+-     {
+-      /* Select a ZapRedraw font */
+-      if (zap_load_font(font_name + 1))
+-          zap_redraw = TRUE;
+-      else
+-      {
+-          EMSG2(_("E610: Can't load Zap font '%s'"), font_name);
+-          font_name = "System";   /* Error - use system font */
+-          zap_redraw = FALSE;
+-      }
+-     }
+-     else
+-     {
+-      zap_redraw = FALSE;
+- 
+-      if (font_name)
+-      {
+-          /* Extract any extra details about the font */
+-          new_handle = ro_get_font(font_name, 0);
+-          if (!new_handle)
+-              return FAIL;
+-      }
+-      else
+-          font_name = "System";
+-     }
+- 
+-     /* Free the previous font, if any */
+-     gui_mch_free_font(gui.norm_font);
+-     gui.norm_font = new_handle;
+-     gui.char_ascent = 0;
+- 
+-     if (new_handle)
+-     {
+-      /* Read details about the chosen font */
+-      swi(Font_ReadInfo, new_handle);
+- 
+-      gui.char_width  = r3 - r1;
+-      gui.char_height = r4 - r2;
+- 
+-      font_x_offset = -r1;    /* Where to position each char in its box */
+-      font_y_offset = -r4;
+- 
+-      /* Try to load other fonts for bold, italic, and bold-italic */
+-      gui_mch_free_font(gui.bold_font);
+-      gui.bold_font = ro_get_font(font_name, 1);
+-      gui_mch_free_font(gui.ital_font);
+-      gui.ital_font = ro_get_font(font_name, 2);
+-      gui_mch_free_font(gui.boldital_font);
+-      gui.boldital_font = ro_get_font(font_name, 3);
+-     }
+-     else
+-     {
+-      /* Use the system font or ZapRedraw. */
+-      if (zap_redraw)
+-      {
+-          gui.char_width      = zap_redraw_block.r_charw << zap_redraw_block.r_magx;
+-          gui.char_height     = zap_redraw_block.r_charh << zap_redraw_block.r_magy;
+-          if (double_height)
+-              gui.char_height <<= 1;
+-      }
+-      else
+-      {
+-          gui.char_width      = 16;
+-          gui.char_height     = 32;
+-      }
+- 
+-      gui_mch_free_font(gui.bold_font);
+-      gui.bold_font = 0;
+-      gui_mch_free_font(gui.ital_font);
+-      gui.ital_font = 0;
+-      gui_mch_free_font(gui.boldital_font);
+-      gui.boldital_font = 0;
+-     }
+-     hl_set_font_name(font_name);
+- 
+-     must_redraw = CLEAR;
+-     return OK;
+- }
+- 
+- /*
+-  * Adjust gui.char_height (after 'linespace' was changed).
+-  */
+-     int
+- gui_mch_adjust_charheight()
+- {
+-     return FAIL;
+- }
+- 
+- /*
+-  * Get a font structure for highlighting.
+-  */
+-     GuiFont
+- gui_mch_get_font(name, giveErrorIfMissing)
+-     char_u   *name;
+-     int              giveErrorIfMissing;
+- {
+-     int              handle;
+- 
+-     if (!name)
+-      return NOFONT;          /* System font if no name */
+- 
+-     handle = ro_get_font(name, 0);
+-     if (!handle)
+-     {
+-      if (giveErrorIfMissing)
+-          EMSG2(_("E611: Can't use font %s"), name);
+-      return NOFONT;
+-     }
+- 
+-     return handle;
+- }
+- 
+- #if defined(FEAT_EVAL) || defined(PROTO)
+- /*
+-  * Return the name of font "font" in allocated memory.
+-  * Don't know how to get the actual name, thus use the provided name.
+-  */
+-     char_u *
+- gui_mch_get_fontname(font, name)
+-     GuiFont font;
+-     char_u  *name;
+- {
+-     if (name == NULL)
+-      return NULL;
+-     return vim_strsave(name);
+- }
+- #endif
+- 
+- /*
+-  * Set the current text font.
+-  */
+-     void
+- gui_mch_set_font(GuiFont font)
+- {
+-     ro_current_font = font;
+- 
+-     if (font)
+-     {
+-      /* Not the system font or ZapRedraw font - select it */
+-      swi(Font_SetFont, font);
+-     }
+- }
+- 
+- /*
+-  * If a font is not going to be used, free its structure.
+-  */
+-     void
+- gui_mch_free_font(GuiFont font)
+- {
+-     if (font)
+-      swi(Font_LoseFont, font);
+- }
+- 
+- /*
+-  * Return the Pixel value (colour) for the given colour name.
+-  * Return INVALCOLOR for error.
+-  * NB: I've changed Green for now, since it looked really sick
+-  */
+-     guicolor_T
+- gui_mch_get_color(char_u *name)
+- {
+-     int              i;
+-     struct colour
+-     {
+-      char_u          *name;
+-      guicolor_T      value;
+-     } colours[] =
+-     {
+-      { "Red",                grgb(255,       0,      0)      },
+-      { "LightRed",           grgb(255,       0,      0)      },
+-      { "DarkRed",            grgb(139,       0,      0)      },
+- 
+-      { "Green",              grgb(50,        200,    50)     },
+-      { "LightGreen",         grgb(144,       238,    144)    },
+-      { "DarkGreen",          grgb(0,         100,    0)      },
+-      { "SeaGreen",           grgb(46,        139,    87)     },
+- 
+-      { "Blue",               grgb(0,         0,      255)    },
+-      { "LightBlue",          grgb(173,       216,    230)    },
+-      { "DarkBlue",           grgb(0,         0,      139)    },
+-      { "SlateBlue",          grgb(160,       90,     205)    },
+- 
+-      { "Cyan",               grgb(0,         255,    255)    },
+-      { "LightCyan",          grgb(224,       255,    255)    },
+-      { "DarkCyan",           grgb(0,         139,    139)    },
+- 
+-      { "Magenta",            grgb(255,       0,      255)    },
+-      { "LightMagenta",       grgb(255,       224,    255)    },
+-      { "DarkMagenta",        grgb(139,       0,      139)    },
+- 
+-      { "Yellow",             grgb(255,       255,    0)      },
+-      { "LightYellow",        grgb(255,       255,    224)    },
+-      { "DarkYellow",         grgb(139,       139,    0)      },
+-      { "Brown",              grgb(165,       42,     42)     },
+- 
+-      { "Gray",               grgb(190,       190,    190)    },
+-      { "Grey",               grgb(190,       190,    190)    },
+-      { "LightGray",          grgb(211,       211,    211)    },
+-      { "LightGrey",          grgb(211,       211,    211)    },
+-      { "DarkGray",           grgb(169,       169,    169)    },
+-      { "DarkGrey",           grgb(169,       169,    169)    },
+-      { "Gray10",             grgb(26,        26,     26)     },
+-      { "Grey10",             grgb(26,        26,     26)     },
+-      { "Gray20",             grgb(51,        51,     51)     },
+-      { "Grey20",             grgb(51,        51,     51)     },
+-      { "Gray30",             grgb(77,        77,     77)     },
+-      { "Grey30",             grgb(77,        77,     77)     },
+-      { "Gray40",             grgb(102,       102,    102)    },
+-      { "Grey40",             grgb(102,       102,    102)    },
+-      { "Gray50",             grgb(127,       127,    127)    },
+-      { "Grey50",             grgb(127,       127,    127)    },
+-      { "Gray60",             grgb(153,       153,    153)    },
+-      { "Grey60",             grgb(153,       153,    153)    },
+-      { "Gray70",             grgb(179,       179,    179)    },
+-      { "Grey70",             grgb(179,       179,    179)    },
+-      { "Gray80",             grgb(204,       204,    204)    },
+-      { "Grey80",             grgb(204,       204,    204)    },
+-      { "Gray90",             grgb(229,       229,    229)    },
+-      { "Grey90",             grgb(229,       229,    229)    },
+- 
+-      { "Black",              grgb(0,         0,      0)      },
+-      { "White",              grgb(255,       255,    255)    },
+- 
+-      { "Orange",             grgb(255,       165,    0)      },
+-      { "Purple",             grgb(160,       32,     240)    },
+-      { "Violet",             grgb(238,       130,    238)    },
+-      {NULL, 0}
+-     };
+- 
+-     if (name[0] == '#')
+-     {
+-      char        *end;
+-      int         c;
+- 
+-      c = strtol(name + 1, &end, 16);
+-      return (guicolor_T) ((c >> 16) & 0xff) | (c & 0xff00) | ((c & 0xff) << 16);
+-     }
+- 
+-     for (i = 0; colours[i].name != NULL; i++)
+-     {
+-      if (STRICMP(name, colours[i].name) == 0)
+-          return colours[i].value;
+-     }
+-     if (strnicmp(name, "grey", 4) == 0 || strnicmp(name, "gray", 4) == 0)
+-     {
+-      int level = (255 * atoi(name + 4)) / 100;
+-      return (guicolor_T) grgb(level, level, level);
+-     }
+-     return INVALCOLOR;
+- }
+- 
+- /*
+-  * Set the current text colours.
+-  * If we are using fonts then set the antialiasing colours too.
+-  */
+-     void
+- gui_mch_set_colors(guicolor_T fg, guicolor_T bg)
+- {
+-     zap_redraw_colours[0] = bg << 8; /* JK230798, register new background colour */
+-     zap_redraw_colours[1] = fg << 8; /* JK230798, register new foreground colour */
+-     zap_redraw_update_colours = TRUE;        /* JK230798, need update of colour masks */
+- 
+-     swi(ColourTrans_ReturnGCOL, fg << 8);
+-     gui.fg_colour = r0;
+-     swi(ColourTrans_ReturnGCOL, bg << 8);
+-     gui.bg_colour = r0;
+- 
+-     if (ro_current_font)
+-      swi(ColourTrans_SetFontColours, 0, bg << 8, fg << 8, 14);
+- }
+- 
+-     void
+- ro_draw_string(x, y, s, len, flags, clip)
+-     int          x;          /* Top-left coord to plot at (x incl, y excl) */
+-     int          y;          /* (screen coords) */
+-     char_u  *s;              /* String to plot */
+-     int          len;        /* Length of string */
+-     int          flags;      /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL */
+-     int*    clip;    /* JK230798, added clip window */
+- {
+-     if (ro_current_font)
+-     {
+-      int     fx;
+-      int     flen = len;     /* Preserve for underline */
+- 
+-      /* Use the Font manager to paint the string.
+-       * Must do one char at a time to get monospacing.
+-       */
+- 
+-      if (flags & DRAW_ITALIC && !gui.ital_font)
+-          flags |= DRAW_UNDERL;       /* No italic - underline instead */
+- 
+-      if ((flags & DRAW_TRANSP) == 0)
+-      {
+-          swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+-          swi(OS_Plot, 4, x, y - gui.char_height);
+-          swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+-      }
+- 
+-      fx = x + font_x_offset;
+-      while (flen--)
+-      {
+-          swi(Font_Paint, 0, s++, 0x90, fx, y + font_y_offset, 0, 0, 1);
+-          fx += gui.char_width;
+-      }
+-     }
+-     else
+-     {
+-      if (zap_redraw)
+-      {
+-          /* Using fast Zap redraw. */
+-          flags = ro_zap_redraw_draw_string(x, y, s, len, flags, clip);
+-      }
+-      else
+-      {
+-          /* Using the system font */
+-          if (flags & DRAW_ITALIC)
+-              flags |= DRAW_UNDERL;
+- 
+-          if ((flags & DRAW_TRANSP) == 0)
+-          {
+-              swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+-              swi(OS_Plot, 4, x, y - gui.char_height);
+-              swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+-          }
+-          swi(OS_Plot, 4,                     /* Move the drawing cursor */
+-                  x,
+-                  y - 1);
+-          swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+-          swi(OS_WriteN, s, len);
+- 
+-          if (flags & DRAW_BOLD)
+-          {
+-              swi(OS_Plot, 4, x + (1 << x_eigen_factor), y - 1);
+-              swi(OS_WriteN, s, len);
+-          }
+-      }
+-     }
+- 
+-     if (flags & DRAW_UNDERL)
+-     {
+-      if (ro_current_font || zap_redraw)
+-          swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+-      /* Underlined is the same with all plotting methods */
+-      swi(OS_Plot, 4, x, y - gui.char_height);
+-      swi(OS_Plot, 1, gui.char_width * len, 0);
+-     }
+- }
+- 
+-     void
+- gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
+- {
+-     int x, y;                /* Workarea x,y */
+-     x = col * gui.char_width;
+-     y = -row * gui.char_height;
+- 
+-     if (redraw_block)
+-     {
+-      ro_draw_string(x + redraw_block[1], y + redraw_block[4],
+-                      s, len, flags, &redraw_block[7]);       /* JK230798, added clip window */
+-     }
+-     else
+-     {
+-      int block[44];
+-      block[0] = gui.window_handle;
+-      block[1] = x;
+-      block[2] = y - gui.char_height;
+-      block[3] = (col + len) * gui.char_width;
+-      block[4] = y;
+-      swi(Wimp_UpdateWindow, 0, block);
+-      while (r0)
+-      {
+-          ro_draw_string(x + block[1], y + block[4],
+-                      s, len, flags, &block[7]);      /* JK230798, added clip window */
+-          swi(Wimp_GetRectangle, 0, block);
+-      }
+-     }
+- }
+- 
+- /*
+-  * Return OK if the key with the termcap name "name" is supported.
+-  */
+-     int
+- gui_mch_haskey(char_u *name)
+- {
+-     return FAIL;
+- }
+- 
+-     void
+- gui_mch_beep(void)
+- {
+-     swi(OS_WriteI + 7);
+- }
+- 
+- /*
+-  * Visual bell.
+-  */
+-     void
+- gui_mch_flash(int msec)
+- {
+-     /* TODO */
+- }
+- 
+- 
+- /*
+-  * Plot a solid rectangle using the given plot action and colour.
+-  * Coordinates are inclusive and window-relative.
+-  */
+-     void
+- plot_rectangle(plot, colour, minx, miny, maxx, maxy)
+-     int plot;                /* OS_Plot action */
+-     int colour;
+-     int minx;
+-     int miny;
+-     int maxx;
+-     int maxy;
+- {
+-     if (redraw_block)
+-     {
+-      swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+-      swi(OS_Plot, 4, minx + redraw_block[1], miny + redraw_block[4]);
+-      swi(OS_Plot, plot, maxx + redraw_block[1], maxy + redraw_block[4]);
+-     }
+-     else
+-     {
+-      int block[44];
+-      block[0] = gui.window_handle;
+-      block[1] = minx;
+-      block[2] = miny;
+-      block[3] = maxx + 1;
+-      block[4] = maxy + 1;
+-      swi(Wimp_UpdateWindow, 0, block);
+-      while (r0)
+-      {
+-          swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+-          swi(OS_Plot, 4, minx + block[1], miny + block[4]);
+-          swi(OS_Plot, plot, maxx + block[1], maxy + block[4]);
+-          swi(Wimp_GetRectangle, 0, block);
+-      }
+-     }
+- }
+- 
+- /*
+-  * Invert a rectangle from row r, column c, for nr rows and nc columns.
+-  */
+-     void
+- gui_mch_invert_rectangle(int r, int c, int nr, int nc)
+- {
+-     plot_rectangle(96 + 6, 0, FILL_X(c), -FILL_Y(r + nr), FILL_X(c + nc), -FILL_Y(r));
+- }
+- 
+- /*
+-  * Iconify the GUI window.
+-  */
+-     void
+- gui_mch_iconify(void)
+- {
+- }
+- 
+- #if defined(FEAT_EVAL) || defined(PROTO)
+- /*
+-  * Bring the Vim window to the foreground.
+-  */
+-     void
+- gui_mch_set_foreground()
+- {
+-     /* TODO */
+- }
+- #endif
+- 
+- /* Draw a hollow rectangle relative to the current
+-  * graphics cursor position, with the given width
+-  * and height. Start position is top-left.
+-  */
+-     void
+- draw_hollow(w, h)
+-     int      w;
+-     int      h;
+- {
+-     swi(OS_Plot, 1, w - 1, 0);
+-     swi(OS_Plot, 1, 0, 1 - h);
+-     swi(OS_Plot, 1, 1 - w, 0);
+-     swi(OS_Plot, 1, 0, h - 1);
+- }
+- 
+- /*
+-  * Draw a cursor without focus.
+-  */
+-     void
+- gui_mch_draw_hollow_cursor(guicolor_T colour)
+- {
+-     int x = FILL_X(gui.cursor_col);  /* Window relative, top-left */
+-     int y = -FILL_Y(gui.cursor_row);
+-     if (redraw_block == NULL)
+-     {
+-      int block[11];
+- 
+-      block[0] = gui.window_handle;
+-      block[1] = x;
+-      block[2] = y - gui.char_height;
+-      block[3] = x + gui.char_width;
+-      block[4] = y;
+-      swi(Wimp_UpdateWindow, 0, block);
+-      while (r0)
+-      {
+-          swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+- 
+-          swi(OS_Plot, 4, x + block[1], y + block[4] - 1);
+-          draw_hollow(gui.char_width, gui.char_height);
+- 
+-          swi(Wimp_GetRectangle, 0, block);
+-      }
+-     }
+-     else
+-     {
+-      swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+- 
+-      swi(OS_Plot, 4, x + redraw_block[1], y + redraw_block[4] - 1);
+-      draw_hollow(gui.char_width, gui.char_height);
+-     }
+- }
+- 
+- /*
+-  * Draw part of a cursor, "w" pixels wide, and "h" pixels high, using
+-  * color "color".
+-  */
+-     void
+- gui_mch_draw_part_cursor(w, h, colour)
+-     int w;
+-     int h;
+-     guicolor_T colour;
+- {
+-     int x = FILL_X(gui.cursor_col);
+-     int y = -FILL_Y(gui.cursor_row);
+-     swi(ColourTrans_ReturnGCOL, colour << 8);
+-     plot_rectangle(96 + 5, r0, x, y - h, x + w - 1, y - 1);
+- }
+- 
+- /*
+-  * Catch up with any queued events.  This may put keyboard input into the
+-  * input buffer, call resize call-backs, trigger timers etc.
+-  * If there is nothing in the event queue(& no timers pending), then we return
+-  * immediately (well, after a Wimp_Poll).
+-  */
+-     void
+- gui_mch_update(void)
+- {
+-     int block[64];
+-     int reason;
+- 
+-     swi(OS_ReadMonotonicTime);
+-     if ((r0 - time_of_last_poll) < 50)
+-      return;                     /* Don't return too often */
+- 
+-     reason = wimp_poll(0, block);
+-     if (reason)
+-      process_event(reason, block);
+-     ro_return_early = FALSE;         /* We're returning anyway. */
+- }
+- 
+-     void
+- redraw_window(block)
+-     int *block;
+- {
+-     int x, y;                        /* Vim workarea coords */
+-     int width, height;
+-     int blank_col;
+- 
+-     swi(ColourTrans_ReturnGCOL, UNUSED_COLOUR << 8, 0, 0, 1<<7, 0);
+-     blank_col = r0;
+- 
+-     swi(Wimp_RedrawWindow, 0, block);
+-     redraw_block = block;
+-     while (r0)
+-     {
+-      x = block[7] - block[1];
+-      y = block[4] - block[10];
+-      width  = block[9]  - block[7];
+-      height = block[10] - block[8];
+- 
+-      if (height + y > Rows * gui.char_height)
+-      {
+-          /* Blank everything off the bottom. */
+-          plot_rectangle(96 + 5, blank_col,
+-                              0, block[8] - block[4],
+-                              block[9] - block[1], -FILL_Y(Rows) - 1);
+-          height = Rows * gui.char_height;
+-      }
+-      if (width + x> Columns * gui.char_width)
+-      {
+-          /* Blank everything off to the right. */
+-          plot_rectangle(96 + 5, blank_col,
+-                              FILL_X(Columns), block[8] - block[4],
+-                              block[9] - block[1], 0);
+-          width = Columns * gui.char_width;
+-      }
+-      gui_redraw(x , y, width, height);
+-      swi(Wimp_GetRectangle, 0, block);
+-     }
+-     redraw_block = NULL;
+- }
+- 
+- /* Check if we have modified data.
+-  * If we do then ack the message to stop the shutdown.
+-  * Otherwise, ignore the message.
+-  */
+-     void
+- ro_prequit(block)
+-     int          *block;
+- {
+-     if (!ro_ok_to_quit())
+-     {
+-      /* Not OK to quit - stop shutdown */
+-      block[3] = block[2];
+-      swi(Wimp_SendMessage, 19, block, block[1]);
+-     }
+-     /* Do nothing. We may get a Message_Quit later. */
+- }
+- 
+- /* If there is unsaved data then ask the user if they mind losing it.
+-  * Return TRUE if we can quit without saving, FALSE to halt the
+-  * shutdown.
+-  */
+-     int
+- ro_ok_to_quit()
+- {
+-     int          old_confirm = cmdmod.confirm;
+- 
+-     cmdmod.confirm = FALSE;      /* Use our own, single tasking, box */
+- 
+-     if (check_changed_any(FALSE))
+-     {
+-      swi(Wimp_ReportError,
+-              "\0\0\0\0Vim contains unsaved data - quit anyway?",
+-              0x17,
+-              "Vim");
+-      cmdmod.confirm = old_confirm;
+-      if (r1 != 1)
+-          return FALSE;
+-     }
+-     cmdmod.confirm = old_confirm;
+-     return TRUE;
+- }
+- 
+- /* Quit without checking for unsaved data. */
+-     void
+- ro_quit()
+- {
+-     exiting = TRUE;
+-     getout(0);
+- 
+-     exiting = FALSE;             /* probably can't get here */
+-     setcursor();                 /* position cursor */
+-     out_flush();
+- }
+- 
+- /* Insent the given vim special code into the input buffer */
+-     void
+- ro_press(a, b, modifier)
+-     char a;
+-     char b;
+-     int modifier;    /* %<Ctrl><Shift> 0000 0000 */
+- {
+-     char_u buf[6];
+-     int          vim_mod;
+-     int          key;
+- 
+- 
+-     /* Convert RISC OS modifier to Vim modifier. */
+-     vim_mod = ((modifier & 0x10) ? MOD_MASK_SHIFT : 0)
+-             | ((modifier & 0x20) ? MOD_MASK_CTRL : 0);
+-     key = simplify_key(TERMCAP2KEY(a, b), &vim_mod);
+- 
+-     buf[3] = CSI;
+-     buf[4] = KEY2TERMCAP0(key);
+-     buf[5] = KEY2TERMCAP1(key);
+-     if (vim_mod)
+-     {
+-      buf[0] = CSI;
+-      buf[1] = KS_MODIFIER;
+-      buf[2] = vim_mod;
+-      add_to_input_buf(buf, 6);
+-     }
+-     else
+-      add_to_input_buf(buf + 3, 3);
+- }
+- 
+- /* Take a wimp key code and insert the vim equivalent
+-  * into vim's input buffer.
+-  * CTRL-C also sets got_int.
+-  */
+-     void
+- ro_insert_key(code)
+-     char_u *code;            /* Wimp_ProcessKey code (4 bytes) */
+- {
+-     char a = code[0];
+-     char b = code[1];
+-     int base, modifier;
+- 
+-     if (a == 3 && ctrl_c_interrupts)
+-      got_int = TRUE;
+- 
+-     /* Is it a normal key? */
+-     if (a > 31 && a < 127)
+-     {
+-      add_to_input_buf(code, 1);
+-      return;
+-     }
+- 
+-     /* We should pass any unrecognised keys on, but
+-      * for now just pass on F12 combinations.
+-      */
+-     switch (b)
+-     {
+-      case 0:
+-          /* Home and Delete are the only special cases */
+-          switch (a)
+-          {
+-              case 0x1e:
+-                  ro_press('k','h', 0);       /* Home */
+-                  return;
+-              case 0x7f:
+-                  ro_press('k','D', 0);       /* Delete */
+-                  return;
+-              case CSI:
+-                  {
+-                      /* Turn CSI into K_CSI.  Untested! */
+-                      char_u string[3] = {CSI, KS_EXTRA, KE_CSI};
+- 
+-                      add_to_input_buf(string, 3);
+-                      return;
+-                  }
+-              default:
+-                  add_to_input_buf(code, 1);
+-                  return;
+-          }
+-      case 1:
+-          if ((a & 0xcf) == 0xcc)
+-          {
+-              /* F12 pressed - pass it on (quick hack) */
+-              swi(Wimp_ProcessKey, a | 0x100);
+-              return;
+-          }
+-          base = a & 0xcf;
+-          modifier = a & 0x30;
+-          switch (base)
+-          {
+-              case 0x8a:      /* Tab */
+-                  add_to_input_buf("\011", 1);
+-                  return;
+-              case 0x8b:      /* Copy (End) */
+-                  return ro_press('@', '7', modifier);
+-              case 0x8c:      /* Left */
+-                  return ro_press('k', 'l', modifier);
+-              case 0x8d:      /* Right */
+-                  return ro_press('k', 'r', modifier);
+-              case 0x8e:      /* Down */
+-                  if (modifier & 0x10)
+-                      return ro_press('k', 'N', modifier ^ 0x10);
+-                  else
+-                      return ro_press('k', 'd', modifier);
+-              case 0x8f:      /* Up */
+-                  if (modifier & 0x10)
+-                      return ro_press('k', 'P', modifier ^ 0x10);
+-                  else
+-                      return ro_press('k', 'u', modifier);
+-              case 0xca:      /* F10 */
+-                  return ro_press('k', ';', modifier);
+-              case 0xcb:      /* F11 */
+-                  return ro_press('F', '1', modifier);
+-              case 0xcd:      /* Insert */
+-                  return ro_press('k', 'I', modifier);
+-              default:
+-                  if (base > 0x80 && base < 0x18a)
+-                  {
+-                      /* One of the other function keys */
+-                      return ro_press('k', '0' + (base & 15), modifier);
+-                  }
+-          }
+-     }
+- }
+- 
+- /* Process a mouse event. */
+-     void
+- ro_mouse(block)
+-     int *block;
+- {
+-     int x, y, button, vim_button;
+-     int modifiers = 0;
+-     int min_x, min_y;                /* Visible area of editor window */
+-     int max_x, max_y;
+- 
+-     if (block[3] != gui.window_handle || ro_dragging)
+-      return;                 /* Not our window or ignoring clicks*/
+- 
+-     x = block[0];            /* Click position - screen coords */
+-     y = block[1];
+-     button = block[2];
+- 
+-     block[0] = gui.window_handle;
+-     swi(Wimp_GetWindowState, 0, block);
+-     min_x = block[1];
+-     min_y = block[2];
+-     max_x = block[3];
+-     max_y = block[4];
+- 
+-     if (block[3] - x < gui.scrollbar_width)
+-     {
+-      /* Click in that blank area under the scrollbars */
+- 
+-      if (button & 0x444)
+-      {
+-          int     front_block[64];
+-          /* Dragging with Select - bring window to front first */
+-          front_block[0] = gui.window_handle;
+-          swi(Wimp_GetWindowState, 0, front_block);
+-          front_block[7] = -1;
+-          ro_open_main(front_block);
+-      }
+- 
+-      block[0] = gui.window_handle;
+-      block[1] = 7;                   /* Drag point */
+-      block[2] = block[4] = 0;        /* Coords of point. */
+-      block[3] = block[5] = 0;
+-      drag_x_offset = max_x - x;
+-      drag_y_offset = min_y - y;
+- 
+-      /* Parent box. */
+-      block[6] = min_x +
+-                      gui.scrollbar_width * 2 +
+-                      MIN_COLUMNS * gui.char_width;
+-      block[7] = 0;
+-      gui_mch_get_screen_dimensions(&block[8], &block[9]);
+-      block[9] = max_y -
+-                      4 * gui.char_height -
+-                      gui.scrollbar_height;
+- 
+-      swi(Wimp_DragBox, 0, block);
+-      ro_dragging = DRAG_RESIZE_WINDOW;
+-      drag_button = vim_button;
+-      drag_modifiers = modifiers;
+-      return;
+-     }
+- 
+-     if (button & 0x111)
+-      vim_button = MOUSE_RIGHT;
+-     else if (button & 0x222)
+-      vim_button = MOUSE_MIDDLE;
+-     else
+-      vim_button = MOUSE_LEFT;
+- 
+-     swi(OS_Byte, 121, 0x80);
+-     if (r1 == 0xff)
+-      modifiers |= MOUSE_SHIFT;
+-     swi(OS_Byte, 121, 0x81);
+-     if (r1 == 0xff)
+-      modifiers |= MOUSE_CTRL;
+-     swi(OS_Byte, 121, 0x82);
+-     if (r1 == 0xff)
+-      modifiers |= MOUSE_ALT;
+- 
+-     if (button == 2)
+-     {
+-      /* Menu click:
+-       * If shift was pressed then do the paste action.
+-       * If not, then open the pop-up menu.
+-       */
+-      modifiers ^= MOUSE_SHIFT;
+-      if (modifiers && MOUSE_SHIFT)
+-      {
+-          vimmenu_T   main;
+-          /* Shift was NOT pressed - show menu */
+-          main.dname = (char_u *) "Vim";
+-          main.children = root_menu;
+-          gui_mch_show_popupmenu(&main);
+-          return;
+-      }
+-     }
+- 
+-     /* Gain the input focus */
+-     swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+- 
+-     if (button & 0xf0)
+-     {
+-      /* Drag operation:
+-       *
+-       * Tell the Wimp to start a drag.
+-       * Monitor null events.
+-       */
+-      block[1] = 7;                   /* Drag a point. */
+-      block[2] = block[4] = x;        /* Coords of point. */
+-      block[3] = block[5] = y;
+-      block[6] = 0;                   /* Coords of bounding box. */
+-      block[7] = 0;
+-      gui_mch_get_screen_dimensions(&block[8], &block[9]);
+- 
+-      drag_x_offset = drag_y_offset = 0;
+- 
+-      swi(Wimp_DragBox, 0, block);
+-      ro_dragging = DRAG_SELECTION;
+-      drag_button = vim_button;
+-      drag_modifiers = modifiers;
+- 
+-      vim_button |= MOUSE_DRAG;
+-     }
+- 
+-     gui_send_mouse_event(
+-              vim_button,
+-              x - min_x,
+-              max_y - y,
+-              button & 0xf ? TRUE : FALSE,    /* dclick */
+-              modifiers);
+- }
+- 
+-     void
+- ro_continue_drag(block)
+-     int *block;                      /* Just used as scrap. */
+- {
+-     int x, y;
+- 
+-     /* Get screen coords of pointer. */
+-     swi(Wimp_GetPointerInfo, 0, block);
+-     x = block[0] + drag_x_offset;
+-     y = block[1] + drag_y_offset;
+- 
+-     block[0] = gui.window_handle;
+-     swi(Wimp_GetWindowState, 0, block);
+- 
+-     if (ro_dragging == DRAG_RESIZE_WINDOW)
+-     {
+-      /* Resizing the main window. */
+-      block[2] = y;
+-      block[3] = x;
+-      ro_open_main(block);
+-     }
+-     else
+-     {
+-      /* Selecting some text. */
+-      gui_send_mouse_event(
+-          drag_button | MOUSE_DRAG,   /* Always report the same button */
+-          x - block[1],
+-          block[4] - y,
+-          FALSE,                      /* Not a double click. */
+-          drag_modifiers);
+-     }
+- }
+- 
+- /* User has released all mouse buttons, marking the end of a drag. */
+-     void
+- ro_drag_finished(block)
+-     int *block;
+- {
+-     int x;
+-     int y;
+-     int width, height;
+- 
+-     /* I don't trust the box returned by Wimp_Poll; look at the pointer
+-      * ourselves.
+-      */
+-     swi(Wimp_GetPointerInfo, 0, block);
+-     x = block[0] + drag_x_offset;
+-     y = block[1] + drag_y_offset;
+- 
+-     if (ro_dragging == DRAG_RESIZE_WINDOW)
+-     {
+-      block[0] = gui.window_handle;
+-      swi(Wimp_GetWindowState, 0, block);
+-      block[2] = y;
+-      block[3] = x;
+-      ro_open_main(block);
+- 
+-      width = (block[3] - block[1]);
+-      height = (block[4] - block[2]);
+- 
+-      swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+-      gui_resize_shell(width, height);
+-     }
+-     else
+-     {
+-      block[0] = gui.window_handle;
+-      swi(Wimp_GetWindowState, 0, block);
+-      gui_send_mouse_event(
+-              MOUSE_RELEASE,
+-              x - block[1],
+-              block[4] - y,
+-              FALSE,                  /* not a double click */
+-              drag_modifiers);
+-     }
+-     ro_dragging = DRAG_FALSE;
+- }
+- 
+- /* Load the file/pathname given in block into a [new] buffer.
+-  *
+-  * Modifier  Action
+-  *
+-  * None              :confirm e <file>
+-  * Ctrl              :sp <file>
+-  * Shift     <file>
+-  *
+-  * Insert into typebuf, at the start.
+-  * If loading from !Scrap then use saved leafname instead, and
+-  * delete the scrap file. Also, ignore shift key.
+-  *
+-  * NB: Doesn't send DataLoadAck (other app might delete temp file?).
+-  */
+-     void
+- ro_dataload(block)
+-     int          *block;
+- {
+-     char_u  new_path[MAXPATHL];
+-     char_u  *path = ((char_u *) block) + 44;
+-     int          scrap = FALSE;
+- 
+-     if (block[3] == leaf_ref && leaf_name)
+-      scrap = TRUE;
+- 
+-     switch (get_real_state() & 0xff)
+-     {
+-      case INSERT:
+-      case CMDLINE:
+-      case CMDLINE+LANGMAP:
+-          /* For insert mode we can only insert the pathname (currently)
+-           * Make sure Shift is pressed.
+-           */
+-          swi(OS_Byte, 121, 0x80);        /* Is Shift pressed? */
+-          if (r1 == 0xff)
+-          {
+-              ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+-              ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+-              ro_return_early = TRUE;             /* Return even though nothing was typed. */
+-          }
+-          else
+-              swi(Wimp_ReportError,
+-                      "\0\0\0\0Sorry, you can only load text in normal mode", 5, "Vim");
+-          break;
+- 
+-      case NORMAL:
+-          ro_return_early = TRUE;         /* Return even though nothing was typed. */
+- 
+-          if (scrap)                      /* Remove <Wimp$Scrap>. Later. */
+-              ins_typebuf(":!~remove <Wimp$Scrap>\r", REMAP_NONE, 0, TRUE, FALSE);
+- 
+-          /* Insert {:sp ,:confirm e }[+f\ <leaf> ]<file><CR> */
+-          ins_typebuf("\r", REMAP_NONE, 0, TRUE, FALSE);
+-          ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+-          ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+- 
+-          if (scrap)
+-          {
+-              /* Loading via !Scrap - change pathname to stored leafname */
+-              ins_typebuf(leaf_name, REMAP_NONE, 0, TRUE, FALSE);
+-              ins_typebuf(" +f\\ ", REMAP_NONE, 0, TRUE, FALSE);
+-              leaf_ref = 0;
+-              vim_free(leaf_name);
+-              leaf_name = NULL;
+-          }
+- 
+-          swi(OS_Byte, 121, 0x81);        /* Is Ctrl pressed? */
+-          if (r1 == 0xff)
+-              /* Yes, split window */
+-              ins_typebuf(":sp", REMAP_NONE, 0, TRUE, FALSE);
+-          else
+-              ins_typebuf(":confirm e", REMAP_NONE, 0, TRUE, FALSE);
+-          break;
+- 
+-      default:
+-          swi(Wimp_ReportError, "\0\0\0\0You can only load text in normal mode.", 5, "Vim");
+-     }
+-     /* Send DataSaveAck so other program doesn't think we died
+-      * and delete <Wimp$Scrap>.
+-      */
+-     block[3] = block[2];
+-     block[4] = 4;
+-     swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+- 
+-     void
+- ro_datasave(block)
+-     int          *block;
+- {
+-     char_u *path = ((char_u *) block) + 44;
+- 
+-     /* Preserve the name given so we can use it, not <Wimp$Scrap> */
+-     if (leaf_name)
+-      vim_free(leaf_name);
+-     leaf_name = vim_strsave(path);
+- 
+-     block[9] = -1;       /* File is unsafe. */
+-     strcpy(path, "<Wimp$Scrap>");
+-     block[0] = 60;
+-     block[3] = block[2];
+-     block[4] = 2;
+-     swi(Wimp_SendMessage, 17, block, block[1]);
+- 
+-     leaf_ref = block[2];
+- }
+- 
+-     void
+- ro_message(block)
+-     int *block;
+- {
+-     char_u   *buffer;
+-     long_u   len;
+- 
+-     if (block[1] == task_handle)
+-      return;                     /* Don't talk to ourself! */
+-     switch (block[4])
+-     {
+-      case 0:         /* Quit. */
+-          if (block[4] == 0)
+-              ro_quit();
+-          break;
+-      case 1: /* DataSave */
+-          ro_datasave(block);
+-          break;
+-      case 2:         /* DataSaveAck. */
+-          if (clip_convert_selection(&buffer, &len, &clip_star) == -1)
+-              return;
+- 
+-          /* Save the clipboard contents to a file. */
+-          swi(OS_File, 10, ((char_u *) block) + 44, 0xfff, 0, buffer, buffer + len);
+- 
+-          /* Ack with DataLoad message. */
+-          block[3] = block[2];
+-          block[4] = 3;
+-          block[9] = len;
+-          swi(Wimp_SendMessage, 17, block, block[1]);
+- 
+-          vim_free(buffer);
+-          break;
+-      case 3:         /* DataLoad */
+-          ro_dataload(block);
+-          break;
+-      case 8:         /* PreQuit */
+-          ro_prequit(block);
+-          break;
+-      case 0xf:       /* Lose clipboard. */
+-          if (block[5] & 4)
+-          {
+-              clip_free_selection(&clip_star);
+-              clip_star.owned = FALSE;
+-          }
+-          break;
+-      case 0x10:      /* DataRequest (clip_star) */
+-          if (clip_star.owned)
+-          {
+-              int rows;
+- 
+-              /* Tell other program that we have the clipboard. */
+-              block[0] = 52;
+-              block[3] = block[2];        /* Copy myref to yourref. */
+-              block[4] = 1;               /* DataSave message. */
+-              /* Create an estimate for the size (larger or same as true
+-               * value) */
+-              rows = clip_star.end.lnum - clip_star.start.lnum;
+-              if (rows < 0)
+-                  rows = -rows;
+-              block[9] = (rows + 1) * Columns + 1; /* Add one for possible
+-                                                      final newline. */
+-              block[10] = 0xfff;          /* Clipboard is text. */
+-              strcpy( ((char_u *) block) + 44, "VimClip");
+-              swi(Wimp_SendMessage, 17, block, block[1]);
+-          }
+-          break;
+-      case 0x400c1:   /* Mode change */
+-          changed_mode = TRUE;                /* Flag - update on next OpenWindow */
+-          if (zap_redraw)
+-          {
+-              /* JK230798, re-initialise ZapRedraw stuff */
+-              if (ro_zap_redraw_initialise() == FAIL)
+-                  zap_redraw = FALSE;
+-          }
+-          break;
+-      case 0x400c3:   /* TaskCloseDown */
+-          if (block[1] == child_handle)
+-              child_handle = 0;
+-          break;
+-     }
+- }
+- 
+- /*
+-  * Converts a scrollbar's window handle into a scrollbar pointer.
+-  * NULL on failure.
+-  */
+-     scrollbar_T *
+- ro_find_sbar(id)
+-     int              id;
+- {
+-     win_T    *wp;
+- 
+-     if (gui.bottom_sbar.id == id)
+-      return &gui.bottom_sbar;
+-     FOR_ALL_WINDOWS(wp)
+-     {
+-      if (wp->w_scrollbars[SBAR_LEFT].id == id)
+-          return &wp->w_scrollbars[SBAR_LEFT];
+-      if (wp->w_scrollbars[SBAR_RIGHT].id == id)
+-          return &wp->w_scrollbars[SBAR_RIGHT];
+-     }
+-     return NULL;
+- }
+- 
+-     void
+- scroll_to(line, sb)
+-     int sb;  /* Scrollbar number */
+-     int line;
+- {
+-     char_u code[8];
+- 
+-     /* Don't put events in the input queue now. */
+-     if (hold_gui_events)
+-      return;
+- 
+-     /* Send a scroll event:
+-      *
+-      * A scrollbar event is CSI (NOT K_SPECIAL), KS_VER_SCROLLBAR,
+-      * KE_FILLER followed by:
+-      * one byte representing the scrollbar number, and then four bytes
+-      * representing a long_u which is the new value of the scrollbar.
+-      */
+-     code[0] = CSI;
+-     code[1] = KS_VER_SCROLLBAR;
+-     code[2] = KE_FILLER;
+-     code[3] = sb;
+-     code[4] = line >> 24;
+-     code[5] = line >> 16;
+-     code[6] = line >> 8;
+-     code[7] = line;
+-     add_to_input_buf(code, 8);
+- }
+- 
+-     void
+- h_scroll_to(col)
+-     int col;
+- {
+-     char_u code[8];
+- 
+-     /* Don't put events in the input queue now. */
+-     if (hold_gui_events)
+-      return;
+- 
+-     /* Send a scroll event:
+-      *
+-      * A scrollbar event is CSI (NOT K_SPECIAL)
+-      *
+-      * A horizontal scrollbar event is K_SPECIAL, KS_HOR_SCROLLBAR,
+-      * KE_FILLER followed by four bytes representing a long_u which is the
+-      * new value of the scrollbar.
+-      */
+-     code[0] = CSI;
+-     code[1] = KS_HOR_SCROLLBAR;
+-     code[2] = KE_FILLER;
+-     code[4] = col >> 24;
+-     code[5] = col >> 16;
+-     code[6] = col >> 8;
+-     code[7] = col;
+-     add_to_input_buf(code, 8);
+- }
+- 
+-     void
+- ro_scroll(block)
+-     int              *block;
+- {
+-     scrollbar_T      *sb;
+-     int              offset;
+-     win_T    *wp;
+- 
+-     /* Block is ready for Wimp_OpenWindow, and also contains:
+-      *
+-      * +32 = scroll X direction (-2 .. +2)
+-      * +36 = scroll Y direction (-2 .. +2)
+-      */
+- 
+-     sb = ro_find_sbar(block[0]);
+-     if (!sb)
+-      return;         /* Window not found (error). */
+- 
+-     wp = sb-> wp;
+- 
+-     if (wp == NULL)
+-     {
+-      /* Horizontal bar. */
+-      offset = block[8];
+-      if (offset == -2)
+-          offset = (block[1] - block[3]) / gui.char_width;
+-      else if (offset == 2)
+-          offset = (block[3] - block[1]) / gui.char_width;
+- 
+-      block[5] += offset * gui.char_width;
+- 
+-      gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+- 
+-      swi(Wimp_OpenWindow, 0, block);
+-     }
+-     else
+-     {
+-      offset = -block[9];
+-      if (offset == -2)
+-          offset = -(wp -> w_height - 1);
+-      else if (offset == 2)
+-          offset = wp -> w_height - 1;
+- 
+-      /* Possibly we should reposition the scrollbar?
+-       * Vim seems to update the bar anyway...
+-       */
+-      gui_drag_scrollbar(sb, offset - (block[6] / gui.char_height), FALSE);
+-     }
+- }
+- 
+- /* Move a window by a given offset. Used to simulate the function of the
+-  * nested wimp.
+-  */
+-     void
+- ro_move_child(window, x, y, pos_wanted, pos_got)
+-     int      window;
+-     int x,y;         /* offset to move by */
+-     int      pos_wanted, pos_got;
+- {
+-     int      block[10];
+- 
+-     block[0] = window;
+-     swi(Wimp_GetWindowState, 0, block);
+-     block[1] += x;
+-     block[2] += y;
+-     block[3] += x;
+-     block[4] += y;
+-     if (pos_wanted == -1)
+-      block[7] = -1;
+-     else if (pos_wanted == -2)
+-      block[7] = pos_got;
+-     swi(Wimp_OpenWindow, 0, block);
+- }
+- 
+- /* Open the main window. Also updates scrollbars if we are not
+-  * using the nested Wimp.
+-  * If we have just changed mode then re-read all values.
+-  */
+-     void
+- ro_open_main(block)
+-     int          *block;
+- {
+-     int          toggle_size;
+- 
+-     /* Find out if the user clicked on the toggle size icon. */
+-     block[20] = block[0];
+-     swi(Wimp_GetWindowState, 0, block + 20);
+-     toggle_size = block[28] & (1 << 19);
+- 
+-     if (nested_wimp)
+-     {
+-      swi(Wimp_OpenWindow, 0, block);
+-     }
+-     else
+-     {
+-      int     old[10];
+-      int     x_offset, y_offset;         /* Move children same as parent. */
+-      int     pos_wanted, pos_got;
+-      int     left_bar  = gui.which_scrollbars[SBAR_LEFT];
+-      int     right_bar = gui.which_scrollbars[SBAR_RIGHT];
+-      win_T   *wp;
+- 
+-      /* Three cases to think about:
+-       * 1) Move to top. Open each window at the top.
+-       * 2) Same stack position. Open each with same position.
+-       * 3) Open at bottom. Open children with parent's new position.
+-       */
+- 
+-      old[0] = block[0];
+-      swi(Wimp_GetWindowState, 0, old);
+-      pos_wanted = block[7];
+-      swi(Wimp_OpenWindow, 0, block);
+-      /* Block updated by OpenWindow? I don't think so! */
+-      swi(Wimp_GetWindowState, 0, block);
+-      pos_got = block[7];
+- 
+-      x_offset = block[1] - old[1];
+-      y_offset = block[4] - old[4];
+-      if (x_offset || y_offset || pos_wanted == -1 || pos_wanted == -2)
+-      {
+-          /* If parent has moved, re-open all the child windows. */
+-          FOR_ALL_WINDOWS(wp)
+-          {
+-              /* Reopen scrollbars for this window. */
+-              if (left_bar)
+-                  ro_move_child(wp -> w_scrollbars[SBAR_LEFT].id,
+-                              x_offset, y_offset,
+-                              pos_wanted, pos_got);
+-              if (right_bar)
+-                  ro_move_child(wp -> w_scrollbars[SBAR_RIGHT].id,
+-                              x_offset, y_offset,
+-                              pos_wanted, pos_got);
+-          }
+-      }
+-     }
+-     if (changed_mode || toggle_size)
+-     {
+-      int     width, height;
+- 
+-      if (changed_mode)
+-          ro_measure_tools();
+-      block[0] = gui.window_handle;
+-      swi(Wimp_GetWindowState, 0, block);
+- 
+-      width = block[3] - block[1];
+-      height = block[4] - block[2];
+-      swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+-      gui_resize_shell(width, height);
+-      changed_mode = FALSE;
+-     }
+- }
+- 
+-     void
+- ro_open_window(block)
+-     int              *block;
+- {
+-     int              pos;
+-     scrollbar_T *sb;
+- 
+-     if (block[0] == gui.window_handle)
+-      ro_open_main(block);
+-     else
+-     {
+-      swi(Wimp_OpenWindow, 0, block);
+-      if (block[0] != gui.window_handle)
+-      {
+-          sb = ro_find_sbar(block[0]);
+-          if (sb)
+-          {
+-              if (sb-> wp != NULL)
+-                  gui_drag_scrollbar(sb, -block[6] / gui.char_height, FALSE);
+-              else
+-                  gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+-          }
+-      }
+-     }
+- }
+- 
+-     void
+- ro_menu_selection(block)
+-     int              *block;
+- {
+-     int              *item = wimp_menu + 7;
+-     vimmenu_T        *menu;
+-     /* wimp_menu points to a wimp menu structure */
+- 
+-     for (;;)
+-     {
+-      while (block[0]--)
+-          item += 6;
+-      if (block[1] == -1)
+-          break;
+-      item = ((int *) item[1]) + 7;
+-      block++;
+-     }
+-     /* item points to the wimp menu item structure chosen */
+-     menu = (vimmenu_T *) item[5];
+- 
+-     swi(Wimp_GetPointerInfo, 0, block);
+-     if (block[2] == 1)
+-      /* Adjust used - keep menu open */
+-      swi(Wimp_CreateMenu, 0, wimp_menu);
+- 
+-     if (menu-> cb)
+-      menu-> cb(menu);
+- }
+- 
+-     void
+- ro_open_parent()
+- {
+-     int head;
+-     char_u *i = curbuf-> b_ffname;
+-     char_u  buffer[256];
+- 
+-     head = 0;
+-     for (; *i; i++)
+-     {
+-      if (*i == '.')
+-          head = i - curbuf-> b_ffname;
+-     }
+- 
+-     /* Append head chars to buffer */
+-     if (head < 240 && curbuf-> b_ffname && head)
+-     {
+-      strcpy(buffer, "%filer_opendir ");
+-      strncpy(buffer + 15, curbuf-> b_ffname, head);
+-      buffer[15 + head] = '\0';
+-      swi(OS_CLI, buffer);
+-     }
+- }
+- 
+-     void
+- process_event(event, block)
+-     int event;
+-     int *block;
+- {
+-     switch (event)
+-     {
+-      case 0:         /* Nothing - update drag state. */
+-          if (ro_dragging)
+-              ro_continue_drag(block);
+-          break;
+-      case 1:         /* Redraw window. */
+-          redraw_window(block);
+-          break;
+-      case 2:         /* Open window. */
+-          ro_open_window(block);
+-          break;
+-      case 3:         /* Close window. */
+-          swi(Wimp_GetPointerInfo, 0, block + 1);
+-          if (block[3] == 1)
+-              ro_open_parent();
+-          else
+-              if (ro_ok_to_quit())
+-                  ro_quit();
+-          break;
+-      case 6:         /* Mouse click. */
+-          ro_mouse(block);
+-          break;
+-      case 7:         /* Finished drag. */
+-          ro_drag_finished(block);
+-          break;
+-      case 8:         /* Key pressed. */
+-          ro_insert_key((char_u *) &block[6]);
+-          break;
+-      case 9:
+-          ro_menu_selection(block);
+-          break;
+-      case 10:        /* Scroll request. */
+-          ro_scroll(block);
+-          break;
+-      case 11:        /* Lose caret. */
+-          if (block[0] == gui.window_handle)
+-              gui_focus_change(FALSE);
+-          break;
+-      case 12:        /* Gain caret. */
+-          if (block[0] == gui.window_handle)
+-              gui_focus_change(TRUE);
+-          break;
+-      case 17:        /* User message. */
+-      case 18:        /* User message recorded. */
+-          ro_message(block);
+-          break;
+-     }
+- }
+- 
+- /*
+-  * GUI input routine called by gui_wait_for_chars().  Waits for a character
+-  * from the keyboard.
+-  *  wtime == -1          Wait forever.
+-  *  wtime == 0           This should never happen.
+-  *  wtime > 0            Wait wtime milliseconds for a character.
+-  * Returns OK if a character was found to be available within the given time,
+-  * or FAIL otherwise.
+-  */
+-     int
+- gui_mch_wait_for_chars(long wtime)
+- {
+-     int block[64];
+-     int      reason;
+-     int start_time = -1;
+-     int ctime = wtime / 10;  /* delay in cs */
+- 
+-     if (wtime != -1)
+-     {
+-      swi(OS_ReadMonotonicTime);
+-      start_time = r0;
+-     }
+- 
+-     for (;;)
+-     {
+-      if (ro_dragging)
+-          reason = wimp_poll(0, block);       /* Always return immediately */
+-      else if (wtime == -1)
+-          reason = wimp_poll(1, block);
+-      else
+-          reason = wimp_pollidle(0, block, start_time + ctime);
+- 
+-      process_event(reason, block);
+- 
+-      if (input_available() || ro_return_early)
+-      {
+-          ro_return_early = FALSE;
+-          return OK;      /* There is something to process (key / menu event) */
+-      }
+- 
+-      if (wtime != -1)
+-      {
+-          swi(OS_ReadMonotonicTime);
+-          if (r0 - start_time > ctime)
+-              return FAIL;    /* We've been waiting too long - return failure */
+-      }
+-     }
+- }
+- 
+- /* Flush any output to the screen */
+-     void
+- gui_mch_flush(void)
+- {
+- }
+- 
+- /*
+-  * Clear a rectangular region of the screen from text pos(row1, col1) to
+-  * (row2, col2) inclusive.
+-  */
+-     void
+- gui_mch_clear_block(int row1, int col1, int row2, int col2)
+- {
+-     swi(ColourTrans_ReturnGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+-     plot_rectangle(96 + 5, r0,
+-                      FILL_X(col1), -FILL_Y(row2 + 1),
+-                      FILL_X(col2 + 1), -FILL_Y(row1));
+- }
+- 
+-     void
+- gui_mch_clear_all(void)
+- {
+-     if (redraw_block)
+-     {
+-      swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+-      swi(OS_WriteI + 16);
+-     }
+-     else
+-     {
+-      int block[44];
+-      block[0] = gui.window_handle;
+-      block[1] = 0;
+-      block[2] = -gui.num_rows * gui.char_height;
+-      block[3] = gui.num_cols * gui.char_width;
+-      block[4] = 0;
+-      swi(Wimp_UpdateWindow, 0, block);
+-      while (r0)
+-      {
+-          swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+-          swi(OS_WriteI + 16);
+-          swi(Wimp_GetRectangle, 0, block);
+-      }
+-     }
+- }
+- 
+- /*
+-  * Delete the given number of lines from the given row, scrolling up any
+-  * text further down within the scroll region.
+-  */
+-     void
+- gui_mch_delete_lines(int row, int num_lines)
+- {
+-     int top_from = -row - num_lines;
+-     int bot_from = -gui.scroll_region_bot - 1;
+-     int bot_to   = bot_from + num_lines;
+- 
+-     swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+- 
+-     /* Changed without checking! */
+-     swi(Wimp_BlockCopy, gui.window_handle,
+-                          gui.scroll_region_left * gui.char_width,
+-                          bot_from * gui.char_height,
+-                          (gui.scroll_region_right - gui.scroll_region_left
+-                                                      + 1) * gui.char_width,
+-                          top_from * gui.char_height,
+- 
+-                          gui.scroll_region_left * gui.char_width,
+-                          bot_to * gui.char_height);
+- 
+-     gui_clear_block(gui.scroll_region_bot - num_lines + 1,
+-                                                     gui.scroll_region_left,
+-      gui.scroll_region_bot, gui.scroll_region_right);
+- }
+- 
+- /*
+-  * Insert the given number of lines before the given row, scrolling down any
+-  * following text within the scroll region.
+-  */
+-     void
+- gui_mch_insert_lines(int row, int num_lines)
+- {
+-     int top_from = -row;
+-     int bot_to   = -gui.scroll_region_bot - 1;
+-     int bot_from = bot_to + num_lines;
+- 
+-     swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+- 
+-     swi(Wimp_BlockCopy, gui.window_handle,
+-                          gui.scroll_region_left * gui.char_width,
+-                          bot_from * gui.char_height,
+-                          (gui.scroll_region_right - gui.scroll_region_left
+-                                                      + 1) * gui.char_width,
+-                          top_from * gui.char_height,
+- 
+-                          gui.scroll_region_left * gui.char_width,
+-                          bot_to * gui.char_height);
+- 
+-     gui_clear_block(row, gui.scroll_region_left,
+-                              row + num_lines - 1, gui.scroll_region_right);
+- }
+- 
+- /* Put selection in clipboard buffer.
+-  * Should we become the new owner?
+-  */
+-     void
+- clip_mch_request_selection(VimClipboard *cbd)
+- {
+-     int              block[64];      /* Will be used in Wimp_Poll. */
+-     int              reason;
+-     char_u   *buffer;
+-     long_u   length;
+- 
+-     block[0] = 48;                   /* Size of block. */
+-     block[3] = 0;                    /* Original message. */
+-     block[4] = 0x10;                 /* Data request. */
+-     block[5] = gui.window_handle;
+-     block[6] = RO_LOAD_CLIPBOARD;    /* Internal handle. */
+-     block[7] = block[8] = 0;         /* (x,y) not used. */
+-     block[9] = 4;
+-     block[10] = 0xfff;           /* We want text files if possible, I think. */
+-     block[11] = -1;      /* End of list. */
+-     swi(Wimp_SendMessage, 17, block, 0);    /* Broadcast request. */
+- 
+-     /* OK, we've sent the request. Poll until we get a null poll (failure) or
+-      * we load the clipboard.
+-      * If we receive a DataSave event with icon handle = -2 then put it on the
+-      * clipboard. RISC OS should ensure that key events will not be delivered
+-      * until the clipboard operation completes (unless the owner starts idling
+-      * - we can't wait forever!).
+-      */
+-     for (;;)
+-     {
+-      reason = wimp_poll(0, block);
+-      if (reason == 0)
+-          return;         /* Failed to get clipboard. */
+-      if ((reason == 17 || reason == 18) &&
+-              block[4] == 1 && block[6] == RO_LOAD_CLIPBOARD)
+-          break;          /* Got it - stop waiting. */
+-      process_event(reason, block);
+-      if (ro_return_early)
+-          return;
+-     }
+-     /* Tell owner to save data in <Wimp$Scrap>. */
+-     block[0] = 60;
+-     block[3] = block[2];   /* Copy myref -> yourref */
+-     block[4] = 2;        /* DataSaveAck. */
+-     block[9] = -1;       /* Data is unsafe. */
+-     strcpy( ((char_u *) block) + 44, "<Wimp$Scrap>");
+-     swi(Wimp_SendMessage, 17, block, block[1]);
+- 
+-     /* Wait again for reply. */
+-     for (;;)
+-     {
+-      reason = wimp_poll(0, block);
+-      if (reason == 0)
+-          return;     /* Other program has given up! */
+-      if ((reason == 17 || reason == 18) && block[4] == 3 && block[6] == RO_LOAD_CLIPBOARD)
+-          break;      /* Clipboard data saved to <Wimp$Scrap> */
+-      process_event(reason, block);
+-      if (ro_return_early)
+-          return;
+-     }
+- 
+-     /* <Wimp$Scrap> contains clipboard - load it. */
+-     if (xswi(OS_File, 17, "<Wimp$Scrap>") & v_flag)
+-      return;         /* Error! */
+-     if (r0 != 1 && r0 != 3)
+-      return;
+-     length = r4;
+- 
+-     buffer = lalloc(length, TRUE);  /* Claim memory (and report errors). */
+-     if (buffer == NULL)
+-      return;
+- 
+-     if (xswi(OS_File, 16, "<Wimp$Scrap>", buffer, 0) & v_flag)
+-      return;
+- 
+-     clip_yank_selection(MCHAR, buffer, length, cbd);
+- 
+-     vim_free(buffer);
+- 
+-     swi(OS_FSControl, 27, "<Wimp$Scrap>", 0, 0);    /* Delete temp file. */
+- 
+-     block[4] = 4;                /* Send DataLoadAck. */
+-     block[3] = block[2];         /* Copy myref -> yourref. */
+-     swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+- 
+- /* Not sure what this means under RISC OS. */
+-     void
+- clip_mch_lose_selection(VimClipboard *cbd)
+- {
+- }
+- 
+- /* Tell everyone that we now own the clipboard.
+-  * Return OK if our claim is accepted (always, under RISC OS)
+-  */
+-     int
+- clip_mch_own_selection(VimClipboard *cbd)
+- {
+-     int block[6];
+-     block[0] = 24;   /* Length of block.  */
+-     block[3] = 0;    /* Original message. */
+-     block[4] = 0xf;  /* ClaimEntity. */
+-     block[5] = 0x4;  /* Claim clipboard only. */
+-     swi(Wimp_SendMessage, 17, block, 0);
+-     return OK;
+- }
+- 
+- /*
+-  * Send the current selection to the clipboard.  Do nothing for X because we
+-  * will fill in the selection only when requested by another app. Sounds good
+-  * for RISC OS too.
+-  */
+-     void
+- clip_mch_set_selection(VimClipboard *cbd)
+- {
+-     clip_get_selection(cbd);
+- }
+- 
+- /*
+-  * Make a menu either grey or not grey.
+-  */
+-     void
+- gui_mch_menu_grey(vimmenu_T *menu, int grey)
+- {
+-     menu-> greyed_out = grey;
+- }
+- 
+- /*
+-  * Make menu item hidden or not hidden
+-  */
+-     void
+- gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
+- {
+-     menu-> hidden = hidden;
+- }
+- 
+- /*
+-  * This is called after setting all the menus to grey/hidden or not.
+-  */
+-     void
+- gui_mch_draw_menubar(void)
+- {
+-     swi(Wimp_CreateMenu, 0, -1);
+-     if (wimp_menu != (int *) -1)
+-     {
+-      ro_remove_menu(wimp_menu);
+-      wimp_menu = (int *) -1;
+-     }
+- }
+- 
+- /* Add or remove a scrollbar. Note that this is only called when
+-  * the scrollbar state is changing.
+-  * The scroll bar window has already been created.
+-  * We can't do anything except remove the scroll bar
+-  * until we know what size to use.
+-  */
+-     void
+- gui_mch_enable_scrollbar(sb, flag)
+-     scrollbar_T      *sb;
+-     int              flag;
+- {
+-     if (!flag)
+-      swi(Wimp_CloseWindow, 0, & (sb->id) );
+-     return;
+- }
+- 
+-     void
+- gui_mch_set_blinking(long waittime, long on, long off)
+- {
+- }
+- 
+- /*
+-  * Stop the cursor blinking.  Show the cursor if it wasn't shown.
+-  */
+-     void
+- gui_mch_stop_blink(void)
+- {
+- }
+- 
+- /*
+-  * Start the cursor blinking.  If it was already blinking, this restarts the
+-  * waiting time and shows the cursor.
+-  */
+-     void
+- gui_mch_start_blink(void)
+- {
+- }
+- 
+- /*
+-  * Return the RGB value of a pixel as a long.
+-  */
+-     long_u
+- gui_mch_get_rgb(guicolor_T pixel)
+- {
+-     return (long_u)pixel;
+- }
+- 
+-     void
+- gui_mch_set_text_area_pos(int x, int y, int w, int h)
+- {
+- }
+- 
+-     void
+- gui_mch_enable_menu(int flag)
+- {
+- }
+- 
+-     void
+- gui_mch_set_menu_pos(int x, int y, int w, int h)
+- {
+- }
+- 
+-     void
+- gui_mch_add_menu(vimmenu_T *menu, int idx)
+- {
+- }
+- 
+-     void
+- gui_mch_add_menu_item(vimmenu_T *menu, int idx)
+- {
+- }
+- 
+-     void
+- gui_mch_new_menu_colors(void)
+- {
+- }
+- 
+-     void
+- gui_mch_destroy_menu(vimmenu_T *menu)
+- {
+- }
+- 
+- /* Size of buffer has changed.
+-  * Add one to max since gui.c subtracts one more than it should!
+-  */
+-     void
+- gui_mch_set_scrollbar_thumb(sb, val, size, max)
+-     scrollbar_T      *sb;
+-     long     val;
+-     long     size;
+-     long     max;
+- {
+-     int              block[10], width, height;
+- 
+-     width = (max + 1) * gui.char_width;
+-     height = (max + 1 + W_STATUS_HEIGHT(sb->wp)) * gui.char_height;
+- 
+-     block[0] = block[3] = 0;
+-     block[1] = -height + (1 << y_eigen_factor);
+-     block[2] = width;
+- 
+-     swi(Wimp_SetExtent, sb -> id, block);
+- 
+-     block[0] = sb -> id;
+-     swi(Wimp_GetWindowState, 0, block);
+-     block[5] = val * gui.char_width;
+-     block[6] = -val * gui.char_height;
+-     swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+-                      gui.window_handle,      /* Parent window handle. */
+-                      (CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
+-                      (CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
+-                      (CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
+-                      (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
+-                      (CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
+-                      (CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
+-                      );
+- }
+- 
+- /* Set the position of the scrollbar within the editor
+-  * window. Note that, for vertical scrollbars, x and w
+-  * are ignored. For horizontal bars y and h are ignored.
+-  */
+-     void
+- gui_mch_set_scrollbar_pos(sb, x, y, w, h)
+-     scrollbar_T *sb;
+-     int              x;              /* Horizontal sb position */
+-     int              y;              /* Top of scroll bar */
+-     int              w;              /* Width */
+-     int              h;              /* Height */
+- {
+-     int              block[24];
+-     int              px1, py1;       /* Parent window min coords */
+-     int              px2, py2;       /* Parent window max coords */
+- 
+-     /* Find where the parent window is. */
+-     block[0] = gui.window_handle;
+-     swi(Wimp_GetWindowState, 0, block);
+-     px1 = block[1];
+-     py1 = block[2];
+-     px2 = block[3];
+-     py2 = block[4];
+- 
+-     block[0] = sb -> id;
+- 
+-     /* Find out how big the scroll window is at the moment. */
+-     swi(Wimp_GetWindowInfo, 0, ((char_u *)block) + 1);
+- 
+-     if (block[13] < w || block[12] > -h)
+-     {
+-      /* Current window is too small! */
+-      if (block[12] > -h)
+-          block[12] = -h;
+-      if (block[13] < w)
+-          block[13] = w;
+-      swi(Wimp_SetExtent, block[0], block + 11);
+-     }
+- 
+-     /* This works better on the nested_wimp. */
+-     if (sb-> wp)
+-     {
+-      /* This is a vertical scrollbar. */
+-      block[1] = block[3] = px2 - gui.scrollbar_width + (1 << x_eigen_factor);
+-      block[2] = 1 + py2 - (y + h) + (1 << y_eigen_factor);
+-      block[4] = 1 + py2 - y;
+-     }
+-     else
+-     {
+-      /* This is a horizontal scrollbar. */
+-      block[2] = block[4] = py1 + gui.scrollbar_height;
+-      block[1] = px1;
+-      block[3] = px2 - gui.scrollbar_width;
+-     }
+- 
+-     block[5] = 0;
+-     block[6] = 0;
+-     block[7] = -1;
+- 
+-     swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+-          gui.window_handle,  /* Parent window handle. */
+-          (CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
+-          (CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
+-          (CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
+-          (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
+-          (CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
+-          (CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
+-        );
+- }
+- 
+- /* Create a window with no workarea to place inside editor window.
+-  * (what happens without the nested wimp?)
+-  * Data for scrollbar is invalid.
+-  */
+-     void
+- gui_mch_create_scrollbar(sb, orient)
+-     scrollbar_T *sb;
+-     int              orient; /* orient is SBAR_HORIZ or SBAR_VERT */
+- {
+-     int bar[] =
+-      {
+-          0,   0,             /* Visible area : min X,Y */
+-          100, 100,           /*                max X,Y */
+-          0,   0,             /* Scroll offsets */
+-          -1,                 /* Window in front */
+-          0x80800150 | (orient == SBAR_HORIZ ? (1 << 30) : (1 << 28)),
+-          0xff070207,         /* Colours */
+-          0x000c0103,         /* More colours */
+-          0, -0x4000,         /* Workarea extent */
+-          0x4000, 0,          /* max X,Y */
+-          0x00000000,         /* No title */
+-          0 << 12,            /* No workarea button type */
+-          1,                  /* Wimp sprite area */
+-          0x00010001,         /* Minimum width, height */
+-          0, 0, 0,            /* Title data (none) */
+-          0                   /* No icons */
+-      };
+-     swi(Wimp_CreateWindow, 0, bar);
+-     sb -> id = r0;
+- }
+- 
+- #if defined(FEAT_WINDOWS) || defined(PROTO)
+-     void
+- gui_mch_destroy_scrollbar(scrollbar_T *sb)
+- {
+-     swi(Wimp_DeleteWindow, 0, & (sb->id));
+-     sb -> id = -1;
+- }
+- #endif
+- 
+-     void
+- gui_mch_set_scrollbar_colors(scrollbar_T *sb)
+- {
+-     /* Always use default RO colour scheme. */
+- }
+- 
+- /*
+-  * Get current mouse coordinates in text window.
+-  * Note: (0,0) is the bottom left corner, positive y is UP.
+-  */
+-     void
+- gui_mch_getmouse(x, y)
+-     int *x;
+-     int *y;
+- {
+-     int left;
+-     int top;
+-     int block[10];
+- 
+-     block[0] = gui.window_handle;
+-     swi(Wimp_GetWindowState, 0, block);
+-     left = block[1];
+-     top = block[4];
+- 
+-     swi(Wimp_GetPointerInfo, 0, block);
+-     *x = block[0] - left;
+-     *y = top - block[1];
+- }
+- 
+- /* MouseTo(x, y) */
+-     void
+- gui_mch_setmouse(x, y)
+-     int              x;
+-     int              y;
+- {
+- }
+- 
+-     void
+- gui_mch_toggle_tearoffs(enable)
+-     int              enable;
+- {
+-     /* no tearoff menus */
+- }
+- 
+- /* Redraw a window's title.
+-  * For the nested wimp we use the new 'redraw-title-bar' reason code.
+-  * For older wimps we mark the area of the screen where the title bar
+-  * is as invalid.
+-  */
+-     void
+- ro_redraw_title(window)
+-     int window;
+- {
+-     if (nested_wimp)
+-     {
+-      swi(Wimp_ForceRedraw, window, 0x4b534154, 3);
+-     }
+-     else
+-     {
+-      int block[10];
+-      int miny;
+- 
+-      block[0] = window;
+-      swi(Wimp_GetWindowState, 0, block);
+-      miny = block[4];
+-      swi(Wimp_GetWindowOutline, 0, block);
+-      swi(Wimp_ForceRedraw, -1,
+-                      block[1], miny,
+-                      block[3], block[4]);
+-     }
+- }
+- 
+- /* Turn a vimmenu_T structure into a wimp menu structure.
+-  * -1 if resulting menu is empty.
+-  * Only the children and dname items in the root menu are used.
+-  */
+-     int *
+- ro_build_menu(menu)
+-     vimmenu_T        *menu;
+- {
+-     int              *wimp_menu;
+-     int              width = 4;
+-     int              w;
+-     int              size = 28;
+-     vimmenu_T        *item;
+-     int              *wimp_item;
+- 
+-     /* Find out how big the menu is so we can allocate memory for it */
+-     for (item = menu-> children; item; item = item-> next)
+-     {
+-      if (item-> hidden == FALSE && !menu_is_separator(item->name))
+-          size += 24;
+-     }
+- 
+-     if (size <= 28)
+-      return (int *) -1;              /* No children - shouldn't happen */
+- 
+-     wimp_menu = (int *) alloc(size);
+- 
+-     wimp_menu[0] = (int) menu-> dname;
+-     wimp_menu[1] = -1;
+-     wimp_menu[2] = 0;
+-     wimp_menu[3] = 0x00070207;
+-     wimp_menu[5] = 44;
+-     wimp_menu[6] = 0;
+- 
+-     wimp_item = wimp_menu + 7;
+- 
+-     for (item = menu-> children; item; item = item-> next)
+-     {
+-      if (menu_is_separator(item-> name))
+-      {
+-          /* This menu entry is actually a separator. If it is not the first
+-           * menu entry then mark the previous menu item as needing a dotted
+-           * line after it.
+-           */
+-          if (wimp_item > wimp_menu + 7)
+-              wimp_item[-6] |= 0x2;
+-      }
+-      else if (item-> hidden == FALSE)
+-      {
+-          wimp_item[0] = 0;
+-          wimp_item[1] = item-> children ? (int) ro_build_menu(item) : -1;
+-          wimp_item[2] = 0x07009131 | (item-> greyed_out << 22);
+-          wimp_item[3] = (int) item-> dname;
+-          wimp_item[4] = -1;
+-          wimp_item[5] = (int) item;  /* Stuff the menu address in this unused space */
+- 
+-          w = strlen(item-> dname) + 1;
+-          if (w > width)
+-              width = w;
+-          wimp_item += 6;
+-      }
+-     }
+- 
+-     wimp_menu[4] = (width + 2) * 16;
+-     wimp_menu[7]  |= 0x100;      /* Menu title is indirected */
+-     wimp_item[-6] |= 0x080;      /* Last entry in menu */
+-     return wimp_menu;
+- }
+- 
+-     static void
+- ro_remove_menu(menu)
+-     int          *menu;
+- {
+-     int          *item = menu + 7;
+- 
+-     if (menu == NULL || menu == (int *) -1)
+-      return;
+- 
+-     for (;;)
+-     {
+-      if (item[1] != -1)
+-          ro_remove_menu((int *) item[1]);    /* Remove sub-menu */
+-      if (item[0] & 0x80)
+-          break;                      /* This was the last entry */
+-      item += 6;
+-     }
+-     vim_free(menu);
+- }
+- 
+-     void
+- gui_mch_show_popupmenu(menu)
+-     vimmenu_T        *menu;
+- {
+-     int              block[10];
+- 
+-     /* Remove the existing menu, if any */
+-     if (wimp_menu != (int *) -1)
+-     {
+-      swi(Wimp_CreateMenu, 0, -1);
+-      ro_remove_menu(wimp_menu);
+-      wimp_menu = (int *) -1;
+-     }
+- 
+-     wimp_menu = ro_build_menu(menu);
+-     if (wimp_menu != (int *) -1)
+-     {
+-      swi(Wimp_GetPointerInfo, 0, block);
+-      swi(Wimp_CreateMenu, 0, wimp_menu, block[0] - 64, block[1] + 64);
+-     }
+- }
+- 
+- /* Run a command using the TaskWindow module.
+-  * If SHELL_FILTER is set then output is not echoed to the screen,
+-  * If it is not set, then \r is not sent to the output file.
+-  */
+-     int
+- gui_mch_call_shell(cmd, options)
+-     char_u  *cmd;
+-     int          options;    /* SHELL_FILTER if called by do_filter() */
+-                      /* SHELL_COOKED if term needs cooked mode */
+- {
+-     char_u  task_cmd[256];   /* Contains *TaskWindow command. */
+-     int          block[64];
+-     int          reason;
+-     char_u  *out;
+-     char_u  c;
+-     int          old_msg_col;
+-     char_u  *out_redir;
+-     int          length;
+-     FILE    *out_file = NULL;
+- 
+-     out_redir = strstr(cmd, " > ");
+-     if (out_redir == NULL)
+-      length = strlen(cmd);   /* No redirection. */
+-     else
+-     {
+-      length = out_redir - cmd;
+-      out_file = fopen(out_redir + 3, "wb");
+-      if (out_file == NULL)
+-          smsg("WARNING : Can't open file %s for writing\n", out_redir + 3);
+-     }
+- 
+-     if (length > 180)
+-     {
+-      if (out_file)
+-          fclose(out_file);
+-      return FAIL;            /* Command too long. */
+-     }
+- 
+-     strcpy(task_cmd, "TaskWindow \"");
+-     strncpy(task_cmd + 12, cmd, length);
+-     sprintf(task_cmd + 12 + length,
+-          "\" -task &%08x -ctrl -quit -name \"Vim command\"",
+-          task_handle);
+- 
+-     if (options & SHELL_COOKED)
+-      settmode(TMODE_COOK);
+- 
+-     if (xswi(Wimp_StartTask, task_cmd) & v_flag)
+-     {
+-      /* Failed to even start a new task (out of memory?) */
+-      settmode(TMODE_RAW);
+-      if (out_file)
+-          fclose(out_file);
+-      return FAIL;
+-     }
+- 
+-     /* Wait for the child process to initialise. */
+-     child_handle = 0;
+-     while (!child_handle)
+-     {
+-      reason = wimp_poll(0, block);
+-      if ((reason == 17 || reason == 18) && block[4] == 0x808c2)
+-          child_handle = block[1];
+-      else
+-          process_event(reason, block);
+-     }
+- 
+-     /* Block until finished */
+-     while (child_handle)
+-     {
+-      reason = wimp_poll(1, block);
+-      if (reason == 3 || (reason == 8 && block[6] == 3))
+-      {
+-          /* Close window request or CTRL-C - kill child task. */
+-          block[0] = 20;
+-          block[3] = 0;
+-          block[4] = 0x808c4;     /* Morite */
+-          swi(Wimp_SendMessage, 17, block, child_handle);
+-          MSG_PUTS(_("\nSending message to terminate child process.\n"));
+-          continue;
+-      }
+-      else if (reason == 8)
+-      {
+-          block[0] = 28;
+-          block[3] = 0;
+-          block[4] = 0x808c0;     /* Input */
+-          block[5] = 1;
+-          /* Block[6] is OK as it is! */
+-          swi(Wimp_SendMessage, 17, block, child_handle);
+-          continue;
+-      }
+-      else if (reason == 17 || reason == 18)
+-      {
+-          if (block[4] == 0x808c1)
+-          {
+-              /* Ack message. */
+-              block[3] = block[2];
+-              swi(Wimp_SendMessage, 19, block, block[1]);
+-              out = (char_u *)block + 24;
+-              old_msg_col = msg_col;
+-              while (block[5]--)
+-              {
+-                  c = *out++;
+-                  if (out_file && (c != '\r' || (options & SHELL_FILTER)))
+-                      fputc(c, out_file);
+-                  if ((options & SHELL_FILTER) == 0)
+-                  {
+-                      if (c == 127)
+-                          msg_puts("\b \b");
+-                      else if (c > 31)
+-                          msg_putchar(c);
+-                      else if (c == 10)
+-                      {
+-                          lines_left = 8;     /* Don't do More prompt! */
+-                          msg_putchar(10);
+-                      }
+-                  }
+-              }
+-              /* Flush output to the screen. */
+-              windgoto(msg_row, msg_col);
+-              out_flush();
+-              continue;
+-          }
+-      }
+-      process_event(reason, block);
+-     }
+-     msg_putchar('\n');
+-     settmode(TMODE_RAW);
+-     if (out_file)
+-      fclose(out_file);
+-     return OK;
+- }
+- 
+- /* Like strsave(), but stops at any control char */
+-     char_u *
+- wimp_strsave(str)
+-     char    *str;
+- {
+-     int          strlen = 0;
+-     char_u  *retval;
+-     while (str[strlen] > 31)
+-      strlen++;
+-     retval = alloc(strlen + 1);
+-     if (retval)
+-     {
+-      memcpy(retval, str, strlen);
+-      retval[strlen] = '\0';
+-     }
+-     return retval;
+- }
+- 
+- /* If we are saving then pop up a standard RISC OS save box.
+-  * Otherwise, open a directory viewer on the given directory (and return NULL)
+-  * The string we return will be freed later.
+-  */
+-     char_u *
+- gui_mch_browse(saving, title, dflt, ext, initdir, filter)
+-     int              saving;         /* write action */
+-     char_u   *title;         /* title for the window */
+-     char_u   *dflt;          /* default file name */
+-     char_u   *ext;           /* extension added */
+-     char_u   *initdir;       /* initial directory, NULL for current dir */
+-     char_u   *filter;        /* file name filter */
+- {
+-     char command[256];
+-     int length;
+- 
+-     if (saving)
+-     {
+-      int     block[64];
+-      int     reason;
+-      int     done_save = FALSE;
+-      char_u  *retval = NULL;
+-      char_u  *sprname;
+-      char_u  *fname;
+-      int     dragging_icon = FALSE;
+-      int     filetype;
+- 
+-      if (!dflt)
+-          dflt = "TextFile";
+- 
+-      block[0] = save_window;
+-      block[1] = 0;
+-      swi(Wimp_GetIconState, 0, block);
+-      sprname = ((char_u *) block[7]);
+-      block[1] = 1;
+-      swi(Wimp_GetIconState, 0, block);
+-      fname = ((char *) block[7]);
+-      strncpy(fname, dflt, 255);
+- 
+-      if (xswi(OS_FSControl, 31, curbuf->b_p_oft) & v_flag)
+-      {
+-          filetype = 0xfff;
+-          strcpy(sprname + 5, "xxx");
+-      }
+-      else
+-      {
+-          filetype = r2;
+-          sprintf(sprname + 5, "%03x", filetype);
+-      }
+- 
+-      /* Open the save box */
+- 
+-      swi(Wimp_GetPointerInfo, 0, block);
+-      swi(Wimp_CreateMenu, 0, save_window, block[0] - 64, block[1] + 64);
+-      swi(Wimp_SetCaretPosition, save_window, 1, 0, 0, -1, -1);
+- 
+-      while (!done_save)
+-      {
+-          reason = wimp_poll(1, block);
+-          switch (reason)
+-          {
+-              case 1:
+-                  redraw_window(block);
+-                  break;
+-              case 2:
+-                  if (block[0] == save_window)
+-                      swi(Wimp_OpenWindow, 0, block);
+-                  else
+-                      ro_open_window(block);
+-                  break;
+-              case 3:
+-                  done_save = TRUE;
+-                  break;
+-              case 6:
+-                  if (block[3] != save_window)
+-                      done_save = TRUE;
+-                  else
+-                  {
+-                      int drag_box[4];
+-                      int min_x, max_y;
+- 
+-                      switch (block[4])
+-                      {
+-                          case    0: /* Start drag */
+-                              block[0] = save_window;
+-                              swi(Wimp_GetWindowState, 0, block);
+-                              min_x = block[1];
+-                              max_y = block[4];
+-                              block[1] = 0;
+-                              swi(Wimp_GetIconState, 0, block);
+-                              drag_box[0] = block[2] + min_x;
+-                              drag_box[1] = block[3] + max_y;
+-                              drag_box[2] = block[4] + min_x;
+-                              drag_box[3] = block[5] + max_y;
+- 
+-                              swi(DragASprite_Start,
+-                                      0x45,
+-                                      1,
+-                                      sprname,
+-                                      drag_box);
+-                              dragging_icon = TRUE;
+-                              break;
+-                          case    2: /* OK */
+-                              retval = wimp_strsave(fname);
+-                              done_save = TRUE;
+-                              break;
+-                          case    3: /* Cancel */
+-                              done_save = TRUE;
+-                              break;
+-                      }
+-                  }
+-                  break;
+-              case 7:
+-                  if (dragging_icon)
+-                  {
+-                      int len = 0;
+- 
+-                      dragging_icon = FALSE;
+-                      swi(Wimp_GetPointerInfo, 0, block);
+-                      block[5] = block[3];
+-                      block[6] = block[4];
+-                      block[7] = block[0];
+-                      block[8] = block[1];
+-                      block[9] = 0;           /* Don't know the size */
+-                      block[10] = filetype;
+- 
+-                      while (fname[len] > 31)
+-                      {
+-                          if (fname[len] == '.')
+-                          {
+-                              fname += len + 1;
+-                              len = 0;
+-                          }
+-                          else
+-                              len++;
+-                      }
+-                      if (len > 211)
+-                          len = 211;
+- 
+-                      memcpy(((char_u *) block) + 44, fname, len);
+-                      ((char_u *)block)[44 + len] = '\0';
+- 
+-                      block[0] = (len + 48) & 0xfc;
+-                      block[3] = 0;
+-                      block[4] = 1;       /* DataSave */
+- 
+-                      swi(Wimp_SendMessage, 17, block, block[5], block[6]);
+-                  }
+-                  else
+-                      ro_drag_finished(block);
+-                  break;
+-              case 8:
+-                  if (block[6] == 13)
+-                  {
+-                      retval = wimp_strsave(fname);
+-                      done_save = TRUE;
+-                  }
+-                  else if (block[6] == 0x1b)
+-                      done_save = TRUE;
+-                  else
+-                      swi(Wimp_ProcessKey, block[6]);
+-                  break;
+-              case 17:
+-              case 18:
+-                  if (block[4] == 2 && block[9] != -1)
+-                  {
+-                      /* DataSaveAck from dragging icon. */
+-                      retval = wimp_strsave(((char_u *) block) + 44);
+-                      done_save = TRUE;
+-                  }
+-                  else if (block[4] == 0x400c9)
+-                  {
+-                      /* MenusDeleted */
+-                      done_save = TRUE;
+-                  }
+-                  else
+-                      ro_message(block);
+-                  break;
+-          }
+-      }
+-      block[0] = save_window;
+-      swi(Wimp_CloseWindow, 0, block);
+-      swi(Wimp_GetCaretPosition, 0, block);
+-      if (block[0] == -1)
+-          swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+- 
+-      return retval;
+-     }
+-     else if (initdir)
+-     {
+-      /* Open a directory viewer */
+-      length = strlen(initdir);
+- 
+-      if (length > 240)
+-          return NULL;        /* Path too long! */
+- 
+-      length = sprintf(command, "Filer_OpenDir %s", initdir);
+-      while (command[length - 1] == '.')
+-          length--;
+-      command[length] = '\0';
+-      swi(OS_CLI, command);
+-     }
+-     return NULL;
+- }
+--- 0 ----
+*** ../vim-7.3.186/src/os_riscos.c     2010-08-15 21:57:27.000000000 +0200
+--- src/os_riscos.c    1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,1292 ****
+- /* vi:set ts=8 sts=4 sw=4:
+-  *
+-  * VIM - Vi IMproved by Bram Moolenaar
+-  *
+-  * Do ":help uganda"  in Vim to read copying and usage conditions.
+-  * Do ":help credits" in Vim to see a list of people who contributed.
+-  * See README.txt for an overview of the Vim source code.
+-  */
+- 
+- #include "vim.h"
+- 
+- /*
+-  * os_riscos.c
+-  *
+-  * Thomas Leonard <tal197@ecs.soton.ac.uk>
+-  */
+- 
+- const char *__dynamic_da_name = "Vim heap"; /* Enable and name our dynamic area */
+- int ro_line_mode = TRUE;  /* For Ex mode we much echo chars to the screen ourselves */
+- int windowed;                /* Flag - are we running inside a text window? */
+- int WinLeft, WinTop; /* We might be started inside a text window */
+- int ScrollTop;               /* Make cursor movements relative to ScrollTop. */
+- 
+- int old_escape_state = -1;
+- int old_cursor_state = -1;
+- 
+- #define rgb(r,g,b) ((b<<24) + (g<<16) + (r<<8))
+- #define NORMAL_FG 0x00000000
+- #define NORMAL_BG 0xffffffff
+- 
+- /* Convert a DOS colour number to an RGB palette entry.
+-  * Mappings from X11 rgb/txt file.
+-  */
+-     static int
+- map_colour(dos)
+-     int dos;         /* Standard DOS colour number. */
+- {
+-     switch (dos)
+-     {
+-      case 0: return 0;                       /* Black */
+-      case 1: return rgb(0,0,139);            /* DarkBlue */
+-      case 2: return rgb(0,100,0);            /* DarkGreen */
+-      case 3: return rgb(0,139,139);          /* DarkCyan */
+-      case 4: return rgb(139,0,0);            /* DarkRed */
+-      case 5: return rgb(139,0,139);          /* DarkMagenta */
+-      case 6: return rgb(165,42,42);          /* Brown, DarkYellow */
+-      case 7: return rgb(211,211,211);        /* LightGray, LightGrey, Gray, Grey */
+-      case 8: return rgb(169,169,169);        /* DarkGray, DarkGrey */
+-      case 9: return rgb(173,216,230);        /* Blue, LightBlue */
+-      case 10: return rgb(144,238,144);       /* Green, LightGreen */
+-      case 11: return rgb(224,255,255);       /* Cyan, LightCyan */
+-      case 12: return rgb(255,0,0);           /* Red, LightRed */
+-      case 13: return rgb(255,0,255);         /* Magenta, LightMagenta */
+-      case 14: return rgb(255,255,0);         /* Yellow, LightYellow */
+-      case 15: return rgb(255,255,255);       /* White */
+-     }
+-     return rgb(100,100,100);
+- }
+- 
+-     static void
+- text_fg(fg)
+-     int fg;          /* Foregound colour in the form &BBGGRR00 */
+- {
+-     xswi(ColourTrans_SetTextColour, fg, 0, 0, 0);
+- }
+- 
+-     static void
+- text_bg(bg)
+-     int              bg;     /* Backgound colour in the form &BBGGRR00 */
+- {
+-     xswi(ColourTrans_SetTextColour, bg, 0, 0, 1 << 7);
+- }
+- 
+- #define OUT_NORMAL 0
+- #define OUT_NUMBER 1         /* Reading in a number */
+- 
+-     void
+- mch_write(s, len)
+-     char_u  *s;
+-     int          len;
+- {
+-     static int mode = OUT_NORMAL;
+-     static int x, y;                 /* For reading numbers in. */
+- 
+-     if (!term_console)
+-     {
+-      /* Maybe we are running Vim remotely - don't interpret chars */
+-      while (len--)
+-      {
+-          char_u c = *s++;
+-          swi(OS_WriteC, c);
+-          /* We might need to send a CR too. This shouldn't
+-           * hurt if we don't need it, should it?
+-           */
+-          if (c == 10)
+-              swi(OS_WriteI + 13);
+-      }
+-      return;
+-     }
+- 
+-     while (len--)
+-     {
+-      char_u c = *s++;
+-      switch (mode)
+-      {
+-          case OUT_NUMBER:
+-              if (c < '0' || c > '9')
+-              {
+-                  mode = OUT_NORMAL;
+-              }
+-              else
+-              {
+-                  x = (x * 10) + c - '0';
+-                  continue;
+-              }
+-          /* note: no break here! */
+- 
+-          case OUT_NORMAL:
+-              switch (c)
+-              {
+-                  case 1:
+-                      /* Number (in decimal) follows. */
+-                      mode = OUT_NUMBER;
+-                      y = x;
+-                      x = 0;
+-                      break;
+-                  case 2:
+-                      /* Position cursor. */
+-                      swi(OS_WriteI + 31);
+-                      swi(OS_WriteC, x);
+-                      swi(OS_WriteC, y - ScrollTop);
+-                      break;
+-                  case 3:
+-                      /* Set scroll region. */
+-                      if (x == Rows -1 && y == 0 && !windowed)
+-                      {
+-                          /* Whole screen - remove text window.
+-                           * This is MUCH faster.
+-                           */
+-                          swi(OS_WriteI + 26);
+-                      }
+-                      else
+-                      {
+-                          /* Create a text window. */
+-                          swi(OS_WriteI + 28);
+-                          swi(OS_WriteC, WinLeft);
+-                          swi(OS_WriteC, WinTop + x);
+-                          swi(OS_WriteC, WinLeft + Columns - 1);
+-                          swi(OS_WriteC, WinTop + y);
+-                      }
+-                      ScrollTop = y;
+-                      break;
+-                  case 4:
+-                      /* Normal mode. */
+-                      text_fg(NORMAL_FG);
+-                      text_bg(NORMAL_BG);
+-                      break;
+-                  case 5:
+-                      /* Reverse mode. */
+-                      text_fg(NORMAL_BG);
+-                      text_bg(NORMAL_FG);
+-                      break;
+-                  case 10:
+-                      swi(OS_NewLine);
+-                      break;
+-                  case 14:
+-                      /* Cursor invisible. */
+-                      swi(OS_WriteN,
+-                           "\027\001\000\000\000\000\000\000\000\000",
+-                           10);
+-                      break;
+-                  case 15:
+-                      /* Cursor visible. */
+-                      swi(OS_WriteN,
+-                           "\027\001\002\000\000\000\000\000\000\000",
+-                           10);
+-                      break;
+-                  case 16:
+-                      /* Cursor very visible (flash) */
+-                      swi(OS_WriteN,
+-                           "\027\001\003\000\000\000\000\000\000\000",
+-                           10);
+-                  case 17:
+-                      /* Set foreground colour. */
+-                      text_fg(map_colour(x));
+-                      break;
+-                  case 18:
+-                      /* Set background colour. */
+-                      text_bg(map_colour(x));
+-                      break;
+-                  case 19:
+-                      /* Scroll text down. */
+-                      swi(OS_WriteN,
+-                           "\027\007\000\002\000\000\000\000\000\000",
+-                           10);
+-                      break;
+-                  default:
+-                      swi(OS_WriteC, c);
+-              }
+-              continue;
+- 
+-          default:
+-              printf("[output error]");
+-              mode = OUT_NORMAL;
+-      }
+-     }
+- }
+- 
+- /*
+-  * mch_inchar(): low level input funcion.
+-  * Get a characters from the keyboard.
+-  * Return the number of characters that are available.
+-  * If wtime == 0 do not wait for characters.
+-  * If wtime == n wait n msecs for characters.
+-  * If wtime == -1 wait forever for characters.
+-  *
+-  * TODO: call convert_input() for 'fileencoding' to 'encoding' conversion.
+-  */
+-     int
+- mch_inchar(buf, maxlen, wtime, tb_change_cnt)
+-     char_u  *buf;
+-     int          maxlen;
+-     long    wtime;
+-     int          tb_change_cnt;
+- {
+-     int got=0;
+-     unsigned int start_time = clock();
+- 
+-     if (ro_line_mode)
+-     {
+-      /* We're probably in Ex mode - get whole lines at a time. */
+- 
+-      static char_u   line_buffer[256];
+-      static int      remaining_chars = 0;
+-      static int      buf_pos = 0;
+- 
+-      /* Do we need to fetch another line? */
+-      if (remaining_chars == 0)
+-      {
+-          int         old_esc_state;
+-          swi(OS_Byte, 200, 1, 0xfe);
+-          old_esc_state = r1;
+- 
+-          buf_pos = 0;
+-          if (xswi(OS_ReadLine, line_buffer, 255, 0, 255) & (c_flag | v_flag))
+-          {
+-              got_int = TRUE;     /* ESC pressed */
+-              r1 = 0;
+-          }
+-          line_buffer[r1] = 13;
+-          remaining_chars = r1 + 1;   /* Count CR as part of input */
+- 
+-          swi(OS_Byte, 200, old_esc_state, 0);
+-      }
+- 
+-      /* Can we send the rest of the buffer back in one go? */
+-      if (remaining_chars <= maxlen)
+-      {
+-          int     got = remaining_chars;
+- 
+-          memcpy(buf, line_buffer + buf_pos, got);
+-          remaining_chars = 0;
+-          return  got;
+-      }
+- 
+-      /* Send as much as we can */
+-      memcpy(buf, line_buffer + buf_pos, maxlen);
+-      buf_pos += maxlen;
+-      remaining_chars -= maxlen;
+- 
+-      return maxlen;
+-     }
+- 
+-     if (!term_console)
+-     {
+-      /* Use OS_ReadC for all input.
+-       * Avoids problems with remote access getting interference from
+-       * the keyboard.
+-       */
+-      if (wtime == 0)
+-          return 0;       /* Ignore quick key checks */
+- 
+-      if (xswi(OS_ReadC) & c_flag)
+-      {
+-          got_int = TRUE;     /* ESC pressed - can this happen? */
+-          swi(OS_Byte, 124);  /* Clear Escape state */
+-          r0 = 0x1b;          /* It *might* not have been Escape! */
+-      }
+-      buf[0] = r0;
+-      return 1;
+-     }
+- 
+-     /*
+-      * OK, here's the plan:
+-      *
+-      * 1) Wait until wtime expires or we get a key
+-      * 2) Get keys until the keyboard buffer is empty or buf is full
+-      */
+- 
+-     while (xswi(OS_Byte,145,0) & c_flag)
+-     {
+-      /* Nothing at all in the keyboard buffer.
+-       * Has our time expired yet?
+-       */
+-      if ( (wtime != -1) && (clock() - start_time) >= wtime )
+-          return 0;           /* Nothing read - giving up */
+-     }
+- 
+-     /* We've got one char (in r2) - are there any more? */
+- 
+-     while (got < maxlen)
+-     {
+-      buf[got++] = r2;
+- 
+-      if (xswi(OS_Byte,145,0) & c_flag)
+-          return got;         /* Keyboard buffer empty */
+-     }
+-     return got;                      /* buf is full */
+- }
+- 
+- /*
+-  * return non-zero if a character is available
+-  */
+-     int
+- mch_char_avail()
+- {
+-     if (!term_console)
+-      return 0;           /* Can't tell */
+-     if (xswi(OS_Byte, 152, 0) & c_flag)
+-      return 0;
+-     return 1;
+- }
+- 
+- /* Find out how much free memory we have.
+-  * I don't know how to work this out exactly but, since we can claim
+-  * more memory from the OS, let's just report the free pool size.
+-  * Dynamic area 6 doesn't exist pre 3.6 according to StrongHelp, so
+-  * we'll use Wimp_SlotSize. If that fails (outside the desktop?)
+-  * then just return a big number and hope.
+-  */
+-     long_u
+- mch_avail_mem(special)
+-     int special;
+- {
+-     if (xswi(Wimp_SlotSize, -1, -1) & v_flag)
+-      return 0x7fffffff;
+-     return r2;
+- }
+- 
+-     void
+- mch_delay(msec, ignoreinput)
+-     long     msec;
+-     int              ignoreinput;
+- {
+-     int              start_time, time_now;
+-     int              csec = msec / 10;
+- 
+-     swi(OS_ReadMonotonicTime);
+-     start_time = r0;
+- 
+-     for (;;)
+-     {
+-      swi(OS_ReadMonotonicTime);
+-      time_now = r0;
+-      if (time_now - start_time > csec)
+-          return;
+- #ifdef FEAT_GUI
+-      /* In the GUI, allow other programs to run while waiting. */
+-      if (gui.in_use)
+-          gui_mch_wait_for_chars(start_time + csec);
+- #endif
+-     }
+- }
+- 
+- /*
+-  * If the machine has job control, use it to suspend the program,
+-  * otherwise fake it by starting a new shell.
+-  */
+-     void
+- mch_suspend()
+- {
+-     suspend_shell();
+- }
+- 
+-     void
+- mch_init()
+- {
+-     /*
+-      * Read window size first. Calls to mch_get_shellsize() will
+-      * simply return these values in future so that setting the
+-      * text window (used for scrolling) won't give strange results.
+-      */
+- 
+-     int buf[7] = {132, 135, 256, 257, 1, 2, -1};
+- 
+-     /* Command windows are no longer forced open, since if we are
+-      * in the desktop then we'll use the GUI version.
+-      * Opening a command window here messes up the GUI version startup
+-      */
+- #ifndef FEAT_GUI
+-     swi(OS_WriteI);
+- #endif
+-     swi(OS_ReadVduVariables, buf, buf);
+-     WinLeft = buf[0];
+-     WinTop  = buf[1];
+-     Columns = buf[2];
+-     Rows    = buf[3] + 1;    /* Seems to be one off (VduVars wrong?) */
+-     ScrollTop = 0;
+- 
+-     /* Are we running in a textwindow? */
+-     if (Rows == buf[5] + 1 && Columns == buf[4] + 1)
+-      windowed = 0;
+-     else
+-      windowed = 1;
+- 
+-     /* Choose a nice colour scheme. */
+-     text_fg(NORMAL_FG);
+-     text_bg(NORMAL_BG);
+- }
+- 
+- /*
+-  * Check_win checks whether we have an interactive stdout.
+-  */
+- /* ARGSUSED */
+-     int
+- mch_check_win(argc, argv)
+-     int          argc;
+-     char    **argv;
+- {
+-     return OK;
+- }
+- 
+- /*
+-  * Return TRUE if the input comes from a terminal, FALSE otherwise.
+-  */
+-     int
+- mch_input_isatty()
+- {
+-     if (xswi(OS_ChangeRedirection, -1, -1) & v_flag)
+-      return TRUE;            /* Error - TRUE is probably correct though */
+-     if (r0 == 0)
+-      return TRUE;
+-     return FALSE;
+- }
+- 
+- #ifdef FEAT_TITLE
+-     int
+- mch_can_restore_title()
+- {
+-     return FALSE;
+- }
+- 
+-     int
+- mch_can_restore_icon()
+- {
+-     return FALSE;
+- }
+- 
+- 
+- /*
+-  * Set the window title and icon.
+-  */
+-     void
+- mch_settitle(title, icon)
+-     char_u *title;
+-     char_u *icon;
+- {
+-     if (title == NULL)
+-      title = (char_u *) "<untitled>";
+- #ifdef FEAT_GUI
+-     if (gui.in_use && strcmp(title, gui.window_title))
+-     {
+-      int length;
+-      length = strlen(title);
+-      if (length >= gui.window_title_size)
+-          length = gui.window_title_size - 1;
+-      strncpy(gui.window_title, title, length);
+-      gui.window_title[length] = 0;
+-      ro_redraw_title(gui.window_handle);
+-     }
+- #endif
+-     return;
+- }
+- 
+- /*
+-  * Restore the window/icon title.
+-  * "which" is one of:
+-  *  1  only restore title
+-  *  2  only restore icon
+-  *  3  restore title and icon
+-  */
+-     void
+- mch_restore_title(which)
+-     int which;
+- {
+-     return;
+- }
+- #endif
+- 
+- /*
+-  * Insert user name in s[len].
+-  * Return OK if a name found.
+-  */
+-     int
+- mch_get_user_name(s, len)
+-     char_u  *s;
+-     int          len;
+- {
+-     /* RISC OS doesn't support user names. */
+-     *s = NUL;
+-     return FAIL;
+- }
+- 
+- /*
+-  * Insert host name in s[len].
+-  */
+- 
+-     void
+- mch_get_host_name(s, len)
+-     char_u  *s;
+-     int          len;
+- {
+-     if (xswi(OS_ReadVarVal, "Machine$Name", s, len, 0, 3) & v_flag)
+-     {
+-      /* Variable does not exist (normal operation) */
+-      vim_strncpy(s, "(unknown)", len - 1);
+-     }
+- }
+- 
+- /*
+-  * return process ID
+-  */
+-     long
+- mch_get_pid()
+- {
+-     if (xswi(Wimp_ReadSysInfo, 5) & v_flag)
+-      return 0;
+-     return r0;
+- }
+- 
+- /*
+-  * Get name of current directory into buffer 'buf' of length 'len' bytes.
+-  * Return OK for success, FAIL for failure.
+-  */
+-     int
+- mch_dirname(buf, len)
+-     char_u  *buf;
+-     int          len;
+- {
+-     if (xswi(OS_FSControl, 37, "@", buf, 0, 0, len) & v_flag)
+-      return FAIL;
+-     return OK;
+- }
+- 
+- /*
+-  * Get absolute file name into buffer 'buf' of length 'len' bytes.
+-  *
+-  * return FAIL for failure, OK for success
+-  */
+-     int
+- mch_FullName(fname, buf, len, force)
+-     char_u *fname, *buf;
+-     int len;
+-     int      force;          /* Also expand when already absolute path name.
+-                       * Not used under RISC OS.
+-                       */
+- {
+-     if (xswi(OS_FSControl, 37, fname, buf, 0, 0, len) & v_flag)
+-      return FAIL;
+-     return OK;
+- }
+- 
+- /*
+-  * Return TRUE if "fname" does not depend on the current directory.
+-  */
+-     int
+- mch_isFullName(fname)
+-     char_u   *fname;
+- {
+-     if (strstr(fname, "::") && strstr(fname,".$."))
+-      return TRUE;
+-     return FALSE;
+- }
+- 
+- /*
+-  * Get file permissions for 'name'.
+-  * Returns -1 when it doesn't exist.
+-  */
+-     long
+- mch_getperm(name)
+-     char_u *name;
+- {
+-     struct stat statb;
+- 
+-     if (stat((char *)name, &statb))
+-      return -1;
+-     return statb.st_mode;
+- }
+- 
+- /*
+-  * set file permission for 'name' to 'perm'
+-  *
+-  * return FAIL for failure, OK otherwise
+-  */
+-     int
+- mch_setperm(name, perm)
+-     char_u  *name;
+-     long    perm;
+- {
+-     return (chmod((char *)name, (mode_t)perm) == 0 ? OK : FAIL);
+- }
+- 
+- /*
+-  * Set hidden flag for "name".
+-  */
+- /* ARGSUSED */
+-     void
+- mch_hide(name)
+-     char_u   *name;
+- {
+-     /* can't hide a file */
+- }
+- 
+- /*
+-  * return TRUE if "name" is a directory
+-  * return FALSE if "name" is not a directory
+-  * return FALSE for error
+-  */
+-     int
+- mch_isdir(name)
+-     char_u *name;
+- {
+-     if (xswi(OS_File, 17, name) & v_flag)
+-      return FALSE;
+-     if (r0 == 2 || r0 == 3)
+-      return TRUE;            /* Count image files as directories. */
+-     return FALSE;
+- }
+- 
+- /*
+-  * Return 1 if "name" can be executed, 0 if not.
+-  * Return -1 if unknown. Requires which to work.
+-  */
+-     int
+- mch_can_exe(name)
+-     char_u   *name;
+- {
+-     char_u   *buf;
+-     char_u   *p;
+-     int              retval;
+- 
+-     buf = alloc((unsigned)STRLEN(name) + 7);
+-     if (buf == NULL)
+-      return -1;
+-     sprintf((char *)buf, "which %s", name);
+-     p = get_cmd_output(buf, NULL, SHELL_SILENT);
+-     vim_free(buf);
+-     if (p == NULL)
+-      return -1;
+-     /* result can be: "name: Command not found" */
+-     retval = (*p != NUL && strstr((char *)p, "not found") == NULL);
+-     vim_free(p);
+-     return retval;
+- }
+- 
+- /*
+-  * Check what "name" is:
+-  * NODE_NORMAL: file or directory (or doesn't exist)
+-  * NODE_WRITABLE: writable device, socket, fifo, etc.
+-  * NODE_OTHER: non-writable things
+-  */
+-     int
+- mch_nodetype(name)
+-     char_u   *name;
+- {
+-     /* TODO */
+-     return NODE_NORMAL;
+- }
+- 
+-     void
+- mch_early_init()
+- {
+-     /* Turn off all the horrible filename munging in UnixLib. */
+-     int __riscosify_control = __RISCOSIFY_NO_PROCESS;
+- }
+- 
+-     void
+- mch_exit(r)
+-     int r;
+- {
+-     settmode(TMODE_COOK);
+-     exiting = TRUE;
+-     out_flush();
+-     ml_close_all(TRUE);              /* remove all memfiles */
+- 
+- #ifdef FEAT_GUI
+-     if (gui.in_use)
+-      gui_exit(r);
+- #endif
+-     swi(OS_NewLine);
+-     if (old_escape_state != -1)
+-      swi(OS_Byte, 229, old_escape_state, 0);
+-     if (old_cursor_state != -1)
+-      swi(OS_Byte, 4, old_cursor_state);
+-     exit(r);
+- }
+- 
+-     void
+- mch_settmode(tmode)
+-     int              tmode;      /* TMODE_RAW or TMODE_COOK */
+- {
+-     if (tmode == TMODE_COOK)
+-     {
+-      ro_line_mode = TRUE;
+-      return;
+-     }
+- 
+-     ro_line_mode = FALSE;
+- 
+-     if (term_console)
+-     {
+-      /* Block cursor. */
+-      swi(OS_WriteN,
+-              "\027\000\012\000\000\000\000\000\000\000",
+-              10);
+- 
+-      /* Disable the standard cursor key actions. */
+-      swi(OS_Byte, 4, 1);
+-      if (old_cursor_state == -1)
+-          old_cursor_state = r1;
+-     }
+- 
+-     /* Stop Escape from quitting Vim! */
+-     swi(OS_Byte, 229, 1, 0);
+-     if (old_escape_state == -1)
+-      old_escape_state = r1;
+- }
+- 
+- /*
+-  * set mouse clicks on or off (only works for xterms)
+-  */
+-     void
+- mch_setmouse(on)
+-     int          on;
+- {
+- }
+- 
+- /*
+-  * set screen mode, always fails.
+-  */
+- /* ARGSUSED */
+-     int
+- mch_screenmode(arg)
+-     char_u   *arg;
+- {
+-     EMSG(_(e_screenmode));
+-     return FAIL;
+- }
+- 
+- /*
+-  * Try to get the current window size.
+-  * Return OK when size could be determined, FAIL otherwise.
+-  * Simply return results stored by mch_init() if we are the
+-  * machine's console. If not, we don't know how big the screen is.
+-  */
+-     int
+- mch_get_shellsize()
+- {
+-     /* if size changed: screenalloc will allocate new screen buffers */
+-     return term_console ? OK : FAIL;
+- }
+- 
+- /*
+-  * Can't change the size.
+-  * Assume the user knows what he's doing and use the new values.
+-  */
+-     void
+- mch_set_shellsize()
+- {
+-     /* Assume the user knows what he's doing and use the new values. */
+- }
+- 
+- /*
+-  * Rows and/or Columns has changed.
+-  */
+-     void
+- mch_new_shellsize()
+- {
+-     /* Nothing to do. */
+- }
+- 
+-     int
+- mch_call_shell(cmd, options)
+-     char_u   *cmd;
+-     int              options;        /* SHELL_*, see vim.h */
+- {
+-     int              retval;
+-     int              tmode = cur_tmode;
+- 
+-     if (cmd == NULL)
+-      cmd = (char_u *) "GOS";
+- 
+- #ifdef FEAT_GUI
+-     if (gui.in_use)
+-      return gui_mch_call_shell(cmd, options);
+- #endif
+-     if (options & SHELL_COOKED)
+-      settmode(TMODE_COOK);           /* set to normal mode */
+-     MSG_PUTS("\n");
+- 
+-    /* I don't even want to think about what UnixLib must
+-     * be doing to allow this to work...
+-     */
+-     retval = system(cmd);
+-     if (retval && !(options & SHELL_SILENT))
+-      EMSG(strerror(EOPSYS));         /* Doesn't seem to set errno? */
+- 
+-     swi(OS_Byte, 229, 1, 0);         /* Re-disable escape */
+-     if (tmode == TMODE_RAW)
+-      settmode(TMODE_RAW);            /* set to raw mode */
+-     return retval ? FAIL : OK;
+- }
+- 
+- /*
+-  * Check for Escape being pressed right now.
+-  * [ different if !term_console? ]
+-  */
+-     void
+- mch_breakcheck()
+- {
+-     if (xswi(OS_Byte, 121, 0xf0) & v_flag)
+-      return;
+-     if (r1 == 0xff)
+-     {
+-      got_int = TRUE;
+-      swi(OS_Byte, 15, 1);    /* Flush input buffer */
+-     }
+- }
+- 
+- /*
+-  * Recursively expand one path component into all matching files and/or
+-  * directories.
+-  * "path" has backslashes before chars that are not to be expanded.
+-  * Return the number of matches found.
+-  */
+-     int
+- mch_expandpath(gap, path, flags)
+-     garray_T *gap;   /* Grow array for results. */
+-     char_u   *path;
+-     int              flags;  /* EW_* flags */
+- {
+-     int              got;    /* Number of matches. */
+-     char_u   *pattern;
+- 
+-    /* Plan:
+-     *
+-     * 1) Get first part of path - no wildcards
+-     * 2) Get next path element (wildcarded)
+-     * 3) Get rest of path
+-     *
+-     * If (3) is nothing then only the leaf is wildcarded - add to gap
+-     * Otherwise call recursively for each path in (2), passing (3)
+-     *
+-     * This is just the header function.
+-     */
+- 
+-     /* We must be able to modifiy path, so make a copy */
+-     pattern = vim_strsave(path);
+-     if (pattern == NULL)
+-      return 0;
+-     got = expand_section(gap, (char_u *)"", pattern, flags);
+-     vim_free(pattern);
+-     return got;
+- }
+- 
+- /*
+-  * expand_section(gap, "$.Dir1.Dir2", "ABBA*.myleaf##")
+-  *
+-  * calls expand_section(gap, "$.Dir1.Dir2.ABBA_Gold", "myleaf##")
+-  *   and expand_section(gap, "$.Dir1.Dir2.ABBA_Live", "myleaf##")
+-  *
+-  * If rest is just a leaf then all matches are added to gap.
+-  *
+-  * Returns number of items added to gap.
+-  */
+-     int
+- expand_section(gap, root, rest, flags)
+-     garray_T *gap;
+-     char_u   *root;  /* Non-wildcarded path to search */
+-     char_u   *rest;  /* Wildcarded remainder of path */
+-     int              flags;  /* Add dirs/files/missing objects. */
+- {
+-     static char_u buf[MAXPATHL];     /* Temporary buffer. */
+-     char_u dir[MAXPATHL];
+-     int start_element = -1;          /* Start of wildcarded element */
+-     char_u c;
+-     int i;
+-     int got, dir_pos;
+-     int buflen;                      /* Chars used in buf[] */
+-     int colon = 0;           /* Dir ends in ':' */
+- 
+-     buflen = strlen(root);
+-     STRNCPY(buf, root, buflen);      /* Copy root into buffer. */
+- 
+-    /*
+-     * Find end of nonwildcarded section.
+-     * Count ':' as a path sep since Vim:Bug* is a valid pathname.
+-     */
+- 
+-     for (i = 0; c = rest[i]; i++)
+-     {
+-      if (c == PATHSEP)
+-      {
+-          start_element = i;
+-          colon = 0;
+-      }
+-      if (c == ':')
+-      {
+-          start_element = i + 1;
+-          colon = 1;
+-      }
+-      if (c == '#' || c == '*')
+-          break;
+-     }
+-     if (c == 0)
+-      start_element = i;
+- 
+-    /*
+-     * start_element +> terminator for non-wildcarded section.
+-     * Transfer this bit into buf.
+-     */
+-     if (buflen + start_element + 4 >= MAXPATHL)
+-        return 0;                     /* Buffer full */
+-     if (start_element >= 0)
+-     {
+-      if (*root && !colon)
+-          buf[buflen++] = PATHSEP;
+-      strncpy(buf + buflen, rest, start_element);
+-      buflen += start_element;
+-     }
+-     buf[buflen] = 0;
+- 
+-    /*
+-     * Did we reach the end of the string without hitting any wildcards?
+-     */
+-     if (c == 0)
+-     {
+-      /* Yes - add combined path to grow array and return. */
+-      addfile(gap, buf, flags);
+-      return 1;
+-     }
+- 
+-     if (start_element < 0 || !colon)
+-      start_element++;
+-     rest += start_element;
+- 
+-    /*
+-     * rest does contain wildcards if we get here.
+-     *
+-     * Now : have we reached the leaf names part yet?
+-     * If so, add all matches (files and dirs) to gap.
+-     * If not, get next path element and scan all matching directories.
+-     */
+- 
+-     start_element = -1;
+-     for (i = 0; rest[i]; i++)
+-     {
+-      if (rest[i] == '.')
+-      {
+-          start_element = i;
+-          rest[i] = 0;                /* Break string here. */
+-          break;
+-      }
+-     }
+- 
+-     /* If start_element is -1 then we are matching leaf names */
+- 
+-     r3 = 0;                  /* Number of objs read. */
+-     dir_pos = 0;             /* Position through directory. */
+-     got = 0;                 /* Files added so far. */
+-     while (dir_pos != -1)
+-     {
+-      buf[buflen] = 0;
+-      if (xswi(OS_GBPB, 9,
+-              buf,                            /* Directory to scan. */
+-              buf + buflen + (1 - colon),     /* Buffer for result. */
+-              1,                      /* Number of objects to read. */
+-              dir_pos,                /* Search position. */
+-              MAXPATHL - 2 - buflen,  /* Size of result buffer. */
+-              rest)                   /* Wildcarded leafname. */
+-                      & v_flag)
+-      {
+-          EMSG(r0 + 4);
+-          r4 = -1;
+-      }
+-      dir_pos = r4;           /* r4 corrupted by addfile() */
+-      if (r3 > 0)
+-      {
+-          char_u *path = buf;
+-          if (buflen == 0)
+-              path++;                 /* Don't do '.File' */
+-          else if (!colon)
+-              buf[buflen] = '.';              /* Join path and leaf */
+- 
+-         /* Path -> full path of object found */
+-          if (start_element == -1)
+-          {
+-              addfile(gap, path, flags);
+-              got++;
+-          }
+-          else
+-          {
+-             /* Scan into subdirectories and images; ignore files */
+-              swi(OS_File, 17, path);
+-              if (r0 == 2 || r0 == 3)
+-                  got += expand_section(gap,
+-                                              path,
+-                                              rest + start_element + 1,
+-                                              flags);
+-          }
+-      }
+-     }
+- 
+-     /* Restore the dot if we removed it. */
+-     if (start_element >= 0)
+-      rest[start_element] = '.';
+-     return got;
+- }
+- 
+- /*
+-  * mch_expand_wildcards() - this code does wild-card pattern matching using
+-  * the shell. It isn't used under RISC OS.
+-  *
+-  * return OK for success, FAIL for error (you may lose some memory) and put
+-  * an error message in *file.
+-  *
+-  * num_pat is number of input patterns
+-  * pat is array of pointers to input patterns
+-  * num_file is pointer to number of matched file names
+-  * file is pointer to array of pointers to matched file names
+-  */
+-     int
+- mch_expand_wildcards(num_pat, pat, num_file, file, flags)
+-     int                  num_pat;
+-     char_u     **pat;
+-     int                 *num_file;
+-     char_u    ***file;
+-     int                  flags;              /* EW_* flags */
+- {
+-     /* This doesn't get called unless SPECIAL_WILDCHAR is defined. */
+-     return FAIL;
+- }
+- 
+- /*
+-  * Return TRUE if "p" contains wildcards which can be expanded by
+-  * mch_expandpath().
+-  */
+-     int
+- mch_has_exp_wildcard(p)
+-     char_u   *p;
+- {
+-     if (vim_strpbrk((char_u *)"*#", p))
+-      return TRUE;
+-     return FALSE;
+- }
+- 
+- /* Return TRUE if "p" contains wildcards. */
+-     int
+- mch_has_wildcard(p)
+-     char_u   *p;
+- {
+-     if (vim_strpbrk((char_u *)"*#`", p))
+-      return TRUE;
+-     return FALSE;
+- }
+- 
+-     int                      /* see Unix unlink(2) */
+- mch_remove(file)
+-     char_u *file;    /* Name of file to delete. */
+- {
+-     if (xswi(OS_FSControl, 27, file, 0, 0) & v_flag)
+-      return EXIT_FAILURE;
+-     return EXIT_SUCCESS;
+- }
+- 
+- /* Try to make existing scripts work without modification.
+-  * Return a pointer to the new string (freed by caller), or NULL
+-  *
+-  * Two main cases:
+-  * - Absolute : $VIM/syntax/help.vim
+-  * - Relative : Adfs::4.$.!Vim.Resources.Syntax/help.vim
+-  */
+-     char_u *
+- mch_munge_fname(fname)
+-     char_u *fname;
+- {
+-     char_u c;
+-     int len;
+-     char_u *retval;
+- 
+-     retval = fname = vim_strsave(fname);
+-     if (fname == NULL)
+-      return NULL;
+- 
+-     if (strncmp(fname, "$VIM/", 5) == 0)
+-     {
+-      strncpy(fname, "Vim:", 4);
+-      for (fname += 5; c = *fname; fname++)
+-      {
+-          if (c == '.')
+-              break;
+-          if (c == '/')
+-              fname[-1] = '.';
+-          else
+-              fname[-1] = c;
+-      }
+-      fname[-1] = '\0';
+-     }
+-     else
+-     {
+-      /* Check to see if the file exists without modification. */
+-      if (xswi(OS_File, 17, fname) & v_flag)
+-          r0 == 0;            /* Invalid filename? */
+-      if (r0)
+-          return retval;
+- 
+-      len = strlen(fname);
+-      if (strcmp(fname + len - 4, ".vim") == 0)
+-      {
+-          fname[len - 4] = '\0';
+-          for (; c = *fname; fname++)
+-          {
+-              if (c == '/')
+-                  *fname = '.';
+-          }
+-      }
+-     }
+-     return retval;
+- }
+- 
+- /* QuickFix reads munged names from the error file.
+-  * Correct them.
+-  */
+-     int
+- ro_buflist_add(old_name)
+-     char_u  *old_name;       /* Name of file found by quickfix */
+- {
+-     char_u  *fname;
+-     char_u  *leaf;   /* Pointer to start of leaf in old_name */
+-     char_u  *ptr;
+-     char_u  c;
+-     int          retval;
+- 
+-     if (old_name == NULL)
+-      return buflist_add(NULL, 0);
+- 
+-     /* Copy the name so we can mess around with it. */
+-     fname = vim_strsave(old_name);
+-     if (fname == NULL)
+-      /* Out of memory - can't modify name */
+-      return buflist_add(old_name, 0);
+- 
+-     /* Change `dir/main.c' into `dir.c.main' */
+-     leaf = fname;
+-     for (ptr = fname; c = *ptr; ptr++)
+-     {
+-      if (c == '/')
+-      {
+-          leaf = ptr + 1;
+-          *ptr = '.';
+-      }
+-      else if (c == '.')
+-          break;
+-     }
+-     if (c == '.')
+-     {
+-      /* Change `main.c' into `c.main'
+-       *        |    |
+-       *      leaf  ptr
+-       */
+-      ptr += old_name - fname;
+-      *ptr = '\0';
+-      sprintf(leaf,
+-              "%s.%s",
+-              ptr + 1,
+-              leaf - fname + old_name);
+-     }
+- 
+-     retval = buflist_add(fname, 0);
+-     free(fname);
+-     return retval;
+- }
+- 
+- /* Change the current directory.
+-  * Strip trailing dots to make it easier to use with filename completion.
+-  * Return 0 for success, -1 for failure.
+-  */
+-     int
+- mch_chdir(dir)
+-     char_u  *dir;
+- {
+-     int          length;
+-     int          retval;
+-     char_u  *new_dir;
+- 
+-     if (p_verbose >= 5)
+-     {
+-      verbose_enter();
+-      smsg((char_u *)"chdir(%s)", dir);
+-      verbose_leave();
+-     }
+-     length = strlen(dir);
+-     if (dir[length - 1] != '.')
+-      return chdir(dir);          /* No trailing dots - nothing to do. */
+-     new_dir = vim_strsave(dir);
+-     if (new_dir == NULL)
+-      return chdir(dir);          /* Can't allocate memory. */
+- 
+-     while (new_dir[--length] == '.')
+-      new_dir[length] = '\0';
+- 
+-     retval = chdir(new_dir);
+-     vim_free(new_dir);
+-     return retval;
+- }
+- 
+- /* Examine the named file, and set the 'osfiletype' option
+-  * (in curbuf) to the file's type.
+-  */
+-     void
+- mch_read_filetype(file)
+-     char_u  *file;
+- {
+-     int          type;
+-     char_u  type_string[9];
+-     int          i;
+- 
+-     if (xswi(OS_File, 23, file) & v_flag)
+-      type = 0xfff;           /* Default to Text */
+-     else
+-      type = r6;
+- 
+-     /* Type is the numerical value - see if we have a textual equivalent */
+-     swi(OS_FSControl, 18, 0, type);
+-     ((int *) type_string)[0] = r2;
+-     ((int *) type_string)[1] = r3;
+-     type_string[8] = 0;
+-     for (i = 0; type_string[i] > ' '; i++)
+-      ;
+-     type_string[i] = 0;
+- 
+-     set_string_option_direct("osfiletype", -1, type_string, OPT_FREE, 0);
+-     return;
+- }
+- 
+-     void
+- mch_set_filetype(file, type)
+-     char_u  *file;
+-     char_u  *type;
+- {
+-     if (xswi(OS_FSControl, 31, type) & v_flag)
+-     {
+-      EMSG(_("E366: Invalid 'osfiletype' option - using Text"));
+-      r2 = 0xfff;
+-     }
+- 
+-     swi(OS_File, 18, file, r2);
+- }
+- 
+- /* Return TRUE if the file's type matches 'type'
+-  * RISC OS types always start with '&'
+-  */
+-     int
+- mch_check_filetype(fname, type)
+-     char_u  *fname;
+-     char_u  *type;
+- {
+-     int          value;
+-     char    *end;
+- 
+-     if (*type != '&')
+-      return FALSE;
+- 
+-     value = strtol(type + 1, &end, 16);
+-     if (*end)
+-      return FALSE;           /* Invalid type (report error?) */
+- 
+-     if (xswi(OS_File, 23, fname) & v_flag)
+-      return FALSE;           /* Invalid filename? */
+- 
+-     return (r0 && r6 == value);
+- }
+--- 0 ----
+*** ../vim-7.3.186/runtime/doc/os_risc.txt     2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/os_risc.txt    2011-05-10 16:19:25.000000000 +0200
+***************
+*** 1,322 ****
+! *os_risc.txt*   For Vim version 7.3.  Last change: 2010 Aug 07
+  
+  
+                 VIM REFERENCE MANUAL    by Thomas Leonard
+  
+  
+                                               *riscos* *RISCOS* *RISC-OS*
+! This file contains the particularities for the RISC OS version of Vim.
+  
+- The RISC OS port is a completely new port and is not based on the old "archi"
+- port.
+  
+- 1.  File locations           |riscos-locations|
+- 2.  Filename munging         |riscos-munging|
+- 3.  Command-line use         |riscos-commandline|
+- 4.  Desktop (GUI) use                |riscos-gui|
+- 5.  Remote use (telnet)              |riscos-remote|
+- 6.  Temporary files          |riscos-temp-files|
+- 7.  Interrupting             |riscos-interrupt|
+- 8.  Memory usage             |riscos-memory|
+- 9.  Filetypes                        |riscos-filetypes|
+- 10. The shell                        |riscos-shell|
+- 11. Porting new releases     |riscos-porting|
+- 
+- If I've missed anything, email me and I'll try to fix it.  In fact, even if I
+- haven't missed anything then email me anyway to give me some confidence that it
+- actually works!
+- 
+- Thomas Leonard <tal197@ecs.soton.ac.uk>
+- 
+-      [these URLs no longer work...]
+-  Port homepage:      http://www.ecs.soton.ac.uk/~tal197/
+-      or try: http://www.soton.ac.uk/~tal197/
+- 
+- ==============================================================================
+-                                                      *riscos-locations*
+- 1. File locations
+- 
+- The Vim executable and shared resource files are all stored inside the !Vim
+- application directory.
+- 
+- When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
+- run the command-line versions of Vim (see |riscos-commandline|).
+- 
+- !Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
+- distribution, but modified slightly to work within the limits of ADFS, plus
+- some extra files such as the window templates.
+- 
+- User choices are read from "Choices:*" and are saved to "<Choices$Write>.*".
+- If you have the new !Boot structure then these should be set up already.  If
+- not, set Choices$Path to a list of directories to search when looking for
+- user configuration files.  Set Choices$Write to the directory you want files
+- to be saved into (so your search patterns and marks can be remembered between
+- sessions).
+- 
+- ==============================================================================
+-                                                      *riscos-munging*
+- 2. Filename munging
+- 
+- All pathname munging is disabled by default, so Vim should behave like a
+- normal RISC OS application now.  So, if you want to edit "doc/html" then you
+- actually type "*vi doc/html".
+- 
+- The only times munging is done is when:
+- 
+- - Searching included files from C programs, since these are always munged.
+-   See |[I|.
+-   Note: make sure you are in the right directory when you use this
+-      command (i.e. the one with subdirectories "c" and "h").
+- 
+- - Sourcing files using |:so|.
+-   Paths starting "$VIM/" are munged like this:
+- 
+-   $VIM/syntax/help.vim  ->  Vim:syntax.help
+- 
+-   Also, files ending in ".vim" have their extensions removed, and slashes
+-   replaced with dots.
+- 
+- Some tag files and script files may have to be edited to work under this port.
+- 
+- ==============================================================================
+-                                                      *riscos-commandline*
+- 3. Command-line use
+- 
+- To use Vim from the command-line use the "*vi" command (or "*ex" for
+- |Ex-mode|).
+- 
+- Type "*vi -h" for a list of options.
+- 
+- Running the command-line version of Vim in a large high-color mode may cause
+- the scrolling to be very slow.  Either change to a mode with fewer colors or
+- use the GUI version.
+- 
+- Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
+- freeze it, as usual for text programs.
+- 
+- ==============================================================================
+-                                                      *riscos-gui*
+- 4. Desktop use
+- 
+- Limitations:
+- 
+- - Left scrollbars don't work properly (right and bottom are fine).
+- - Doesn't increase scroll speed if it gets behind.
+- 
+- You can resize the window by dragging the lower-right corner, even though
+- there is no icon shown there.
+- 
+- You can use the --rows and --columns arguments to specify the initial size of
+- the Vim window, like this: >
+- 
+-   *Vi -g --rows 20 --columns 80
+- 
+- The global clipboard is supported, so you can select some text and then
+- paste it directly into another application (provided it supports the
+- clipboard too).
+- 
+- Clicking Menu now opens a menu like a normal RISC OS program.  Hold down Shift
+- when clicking Menu to paste (from the global clipboard).
+- 
+- Dragging a file to the window replaces the CURRENT buffer (the one with the
+- cursor, NOT the one you dragged to) with the file.
+- 
+- Dragging with Ctrl held down causes a new Vim window to be opened for the
+- file (see |:sp|).
+- 
+- Dragging a file in with Shift held down in insert mode inserts the pathname of
+- the file.
+- 
+- :browse :w opens a standard RISC OS save box.
+- :browse :e opens a directory viewer.
+- 
+- For fonts, you have the choice of the system font, an outline font, the system
+- font via ZapRedraw and any of the Zap fonts via ZapRedraw: >
+- 
+-   :set guifont=
+- <                    To use the system font via the VDU drivers.  Supports
+-                      bold and underline.
+- >
+-   :set guifont=Corpus.Medium
+- <                    Use the named outline font.  You can use any font, but
+-                      only monospaced ones like Corpus look right.
+- >
+-   :set guifont=Corpus.Medium:w8:h12:b:i
+- <                    As before, but with size of 8 point by 12 point, and
+-                      in bold italic.
+-                      If only one of width and height is given then that
+-                      value is used for both.  If neither is given then 10
+-                      point is used.
+- 
+- Thanks to John Kortink, Vim can use the ZapRedraw module.  Start the font name
+- with "!" (or "!!" for double height), like this: >
+- 
+-   :set guifont=!!
+- <                    Use the system font, but via ZapRedraw.  This gives a
+-                      faster redraw on StrongARM processors, but you can't
+-                      get bold or italic text.  Double height.
+- >
+-   :set guifont=!script
+- <                    Uses the named Zap font (a directory in VimFont$Path).
+-                      The redraw is the same speed as for "!!", but you get
+-                      a nicer looking font.
+-                      Only the "man+" and "script" fonts are supplied
+-                      currently, but you can use any of the Zap fonts if
+-                      they are in VimFont$Path.
+-                      Vim will try to load font files "0", "B", "I" and "IB"
+-                      from the named directory.  Only "0" (normal style) MUST
+-                      be present.  Link files are not currently supported.
+- 
+- Note that when using ZapRedraw the edit bar is drawn in front of the character
+- you are on rather than behind it.  Also redraw is incorrect for screen modes
+- with eigen values of 0.  If the font includes control characters then you can
+- get Vim to display them by changing the 'isprint' option.
+- 
+- If you find the scrolling is too slow on your machine, try experimenting
+- with the 'scrolljump' and 'ttyscroll' options.
+- 
+- In particular, StrongARM users may find that: >
+- 
+-   :set ttyscroll=0
+- 
+- makes scrolling faster in high-color modes.
+- 
+- =============================================================================
+-                                                      *riscos-remote*
+- 5. Remote use (telnet)
+- 
+- I have included a built-in termcap entry, but you can edit the termcap file to
+- allow other codes to be used if you want to use Vim from a remote terminal.
+- 
+- Although I do not have an internet connection to my Acorn, I have managed to
+- run Vim in a FreeTerm window using the loopback connection.
+- 
+- It seems to work pretty well now, using "*vi -T ansi".
+- 
+- ==============================================================================
+-                                                      *riscos-temp-files*
+- 6. Temporary files
+- 
+- If Vim crashes then the swap and backup files (if any) will be in the
+- directories set with the 'directory' and 'bdir' options.  By default the swap
+- files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
+- directory you were saving to.  Vim will allow you to try and recover the file
+- when you next try to edit it.
+- 
+- To see a list of swap files, press <F12> and type "*vi -r".
+- 
+- Vim no longer brings up ATTENTION warnings if you try to edit two files with
+- the same name in different directories.
+- 
+- However, it also no longer warns if you try to edit the same file twice (with
+- two copies of Vim), though you will still be warned when you save that the
+- datestamp has changed.
+- 
+- ==============================================================================
+-                                                      *riscos-interrupt*
+- 7. Interrupting
+- 
+- To break out of a looping macro, or similar, hold down Escape in the
+- command-line version, or press CTRL-C in the GUI version.
+- 
+- ==============================================================================
+-                                                      *riscos-memory*
+- 8. Memory usage
+- 
+- Vim will use dynamic areas on RISC OS 3.5 or later.  If you can use them on
+- older machines then edit the !RunTxt and GVim files.  I don't know what UnixLib
+- does by default on these machines so I'm playing safe.
+- 
+- It doesn't work at all well without dynamic areas, since it can't change its
+- memory allocation once running.  Hence you should edit "!Vim.GVim" and
+- "!Vim.!RunTxt" to choose the best size for you.  You probably need at least
+- about 1400K.
+- 
+- ==============================================================================
+-                                                      *riscos-filetypes*
+- 9. Filetypes
+- 
+- You can now specify that autocommands are only executed for files of certain
+- types.  The filetype is given in the form &xxx, when xxx is the filetype.
+- 
+- Filetypes must be specified by number (e.g. &fff for Text).
+- 
+- The system has changed from version 5.3.  The new sequence of events is:
+- 
+- - A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
+- - Based on the filetype and pathname, Vim will try to set |'filetype'| to the
+-   Vim-type of the file.
+- - Setting this option may load syntax files and perform other actions.
+- - Saving the file will give it a filetype of |'osfiletype'|.
+- 
+- Some examples may make this clearer:
+- 
+-   Kind of file loaded        osfiletype      filetype ~
+-   C code "c.hellow"  Text (&fff)     C
+-   LaTeX document     LaTeX (&2a8)    TeX
+-   Draw document              DrawFile (&aff) (not changed)
+- 
+- ==============================================================================
+-                                                      *riscos-shell*
+- 10. The shell
+- 
+- - Bangs (!s) are only replaced if they are followed by a space or end-of-line,
+-   since many pathnames contain them.
+- 
+- - You can prefix the command with "~", which stops any output from being
+-   displayed.  This also means that you don't have to press <Enter> afterwards,
+-   and stops the screen from being redrawn. {only in the GUI version}
+- 
+- ==============================================================================
+-                                                      *riscos-porting*
+- 11. Porting new releases to RISC OS
+- 
+- Downloading everything you need:
+- 
+- - Get the latest source distribution (see www.vim.org)
+- - Get the runtime environment files (e.g. these help files)
+- - Get the RISC OS binary distribution (if possible)
+- 
+- 
+- Unarchiving:
+- 
+- - Create a raFS disk and put the archives on it
+- - Un-gzip them
+- - Un-tar them   (*tar xELf 50 archive/tar)
+- 
+- 
+- Recompiling the sources:
+- 
+- - Create c, s, and h directories.
+- - Put all the header files in "h".        \
+- - Put all the C files in "c".                     | And lose the extensions
+- - Put the assembler file ("swis/s") in "s".  /
+- - Rename all the files in "proto" to "h", like this:
+-     raFS::VimSrc.source.proto.file/pro
+-        becomes
+-     raFS::VimSrc.source.h.file_pro
+- - In the files "h.proto" and "c.termlib", search and replace
+-     .pro"
+-        with
+-     _pro.h"
+- - Create a simple Makefile if desired and do "*make -k".
+-   Use "CC = gcc -DRISCOS -DUSE_GUI -O2 -x c" in the Makefile.
+- - Save the binary as !Vim.Vim in the binary distribution.
+- 
+- 
+- Updating the run-time environment:
+- 
+- - Replace old or missing files inside !Vim.Resources with the
+-   new files.
+- - Remove files in "doc" not ending in "/txt", except for "tags".
+- - Lose the extensions from the files in "doc".
+- - Edit the "doc.tags" file.  Remove extensions from the second column: >
+-      :%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
+- - Remove extensions from the syntax files.  Split them into two directories
+-   to avoid the 77 entry limit on old ADFS filesystems.
+- - Edit "Vim:FileType" to match "*.c.*" as well as "*/c" and so on.
+-   Add filetype checking too.
+- - Edit "Vim:Menu" and remove all the keys from the menus: >
+-      :%s/<Tab>[^ \t]*//
+- <
+   vim:tw=78:ts=8:ft=help:norl:
+--- 1,12 ----
+! *os_risc.txt*   For Vim version 7.3.  Last change: 2011 May 10
+  
+  
+                 VIM REFERENCE MANUAL    by Thomas Leonard
+  
+  
+                                               *riscos* *RISCOS* *RISC-OS*
+! The RISC OS support has been removed from Vim with patch 7.3.187.
+! If you would like to use Vim on RISC OS get the files from before that patch.
+  
+  
+   vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-7.3.186/src/version.c       2011-05-10 16:12:40.000000000 +0200
+--- src/version.c      2011-05-10 16:37:20.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     187,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+81. At social functions you introduce your husband as "my domain server."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.188 b/7.3.188
new file mode 100644 (file)
index 0000000..f584543
--- /dev/null
+++ b/7.3.188
@@ -0,0 +1,184 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.188
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.188
+Problem:    More RISC OS files to remove.
+Solution:   Remove them.  Update the file list.
+Files:     src/proto/gui_riscos.pro, src/proto/os_riscos.pro, Filelist
+
+
+*** ../vim-7.3.187/src/proto/gui_riscos.pro    2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_riscos.pro   1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,66 ****
+- /* Prototypes for gui_riscos.c
+-  * Based on gui_x11_pro.h (10 March 2002 version)
+-  */
+- void gui_mch_prepare __ARGS((int *argc, char **argv));
+- int gui_mch_init_check __ARGS((void));
+- int gui_mch_init __ARGS((void));
+- void gui_mch_uninit __ARGS((void));
+- void gui_mch_new_colors __ARGS((void));
+- int gui_mch_open __ARGS((void));
+- void gui_init_tooltip_font __ARGS((void));
+- void gui_init_menu_font __ARGS((void));void gui_mch_exit __ARGS((int rc));
+- int gui_mch_get_winpos __ARGS((int *x, int *y));
+- void gui_mch_set_winpos __ARGS((int x, int y));
+- void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+- void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+- int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
+- GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
+- int gui_mch_adjust_charheight __ARGS((void));
+- void gui_mch_set_font __ARGS((GuiFont font));
+- void gui_mch_set_fontset __ARGS((GuiFontset fontset));
+- void gui_mch_free_font __ARGS((GuiFont font));
+- void gui_mch_free_fontset __ARGS((GuiFontset fontset));
+- GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
+- guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
+- void gui_mch_set_fg_color __ARGS((guicolor_T color));
+- void gui_mch_set_bg_color __ARGS((guicolor_T color));
+- void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
+- int gui_mch_haskey __ARGS((char_u *name));
+- void gui_mch_beep __ARGS((void));
+- void gui_mch_flash __ARGS((int msec));
+- void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
+- void gui_mch_iconify __ARGS((void));
+- void gui_mch_set_foreground __ARGS((void));
+- void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
+- void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
+- void gui_mch_update __ARGS((void));
+- int gui_mch_wait_for_chars __ARGS((long wtime));
+- void gui_mch_flush __ARGS((void));
+- void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
+- void gui_mch_clear_all __ARGS((void));
+- void gui_mch_delete_lines __ARGS((int row, int num_lines));
+- void gui_mch_insert_lines __ARGS((int row, int num_lines));
+- void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+- int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+- void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+- void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+- void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+- void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+- void gui_mch_draw_menubar __ARGS((void));
+- void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+- void gui_mch_stop_blink __ARGS((void));
+- void gui_mch_start_blink __ARGS((void));
+- void process_event __ARGS((int event, int *block));
+- void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+- long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
+- void gui_mch_getmouse __ARGS((int *x, int *y));
+- void gui_mch_setmouse __ARGS((int x, int y));
+- void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+- void gui_mch_destroy_sign __ARGS((XImage *sign));
+- void gui_mch_mousehide __ARGS((int hide));
+- void mch_set_mouse_shape __ARGS((int shape));
+- void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
+- 
+- void ro_redraw_title __ARGS((int window));
+- int ro_ok_to_quit __ARGS((void));
+- /* vim: set ft=c : */
+--- 0 ----
+*** ../vim-7.3.187/src/proto/os_riscos.pro     2010-08-15 21:57:28.000000000 +0200
+--- src/proto/os_riscos.pro    1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,49 ****
+- /* os_riscos.c */
+- void mch_write __ARGS((char_u *s, int len));
+- int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
+- int mch_char_avail __ARGS((void));
+- long_u mch_avail_mem __ARGS((int special));
+- void mch_delay __ARGS((long msec, int ignoreinput));
+- void mch_suspend __ARGS((void));
+- void mch_init __ARGS((void));
+- int mch_check_win __ARGS((int argc, char **argv));
+- int mch_input_isatty __ARGS((void));
+- int mch_can_restore_title __ARGS((void));
+- int mch_can_restore_icon __ARGS((void));
+- void mch_settitle __ARGS((char_u *title, char_u *icon));
+- void mch_restore_title __ARGS((int which));
+- int mch_get_user_name __ARGS((char_u *s, int len));
+- void mch_get_host_name __ARGS((char_u *s, int len));
+- long mch_get_pid __ARGS((void));
+- int mch_dirname __ARGS((char_u *buf, int len));
+- int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+- int mch_isFullName __ARGS((char_u *fname));
+- long mch_getperm __ARGS((char_u *name));
+- int mch_setperm __ARGS((char_u *name, long perm));
+- void mch_hide __ARGS((char_u *name));
+- int mch_isdir __ARGS((char_u *name));
+- int mch_can_exe __ARGS((char_u *name));
+- int mch_nodetype __ARGS((char_u *name));
+- void mch_early_init __ARGS((void));
+- void mch_exit __ARGS((int r));
+- void mch_settmode __ARGS((int tmode));
+- void mch_setmouse __ARGS((int on));
+- int mch_screenmode __ARGS((char_u *arg));
+- int mch_get_shellsize __ARGS((void));
+- void mch_set_shellsize __ARGS((void));
+- void mch_new_shellsize __ARGS((void));
+- int mch_call_shell __ARGS((char_u *cmd, int options));
+- void mch_breakcheck __ARGS((void));
+- int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+- int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
+- int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+- int mch_has_exp_wildcard __ARGS((char_u *p));
+- int mch_has_wildcard __ARGS((char_u *p));
+- int mch_remove __ARGS((char_u *file));
+- char_u *mch_munge_fname __ARGS((char_u *fname));
+- int ro_buflist_add __ARGS((char_u *old_name));
+- int mch_chdir __ARGS((char_u *dir));
+- void mch_read_filetype __ARGS((char_u *file));
+- void mch_set_filetype __ARGS((char_u *file, char_u *type));
+- int mch_check_filetype __ARGS((char_u *fname, char_u *type));
+- /* vim: set ft=c : */
+--- 0 ----
+*** ../vim-7.3.187/Filelist    2011-03-22 18:10:34.000000000 +0100
+--- Filelist   2011-05-10 17:19:21.000000000 +0200
+***************
+*** 428,435 ****
+               README_os390.txt \
+               src/Make_mint.mak \
+               src/Make_ro.mak \
+-              src/gui_riscos.c \
+-              src/gui_riscos.h \
+               src/if_sniff.c \
+               src/infplist.xml \
+               src/link.390 \
+--- 428,433 ----
+***************
+*** 437,446 ****
+               src/os_beos.h \
+               src/os_beos.rsrc \
+               src/os_mint.h \
+-              src/os_riscos.c \
+-              src/os_riscos.h \
+-              src/proto/gui_riscos.pro \
+-              src/proto/os_riscos.pro \
+               src/os_vms_fix.com \
+               src/toolbar.phi \
+  
+--- 435,440 ----
+*** ../vim-7.3.187/src/version.c       2011-05-10 16:41:13.000000000 +0200
+--- src/version.c      2011-05-10 17:20:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     188,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+83. Batteries in the TV remote now last for months.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.189 b/7.3.189
new file mode 100644 (file)
index 0000000..f7a9667
--- /dev/null
+++ b/7.3.189
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.189
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.189 (after 7.3.186)
+Problem:    Can't build without +clipboard feature. (Christian Ebert)
+Solution:   Add the missing #ifdef.
+Files:     src/normal.c
+
+
+*** ../vim-7.3.188/src/normal.c        2011-05-10 16:12:40.000000000 +0200
+--- src/normal.c       2011-05-10 17:25:26.000000000 +0200
+***************
+*** 1204,1212 ****
+--- 1204,1215 ----
+  #ifdef FEAT_EVAL
+       {
+           int regname = 0;
++ 
+           /* Adjust the register according to 'clipboard', so that when
+            * "unnamed" is present it becomes '*' or '+' instead of '"'. */
++ # ifdef FEAT_CLIPBOARD
+           adjust_clip_reg(&regname);
++ # endif
+           set_reg_var(regname);
+       }
+  #endif
+*** ../vim-7.3.188/src/version.c       2011-05-10 17:21:34.000000000 +0200
+--- src/version.c      2011-05-10 17:29:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     189,
+  /**/
+
+-- 
+If your nose runs, and your feet smell, you might be upside down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
index cb13ffdb5391cd8507b73a49a7ece47f819ac0b8..33567209a942239899787bbd2e961bb17172b5eb 100644 (file)
--- a/vim.spec
+++ b/vim.spec
@@ -25,7 +25,7 @@
 # curl -s ftp://ftp.vim.org/pub/editors/vim/patches/7.3/MD5SUMS | grep -vF .gz | tail -n1 | awk '{print $2}'
 
 %define                ver             7.3
-%define                patchlevel      170
+%define                patchlevel      189
 %define                rel                     1
 Summary:       Vi IMproved - a Vi clone
 Summary(de.UTF-8):     VIsual editor iMproved
This page took 2.098295 seconds and 4 git commands to generate.