Re: [oodisc] Quick hack on unzip 5.51 for cp866 support. Was: О просмотре файлов ОО

Evgeny eu111 на mail.ru
Чт Июн 3 14:01:35 MSD 2004


Hi!

>> Dmitry Chernyakov wrote:
>>
>>> Кроме этого
>>> окончательно добила проблема невозможности перекодировки русских имён
>>> файлов, созданных winrar/winzip.
>>>
>>>  
>>>
>> И всё же это баг unix unzip , так как это он перекодирует cp850 to 
>> latin1, а там cp866.
>>
>> Вот такая строка помогает прочитать листинг:
>> unzip -l file.zip   | recode l1..IBM850 | recode 866..koi8
>>
> Вот как можно на быструю руку поправить unzip что бы он правильно 
> работал с 866 в Unix (koi8-r).
> Как говорится, куда копать понятно, может затем у меня получется 
> сделать его универсальным, посмотрим.


Вот ещё немного почистил, в частности на предмет (╓,╕,╖,╝) в OEM to ANSI
(украинской Г' нет). И сделал более гибкую проверку кодировки.

Я думаю, что можно пользоваться!

Собрал rpm для rh9, но есть srpm.
http://eu.zsttk.ru/unzip-5.51-7.cp866tokoi8ub.01.rh9.i386.rpm
http://eu.zsttk.ru/unzip-5.51-7.cp866tokoi8ub.01.rh9.src.rpm

Тот кто хочет собрать сам, вот как я делал сам (после patch):

# ln -s unix/Makefile Makefile
# make linux_noasm LF2="" LOCAL_UNZIP="-DUNIX_KOI8"

Я протестировал на Win2000 with WinRAR and Total Commander,
а так же на каких-то старых архивах.


Буду рад откликам! Особенно интересует WinZIP в разных версиях и языки с 
╓,╕,╖,╝.

Bye, Evgeny


----------- следущая часть -----------
This patch for Cyrillic (Russian, Belarusian and Ukrainian) users only.

The following conversion tables translate between IBM PC CP 866
(OEM codepage) and the Cyrillic Unix KOI8-UB (Ansi codepage).

 ╘ Eugene Byrganov <eu (at) zsttk (dot) ru>, 2004.


Index: unzpriv.h
===================================================================
RCS file: /cvsroot/devel/unzip/unzpriv.h,v
retrieving revision 1.1.1.1
diff -u -4 -r1.1.1.1 unzpriv.h
--- unzpriv.h	2 Jun 2004 11:03:21 -0000	1.1.1.1
+++ unzpriv.h	3 Jun 2004 07:46:22 -0000
@@ -2503,8 +2503,9 @@
  * codepage when made on
  *  -> DOS (this includes 16-bit Windows 3.1)  (FS_FAT_)
  *  -> OS/2                                    (FS_HPFS_)
  *  -> Win95/WinNT with Nico Mak's WinZip      (FS_NTFS_ && hostver == "5.0")
+ *  -> Win95/WinNT with WinRAR and Total Commander (FS_NTFS_ && hostver == "2.0"); add 'eu'
  * EXCEPTIONS:
  *  PKZIP for Windows 2.5, 2.6, and 4.0 flag their entries as "FS_FAT_", but
  *  the filename stored in the local header is coded in Windows ANSI (CP 1252
  *  resp. ISO 8859-1 on US and western Europe locale settings).
@@ -2519,9 +2520,9 @@
     if (((hostnum) == FS_FAT_ && \
          !(((islochdr) || (isuxatt)) && \
            ((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \
         (hostnum) == FS_HPFS_ || \
-        ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \
+        ((hostnum) == FS_NTFS_ && ((hostver) == 50 || (hostver) == 20 ))) { \
         _OEM_INTERN((string)); \
     } else { \
         _ISO_INTERN((string)); \
     }
Index: ebcdic.h
===================================================================
RCS file: /cvsroot/devel/unzip/ebcdic.h,v
retrieving revision 1.1.1.1
diff -u -4 -r1.1.1.1 ebcdic.h
--- ebcdic.h	2 Jun 2004 11:03:21 -0000	1.1.1.1
+++ ebcdic.h	3 Jun 2004 07:46:22 -0000
@@ -219,8 +219,52 @@
 
 #endif /* ?MTS */
 #endif /* EBCDIC */
 
+#ifdef UNIX_KOI8
+/*---------------------------------------------------------------------------
+
+  The following conversion tables translate between IBM PC CP 866
+  (OEM codepage) and the Cyrillic Unix KOI8-UB (Ansi codepage).
+  For Cyrillic (Russian, Belarusian and Ukrainian) users only.
+
+  ---------------------------------------------------------------------------*/
+
+#ifdef IZ_ISO2OEM_ARRAY
+ZCONST uch Far iso2oem[] = {
+    /* From old recode */
+    244,195,240,246,241,245,243,242,176,177,178,179,180,181,182,183,
+    184,185,186,187,188,189,190,191,192,193,194,247,196,197,198,199,
+    200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
+    216,217,218,219,220,221,222,223,248,249,250,251,252,253,254,255,
+    238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174,
+    175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234,
+    158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
+    143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154
+};
+#endif /* IZ_ISO2OEM_ARRAY */
+#ifdef IZ_OEM2ISO_ARRAY
+ZCONST uch Far oem2iso[] = {
+    0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA,  /* 80 - 87 */
+    0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0,  /* 88 - 8F */
+    0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE,  /* 90 - 97 */
+    0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1,  /* 98 - 9F */
+    0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA,  /* A0 - A7 */
+    0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,  /* A8 - AF */
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  /* B0 - B7 */
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  /* B8 - BF */
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  /* C0 - C7 */
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  /* C8 - CF */
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  /* D0 - D7 */
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  /* D8 - DF */
+    0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE,  /* E0 - E7 */
+    0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1,  /* E8 - EF */
+    0xB3, 0xA3, 0xB4, 0xA4, 0xB7, 0xA7, 0xBE, 0xAE,  /* F0 - F7 */
+    0xB0, 0x95, 0x9E, 0x96, 0xB9, 0x80, 0x2E, 0xA0   /* F8 - FF */
+};
+#endif /* IZ_OEM2ISO_ARRAY */
+#else /* UNIX_KOI8 */
+
 /*---------------------------------------------------------------------------
 
   The following conversion tables translate between IBM PC CP 850
   (OEM codepage) and the "Western Europe & America" Windows codepage 1252.
@@ -275,8 +319,9 @@
     0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8,  /* F0 - F7 */
     0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0   /* F8 - FF */
 };
 #endif /* IZ_OEM2ISO_ARRAY */
+#endif /* UNIX_KOI8 */
 
 #if defined(THEOS) || defined(THEOS_SUPPORT)
 #  include "theos/charconv.h"
 #endif
----------- следущая часть -----------
Scanned by evaluation version of Dr.Web antivirus Daemon 
http://drweb.ru/unix/



Подробная информация о списке рассылки Oo-discuss