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

Evgeny eu111 на mail.ru
Ср Июн 2 17:03:11 MSD 2004


Evgeny wrote:

> 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).
Как говорится, куда копать понятно, может затем у меня получется сделать 
его универсальным, посмотрим.



Bye, Evgeny

----------- следущая часть -----------
Index: fileio.c
===================================================================
RCS file: /cvsroot/devel/unzip/fileio.c,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 fileio.c
--- fileio.c	2 Jun 2004 11:03:21 -0000	1.1.1.1
+++ fileio.c	2 Jun 2004 12:49:12 -0000
@@ -1939,6 +1939,7 @@
     unsigned comment_bytes_left;
     unsigned int block_len;
     int error=PK_OK;
+    int hostnum=G.pInfo->hostnum;
 #ifdef AMIGA
     char tmp_fnote[2 * AMIGA_FILENOTELEN];   /* extra room for squozen chars */
 #endif
@@ -1963,6 +1964,10 @@
 
     if (!length)
         return PK_COOL;
+/*
+ printf("option=%u, hostnum=%u, hostver=%u \n", option,G.pInfo->hostnum,G.pInfo->hostver);
+*/
+    if( hostnum==11 ) hostnum=0;
 
     switch (option) {
 
@@ -2059,7 +2064,7 @@
                 /* translate the text coded in the entry's host-dependent
                    "extended ASCII" charset into the compiler's (system's)
                    internal text code page */
-                Ext_ASCII_TO_Native((char *)G.outbuf, G.pInfo->hostnum,
+                Ext_ASCII_TO_Native((char *)G.outbuf, hostnum,
                                     G.pInfo->hostver, G.pInfo->HasUxAtt,
                                     FALSE);
 #ifdef WINDLL
@@ -2141,7 +2146,7 @@
 
         /* translate the Zip entry filename coded in host-dependent "extended
            ASCII" into the compiler's (system's) internal text code page */
-        Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, G.pInfo->hostver,
+        Ext_ASCII_TO_Native(G.filename, hostnum, G.pInfo->hostver,
                             G.pInfo->HasUxAtt, (option == DS_FN_L));
 
         if (G.pInfo->lcflag)      /* replace with lowercase filename */
Index: ebcdic.h
===================================================================
RCS file: /cvsroot/devel/unzip/ebcdic.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -3 -r1.1.1.1 -r1.2
--- ebcdic.h	2 Jun 2004 11:03:21 -0000	1.1.1.1
+++ ebcdic.h	2 Jun 2004 12:44:13 -0000	1.2
@@ -236,7 +236,7 @@
   ---------------------------------------------------------------------------*/
 
 #ifdef IZ_ISO2OEM_ARRAY
-ZCONST uch Far iso2oem[] = {
+ZCONST uch Far iso2oem1[] = {
     0x3F, 0x3F, 0x27, 0x9F, 0x22, 0x2E, 0xC5, 0xCE,  /* 80 - 87 */
     0x5E, 0x25, 0x53, 0x3C, 0x4F, 0x3F, 0x3F, 0x3F,  /* 88 - 8F */
     0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D,  /* 90 - 97 */
@@ -254,10 +254,22 @@
     0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6,  /* F0 - F7 */
     0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98   /* F8 - FF */
 };
+
+ZCONST uch Far iso2oem[] = {
+    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[] = {
+ZCONST uch Far oem2iso1[] = {
     0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7,  /* 80 - 87 */
     0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5,  /* 88 - 8F */
     0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9,  /* 90 - 97 */
@@ -274,6 +286,17 @@
     0xDE, 0xDA, 0xDB, 0xD9, 0xFD, 0xDD, 0xAF, 0xB4,  /* E8 - EF */
     0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8,  /* F0 - F7 */
     0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0   /* F8 - FF */
+};
+
+ZCONST uch Far oem2iso[] = {
+    225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
+    242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
+    193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
+    136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,
+    152,153,154,129,156,157,158,159,160,161,162,163,164,165,166,167,
+    168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,
+    210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
+    130,132,135,134,128,133,131,155,184,185,186,187,188,189,190,191
 };
 #endif /* IZ_OEM2ISO_ARRAY */
 
----------- следущая часть -----------
Scanned by evaluation version of Dr.Web antivirus Daemon 
http://drweb.ru/unix/



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