home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 6.2.506 < prev    next >
Encoding:
Internet Message Format  |  2004-04-26  |  18.1 KB

  1. To: vim-dev@vim.org
  2. Subject: Patch 6.2.506 (extra)
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=ISO-8859-1
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 6.2.506 (extra)
  11. Problem:    Win32: When 'encoding' is a codepage then reading a utf-8 file
  12.         only works when iconv is available.  Writing a file in another
  13.         codepage uses the wrong kind of conversion.
  14. Solution:   Use internal conversion functions.  Enable reading and writing
  15.         files with 'fileencoding' different from 'encoding' for all valid
  16.         codepages and utf-8 without the need for iconv.
  17. Files:        src/fileio.c, src/testdir/Make_dos.mak, src/testdir/test52.in,
  18.         src/testdir/test52.ok
  19.  
  20.  
  21. *** ../vim-6.2.505/src/fileio.c    Sun Apr 25 16:26:29 2004
  22. --- src/fileio.c    Tue Apr 27 15:31:34 2004
  23. ***************
  24. *** 939,947 ****
  25.   
  26.   # ifdef WIN3264
  27.       /*
  28. !      * Conversion from an MS-Windows codepage to UTF-8 is handled here.
  29.        */
  30. !     if (fio_flags == 0 && enc_utf8)
  31.           fio_flags = get_win_fio_flags(fenc);
  32.   # endif
  33.   
  34. --- 939,948 ----
  35.   
  36.   # ifdef WIN3264
  37.       /*
  38. !      * Conversion from an MS-Windows codepage to UTF-8 or another codepage
  39. !      * is handled with MultiByteToWideChar().
  40.        */
  41. !     if (fio_flags == 0)
  42.           fio_flags = get_win_fio_flags(fenc);
  43.   # endif
  44.   
  45. ***************
  46. *** 1329,1388 ****
  47.           if (fio_flags & FIO_CODEPAGE)
  48.           {
  49.           /*
  50. !          * Conversion from an MS-Windows codepage to UTF-8, using
  51. !          * standard MS-Windows functions.
  52.            */
  53.           char_u    *ucsp;
  54. !         size_t    from_size;
  55.           int    needed;
  56.           char_u    *p;
  57.           int    u8c;
  58.   
  59.           /*
  60. !          * We can't tell if the last byte of an MBCS string is valid
  61. !          * and MultiByteToWideChar() returns zero if it isn't.
  62. !          * Try the whole string, and if that fails, bump the last byte
  63. !          * into conv_rest and try again.
  64.            */
  65. !         from_size = size;
  66. !         needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
  67. !                    MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
  68. !                                      NULL, 0);
  69. !         if (needed == 0)
  70.           {
  71. !             conv_rest[0] = ptr[from_size - 1];
  72. !             conv_restlen = 1;
  73. !             --from_size;
  74.               needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
  75. !                    MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
  76.                                        NULL, 0);
  77. !         }
  78.   
  79. !         /* If there really is a conversion error, try using another
  80. !          * conversion. */
  81. !         if (needed == 0)
  82. !             goto rewind_retry;
  83.   
  84. !         /* Put the result of conversion to UCS-2 at the end of the
  85. !          * buffer, then convert from UCS-2 to UTF-8 into the start of
  86. !          * the buffer.  If there is not enough space just fail, there
  87. !          * is probably something wrong. */
  88.           ucsp = ptr + real_size - (needed * sizeof(WCHAR));
  89.           if (ucsp < ptr + size)
  90.               goto rewind_retry;
  91. !         needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
  92.                           MB_ERR_INVALID_CHARS, (LPCSTR)ptr,
  93.                            from_size, (LPWSTR)ucsp, needed);
  94.   
  95. !         /* Now go from UCS-2 to UTF-8. */
  96. !         p = ptr;
  97. !         for (; needed > 0; --needed)
  98. !         {
  99. !             u8c = *ucsp++;
  100. !             u8c += (*ucsp++ << 8);
  101. !             p += utf_char2bytes(u8c, p);
  102.           }
  103. -         size = p - ptr;
  104.           }
  105.           else
  106.   # endif
  107. --- 1330,1462 ----
  108.           if (fio_flags & FIO_CODEPAGE)
  109.           {
  110.           /*
  111. !          * Conversion from an MS-Windows codepage or UTF-8 to UTF-8 or
  112. !          * a codepage, using standard MS-Windows functions.
  113. !          * 1. find out how many ucs-2 characters there are.
  114. !          * 2. convert from 'fileencoding' to ucs-2
  115. !          * 3. convert from ucs-2 to 'encoding'
  116.            */
  117.           char_u    *ucsp;
  118. !         size_t    from_size = size;
  119.           int    needed;
  120.           char_u    *p;
  121.           int    u8c;
  122. +         int    l, len;
  123.   
  124.           /*
  125. !          * 1. find out how many ucs-2 characters there are.
  126.            */
  127. !         if (FIO_GET_CP(fio_flags) == CP_UTF8)
  128.           {
  129. !             /* Handle CP_UTF8 ourselves to be able to handle trailing
  130. !              * bytes properly.  First find out the number of
  131. !              * characters and check for trailing bytes. */
  132. !             needed = 0;
  133. !             p = ptr;
  134. !             for (len = from_size; len > 0; len -= l)
  135. !             {
  136. !             l = utf_ptr2len_check_len(p, len);
  137. !             if (l > len)            /* incomplete char */
  138. !             {
  139. !                 if (l > CONV_RESTLEN)
  140. !                 /* weird overlong byte sequence */
  141. !                 goto rewind_retry;
  142. !                 mch_memmove(conv_rest, p, len);
  143. !                 conv_restlen = len;
  144. !                 from_size -= len;
  145. !                 break;
  146. !             }
  147. !             if (l == 1 && *p >= 0x80)    /* illegal byte */
  148. !                 goto rewind_retry;
  149. !             ++needed;
  150. !             p += l;
  151. !             }
  152. !         }
  153. !         else
  154. !         {
  155. !             /* We can't tell if the last byte of an MBCS string is
  156. !              * valid and MultiByteToWideChar() returns zero if it
  157. !              * isn't.  Try the whole string, and if that fails, bump
  158. !              * the last byte into conv_rest and try again. */
  159.               needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
  160. !                  MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
  161.                                        NULL, 0);
  162. !             if (needed == 0)
  163. !             {
  164. !             conv_rest[0] = ptr[from_size - 1];
  165. !             conv_restlen = 1;
  166. !             --from_size;
  167. !             needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
  168. !                  MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
  169. !                                      NULL, 0);
  170. !             }
  171.   
  172. !             /* If there really is a conversion error, try using another
  173. !              * conversion. */
  174. !             if (needed == 0)
  175. !             goto rewind_retry;
  176. !         }
  177.   
  178. !         /*
  179. !          * 2. convert from 'fileencoding' to ucs-2
  180. !          *
  181. !          * Put the result of conversion to UCS-2 at the end of the
  182. !          * buffer, then convert from UCS-2 to UTF-8 or "enc_codepage"
  183. !          * into the start of the buffer.  If there is not enough space
  184. !          * just fail, there is probably something wrong.
  185. !          */
  186.           ucsp = ptr + real_size - (needed * sizeof(WCHAR));
  187.           if (ucsp < ptr + size)
  188.               goto rewind_retry;
  189. !         if (FIO_GET_CP(fio_flags) == CP_UTF8)
  190. !         {
  191. !             /* Convert from utf-8 to ucs-2. */
  192. !             needed = 0;
  193. !             p = ptr;
  194. !             for (len = from_size; len > 0; len -= l)
  195. !             {
  196. !             l = utf_ptr2len_check_len(p, len);
  197. !             u8c = utf_ptr2char(p);
  198. !             ucsp[needed * 2] = (u8c & 0xff);
  199. !             ucsp[needed * 2 + 1] = (u8c >> 8);
  200. !             ++needed;
  201. !             p += l;
  202. !             }
  203. !         }
  204. !         else
  205. !             needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
  206.                           MB_ERR_INVALID_CHARS, (LPCSTR)ptr,
  207.                            from_size, (LPWSTR)ucsp, needed);
  208.   
  209. !         /*
  210. !          * 3. convert from ucs-2 to 'encoding'
  211. !          */
  212. !         if (enc_utf8)
  213. !         {
  214. !             /* From UCS-2 to UTF-8.  Cannot fail. */
  215. !             p = ptr;
  216. !             for (; needed > 0; --needed)
  217. !             {
  218. !             u8c = *ucsp++;
  219. !             u8c += (*ucsp++ << 8);
  220. !             p += utf_char2bytes(u8c, p);
  221. !             }
  222. !             size = p - ptr;
  223. !         }
  224. !         else
  225. !         {
  226. !             BOOL    bad = FALSE;
  227. !             /* From UCS-2 to "enc_codepage". If the conversion uses
  228. !              * the default character "?", the data doesn't fit in this
  229. !              * encoding, so fail (unless forced). */
  230. !             size = WideCharToMultiByte(enc_codepage, 0,
  231. !                             (LPCWSTR)ucsp, needed,
  232. !                         (LPSTR)ptr, real_size, "?", &bad);
  233. !             if (bad && !keep_dest_enc)
  234. !             goto rewind_retry;
  235.           }
  236.           }
  237.           else
  238.   # endif
  239. ***************
  240. *** 3442,3451 ****
  241.       }
  242.   
  243.   # ifdef WIN3264
  244. !     if (converted && wb_flags == 0 && get_win_fio_flags(fenc))
  245.       {
  246. -     wb_flags = get_win_fio_flags(fenc);
  247.       /* Convert UTF-8 -> UCS-2 and UCS-2 -> DBCS.  Worst-case * 4: */
  248.       write_info.bw_conv_buflen = bufsize * 4;
  249.       write_info.bw_conv_buf
  250. --- 3516,3523 ----
  251.       }
  252.   
  253.   # ifdef WIN3264
  254. !     if (converted && wb_flags == 0 && (wb_flags = get_win_fio_flags(fenc)) != 0)
  255.       {
  256.       /* Convert UTF-8 -> UCS-2 and UCS-2 -> DBCS.  Worst-case * 4: */
  257.       write_info.bw_conv_buflen = bufsize * 4;
  258.       write_info.bw_conv_buf
  259. ***************
  260. *** 4474,4486 ****
  261.       else if (flags & FIO_CODEPAGE)
  262.       {
  263.           /*
  264. !          * Convert UTF-8 to UCS-2 and then to MS-Windows codepage.
  265.            */
  266.           char_u    *from;
  267.           size_t    fromlen;
  268.           char_u    *to;
  269.           int        u8c;
  270.           BOOL    bad = FALSE;
  271.   
  272.           if (ip->bw_restlen > 0)
  273.           {
  274. --- 4546,4560 ----
  275.       else if (flags & FIO_CODEPAGE)
  276.       {
  277.           /*
  278. !          * Convert UTF-8 or codepage to UCS-2 and then to MS-Windows
  279. !          * codepage.
  280.            */
  281.           char_u    *from;
  282.           size_t    fromlen;
  283.           char_u    *to;
  284.           int        u8c;
  285.           BOOL    bad = FALSE;
  286. +         int        needed;
  287.   
  288.           if (ip->bw_restlen > 0)
  289.           {
  290. ***************
  291. *** 4498,4535 ****
  292.           fromlen = len;
  293.           }
  294.   
  295. -         /* Convert from UTF-8 to UCS-2, to the start of the buffer.
  296. -          * The buffer has been allocated to be big enough. */
  297.           to = ip->bw_conv_buf;
  298. !         while (fromlen > 0)
  299.           {
  300. !         n = utf_ptr2len_check_len(from, fromlen);
  301. !         if (n > (int)fromlen)
  302. !             break;
  303. !         u8c = utf_ptr2char(from);
  304. !         *to++ = (u8c & 0xff);
  305. !         *to++ = (u8c >> 8);
  306. !         fromlen -= n;
  307. !         from += n;
  308. !         }
  309.   
  310. !         /* copy remainder to ip->bw_rest[] to be used for the next call. */
  311. !         mch_memmove(ip->bw_rest, from, fromlen);
  312. !         ip->bw_restlen = fromlen;
  313.   
  314. -         /* Convert from UCS-2 to the codepage, using the remainder of the
  315. -          * conversion buffer.  If the conversion uses the default
  316. -          * character "0", the data doesn't fit in this encoding, so fail. */
  317.           fromlen = to - ip->bw_conv_buf;
  318. !         len = WideCharToMultiByte(FIO_GET_CP(flags), 0,
  319. !             (LPCWSTR)ip->bw_conv_buf, (int)fromlen / sizeof(WCHAR),
  320. !             (LPSTR)to, ip->bw_conv_buflen - fromlen, 0, &bad);
  321. !         if (bad)
  322.           {
  323. !         ip->bw_conv_error = TRUE;
  324. !         return FAIL;
  325.           }
  326. -         buf = to;
  327.       }
  328.   # endif
  329.   
  330. --- 4572,4675 ----
  331.           fromlen = len;
  332.           }
  333.   
  334.           to = ip->bw_conv_buf;
  335. !         if (enc_utf8)
  336.           {
  337. !         /* Convert from UTF-8 to UCS-2, to the start of the buffer.
  338. !          * The buffer has been allocated to be big enough. */
  339. !         while (fromlen > 0)
  340. !         {
  341. !             n = utf_ptr2len_check_len(from, fromlen);
  342. !             if (n > (int)fromlen)    /* incomplete byte sequence */
  343. !             break;
  344. !             u8c = utf_ptr2char(from);
  345. !             *to++ = (u8c & 0xff);
  346. !             *to++ = (u8c >> 8);
  347. !             fromlen -= n;
  348. !             from += n;
  349. !         }
  350.   
  351. !         /* Copy remainder to ip->bw_rest[] to be used for the next
  352. !          * call. */
  353. !         if (fromlen > CONV_RESTLEN)
  354. !         {
  355. !             /* weird overlong sequence */
  356. !             ip->bw_conv_error = TRUE;
  357. !             return FAIL;
  358. !         }
  359. !         mch_memmove(ip->bw_rest, from, fromlen);
  360. !         ip->bw_restlen = fromlen;
  361. !         }
  362. !         else
  363. !         {
  364. !         /* Convert from enc_codepage to UCS-2, to the start of the
  365. !          * buffer.  The buffer has been allocated to be big enough. */
  366. !         ip->bw_restlen = 0;
  367. !         needed = MultiByteToWideChar(enc_codepage,
  368. !                   MB_ERR_INVALID_CHARS, (LPCSTR)from, fromlen,
  369. !                                      NULL, 0);
  370. !         if (needed == 0)
  371. !         {
  372. !             /* When conversion fails there may be a trailing byte. */
  373. !             ip->bw_restlen = 1;
  374. !             needed = MultiByteToWideChar(enc_codepage,
  375. !                   MB_ERR_INVALID_CHARS, (LPCSTR)from, fromlen,
  376. !                                      NULL, 0);
  377. !             if (needed == 0)
  378. !             {
  379. !             /* Conversion doesn't work. */
  380. !             ip->bw_conv_error = TRUE;
  381. !             return FAIL;
  382. !             }
  383. !             /* Save the trailing byte for the next call. */
  384. !             *ip->bw_rest = from[fromlen - 1];
  385. !         }
  386. !         needed = MultiByteToWideChar(enc_codepage, MB_ERR_INVALID_CHARS,
  387. !                        (LPCSTR)from, fromlen - ip->bw_restlen,
  388. !                               (LPWSTR)to, needed);
  389. !         if (needed == 0)
  390. !         {
  391. !             /* Safety check: Conversion doesn't work. */
  392. !             ip->bw_conv_error = TRUE;
  393. !             return FAIL;
  394. !         }
  395. !         to += needed * 2;
  396. !         }
  397.   
  398.           fromlen = to - ip->bw_conv_buf;
  399. !         buf = to;
  400. !         if (FIO_GET_CP(flags) == CP_UTF8)
  401.           {
  402. !         /* Convert from UCS-2 to UTF-8, using the remainder of the
  403. !          * conversion buffer.  Fails when out of space. */
  404. !         for (from = ip->bw_conv_buf; fromlen > 1; fromlen -= 2)
  405. !         {
  406. !             u8c = *from++;
  407. !             u8c += (*from++ << 8);
  408. !             to += utf_char2bytes(u8c, to);
  409. !             if (to + 6 >= ip->bw_conv_buf + ip->bw_conv_buflen)
  410. !             {
  411. !             ip->bw_conv_error = TRUE;
  412. !             return FAIL;
  413. !             }
  414. !         }
  415. !         len = to - buf;
  416. !         }
  417. !         else
  418. !         {
  419. !         /* Convert from UCS-2 to the codepage, using the remainder of
  420. !          * the conversion buffer.  If the conversion uses the default
  421. !          * character "0", the data doesn't fit in this encoding, so
  422. !          * fail. */
  423. !         len = WideCharToMultiByte(FIO_GET_CP(flags), 0,
  424. !             (LPCWSTR)ip->bw_conv_buf, (int)fromlen / sizeof(WCHAR),
  425. !             (LPSTR)to, ip->bw_conv_buflen - fromlen, 0, &bad);
  426. !         if (bad)
  427. !         {
  428. !             ip->bw_conv_error = TRUE;
  429. !             return FAIL;
  430. !         }
  431.           }
  432.       }
  433.   # endif
  434.   
  435. ***************
  436. *** 4775,4789 ****
  437.   #ifdef WIN3264
  438.   /*
  439.    * Check "ptr" for a MS-Windows codepage name and return the FIO_ flags needed
  440. !  * for the conversion MS-Windows can do for us.
  441.    */
  442.       static int
  443.   get_win_fio_flags(ptr)
  444.       char_u    *ptr;
  445.   {
  446. !     if (ptr[0] == 'c' && ptr[1] == 'p' && VIM_ISDIGIT(ptr[2]))
  447. !     return FIO_PUT_CP(atoi(ptr + 2)) | FIO_CODEPAGE;
  448. !     return 0;
  449.   }
  450.   #endif
  451.   
  452. --- 4915,4942 ----
  453.   #ifdef WIN3264
  454.   /*
  455.    * Check "ptr" for a MS-Windows codepage name and return the FIO_ flags needed
  456. !  * for the conversion MS-Windows can do for us.  Also accept "utf-8".
  457. !  * Used for conversion between 'encoding' and 'fileencoding'.
  458.    */
  459.       static int
  460.   get_win_fio_flags(ptr)
  461.       char_u    *ptr;
  462.   {
  463. !     int        cp;
  464. !     /* Cannot do this when 'encoding' is not utf-8 and not a codepage. */
  465. !     if (!enc_utf8 && enc_codepage <= 0)
  466. !     return 0;
  467. !     cp = encname2codepage(ptr);
  468. !     if (cp == 0)
  469. !     {
  470. !     if (STRCMP(ptr, "utf-8") == 0)
  471. !         cp = CP_UTF8;
  472. !     else
  473. !         return 0;
  474. !     }
  475. !     return FIO_PUT_CP(cp) | FIO_CODEPAGE;
  476.   }
  477.   #endif
  478.   
  479. *** ../vim-6.2.505/src/testdir/Make_dos.mak    Mon Mar 22 17:28:47 2004
  480. --- src/testdir/Make_dos.mak    Tue Apr 27 15:51:03 2004
  481. ***************
  482. *** 24,30 ****
  483.           test15.out test17.out test18.out test21.out test26.out \
  484.           test30.out test31.out test32.out test33.out test34.out \
  485.           test37.out test38.out test39.out test40.out test41.out \
  486. !         test42.out
  487.   
  488.   SCRIPTS32 =    test50.out
  489.   
  490. --- 24,30 ----
  491.           test15.out test17.out test18.out test21.out test26.out \
  492.           test30.out test31.out test32.out test33.out test34.out \
  493.           test37.out test38.out test39.out test40.out test41.out \
  494. !         test42.out test52.out
  495.   
  496.   SCRIPTS32 =    test50.out
  497.   
  498. ***************
  499. *** 51,56 ****
  500. --- 51,57 ----
  501.       -del tiny.vim
  502.       -del mbyte.vim
  503.       -del X*
  504. +     -del viminfo
  505.   
  506.   .in.out:
  507.       copy $*.ok test.ok
  508. ***************
  509. *** 60,62 ****
  510. --- 61,64 ----
  511.       rename test.out $*.out
  512.       -del X*
  513.       -del test.ok
  514. +     -del viminfo
  515. *** ../vim-6.2.505/src/testdir/test52.in    Tue Apr 27 16:24:44 2004
  516. --- src/testdir/test52.in    Tue Apr 27 16:20:18 2004
  517. ***************
  518. *** 0 ****
  519. --- 1,65 ----
  520. + Tests for reading and writing files with conversion for Win32.
  521. + STARTTEST
  522. + :so mbyte.vim
  523. + :" make this a dummy test for non-Win32 systems
  524. + :if !has("win32") | e! testk.ok | wq! test.out | endif
  525. + :"
  526. + :" write tests:
  527. + :" combine three values for 'encoding' with three values for 'fileencoding'
  528. + :" also write files for read tests
  529. + /^1
  530. + :set encoding=utf-8
  531. + :.w! ++enc=utf-8 test.out
  532. + :.w ++enc=cp1251 >>test.out
  533. + :.w ++enc=cp866 >>test.out
  534. + :.w! ++enc=utf-8 Xutf8
  535. + /^2
  536. + :set encoding=cp1251
  537. + :.w ++enc=utf-8 >>test.out
  538. + :.w ++enc=cp1251 >>test.out
  539. + :.w ++enc=cp866 >>test.out
  540. + :.w! ++enc=cp1251 Xcp1251
  541. + /^3
  542. + :set encoding=cp866
  543. + :.w ++enc=utf-8 >>test.out
  544. + :.w ++enc=cp1251 >>test.out
  545. + :.w ++enc=cp866 >>test.out
  546. + :.w! ++enc=cp866 Xcp866
  547. + :"
  548. + :" read three 'fileencoding's with utf-8 'encoding'
  549. + :set encoding=utf-8 fencs=utf-8,cp1251
  550. + :e Xutf8
  551. + :.w ++enc=utf-8 >>test.out
  552. + :e Xcp1251
  553. + :.w ++enc=utf-8 >>test.out
  554. + :set fencs=utf-8,cp866
  555. + :e Xcp866
  556. + :.w ++enc=utf-8 >>test.out
  557. + :"
  558. + :" read three 'fileencoding's with cp1251 'encoding'
  559. + :set encoding=utf-8 fencs=utf-8,cp1251
  560. + :e Xutf8
  561. + :.w ++enc=cp1251 >>test.out
  562. + :e Xcp1251
  563. + :.w ++enc=cp1251 >>test.out
  564. + :set fencs=utf-8,cp866
  565. + :e Xcp866
  566. + :.w ++enc=cp1251 >>test.out
  567. + :"
  568. + :" read three 'fileencoding's with cp866 'encoding'
  569. + :set encoding=cp866 fencs=utf-8,cp1251
  570. + :e Xutf8
  571. + :.w ++enc=cp866 >>test.out
  572. + :e Xcp1251
  573. + :.w ++enc=cp866 >>test.out
  574. + :set fencs=utf-8,cp866
  575. + :e Xcp866
  576. + :.w ++enc=cp866 >>test.out
  577. + :"
  578. + :qa!
  579. + ENDTEST
  580. + 1 utf-8 text: ╨ö╨╗╤Å Vim version 6.2.  ╨ƒ╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡: 1970 Jan 01
  581. + 2 cp1251 text: ─δ  Vim version 6.2.  ╧ε±δσΣφσσ Φτ∞σφσφΦσ: 1970 Jan 01
  582. + 3 cp866 text: ä½∩ Vim version 6.2.  Å«ß½Ññ¡ÑÑ ¿º¼Ñ¡Ñ¡¿Ñ: 1970 Jan 01
  583. *** ../vim-6.2.505/src/testdir/test52.ok    Tue Apr 27 16:24:44 2004
  584. --- src/testdir/test52.ok    Tue Apr 27 16:20:56 2004
  585. ***************
  586. *** 0 ****
  587. --- 1,18 ----
  588. + 1 utf-8 text: ╨ö╨╗╤Å Vim version 6.2.  ╨ƒ╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡: 1970 Jan 01
  589. + 1 utf-8 text: ─δ  Vim version 6.2.  ╧ε±δσΣφσσ Φτ∞σφσφΦσ: 1970 Jan 01
  590. + 1 utf-8 text: ä½∩ Vim version 6.2.  Å«ß½Ññ¡ÑÑ ¿º¼Ñ¡Ñ¡¿Ñ: 1970 Jan 01
  591. + 2 cp1251 text: ╨ö╨╗╤Å Vim version 6.2.  ╨ƒ╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡: 1970 Jan 01
  592. + 2 cp1251 text: ─δ  Vim version 6.2.  ╧ε±δσΣφσσ Φτ∞σφσφΦσ: 1970 Jan 01
  593. + 2 cp1251 text: ä½∩ Vim version 6.2.  Å«ß½Ññ¡ÑÑ ¿º¼Ñ¡Ñ¡¿Ñ: 1970 Jan 01
  594. + 3 cp866 text: ╨ö╨╗╤Å Vim version 6.2.  ╨ƒ╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡: 1970 Jan 01
  595. + 3 cp866 text: ─δ  Vim version 6.2.  ╧ε±δσΣφσσ Φτ∞σφσφΦσ: 1970 Jan 01
  596. + 3 cp866 text: ä½∩ Vim version 6.2.  Å«ß½Ññ¡ÑÑ ¿º¼Ñ¡Ñ¡¿Ñ: 1970 Jan 01
  597. + 1 utf-8 text: ╨ö╨╗╤Å Vim version 6.2.  ╨ƒ╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡: 1970 Jan 01
  598. + 2 cp1251 text: ╨ö╨╗╤Å Vim version 6.2.  ╨ƒ╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡: 1970 Jan 01
  599. + 3 cp866 text: ╨ö╨╗╤Å Vim version 6.2.  ╨ƒ╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡: 1970 Jan 01
  600. + 1 utf-8 text: ─δ  Vim version 6.2.  ╧ε±δσΣφσσ Φτ∞σφσφΦσ: 1970 Jan 01
  601. + 2 cp1251 text: ─δ  Vim version 6.2.  ╧ε±δσΣφσσ Φτ∞σφσφΦσ: 1970 Jan 01
  602. + 3 cp866 text: ─δ  Vim version 6.2.  ╧ε±δσΣφσσ Φτ∞σφσφΦσ: 1970 Jan 01
  603. + 1 utf-8 text: ä½∩ Vim version 6.2.  Å«ß½Ññ¡ÑÑ ¿º¼Ñ¡Ñ¡¿Ñ: 1970 Jan 01
  604. + 2 cp1251 text: ä½∩ Vim version 6.2.  Å«ß½Ññ¡ÑÑ ¿º¼Ñ¡Ñ¡¿Ñ: 1970 Jan 01
  605. + 3 cp866 text: ä½∩ Vim version 6.2.  Å«ß½Ññ¡ÑÑ ¿º¼Ñ¡Ñ¡¿Ñ: 1970 Jan 01
  606. *** ../vim-6.2.505/src/version.c    Tue Apr 27 10:03:32 2004
  607. --- src/version.c    Tue Apr 27 16:23:35 2004
  608. ***************
  609. *** 639,640 ****
  610. --- 639,642 ----
  611.   {   /* Add new patch number below this line */
  612. + /**/
  613. +     506,
  614.   /**/
  615.  
  616. -- 
  617. hundred-and-one symptoms of being an internet addict:
  618. 34. You laugh at people with 14400 baud modems.
  619.  
  620.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  621. ///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  622. \\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
  623.  \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
  624.