head 4.1; access; symbols xcodefinal:1.14; locks; strict; comment @ * @; 4.1 date 2004.02.04.05.32.13; author mamont; state Exp; branches; next 4.0; 4.0 date 2003.12.20.23.11.12; author mamont; state Exp; branches; next 3.7; 3.7 date 2003.10.05.18.35.21; author mamont; state Exp; branches; next 3.6; 3.6 date 2003.10.05.00.15.24; author mamont; state Exp; branches; next 3.5; 3.5 date 2003.10.04.23.26.25; author mamont; state Exp; branches; next 3.4; 3.4 date 2003.10.04.23.02.54; author mamont; state Exp; branches; next 3.3; 3.3 date 2003.09.27.18.37.05; author mamont; state Exp; branches; next 3.2; 3.2 date 2003.09.27.18.35.43; author mamont; state Exp; branches; next 3.1; 3.1 date 2003.09.27.18.28.26; author mamont; state Exp; branches; next 3.0; 3.0 date 2003.04.03.20.00.35; author mamont; state Exp; branches; next 2.10; 2.10 date 2003.04.03.19.47.12; author mamont; state Exp; branches; next 2.9; 2.9 date 2003.03.31.15.46.49; author mamont; state Exp; branches; next 2.8; 2.8 date 2003.03.26.02.17.16; author mamont; state Exp; branches; next 2.7; 2.7 date 2003.03.26.02.14.13; author mamont; state Exp; branches; next 2.6; 2.6 date 2003.03.10.17.36.26; author mamont; state Exp; branches; next 2.5; 2.5 date 2003.03.10.17.30.05; author mamont; state Exp; branches; next 2.4; 2.4 date 2003.03.09.01.42.47; author mamont; state Exp; branches; next 2.3; 2.3 date 2003.03.08.19.57.28; author mamont; state Exp; branches; next 2.2; 2.2 date 2003.03.08.19.33.27; author mamont; state Exp; branches; next 2.1; 2.1 date 2003.03.08.19.25.05; author mamont; state Exp; branches; next 2.0; 2.0 date 2003.03.08.19.23.31; author mamont; state Exp; branches; next 1.14; 1.14 date 2003.03.08.19.13.24; author mamont; state Exp; branches; next 1.13; 1.13 date 2003.03.08.16.24.13; author mamont; state Exp; branches; next 1.12; 1.12 date 2003.03.08.16.17.35; author mamont; state Exp; branches; next 1.11; 1.11 date 2003.03.08.16.15.45; author mamont; state Exp; branches; next 1.10; 1.10 date 2002.05.03.23.29.31; author dvk24; state Exp; branches; next 1.9; 1.9 date 2002.05.03.23.25.49; author dvk24; state Exp; branches; next 1.8; 1.8 date 2002.05.03.23.21.16; author dvk24; state Exp; branches; next 1.7; 1.7 date 2002.05.03.21.45.15; author dvk24; state Exp; branches; next 1.6; 1.6 date 2002.04.11.15.07.21; author mamont; state Exp; branches; next 1.5; 1.5 date 2002.04.11.14.58.53; author mamont; state Exp; branches; next 1.4; 1.4 date 2002.04.03.18.16.49; author mamont; state Exp; branches; next 1.3; 1.3 date 2002.04.03.17.47.14; author mamont; state Exp; branches; next 1.2; 1.2 date 2002.04.03.16.56.55; author mamont; state Exp; branches; next 1.1; 1.1 date 2002.03.17.21.23.54; author mamont; state Exp; branches; next ; desc @@ 4.1 log @дПВБЧМЕО РЕТЕЛМАЮБФЕМШ -c, РПЪЧПМСАЭЙК ПРТЕДЕМСФШ ЛПДЙТПЧЛХ ЖБКМБ Й ЧЩДБЧБФШ ЕЈ ОБ ЬЛТБО. рПМОБС УРТБЧЛБ РП -H УПДЕТЦЙФ ЙОУФТХЛГЙЙ РП РТЙНЕОЕОЙА ЬФПК ОПЧПК ЧПЪНПЦОПУФЙ. рТЙ ЛПТТЕЛФОПН ЙУРПМШЪПЧБОЙЙ РЕТЕЛМАЮБФЕМС -c РТПЗТБННБ ЧЩИПДЙФ У ЛПДПН ПЫЙВЛЙ 6 --- ERROR_INFORM_ENCODING. @ text @/* Russian encodings with care to letter YO from www.rusf.ru/books/yo */ /* Written in 2002--2004 by D.V.Khmelev */ /* !!!!!!!!!!!! BEFORE COMPILATION !!!!!!!!!!!!!!!!!!!!!!!!!!! */ /* Please #define D_ALT for messages in cp866 */ /* Please #define D_WIN for messages in cp12151 */ /* Please #define D_KOI for messages in koi8-r */ /* You can also pass their definitions through compiler command line */ /* gcc -DD_KOI xcode.c -o xcode #GNU C compiler */ /* bcc.exe -DD_ALT xcode.c #Borland C compiler */ // чЩИПДОБС ЛПДЙТПЧЛБ РП ХНПМЮБОЙА // Output encoding by default #define __ENCLINE__ __LINE__ //#define D_ALT //#define D_WIN //#define D_KOI //#define D_ISO //#define D_MAC #ifdef D_ALT # define OUTPUT_ENC 0 // МЙВП "БМШФЕТОБФЙЧОБС" (Ф.Е. ДПУПЧУЛБС) //either cp866 #elif defined(D_WIN) # define OUTPUT_ENC 1 // win=cp1251 #elif defined(D_KOI) # define OUTPUT_ENC 2 // МЙВП "KOI". // or koi8 #elif defined(D_ISO) # define OUTPUT_ENC 3 // iso #elif defined(D_MAC) # define OUTPUT_ENC 4 // mac #else # error Please #define default output encoding D_ALT D_WIN D_KOI D_ISO D_MAC #endif #if defined(__MSDOS__) || defined(_WIN32) || defined(WIN32)|| defined(__WIN32__) || defined(__TURBOC__) #define STDOUT_PROBLEM_DOS 1 #endif #if defined(__MINGW__) #define STDOUT_PROBLEM_MINGW 2 #endif // Change Log: // $Log: xcode.c,v $ // Revision 4.0 2003/12/20 23:11:12 mamont // дПВБЧМЕО ЛМАЮ -d ДМС ПРТЕДЕМЕОЙС // ДЧПКОПК РЕТЕЛПДЙТПЧЛЙ. уНЕОБ ОПНЕТБ // ЧЕТУЙЙ ОБ 4.0 // // Revision 3.7 2003/10/05 18:35:21 mamont // йУРТБЧМЕО ЗМАЛ, ЧПЪОЙЛБЧЫЙК РТЙ ЧЩЪПЧЕ // xcode in out // У ПФУХФУФЧХАЭЙН ЖБКМПН out (ЧЩДБЧБМБУШ // ПЫЙВЛБ). // // Revision 3.6 2003/10/05 00:15:24 mamont // ъБТБВПФБМ РТПЪТБЮОП ВЙОБТОЩК УФБОДБТФОЩК // ЧЧПД/ЧЩЧПД РПД дпу-ПЛОПН. чЕТУЙА mingw // ОЕ РТПЧЕТСМ, ОП, РП ЙДЕЕ ФПЦЕ ДПМЦОБ ТБВПФБФШ. // // Revision 3.5 2003/10/04 23:26:25 mamont // фЕРЕТШ stdout ХУФБОБЧМЙЧБЕФУС Ч ВЙОБТОЩК // ТЕЦЙН Ч DOS/WIN ПЛТХЦЕОЙЙ. йОБЮЕ // ДПВБЧМСМУС ЛПД \x0D Ч ЛПОГЕ ЛБЦДПК // УФТПЛЙ (\x0D\x0A). // // Revision 3.4 2003/10/04 23:02:54 mamont // йУРТБЧМЕОБ ПЫЙВЛБ Ч ЧЩДБЮЕ ДЙБЗОПУФЙЛЙ // Ч РТЕДЩДХЭЕК ЧЕТУЙЙ. // // дПВБЧМЕОЩ ДПРПМОЙФЕМШОЩЕ ЛПДЩ ЧЩИПДБ // (УН. xcode -H, ТБЪДЕМ лпдщ чщипдб) // // дПВБЧМЕО РЕТЕЛМАЮБФЕМШ --, РП ЛПФПТПНХ // РТЕТЩЧБЕФУС ТБЪВПТ ЛПНБОДОПК УФТПЛЙ. // // дПВБЧМЕОП УППВЭЕОЙЕ ПВ ПЫЙВЛЕ Ч БТЗХНЕОФБИ // РТПЗТБННЩ, ЕЦЕМЙ ФБЛБС РТПУИПДЙФ. // // Revision 3.3 2003/09/27 18:37:05 mamont // РЕТЕЖПТНБФЙТПЧБМ ЛПННЕОФБТЙЙ // // Revision 3.2 2003/09/27 18:35:43 mamont // уПЧУЕН ЪБВЩМ: ФЕРЕТШ РТПЗТБННБ ЧЩИПДЙФ // У ОЕОХМЕЧЩН ЛПДПН РТЙ ЛБЛПК-МЙВП ПЫЙВЛЕ. // уБНЙ ПЫЙВЛЙ НПЦОП РПУНПФТЕФШ Ч ФЕЛУФЕ: // E_OK Й Ф.Д. // // Revision 3.1 2003/09/27 18:28:26 mamont // фЕРЕТШ ПРГЙЙ ЧЙДБ /h ДПРХУФЙНЩ ФПМШЛП РТЙ // ЧЩИПДОПК ЛПДЙТПЧЛЕ D_ALT // // рП ПРГЙЙ "--" УЛБОЙТПЧБОЙЕ БТЗХНЕОФПЧ // ПУФБОБЧМЙЧБЕФУС. уМЕДХАЭЙЕ БТЗХНЕОФЩ // ТБУУНБФТЙЧБАФУС ЛБЛ ЙНЕОБ ЖБКМПЧ. // // Revision 3.0 2003/04/03 20:00:35 mamont // уНЕОБ ЧЕТУЙЙ ОБ 3.0 // ЛПНБОДБ: ci -f3.0 xcode.c // // Revision 2.10 2003/04/03 19:47:12 mamont // рПРТБЧМЕОБ ПЫЙВЛБ Ч ЛПДЙТПЧЛЕ "mac", ОБ ЛПФПТХА // МАВЕЪОП ХЛБЪБМ уЕТЗЕК уЛПФОЙЛПЧ (ОЕЧЕТОЩК ЛПД // ВХЛЧЩ ``С''). йУРПМШЪХЕНБС ВЙВМЙПФЕЛБ // РЕТЕУФБОПЧПЮОПК РЕТЕЛПДЙТПЧЛЙ У // http://www.rusf.ru/books/yo/encoding.html РПМХЮЙМБ // ОБЪЧБОЙЕ SRECODE.C Й СЧОП ЧЩДЕМЕОБ Ч ФЕЛУФЕ // РТПЗТБННЩ ЛПННЕОФБТЙСНЙ. // // Revision 2.9 2003/03/31 15:46:49 mamont // фЕЛУФ РТЙЧЕДЈО Л УФБОДБТФХ C99 (РП НПДХМА РТЕДХРТЕЦДЕОЙК П ЛПОЧЕТФБГЙЙ // НЕЦДХ ЪОБЛПЧЩНЙ/ВЕЪЪОБЛПЧЩНЙ ВХЛЧБНЙ). вПТПФШУС У ЬФЙН НПЦОП СЧОЩН // ЪБДБОЙЕН РТЕПВТБЪПЧБОЙС ХЛБЪБФЕМЕК, ОП ОЕ ОХЦОП Ч УЙМХ ХУМПЦОЕОЙС // ЛПДБ. // // Revision 2.8 2003/03/26 02:17:16 mamont // рПРТБЧМЕОП РТЕДХРТЕЦДЕОЙЕ "suspicious pointer conversion" // // Revision 2.7 2003/03/26 02:14:13 mamont // дПВБЧМЕОП ДЕЛПДЙТПЧБОЙЕ html-хОЙЛПДЕООЩИ ФЕЛУФПЧ // (ЧТПДЕ Дима) // // Revision 2.6 2003/03/10 17:36:26 mamont // йОЖПТНБГЙС П ТЕЦЙНЕ silent ДПВБЧМЕОБС Ч УРТБЧЛХ // // Revision 2.5 2003/03/10 17:30:05 mamont // дПВБЧМЕО ТЕЦЙН silent РП ПРГЙЙ -s // // Revision 2.4 2003/03/09 01:42:47 mamont // йУРТБЧМЕОП ОЕРТБЧЙМШОПЕ РПЧЕДЕОЙЕ РТЙ ПДОПН ЙНЕОЙ ЖБКМБ // // Revision 2.3 2003/03/08 19:57:28 mamont // фЕРЕТШ РТПЗТБННБ ЛПНРЙМЙТХЕФУС bc 3.1 ВЕЪ РТЕДХРТЕЦДЕОЙК Й ПЫЙВПЛ. // // Revision 2.2 2003/03/08 19:33:27 mamont // тЕЦЙН ФТХВЩ ФЕРЕТШ РП ХНПМЮБОЙА ФПМШЛП Ч дПУЕ/чЙОДБИ. (дПУ/Win // ПРТЕДЕМСЕФУС РП РЕТЕЛМАЮБФЕМА D_ALT) // // Revision 2.1 2003/03/08 19:25:05 mamont // *** empty log message *** // // Revision 2.0 2003/03/08 19:23:31 mamont // уНЕОБ ОПНЕТБ ЧЕТУЙЙ ОБ 2.0 // // Revision 1.14 2003/03/08 19:13:24 mamont // ъОБЮЙФЕМШОЩЕ ХМХЮЫЕОЙС РП УТБЧОЕОЙА У РТЕДЩДХЭЕК ЧЕТУЙЕК. фЕРЕТШ // ЙНЕЕФУС ПРГЙС У ФТХВПК -p, Б РПД дПУПЧУЛПК ЛПОУПМША РП ХНПМЮБОЙА // РТПЗТБННБ ЧЩЧПДЙФ ЛТБФЛХА РПНПЭШ. // // еУМЙ ЧИПДОБС ЛПДЙТПЧЛБ ХЦЕ ХЛБЪБОБ, ФП РТПЗТБННБ ОЕ ПРТЕДЕМСЕФ ЕЈ // БЧФПНБФЙЮЕУЛЙ, Б УТБЪХ РТПЙЪЧПДЙФ РЕТЕЛПДЙТПЧЛХ. еДЙОУФЧЕООЩК ФПОЛЙК // НПНЕОФ: ЛПЗДБ ОБДП РЕТЕЛПДЙТПЧБФШ ЖБКМ ОБ НЕУФЕ. ч ЬФПН УМХЮБЕ // ЙУРПМШЪХЕФУС ЧТЕНЕООЩК ЖБКМ ОБ ДЙУЛЕ, ЛБЛ Й ЧУЕЗДБ. // // Revision 1.13 2003/03/08 16:24:13 mamont // дПВБЧЙМ Revision // // Revision 1.12 2003/03/08 16:17:35 mamont // оБЮБФ МПЗ ЙЪНЕОЕОЙК // #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <assert.h> #include <sys/stat.h> #ifdef STDOUT_PROBLEM_DOS #include <fcntl.h> #include <io.h> #endif//STDOUT_PROBLEM_DOS #define XCODE "xcode" #define REVISION "$Revision: 4.0 $" static char * VERSIONR=REVISION; static char VERSION[100];//=VERSIONR+11 #define SELF_URL_BASE "http://www.rusf.ru/books/yo" #define SELF_URL SELF_URL_BASE "/src/xcode.c" /* Library SRECODE.C (Shuffle RECODE) ver. 1.0 * бЧФПТ ЛПДБ: д.ч.иНЕМЈЧ, нБТФ 2002--БРТЕМШ 2003 * рПДТПВОПУФЙ: http://www.rusf.ru/books/yo * рПДРТПЗТБННЩ ОБ СЪЩЛЕ уЙ, ПВЕУРЕЮЙЧБАЭЙЕ * РЕТЕУФБОПЧПЮОХА РЕТЕЛПДЙТПЧЛХ 14 ЛПДЙТПЧПЛ * ТХУУЛЙИ ВХЛЧ ДТХЗ Ч ДТХЗБ. * Functions for Perl, providing exchange * transformation of 14 russian encodings to * each other. * уМЕДХАЭЙК ЛПД СЧМСЕФУС і-ware, йНЕООП, ЕЗП НПЦОП * УЧПВПДОП ТБУРТПУФТБОСФШ НПДЙЖЙГЙТПЧБФШ, Й ДБЦЕ * ДЙЪБУУЕНВМЙТПЧБФШ ЛБЛ Ч ДЧПЙЮОПН ЧЙДЕ, ФБЛ Й Ч * ЙУИПДОПН ФЕЛУФЕ. пДОБЛП, ЙУРПМШЪХС ЬФПФ ЛПД, ЧЩ * ДПМЦОЩ ЙУРПМШЪПЧБФШ ВХЛЧХ і ЧП ЧУЕИ ФЕЛУФБИ, * ЛПФПТЩЕ ОБВЙТБЕФЕ ОБ ЛПНРШАФЕТБИ: ОБЮЙОБС У * ЬМЕЛФТПООЩИ РЙУЕН Й ЪБЛБОЮЙЧБС ЛТХРОПК * РТПЪБЙЮЕУЛПК ЖПТНПК. * бЧФПТ ЧПЪДЕТЦЙЧБЕФУС ПФ ЧУСЮЕУЛЙИ ЗБТБОФЙК * ОБДЈЦОПУФЙ ЛПДБ Й УОЙНБЕФ У УЕВС ПФЧЕФУФЧЕООПУФШ * ЪБ ЧПЪНПЦОХА РПФЕТА ДБООЩИ РТЙ ЕЗП * ЙУРПМШЪПЧБОЙЙ. фЕН ОЕ НЕОЕЕ, БЧФПТ РПУФБТБМУС * УДЕМБФШ ЧУЈ ЧПЪНПЦОПЕ, ЮФПВЩ РПФЕТЙ ДБООЩИ НПЦОП * ВЩМП ЙЪВЕЦБФШ. * Written by D.V. Khmelev, March 2002 -- April 2003 * More information at http://www.rusf.ru/books/yo * The following code is YO-ware. YO-ware means that * you can freely copy, modify and disassemble it in * binary and/or source text. However, if you use * this program code, you should use Russian letter * YO in all texts in Russian you type in computer * from e-mails to novels. * The author disclaims any responsibility for code * safety and holds no responsibility for the loss of * data, resulting the the use of the following * code. However, the author tried to do his best to * avoid loss of data. */ typedef enum { CP866=0, CP1251, KOI8_R, ISO8859_5, MAC, OSN, MOSHKOV, SORT, ALT_FIDO, KOI7, DKOI, CP500, EBCDIC, ASCII, TOTAL_ENCODING_NUMBER} encoding_t; char * encoding_name[]={ "cp866", /* CP866 */ "cp1251", /* CP1251 */ "koi8-r", /* KOI8_R */ "iso8859-5", /* ISO8859_5 */ "mac", /* MAC */ "osn", /* OSN */ "moshkov", /* MOSHKOV */ "sort", /* SORT */ "alt-fido", /* ALT_FIDO */ "koi7", /* KOI7 */ "dkoi", /* DKOI */ "cp500", /* CP500 */ "ebcdic", /* EBCDIC */ "ascii", /* ASCII */ }; unsigned char * encoding_alphabet[]={ /* CP866 */ (unsigned char*) "\240\241\242\243\244\245\361\246\247\250" "\251\252\253\254\255\256\257\340\341\342" "\343\344\345\346\347\350\351\352\353\354" "\355\356\357" "\200\201\202\203\204\205\360\206\207\210" "\211\212\213\214\215\216\217\220\221\222" "\223\224\225\226\227\230\231\232\233\234" "\235\236\237", /* CP1251 */ (unsigned char*) "\340\341\342\343\344\345\270\346\347\350" "\351\352\353\354\355\356\357\360\361\362" "\363\364\365\366\367\370\371\372\373\374" "\375\376\377" "\300\301\302\303\304\305\250\306\307\310" "\311\312\313\314\315\316\317\320\321\322" "\323\324\325\326\327\330\331\332\333\334" "\335\336\337", /* KOI8_R */ (unsigned char*) "\301\302\327\307\304\305\243\326\332\311" "\312\313\314\315\316\317\320\322\323\324" "\325\306\310\303\336\333\335\337\331\330" "\334\300\321" "\341\342\367\347\344\345\263\366\372\351" "\352\353\354\355\356\357\360\362\363\364" "\365\346\350\343\376\373\375\377\371\370" "\374\340\361", /* ISO8859_5 */ (unsigned char*) "\320\321\322\323\324\325\361\326\327\330" "\331\332\333\334\335\336\337\340\341\342" "\343\344\345\346\347\350\351\352\353\354" "\355\356\357" "\260\261\262\263\264\265\241\266\267\270" "\271\272\273\274\275\276\277\300\301\302" "\303\304\305\306\307\310\311\312\313\314" "\315\316\317", /* MAC */ (unsigned char*) "\340\341\342\343\344\345\336\346\347\350" "\351\352\353\354\355\356\357\360\361\362" "\363\364\365\366\367\370\371\372\373\374" "\375\376\337" "\200\201\202\203\204\205\335\206\207\210" "\211\212\213\214\215\216\217\220\221\222" "\223\224\225\226\227\230\231\232\233\234" "\235\236\237", /* OSN */ (unsigned char*) "\320\321\322\323\324\325\361\326\327\330" "\331\332\333\334\335\336\337\340\341\342" "\343\344\345\346\347\350\351\352\353\354" "\355\356\357" "\260\261\262\263\264\265\360\266\267\270" "\271\272\273\274\275\276\277\300\301\302" "\303\304\305\306\307\310\311\312\313\314" "\315\316\317", /* MOSHKOV */ (unsigned char*) "\341\342\367\347\344\345\243\366\372\351" "\352\353\354\355\356\357\360\362\363\364" "\365\346\350\343\376\373\375\256\371\370" "\374\340\361" "\301\302\327\307\304\305\263\326\332\311" "\312\313\314\315\316\317\320\322\323\324" "\325\306\310\303\336\333\335\254\331\330" "\334\300\321", /* SORT */ (unsigned char*) "\241\242\243\244\245\246\247\250\251\252" "\253\254\255\256\257\260\261\262\263\264" "\265\266\267\270\271\272\273\274\275\276" "\277\300\301" "\200\201\202\203\204\205\206\207\210\211" "\212\213\214\215\216\217\220\221\222\223" "\224\225\226\227\230\231\232\233\234\235" "\236\237\240", /* ALT_FIDO */ (unsigned char*) "\240\241\242\243\244\245\361\246\247\250" "\251\252\253\254\255\256\257\160\341\342" "\343\344\345\346\347\350\351\352\353\354" "\355\356\357" "\200\201\202\203\204\205\360\206\207\210" "\211\212\213\214\110\216\217\220\221\222" "\223\224\225\226\227\230\231\232\233\234" "\235\236\237", /* KOI7 */ (unsigned char*) "\101\102\127\107\104\105\43\126\132\111" "\112\113\114\115\116\117\120\122\123\124" "\125\106\110\103\136\133\135\137\131\130" "\134\100\121" "\141\142\167\147\144\145\44\166\172\151" "\152\153\154\155\156\157\160\162\163\164" "\165\146\150\143\176\173\175\42\171\170" "\174\140\161", /* DKOI */ (unsigned char*) "\167\170\257\215\212\213\131\256\262\217" "\220\232\233\234\235\236\237\252\253\254" "\255\214\216\200\266\263\265\267\261\260" "\264\166\240" "\271\272\355\277\274\275\102\354\372\313" "\314\315\316\317\332\333\334\336\337\352" "\353\276\312\273\376\373\375\165\357\356" "\374\270\335", /* CP500 */ (unsigned char*) "\254\151\355\356\353\357\111\354\277\200" "\375\376\373\374\255\256\131\104\105\102" "\106\103\107\234\110\124\121\122\123\130" "\125\126\127" "\220\217\352\372\276\240\252\266\263\235" "\332\233\213\267\270\271\253\144\145\142" "\146\143\147\236\150\164\161\162\163\170" "\165\166\167", /* EBCDIC */ (unsigned char*) "\237\240\252\253\254\255\335\256\257\260" "\261\262\263\264\265\266\267\270\271\272" "\273\274\275\276\277\312\313\314\315\316" "\317\332\333" "\130\131\142\143\144\145\102\146\147\150" "\151\160\161\162\163\164\165\166\167\170" "\200\212\213\214\215\216\217\220\232\233" "\234\235\236", /* ASCII */ (unsigned char*) "\141\142\167\147\144\145\136\166\172\151" "\152\153\154\155\156\157\160\162\163\164" "\165\146\150\143\75\133\135\43\171\170" "\134\140\161" "\101\102\127\107\104\105\46\126\132\111" "\112\113\114\115\116\117\120\122\123\124" "\125\106\110\103\53\173\175\44\131\130" "\174\176\121", }; int *full_encoding_list(encoding_t encoding, int table[]){ int i,j; static int exists[256]; for(i=0;i<256;i++) exists[i]=0; for(i=0;i<66;i++) { table[i]=encoding_alphabet[encoding][i]; exists[table[i]]=1; } for(j=66,i=0;i<256;i++){ if(exists[i]) continue; table[j++]=i; } return table; } int *fill_recode_table(int table[], encoding_t from, encoding_t to){ static int full_enc_from[256]; static int full_enc_to[256]; int i; full_encoding_list(from,full_enc_from); full_encoding_list(to,full_enc_to); for(i=0;i<256;i++) table[full_enc_from[i]]=full_enc_to[i]; return table; } unsigned char *srecode(unsigned char *s, encoding_t from, encoding_t to){ static int prev_from=-1, prev_to=-1; static int recode_table[256]; int i; if((from!=prev_from)||(to!=prev_to)){ prev_from=from; prev_to=to; fill_recode_table(recode_table,from,to); } for(i=0;s[i];i++) s[i]=recode_table[s[i]]; return s; } unsigned char *srecode2(unsigned char *s, unsigned char *t, encoding_t from, encoding_t to){ static int prev_from=-1, prev_to=-1; static int recode_table[256]; int i; if((from!=prev_from)||(to!=prev_to)){ prev_from=from; prev_to=to; fill_recode_table(recode_table,from,to); } for(i=0;t[i];i++) s[i]=recode_table[t[i]]; s[i]=0; return s; } /* ЛПОЕГ ЛПДБ ВЙВМЙПФЕЛЙ SRECODE.C * * end of the code of the library SRECODE.C */ /*************************************************/ /**** ERROR_LIST ********/ /*************************************************/ // чОЙНБОЙЕ!!! рТПЗТБННБ ЧПЪЧТБЭБЕФ 0 ФПЗДБ Й ФПМШЛП ФПЗДБ, ЛПЗДБ // ХУРЕЫОП РЕТЕЛПДЙТПЧБМБ ЖБКМ (Ф.Е. УДЕМБМБ ФП, ДМС ЮЕЗП // РТЕДОБЪОБЮЕОБ). чЩДБЮБ ЧЕТУЙЙ, ЙМЙ УРТБЧЛЙ ТБУУНБФТЙЧБАФУС ЛБЛ // ПЫЙВЛЙ: ФБЛПЗП РТЙ ЙУРПМШЪПЧБОЙЙ Ч РБЛЕФОПН ТЕЦЙНЕ РТПЙУИПДЙФШ ОЕ // ДПМЦОП. // уРЙУПЛ ЧЧЕДЈО РП РТПУШВЕ чМБДЙУМБЧБ оПУПЧБ (nvv@@mail^primorye^ru) enum{ ERROR_OK=0, ERROR_VERSION, ERROR_HELP, ERROR_DESCRIPTION, ERROR_NO_ARGUMENT, ERROR_WRONG_ARGUMENT, ERROR_INFORM_ENCODING, ERROR_SERIOUS=16, ERROR_INTERNAL=ERROR_SERIOUS, ERROR_MALLOC, ERROR_STAT_FILE, ERROR_EMPTY_FILE, ERROR_OPEN_FILE_READ, ERROR_OPEN_FILE_WRITE, ERROR_OPEN_FILE_TMP, ERROR_WRITE_FILE, }; #define NUMCOD 5 char encLetter[]={'a','w','k','i','m'}; int enc=OUTPUT_ENC; int program_output_encoding=OUTPUT_ENC; int Russian=1; unsigned char *alphabet= "БВЧЗДЕЈЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАСбвчздеіцъйклмнопртуфхжигюыэящшьас"; int self_encoding=2; // РП ХНПМЮБОЙА --- УПВУФЧЕООБС ЛПДЙТПЧЛБ ЕУФШ koi void determine_self_encoding(char *selfname){ for(self_encoding=0; self_encoding<TOTAL_ENCODING_NUMBER; self_encoding++) if(strcmp(alphabet,encoding_alphabet[self_encoding])==0) return; Russian=0; self_encoding=2; fprintf(stderr, "WARNING: This version of %s has passed incorrect change of \n" "WARNING: russian letters encoding!!!\n" "WARNING: Download correct version from " SELF_URL "\n", selfname); } static char temps[1500]; char *_rec(char *s){ return srecode2(temps,s,self_encoding,program_output_encoding); } char *msgs_eng[]={ /* msg_descr */ "(Based on a program written originally by Andrey V. Lukyanov, May 14, 1997,\n" "and updated later by Cyril Rotmistrovsky and Igor V. Krassikov)\n" "\n" "DESCRIPTION\n" "\n" "This program tries to determine input document encoding\n" "and to convert it into a desired one.\n" "The important feature of this program is ONE-TO-ONE conversion,\n" "which prevents you from damaging your file. If conversion is\n" "incorrect or if you even converted a binary file, you can always\n" "RESTORE source file by backward conversion (if you did not use\n" "options -l, -q or -t)\n" "\n" "LICENSE\n" "\n" "This program is YO-ware. YO-ware means that you can freely copy,\n" "modify and disassemble in binary and/or source text.\n" "However, if you use this program, you should use Russian letter YO\n" "in all texts in Russian you type in computer from e-mails\n" "to novels.\n" "\n" "EXIT CODES\n" "\n" "The program terminates with 0 exit code only in the case it actually\n" "did, what it is supposed to do: recoded the file. In all other cases\n" "the exit code is non-zero.\n" "In particular help output returns non-zero code ERROR_HELP.\n" "Mistakes, related to interaction with operating system has code >=16.\n" "In future versions other exit codes might be added, but current shall\n" "not be changed." "\n" " THE TABLE OF EXIT CODES:\n" , /* msg_encodings */ "OTHER SWITCHES\n" "\n" "Switch -- stops parsing command line arguments and further parameters\n" "are considered as filenames (this way you can work with files, whose\n" "name begins with dash sign - ;).\n" "\n" "Switch -У changes xcode to the state of informing about encoding\n" "of the input. The program prints to output file the following string\n" " encoding: name_of_input_file\n" "If standard input was used, then the name of input file is <<stdin>>.\n" "Combination with -d leads to printing 3 encodings: \n" " from->to, result: ЙНС_ЧИПДОПЗП_ЖБКМБ\n" "where 'from->to' is the recommended transform to get the file suggestively\n" "in encoding 'result'.\n" "Using -c automatically implies -s, i.e. the information on encodings\n" "is not duplicated to standard errors stream.\n" "In order to view encodings of html-files in current directory\n" "under bash in GNU type in the following one-comman-line script:\n" " for f in *.html; do xcode -c $f; done\n" "To carry out the similar action in file manager Far under Win32 (and in\n" "all other childs of Commander Norton), select files, press Ctrl-G, and\n" "type in command\n" " xcode -c !.!\n" "\n" "The following switches could be used for input " "and output encoding. \nHowever, " "automatic recognition is supported for first 5 encodings only.\n" "More information can be found at \n" " " SELF_URL_BASE "/xcode.html\n", /* msg_version */ "Program "XCODE" version %s written by D.V.Khmelev\n" "(see http://www.rusf.ru/books/yo/xcode.html for details)\n" "\n" "The author disclaims any responsibility for program\n" "safety and holds no responsibility for the loss of\n" "data, resulting the the use of the program.\n" "However, the author tried to do his best to\n" "avoid loss of data.\n", /* msg_help */ "Usage: " XCODE" -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " "[in [out]]\n" "-E -h in English (don't forget to add -h or -H switch!)\n" "-v print version information\n" "-H manual, list of 14 encodings supported, and view YO-ware license\n" "-d double recoding (try if simple '"XCODE"' failed)\n" "-q quoted-printable decoding (useful for decoding MIME-files)\n" "-l decode html Unicoded text (like Дима)\n" "-c determine encoding and print it to the output (see details by -H)\n" "-t do unix2dos transformation (convert LF to CR/LF) in DOS/Win only\n" "-p pipe mode (applies to DOS/Win environment only)\n" "-s silent mode (no information on encodings displayed)\n" "If input/output files are not specified, the standard input/output is used.\n", /* msg_out */ "-%c to set %-10s output", /* msg_forc */ "+%c to force %-10s input\n", /* msg_defl */ " (default)\n", /* msg_info */ "-%d to set %-10s output +%d to set %-10s input\n", /* msg_err_temp_file */ "Unable to create temporary file. No free space on disk?\n", /* msg_guessinp */ "Guessed input encoding: %s\n", /* msg_forceinp */ "Forced input encoding: %s\n", /* msg_outpenc */ "Output encoding: %s\n", /* msg_double_recode */ "Double recode: %s->%s, %s->%s\n", /* msg_erropenfile */ "Unable to open output file %s\n", /* msg_err_in_file */ "Unable to open input file %s\n", /* msg_cant_write_temp_file */ "Can't write to temporary file. Disk full?\n", /* msg_pipe */ "To use pipe mode run the program with option -p\n", /* msg_tryhelp */ "Try `xcode -e -h' for more information.\n", /* msg_uni_qp */ "You can not use -q and -l switches simultaneously.\n" "Try pipe 'xcode -l|xcode -q' to get desired result.\n", /* msg_conflict_force_inform */ "You can not use -c and any of -l, +[awikm] or +1, +2, ...\n" "switches simultaneously.\n", /* msg_wrong_argument */ "*** ERROR IN A PROGRAM ARGUMENT ***\n", }; char *msgs_rus[]={ /* msg_descr */ "(пУОПЧБОП ОБ РТПЗТБННЕ, ЛПФПТХА ОБРЙУБМ бОДТЕК ч. мХЛШСОПЧ 14.05.1997,\n" "Й ЛПФПТХА РПФПН РТБЧЙМЙ лЙТЙММ тПФНЙУФТПЧУЛЙК Й йЗПТШ ч. лТБУЙЛПЧ)\n" "\n" "прйубойе\n" "\n" "ьФБ РТПЗТБННБ БЧФПНБФЙЮЕУЛЙ ПРТЕДЕМСЕФ ЛПДЙТПЧЛХ ЧИПДОПЗП\n" "ДПЛХНЕОФБ Й РТЕПВТБЪХЕФ ДПЛХНЕОФ Ч ЛПДЙТПЧЛХ, чБН ОХЦОХА.\n" "чБЦОПК ПУПВЕООПУФША РТПЗТБННЩ СЧМСЕФУС ЧЪБЙНОП ПДОПЪОБЮОБС РЕТЕЛПДЙТПЧЛБ,\n" "ЛПФПТБС РТЕДПИТБОСЕФ ПФ РПЧТЕЦДЕОЙК чБЫ ЖБКМ. еУМЙ РТЕПВТБЪПЧБОЙЕ РТПЫМП\n" "ОЕЛПТТЕЛФОП, ЙМЙ ДБЦЕ ЕУМЙ ЧЩ РТЕПВТБЪПЧБМЙ ДЧПЙЮОЩК ЖБКМ, чЩ ЧУЕЗДБ НПЦЕФЕ\n" "чпууфбопчйфш ЙУИПДОЩК ЖБКМ ПВТБФОЩН РТЕПВТБЪПЧБОЙЕН (ЕУМЙ, ЛПОЕЮОП, чЩ\n" "ОЕ ЧПУРПМШЪПЧБМЙУШ ДПРПМОЙФЕМШОЩНЙ ПРГЙСНЙ -l, -q ЙМЙ -t).\n" "\n" "мйгеоъйс\n" "\n" "рТПЗТБННБ СЧМСЕФУС і-ware, йНЕООП, ЕЈ НПЦОП УЧПВПДОП ТБУРТПУФТБОСФШ\n" "НПДЙЖЙГЙТПЧБФШ, Й ДБЦЕ ДЙЪБУУЕНВМЙТПЧБФШ ЛБЛ Ч ДЧПЙЮОПН ЧЙДЕ, ФБЛ Й Ч\n" "ЙУИПДОПН ФЕЛУФЕ. пДОБЛП, ЙУРПМШЪХС ЬФХ РТПЗТБННХ, ЧЩ ДПМЦОЩ\n" "ЙУРПМШЪПЧБФШ ВХЛЧХ і ЧП ЧУЕИ ФЕЛУФБИ, ЛПФПТЩЕ ОБВЙТБЕФЕ ОБ ЛПНРШАФЕТБИ:\n" "ОБЮЙОБС У ЬМЕЛФТПООЩИ РЙУЕН Й ЪБЛБОЮЙЧБС ЛТХРОПК РТПЪБЙЮЕУЛПК ЖПТНПК.\n" "\n" "лпдщ чщипдб\n" "\n" "рТПЗТБННБ ЧЩИПДЙФ У ЛПДПН 0 ФПМШЛП РТЙ ХУМПЧЙЙ, ЮФП ПОБ\n" "ДЕКУФЧЙФЕМШОП ЧЩРПМОЙМБ ФП, ДМС ЮЕЗП РТЕДОБЪОБЮБМБУШ: РЕТЕЛПДЙТПЧБМБ\n" "ЖБКМ. чП ЧУЕИ ПУФБМШОЩИ УМХЮБСИ ЛПД ЧПЪЧТБФБ ОЕОХМЕЧПК.\n" "ч ЮБУФОПУФЙ, ЧЩДБЮБ РПДУЛБЪЛЙ ЧПЪЧТБЭБЕФ ОЕОХМЕЧПК ЛПД ERROR_HELP.\n" "пЫЙВЛЙ, УЧСЪБООЩЕ УП ЧЪБЙНПДЕКУФЧЙЕН У ПРЕТБГЙПООПК УЙУФЕНПК ЙНЕАФ\n" "ЛПД >=16. ч ВХДХЭЙИ ЧЕТУЙСИ НПЗХФ ДПВБЧМСФШУС ДТХЗЙЕ ЛПДЩ ЧЩИПДБ, ОП\n" "ФЕЛХЭЙЕ ЙЪНЕОСФШУС ОЕ ВХДХФ." "\n" " фбвмйгб лпдпч чщипдб:\n" , /* msg_encodings */ "дтхзйе ретелмаюбфемй\n" "\n" "рЕТЕЛМАЮБФЕМШ -- ПУФБОБЧМЙЧБЕФ ТБЪВПТ БТЗХНЕОФПЧ ЛПНБОДОПК УФТПЛЙ\n" "Й УМЕДХАЭЙЕ РБТБНЕФТЩ ТБУУНБФТЙЧБАФУС ХЦЕ ЛБЛ ЙНЕОБ ЖБКМПЧ.\n" "(ФБЛЙН ПВТБЪПН НПЦОП ПВТБВБФЩЧБФШ ЖБКМЩ, ОБЪЧБОЙС ЛПФПТЩИ ОБЮЙОБАФУС\n" "УП ЪОБЛБ ДЕЖЙУБ - ;)\n" "\n" "рЕТЕЛМАЮБФЕМШ -У РЕТЕЧПДЙФ xcode Ч ТЕЦЙН ЧЩДБЮЙ ЙОЖПТНБГЙЙ П ЛПДЙТПЧЛЕ\n" "ЖБКМБ. рТПЗТБННБ ФПЗДБ ЧЩДБЈФ Ч ЧЩИПДОПК ЖБКМ УФТПЛХ ЧЙДБ\n" " ЛПДЙТПЧЛБ: ЙНС_ЧИПДОПЗП_ЖБКМБ\n" "еУМЙ ЙУРПМШЪПЧБМУС УФБОДБТФОЩК ЧЧПД, ФП ЙНС ЧИПДОПЗП ЖБКМБ <<stdin>>.\n" "рТЙ ЛПНВЙОЙТПЧБОЙЙ У -d ЧЩДБЈФУС 3 ЛПДЙТПЧЛЙ: \n" " from->to, result: ЙНС_ЧИПДОПЗП_ЖБКМБ\n" "ЗДЕ from->to --- ТЕЛПНЕОДХЕНПЕ РТЕПВТБЪПЧБОЙЕ, ЮФПВЩ РПМХЮЙФШ ЖБКМ\n" "РТЕДРПМПЦЙФЕМШОП Ч ЛПДЙТПЧЛЕ result.\n" "йУРПМШЪПЧБОЙЕ РЕТЕЛМАЮБФЕМС -c РТЙЧПДЙФ Л ЧЛМАЮЕОЙА РЕТЕЛМАЮБФЕМС -s,\n" "Ф.Е. ЙОЖПТНБГЙС П ЛПДЙТПЧЛБИ Ч РПФПЛ ПЫЙВПЛ ОЕ ДХВМЙТХЕФУС.\n" "дМС РТПУНПФТБ ЙОЖПТНБГЙЙ П ЛПДЙТПЧЛЕ html-ЖБКМПЧ Ч ФЕЛХЭЕК ДЙТЕЛФПТЙЙ\n" "РПД bash Ч GNU ОБВЕТЙФЕ УМЕДХАЭЙК УЛТЙРФ Ч ЛПНБОДОПК УФТПЛЕ:\n" " for f in *.html; do xcode -c $f; done\n" "дМС ЧЩРПМОЕОЙС БОБМПЗЙЮОПК ЪБДБЮЙ Ч ЖБКМПЧПН НЕОЕДЦЕТЕ Far РПД Win32\n" "(Й РТПЮЙИ ДЕФСИ ЛПНБОДЙТБ оПТФПОБ), ЧЩДЕМЙФЕ ЖБКМЩ, ОБЦНЙФЕ Ctrl-G Й\n" "ОБВЕТЙФЕ ЛПНБОДХ\n" " xcode -c !.!\n" "\n" "уМЕДХАЭЙНЙ РЕТЕЛМАЮБФЕМСНЙ НПЦОП ХУФБОПЧЙФШ ЧИПДОХА Й ЧЩИПДОХА " "ЛПДЙТПЧЛЙ. \nпДОБЛП, " "БЧФПНБФЙЮЕУЛПЕ ПРТЕДЕМЕОЙЕ ЛПДЙТПЧЛЙ ТБВПФБЕФ ФПМШЛП ДМС РЕТЧЩИ 5.\n" "дБМШОЕКЫХА ЙОЖПТНБГЙА УН. ОБ УФТБОЙГЕ \n" " " SELF_URL_BASE "/xcode.html\n", /* msg_version */ "рТПЗТБННХ "XCODE" ЧЕТУЙС %s ОБРЙУБМ д.ч.иНЕМЈЧ\n" "(РПДТПВОПУФЙ УН. http://www.rusf.ru/books/yo/xcode.html)\n" "\n" "бЧФПТ ЧПЪДЕТЦЙЧБЕФУС ПФ ЧУСЮЕУЛЙИ ЗБТБОФЙК\n" "ОБДЈЦОПУФЙ РТПЗТБННЩ Й УОЙНБЕФ У УЕВС \n" "ПФЧЕФУФЧЕООПУФШ ЪБ ЧПЪНПЦОХА РПФЕТА ДБООЩИ РТЙ ЕЈ\n" "ЙУРПМШЪПЧБОЙЙ. фЕН ОЕ НЕОЕЕ, БЧФПТ РПУФБТБМУС\n" "УДЕМБФШ ЧУЈ ЧПЪНПЦОПЕ, ЮФПВЩ РПФЕТЙ ДБООЩИ НПЦОП\n" "ВЩМП ЙЪВЕЦБФШ.\n", /* msg_help */ "чЩЪПЧ: " XCODE" -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " "[in [out]]\n" "-E -h in English (don't forget to add -h or -H switch!)\n" "-v ЙОЖПТНБГЙС П ЧЕТУЙЙ\n" "-H рПМОБС УРТБЧЛБ, УРЙУПЛ 14 РПДДЕТЦЙЧБЕНЩИ ЛПДЙТПЧПЛ Й МЙГЕОЪЙС і-ware\n" "-d ДЧПКОБС РЕТЕЛПДЙТПЧЛБ (РТПВХКФЕ, ЕУМЙ РТПУФП ЛПНБОДБ '"XCODE"' ОЕ УТБВПФБМБ)\n" "-q ДЕЛПДЙТПЧБОЙЕ \"quoted-pritable\" УЙНЧПМПЧ, ЙУРПМШЪХЕНЩИ Ч MIME\n" "-l ДЕЛПДЙТПЧБОЙЕ html-хОЙЛПД ФЕЛУФБ (ЧТПДЕ Дима)\n" "-c ПРТЕДЕМЙФШ ЛПДЙТПЧЛХ Й ЧЩДБФШ ЕЈ Ч ЧЩИПДОПК ЖБКМ (РПДТПВОБС УРТБЧЛБ РП -H)\n" "-t РТПЙЪЧЕУФЙ unix2dos РТЕПВТБЪПЧБОЙЕ (РТЕЧТБФЙФШ LF Ч CR/LF) Ч DOS/WIN\n" "-p ТЕЦЙН ФТХВЩ (ФТЕВХЕФУС ФПМШЛП Ч DOS/Win ПЛТХЦЕОЙЙ)\n" "-s ТЕЦЙН silent --- ОЕ ЧЩЧПДЙФШ ЙОЖПТНБГЙА П ЛПДЙТПЧЛБИ\n" "еУМЙ ЧИПДОПК/ЧЩИПДОПК ЖБКМ ОЕ ХЛБЪБО, ЙУРПМШЪХЕФУС УФБОДБТФОЩК ЧЧПД/ЧЩЧПД.\n", /* msg_out */ "-%c ЧЩЧПДЙН Ч ЛПДЙТПЧЛЕ %-10s ", /* msg_forc */ "+%c ОБ ЧИПДЕ ЛПДЙТПЧЛБ %-10s \n", /* msg_defl */ " (РП ХНПМЮБОЙА) \n", /* msg_info */ "-%d ЧЩЧПД Ч ЛПДЙТПЧЛЕ %-10s +%d ЧИПДОБС ЛПДЙТПЧЛБ %-10s\n", /* msg_err_temp_file */ "оЕ НПЗХ УПЪДБФШ ЧТЕНЕООЩК ЖБКМ. оЕФ НЕУФБ ОБ ДЙУЛЕ?\n", /* msg_guessinp */ "хЗБДБОБ ЧИПДОБС ЛПДЙТПЧЛБ %s\n", /* msg_forceinp */ "ч ЛБЮЕУФЧЕ ЧИПДОПК ХУФБОПЧМЕОБ ЛПДЙТПЧЛБ %s\n", /* msg_outpenc */ "чЩИПДОБС ЛПДЙТПЧЛБ %s\n", /* msg_double_recode */ "дЧПКОБС РЕТЕЛПДЙТПЧЛБ: %s->%s, %s->%s\n", /* msg_erropenfile */ "оЕ НПЗХ ПФЛТЩФШ ЧЩИПДОПК ЖБКМ %s\n", /* msg_err_in_file */ "оЕ НПЗХ ПФЛТЩФШ ЧИПДОПК ЖБКМ %s\n", /* msg_cant_write_temp_file */ "оЕ НПЗХ РЙУБФШ ЧП ЧТЕНЕООЩК ЖБКМ. дЙУЛ РПМПО?\n", /* msg_pipe */ "дМС ЙУРПМШЪПЧБОЙС Ч ТЕЦЙНЕ ФТХВЩ ЪБРХУФЙФЕ РТПЗТБННХ У ПРГЙЕК -p\n", /* msg_tryhelp */ "рПРТПВХКФЕ ЪБРХУФЙФШ `"XCODE" -h' ДМС УРТБЧЛЙ РП РТПЗТБННЕ.\n", /* msg_uni_qp */ "оЕМШЪС ЙУРПМШЪПЧБФШ РЕТЕЛМАЮБФЕМЙ -q Й -l УПЧНЕУФОП.\n" "чПУРПМШЪХКФЕУШ ФТХВПК 'xcode -l|xcode -q' ДМС РПМХЮЕОЙС ЦЕМБЕНПЗП ТЕЪХМШФБФБ.\n", /* msg_conflict_force_inform */ "оЕДПРХУФЙНП ЙУРПМШЪПЧБОЙЕ ЛМАЮБ -c УПЧНЕУФОП У МАВЩН\n" "ЙЪ ЛМАЮЕК -l, +[awikm], +1, +2, ...\n", /* msg_wrong_argument */ "*** пыйвлб ч бтзхнеофе ртпзтбннщ ***\n", }; typedef enum{msg_descr, msg_encodings,msg_version,msg_help,msg_out, msg_forc,msg_defl,msg_info, msg_err_temp_file, msg_guessinp, msg_forceinp, msg_outpenc, msg_double_recode, msg_erropenfile,msg_err_in_file, msg_cant_write_temp_file, msg_pipe, msg_tryhelp,msg_uni_qp, msg_conflict_force_inform, msg_wrong_argument, msg_last} msg_id; char *msg(msg_id id){ assert(id<msg_last); if(Russian) return _rec(msgs_rus[id]); return _rec(msgs_eng[id]); } void print_version(void){ char *r; strcpy(VERSION,VERSIONR+11); r=strchr(VERSION,' '); *r=0; printf(msg(msg_version),VERSION); exit(ERROR_VERSION); } void print_short_help(void){ int j; printf(msg(msg_help)); for(j=0;j<NUMCOD;j++){ printf(msg(msg_out),encLetter[j], encoding_name[j]); if(j!=enc) printf("\n"); else printf(msg(msg_defl)); } for(j=0;j<NUMCOD;j++){ printf(msg(msg_forc),encLetter[j], encoding_name[j]); } } #define _STR(x) #x #define _XSTR(x) _STR(x) #define err(x) printf(" %2d %s\n",x,_XSTR(x)) void print_long_help(void){ int j; print_short_help(); printf(msg(msg_descr)); err(ERROR_OK); err(ERROR_VERSION); err(ERROR_HELP); err(ERROR_WRONG_ARGUMENT); err(ERROR_INFORM_ENCODING); err(ERROR_STAT_FILE); err(ERROR_OPEN_FILE_READ); err(ERROR_OPEN_FILE_WRITE); err(ERROR_WRITE_FILE); printf("\n"); printf(msg(msg_encodings)); for(j=0;j<TOTAL_ENCODING_NUMBER;j++){ printf(msg(msg_info), j+1,encoding_name[j],j+1,encoding_name[j]); } } #undef err unsigned char to_koi_recode_table[NUMCOD][128]={ { //dos 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, 128,129,130,131,132,133,134,135,136,137,186,139,140,141,142,143, 144,145,146,147,148,149,150,151,152,153,154,191,156,157,158,159, 160,161,162,176,164,165,166,167,168,169,170,171,172,173,174,175, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209, 179,163,'+','+','+','+','+','+',184,'+','+','+','+','+',190,' ' }, { //win '+','+', 39,'+', 34,'+','+','+','+','+','+', 39,'+','+','+','+', '+', 39, 39, 34, 34,'+','+','-','-','*','+', 39,'+','+','+','+', ' ','+','I','+','+','+','+','+',179,188,'E', 34,'+','+','*','I', 184,'+','i',199,'*','*','*','*',163,'N','e', 34,'j','S','s','i', 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, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209 }, { //koi8 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, 160,161,162,163,164,165,166,167,168,169,170,171,172,'-',174,175, 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, 192,193,194,195,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, 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 }, { //iso '+','+','+','+','+','+','+','+','+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+','+','+','+','+','+','+','+','+', '*',179,'*','*','*','*','*','*','*','*','*','*','*','*','*','*', 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, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209, '*',163,'*','*','*','*','*','*','*','*','*','*','*','*','*','*' }, { //mac 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, '*',184,'*','*','*','*','*','I','*','*','*','*','*','*','*','*', '*',179,177,178,'i','*',199,'J','E','e','I','i','*','*','*','*', 'j','S','*','*','f','*','*','*','*','*','*','*','*','*','*','s', '-','-', 34, 34, 39, 39,'*', 39,'*','*','*','*','N',163,179,209, 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,'*' } }; int letter_frequency[32]= { 125,1606,331,65,598,1714,22,356,168,1312,206,636,1050,658,1295,2259, 544,447,887,1049,1217,572,200,823,398,400,355,168,67,78,285,4 }; int work_recode_table[256]; // Added by KIV // Yes, we have Quoted-Printable... // Disabled by Dima Khmelev // No, no Quoted-Printable (very annoying when recode html files) int hasQP = 0; int getQP(int first, int second) { if (!isdigit(first)) first = toupper(first) - 'A' + 1 +'9'; if (!isdigit(second)) second = toupper(second) - 'A' + 1 +'9'; return (first-'0')*16 + (second-'0'); } int fput_recode_table[256]; unsigned long input_freq[256]; void fput_and_value_c(int c, FILE*f){ int i; input_freq[c]++; if(putc(fput_recode_table[c],f)==EOF){ fprintf(stderr,msg(msg_cant_write_temp_file)); fclose(f); exit(ERROR_WRITE_FILE); } } int compute_rating(unsigned long * input_freq, double*bestrating){ int c,i,j; double rating[NUMCOD]; int decide[NUMCOD]; for(i=0;i<NUMCOD;i++){ rating[i]=0; decide[i]=1; } for(c=128;c<256;c++) for(i=0; i<NUMCOD; i++) if(to_koi_recode_table[i][c-128]>=192) rating[i]+=(0.0+input_freq[c]) *letter_frequency[((int)to_koi_recode_table[i][c-128]-192)%32]; for(i=0; i<NUMCOD; i++) for(j=0; j<NUMCOD; j++) if(i!=j && rating[i]<rating[j]) decide[i]=0; for(i=NUMCOD-1; i>=0; i--) if(decide[i]){ if(bestrating) *bestrating=rating[i]; return i; } return 0; } void compute_rating_two(unsigned long * input_freq, int resenc, int *res_recode_table, int *res_fr,int *res_to,int *res_a){ int c,from,to,b_from,b_to,j; double rating[NUMCOD][NUMCOD]; int a[NUMCOD][NUMCOD]; static int wt[256]; static int wt1[256]; static unsigned long in_freq[256]; for(from=0;from<NUMCOD;from++){ for(to=0;to<NUMCOD;to++){ if(from==to){continue;} fill_recode_table(wt,from,to); for(j=0;j<256;j++) in_freq[wt[j]]=input_freq[j]; a[from][to]=compute_rating(in_freq,&(rating[from][to])); } } b_from=0,b_to=1; for(from=0;from<NUMCOD;from++) for(to=0;to<NUMCOD;to++) if((from!=to)&&(rating[b_from][b_to]<rating[from][to])) b_from=from, b_to=to; fill_recode_table(wt,b_from,b_to); fill_recode_table(wt1,a[b_from][b_to],resenc); for(j=0;j<256;j++){res_recode_table[j]=wt1[wt[j]];} *res_fr=b_from; *res_to=b_to; *res_a=a[b_from][b_to]; } void read_qp(FILE*in,FILE*out){ enum {scan, eq, dig} state; int c; int dig1; state=scan; for(;;){ c=fgetc(in); if(state==scan){ if(c==EOF){return;} if(c=='='){state=eq; continue;} fput_and_value_c(c,out); continue; } if(state==eq){ if(c==EOF){ fput_and_value_c('=', out); return;} if(isxdigit(c)){ dig1=c; state=dig; continue;} if(c=='\r'){//пВТБВПФЛБ дПУПЧУЛЙИ УФТПЛ. c=fgetc(in); if(c=='\n'){ state=scan; continue; } fput_and_value_c('=', out); fput_and_value_c('\r', out); fput_and_value_c(c, out); continue; } if(c=='\n'){state=scan; continue;} fput_and_value_c('=',out); fput_and_value_c(c,out); state=scan; continue; } if(state==dig){ if(c==EOF){ fput_and_value_c('=', out); fput_and_value_c(dig1, out); return;} if(isxdigit(c)){ int cc=getQP(dig1,c); fput_and_value_c(cc,out); state=scan; continue; } fput_and_value_c('=', out); fput_and_value_c(dig1, out); fput_and_value_c(c,out); state=scan; continue; } } } void read_unicode_html(FILE*in,FILE*out,int output_encoding){ static unsigned int is_iso_russian_letter[256]; static int recode_table[256]; static char digs[5]; enum {scan, amp, diez, dig} state; int dignum=0; int c; int i; fill_recode_table(recode_table,ISO8859_5,output_encoding); for(i=0;i<256;i++) is_iso_russian_letter[i]=0; for(i=0;encoding_alphabet[ISO8859_5][i];i++){ is_iso_russian_letter[encoding_alphabet[ISO8859_5][i]]=1; } state=scan; for(;;){ c=fgetc(in); if(state==scan){ if(c=='&'){state=amp; continue;} if(c==EOF){return;} putc(c,out); continue; } if(state==amp){ if(c=='#'){state=diez; continue;} putc('&',out); if(c==EOF){return;} putc(c,out); continue; } if(state==diez){ if(isdigit(c)){ digs[dignum++]=c; state=dig; continue; } putc('&', out); putc('#', out); if(c==EOF) return; putc(c,out); state=scan; continue; } if(state==dig){ if(isdigit(c)){ if(dignum>=4) goto dropdigs; digs[dignum++]=c; state=dig; continue; } if(c==';'){ int num; if(dignum<4) goto dropdigs; digs[dignum]=0; num=atoi(digs); if((num<0x401)||(num>0x451)) goto dropdigs; if(!is_iso_russian_letter[num-0x400+0xA0]) goto dropdigs; putc(recode_table[num-0x400+0xA0],out); dignum=0; state=scan; continue; } dropdigs: putc('&', out); putc('#', out); for(i=0;i<dignum;i++) putc(digs[i],out); dignum=0; if(c==EOF){return;} putc(c,out); state=scan; continue; } } } void read_file(FILE*in, FILE*out){ int c; while((c=fgetc(in))!=EOF) fput_and_value_c(c,out); } FILE* openout(char*outfname,FILE*out,char*wt){ if(outfname){ out=fopen(outfname,wt); if(!out){ fprintf(stderr,msg(msg_erropenfile),outfname); exit(ERROR_OPEN_FILE_WRITE); } } return out; } int do_recode(char*fname, char*outfname, int enc, int force, int chkQP, int unicode_html, int double_recode, char*wt, int samefile, int inform_encoding_only, int silent){ int c=0, a=0, i, j; int fr,to; //ЙУРПМШЪХАФУС РТЙ ДЧПКОПК РЕТЕЛПДЙТПЧЛЕ FILE *f,*out,*in; for(i=0;i<256;i++) input_freq[i]=0; # ifdef STDOUT_PROBLEM_MINGW // ч DOS/WIN32 УФБОДБТФОЩК ЧЩЧПД ПФЛТЩФ Ч ТЕЦЙНЕ text // рПЬФПНХ ФТЕВХЕФУС РЕТЕЛМАЮЕОЙЕ Ч ТЕЦЙН binary { out=fdopen(fileno(stdout),"wb"); if(out==NULL) out=stdout; in=fdopen(fileno(stdin),"rb"); if(in==NULL) in=stdin; } # else # if defined(STDOUT_PROBLEM_DOS) { setmode(fileno(stdout),O_BINARY); setmode(fileno(stdin),O_BINARY); out=stdout; in=stdin; } # else out=stdout; in=stdin; # endif //STDOUT_PROBLEM_DOS # endif //STDOUT_PROBLEM_MINGW if(fname) { in=fopen(fname,"rb"); if(!in){ fprintf(stderr,msg(msg_err_in_file),fname); return ERROR_OPEN_FILE_READ; } } fill_recode_table(fput_recode_table,0,0); if(force>=0){ fill_recode_table(fput_recode_table,force,enc); if(!silent){ if(!unicode_html){ fprintf(stderr,msg(msg_forceinp),encoding_name[force]); fprintf(stderr,msg(msg_outpenc),encoding_name[enc]); } if(unicode_html){ fprintf(stderr,msg(msg_forceinp),"html-unicode"); fprintf(stderr,msg(msg_outpenc),encoding_name[enc]); } } if(samefile){ if(NULL==(f=tmpfile())){ fprintf(stderr,msg(msg_err_temp_file)); return ERROR_OPEN_FILE_WRITE; } if(chkQP) read_qp(in,f); else if(unicode_html) read_unicode_html(in,f,enc); else read_file(in,f); fclose(in); rewind(f); out=openout(outfname,out,wt); while((c=getc(f))!=EOF){ putc(c,out); } fclose(f); fclose(out); }else { out=openout(outfname,out,wt); if(chkQP) read_qp(in,out); else if(unicode_html) read_unicode_html(in,out,enc); else read_file(in,out); fclose(in); fclose(out); } return ERROR_OK; } f=tmpfile(); if(f==NULL){ fprintf(stderr,msg(msg_err_temp_file)); return ERROR_OPEN_FILE_WRITE; } if(chkQP) read_qp(in,f); else read_file(in,f); fclose(in); if(double_recode){ compute_rating_two(input_freq,enc,work_recode_table,&fr,&to,&a); if(!silent){ fprintf(stderr,msg(msg_double_recode),encoding_name[fr],encoding_name[to], encoding_name[a],encoding_name[enc]); } }else{ a=compute_rating(input_freq,NULL); if(!silent){ fprintf(stderr,msg(msg_guessinp),encoding_name[a]); fprintf(stderr,msg(msg_outpenc),encoding_name[enc]); } fill_recode_table(work_recode_table,a,enc); } rewind(f); out=openout(outfname,out,wt); if(inform_encoding_only){ char *displayfname=fname?fname:"<<stdin>>"; if(double_recode) fprintf(out, "%s->%s, %s: %s\n", encoding_name[fr],encoding_name[to], encoding_name[a], displayfname); else fprintf(out, "%s: %s\n", encoding_name[a], displayfname); fclose(f); fclose(out); return ERROR_INFORM_ENCODING; } while((c=getc(f))!=EOF){ putc(work_recode_table[c],out); } fclose(f); fclose(out); return ERROR_OK; } int samebuf(struct stat *a,struct stat *b){ return (a->st_size==b->st_size) && (a->st_mtime==b->st_mtime); } int main(int argc,char ** argv) { char *wt="wb"; int force=-1; int chkQP=0; int samefile; int do_pipe=0; int inform_encoding_only=0; int silent=0; int double_recode=0; char *filename; char *outfname; int version=0,help=0,Help=0; int unicode_html=0; int I=0; determine_self_encoding(argv[0]); for(I=1;argc>I&& (*argv[I]=='+'||*argv[I]=='-' # ifdef D_ALT ||*argv[I]=='/' # endif //D_ALT );I++) { if(isdigit(argv[I][1])){ int code; if(sscanf(argv[I]+1,"%d",&code)!=1){ printf(msg(msg_wrong_argument)); print_short_help(); return ERROR_WRONG_ARGUMENT; } if((code<1)||(code>TOTAL_ENCODING_NUMBER)){ printf(msg(msg_wrong_argument)); print_short_help(); return ERROR_WRONG_ARGUMENT; } if(*argv[I]=='+') force=code-1; else enc=code-1; continue; } switch(argv[I][1]) { default: help=2; printf(msg(msg_wrong_argument)); goto exit_commad_line_parser; case 'e': case 'E': Russian=0; break; case 'v': version=1; break; case 'h': case '?': help=1; break; case 'H': Help=1; break; case 't': wt="wt"; break; case 'p': do_pipe=1; break; case 's': silent=1; break; case 'l': unicode_html=1; break; case 'd': double_recode=1; break; case 'c': inform_encoding_only=1; silent=1; break; case 'a': case 'A': if(*argv[I]=='+') force=0; else enc=0; break; case 'w': case 'W': if(*argv[I]=='+') force=1; else enc=1; break; case 'k': case 'K': if(*argv[I]=='+') force=2; else enc=2; break; case 'i': case 'I': if(*argv[I]=='+') force=3; else enc=3; break; case 'm': case 'M': if(*argv[I]=='+') force=4; else enc=4; break; case 'q': case 'Q': chkQP = 1; break; /* рП ПРГЙЙ -- РТЕЛТБЭБЕН УЛБОЙТПЧБФШ УРЙУПЛ БТЗХНЕОФПЧ */ case '-': if(strcmp(argv[I],"--")==0) I++; else { printf(msg(msg_wrong_argument)); help=2; } goto exit_commad_line_parser; } if(argv[I][2]) help=2; } exit_commad_line_parser: if(help) { print_short_help(); if(help==1) return ERROR_HELP; else return ERROR_WRONG_ARGUMENT; } if(Help) { print_long_help(); if(help==1) return ERROR_HELP; else return ERROR_WRONG_ARGUMENT; } if(version) print_version(); if(unicode_html&&chkQP){ fprintf(stderr,msg(msg_uni_qp)); return ERROR_WRONG_ARGUMENT; } if(unicode_html) force=ISO8859_5; if(inform_encoding_only&&(force>=0)){ fprintf(stderr,msg(msg_conflict_force_inform)); return ERROR_WRONG_ARGUMENT; } if (I + 2 < argc) { print_short_help(); } else if(I == argc){ # ifdef D_ALT if(!do_pipe){ fprintf(stderr,msg(msg_pipe)); fprintf(stderr,msg(msg_tryhelp)); return ERROR_HELP; } # endif filename=NULL; outfname=NULL; samefile=0; }else if (I + 1 == argc) { filename=argv[I]; outfname=NULL; samefile=0; }else if (I + 2 == argc) { struct stat inbuf; struct stat outbuf; filename=argv[I]; outfname=argv[I+1]; if(stat(filename,&inbuf)<0){ perror(filename); return ERROR_STAT_FILE; } if(stat(outfname,&outbuf)<0) samefile=0; else samefile=samebuf(&inbuf,&outbuf); } return do_recode(filename,outfname, enc,force,chkQP,unicode_html,double_recode,wt, samefile,inform_encoding_only,silent); } @ 4.0 log @дПВБЧМЕО ЛМАЮ -d ДМС ПРТЕДЕМЕОЙС ДЧПКОПК РЕТЕЛПДЙТПЧЛЙ. уНЕОБ ОПНЕТБ ЧЕТУЙЙ ОБ 4.0 @ text @d45 5 d174 1 a174 1 #define REVISION "$Revision: 3.7 $" d485 1 d575 18 d608 3 a610 2 "Usage:\n" " "XCODE" [-E] -[hH?v] -[qltps]-[wkaim1234567890] +[wkaim1234567890] [in [out]]\n" d617 1 d653 3 d689 1 a689 1 "пЫЙВЛЙ, УЧСЪБООЩЕ УП ЧЪБЙНПДЕКУФЧЙЕН Ч ПРЕТБГЙПООПК УЙУФЕНПК ЙНЕАФ\n" d703 18 d737 2 a738 2 "йУРПМШЪПЧБОЙЕ: \n" " "XCODE" -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " d746 1 d782 3 d795 4 a798 1 msg_pipe, msg_tryhelp,msg_uni_qp,msg_wrong_argument,msg_last} msg_id; d840 1 d845 1 d1137 3 a1139 1 int samefile, int silent){ d1141 1 d1236 1 a1236 2 if(double_recode){ int fr,to; d1255 18 a1272 1 a1278 1 d1293 1 d1313 1 d1317 1 d1319 1 a1319 1 } d1338 1 d1375 5 d1414 1 a1414 1 samefile,silent); @ 3.7 log @йУРТБЧМЕО ЗМАЛ, ЧПЪОЙЛБЧЫЙК РТЙ ЧЩЪПЧЕ xcode in out У ПФУХФУФЧХАЭЙН ЖБКМПН out (ЧЩДБЧБМБУШ ПЫЙВЛБ). @ text @d2 1 a2 1 /* Written in 2002--2003 by D.V.Khmelev */ d6 1 d10 1 a10 1 /* bcc.exe -DD_KOI xcode.c #Borland C compiler */ d45 6 d169 1 a169 1 #define REVISION "$Revision: 3.6 $" d540 1 a540 1 "options -q and -t)\n" d588 2 a589 2 "-H print help, list of 14 (fourteen) encodings supported\n" " and view YO-ware license\n" d612 2 d644 1 a644 1 "ОЕ ЧПУРПМШЪПЧБМЙУШ ДПРПМОЙФЕМШОЩНЙ ПРГЙСНЙ -q Й -t).\n" d695 2 a696 2 "-H рПМОБС УРТБЧЛБ, УРЙУПЛ 14 (ЮЕФЩТОБДГБФЙ) РПДДЕТЦЙЧБЕНЩИ \n" " ЛПДЙТПЧПЛ Й МЙГЕОЪЙС і-ware\n" d719 2 d741 2 a742 1 msg_forceinp, msg_outpenc, msg_erropenfile,msg_err_in_file, d799 1 a799 1 unsigned char recode_table[NUMCOD][128]={ a858 2 double rating[NUMCOD]; d873 1 d877 1 a877 5 if(c>=128) for(i=0; i<NUMCOD; i++) if(recode_table[i][c-128]>=192) rating[i]+=letter_frequency [((int)recode_table[i][c-128]-192)%32]; d885 55 d1078 2 a1079 1 int enc, int force, int chkQP, int unicode_html, d1083 1 a1083 1 int decide[NUMCOD]; d1085 1 d1087 1 a1087 1 // ч DOS/WIN32 УФБОДБТФОЩК ЧЩИПД ПФЛТЩФ Ч ТЕЦЙНЕ text a1163 1 for(i=0; i<NUMCOD; i++){ decide[i]=1; rating[i]=0;} d1177 9 d1187 5 a1191 9 for(i=0; i<NUMCOD; i++) for(j=0; j<NUMCOD; j++) if(i!=j && rating[i]<rating[j]) decide[i]=0; for(i=NUMCOD-1; i>=0; i--) if(decide[i]) a=i; if(!silent) { fprintf(stderr,msg(msg_guessinp),encoding_name[a]); fprintf(stderr,msg(msg_outpenc),encoding_name[enc]); a1193 1 fill_recode_table(work_recode_table,a,enc); d1220 1 d1260 1 d1299 1 a1299 1 }else if(I == argc){ d1330 1 a1330 1 enc,force,chkQP,unicode_html,wt, @ 3.6 log @ъБТБВПФБМ РТПЪТБЮОП ВЙОБТОЩК УФБОДБТФОЩК ЧЧПД/ЧЩЧПД РПД дпу-ПЛОПН. чЕТУЙА mingw ОЕ РТПЧЕТСМ, ОП, РП ЙДЕЕ ФПЦЕ ДПМЦОБ ТБВПФБФШ. @ text @d44 5 d162 1 a162 1 #define REVISION "$Revision: 3.5 $" d1254 4 a1257 5 if(stat(outfname,&outbuf)<0){ perror(outfname); return ERROR_STAT_FILE; } samefile=samebuf(&inbuf,&outbuf); @ 3.5 log @фЕРЕТШ stdout ХУФБОБЧМЙЧБЕФУС Ч ВЙОБТОЩК ТЕЦЙН Ч DOS/WIN ПЛТХЦЕОЙЙ. йОБЮЕ ДПВБЧМСМУС ЛПД \x0D Ч ЛПОГЕ ЛБЦДПК УФТПЛЙ (\x0D\x0A). @ text @d34 6 a39 2 #if defined(__MSDOS__) || defined(_WIN32) || defined(WIN32)|| defined(__WIN32__) #define STDOUT_DOS d44 6 d151 1 a151 1 #ifdef STDOUT_DOS d154 1 a154 1 #endif//STDOUT_DOS d157 1 a157 1 #define REVISION "$Revision: 3.4 $" a1006 7 # ifdef STDOUT_DOS // ч DOS/WIN32 УФБОДБТФОЩК ЧЩИПД ПФЛТЩФ Ч ТЕЦЙНЕ text // рПЬФПНХ ФТЕВХЕФУС РЕТЕЛМАЮЕОЙЕ Ч ТЕЦЙН binary else if(out==stdout){ setmode(fileno(stdout),O_BINARY); } # endif d1016 23 a1038 1 FILE *f,*out=stdout,*in=stdin; @ 3.4 log @йУРТБЧМЕОБ ПЫЙВЛБ Ч ЧЩДБЮЕ ДЙБЗОПУФЙЛЙ Ч РТЕДЩДХЭЕК ЧЕТУЙЙ. дПВБЧМЕОЩ ДПРПМОЙФЕМШОЩЕ ЛПДЩ ЧЩИПДБ (УН. xcode -H, ТБЪДЕМ лпдщ чщипдб) дПВБЧМЕО РЕТЕЛМАЮБФЕМШ --, РП ЛПФПТПНХ РТЕТЩЧБЕФУС ТБЪВПТ ЛПНБОДОПК УФТПЛЙ. дПВБЧМЕОП УППВЭЕОЙЕ ПВ ПЫЙВЛЕ Ч БТЗХНЕОФБИ РТПЗТБННЩ, ЕЦЕМЙ ФБЛБС РТПУИПДЙФ. @ text @d34 4 d40 13 d141 4 d147 1 a147 1 #define REVISION "$Revision: 3.3 $" d997 7 @ 3.3 log @РЕТЕЖПТНБФЙТПЧБМ ЛПННЕОФБТЙЙ @ text @d36 3 d126 1 a126 1 #define REVISION "$Revision: 3.2 $" d419 27 a445 8 enum { E_OK=0, E_OPEN_FILE_READ, E_OPEN_FILE_WRITE, E_OPEN_FILE_TMP, E_WRITE_FILE, E_WRONG_ENCODING_NUMBER, E_UNICODE_QP_TOGETHER, d448 1 d489 2 d499 2 d506 13 a518 1 "\n", d520 6 d549 1 a549 1 "-t do unix2dos transformation (convert LF to CR/LF)\n" d582 2 d591 2 d601 2 d608 13 a620 1 "\n", d622 7 d654 1 a654 1 "-t РТПЙЪЧЕУФЙ unix2dos РТЕПВТБЪПЧБОЙЕ (РТЕЧТБФЙФШ LF Ч CR/LF)\n" d687 2 d695 2 a696 2 msg_cant_create_temp_file, msg_cant_write_temp_file, msg_pipe, msg_tryhelp,msg_uni_qp, msg_last} msg_id; d710 1 a710 1 exit(E_OK); d726 3 d734 9 d749 1 d838 1 a838 1 exit(E_WRITE_FILE); d973 1 a973 1 exit(E_OPEN_FILE_WRITE); d990 1 a990 1 return E_OPEN_FILE_READ; d1011 1 a1011 1 return E_OPEN_FILE_WRITE; d1039 1 a1039 1 return E_OK; d1047 1 a1047 1 return E_OPEN_FILE_WRITE; d1078 1 a1078 1 return E_OK; d1112 1 a1112 1 print_short_help(); return E_WRONG_ENCODING_NUMBER; d1115 1 a1115 1 print_short_help(); return E_WRONG_ENCODING_NUMBER; d1121 4 a1124 1 default: help=2; goto exit_commad_line_parser; d1141 7 a1147 1 case '-': if(strcmp(argv[I],"--")==0) I++; else help=2; d1153 8 a1160 3 if(help) { print_short_help(); return help-1; } if(Help) { print_long_help(); return Help-1; } d1165 1 a1165 1 return E_UNICODE_QP_TOGETHER; d1177 1 a1177 1 exit(E_OK); d1194 1 d1197 2 a1198 3 samefile=0; }else{ samefile=samebuf(&inbuf,&outbuf); d1200 2 a1202 1 @ 3.2 log @уПЧУЕН ЪБВЩМ: ФЕРЕТШ РТПЗТБННБ ЧЩИПДЙФ У ОЕОХМЕЧЩН ЛПДПН РТЙ ЛБЛПК-МЙВП ПЫЙВЛЕ. уБНЙ ПЫЙВЛЙ НПЦОП РПУНПФТЕФШ Ч ФЕЛУФЕ: E_OK Й Ф.Д. @ text @d36 6 d43 2 a44 4 // фЕРЕТШ ПРГЙЙ ЧЙДБ /h ДПРХУФЙНЩ ФПМШЛП РТЙ ЧЩИПДОПК ЛПДЙТПЧЛЙ D_ALT // // рП ПРГЙЙ -- УЛБОЙТПЧБОЙЕ БТЗХНЕОФПЧ ПУФБОБЧМЙЧБЕФУС. уМЕДХАЭЙЕ // БТЗХНЕОФЩ ТБУУНБФТЙЧБАФУС ЛБЛ ЙНЕОБ ЖБКМПЧ. d46 3 d123 1 a123 1 #define REVISION "$Revision: 3.1 $" @ 3.1 log @фЕРЕТШ ПРГЙЙ ЧЙДБ /h ДПРХУФЙНЩ ФПМШЛП РТЙ ЧЩИПДОПК ЛПДЙТПЧЛЙ D_ALT рП ПРГЙЙ -- УЛБОЙТПЧБОЙЕ БТЗХНЕОФПЧ ПУФБОБЧМЙЧБЕФУС. уМЕДХАЭЙЕ БТЗХНЕОФЩ ТБУУНБФТЙЧБАФУС ЛБЛ ЙНЕОБ ЖБКМПЧ. @ text @d36 7 d116 1 a116 1 #define REVISION "$Revision: 3.0 $" @ 3.0 log @уНЕОБ ЧЕТУЙЙ ОБ 3.0 ЛПНБОДБ: ci -f3.0 xcode.c @ text @d36 4 d109 1 a109 1 #define REVISION "$Revision: 2.10 $" d402 9 a410 1 d609 2 a610 2 msg_cant_write_temp_file,msg_pipe,msg_tryhelp,msg_uni_qp, msg_last} msg_id; d624 1 a624 1 exit(0); d739 1 a739 1 exit(1); d874 1 a874 1 exit(1); d891 1 a891 1 return 1; d910 4 a913 1 f=tmpfile(); d940 1 a940 1 return 1; d948 1 a948 1 return 1; d979 1 a979 1 return 0; d1004 6 a1009 1 for(I=1;argc>I&&(*argv[I]=='+'||*argv[I]=='-'||*argv[I]=='/');I++) { d1013 1 a1013 1 print_short_help(); return 0; d1016 1 a1016 1 print_short_help(); return 0; d1022 1 a1022 1 default: help=2; goto do_help; d1038 3 d1044 1 a1044 1 do_help: d1052 1 a1052 1 return 1; d1064 1 a1064 1 exit(0); d1089 3 a1091 2 do_recode(filename,outfname,enc,force,chkQP,unicode_html,wt,samefile,silent); return 0; @ 2.10 log @рПРТБЧМЕОБ ПЫЙВЛБ Ч ЛПДЙТПЧЛЕ "mac", ОБ ЛПФПТХА МАВЕЪОП ХЛБЪБМ уЕТЗЕК уЛПФОЙЛПЧ (ОЕЧЕТОЩК ЛПД ВХЛЧЩ ``С''). йУРПМШЪХЕНБС ВЙВМЙПФЕЛБ РЕТЕУФБОПЧПЮОПК РЕТЕЛПДЙТПЧЛЙ У http://www.rusf.ru/books/yo/encoding.html РПМХЮЙМБ ОБЪЧБОЙЕ SRECODE.C Й СЧОП ЧЩДЕМЕОБ Ч ФЕЛУФЕ РТПЗТБННЩ ЛПННЕОФБТЙСНЙ. @ text @d36 9 d105 1 a105 1 #define REVISION "$Revision: 2.9 $" @ 2.9 log @фЕЛУФ РТЙЧЕДЈО Л УФБОДБТФХ C99 (РП НПДХМА РТЕДХРТЕЦДЕОЙК П ЛПОЧЕТФБГЙЙ НЕЦДХ ЪОБЛПЧЩНЙ/ВЕЪЪОБЛПЧЩНЙ ВХЛЧБНЙ). вПТПФШУС У ЬФЙН НПЦОП СЧОЩН ЪБДБОЙЕН РТЕПВТБЪПЧБОЙС ХЛБЪБФЕМЕК, ОП ОЕ ОХЦОП Ч УЙМХ ХУМПЦОЕОЙС ЛПДБ. @ text @d36 6 d96 1 a96 1 #define REVISION "$Revision: 2.8 $" d104 1 d106 2 a107 8 /* рПДРТПЗТБННЩ ОБ СЪЩЛЕ уЙ, ПВЕУРЕЮЙЧБАЭЙЕ РЕТЕУФБОПЧПЮОХА РЕТЕЛПДЙТПЧЛХ */ /* 14 ЛПДЙТПЧПЛ ТХУУЛЙИ ВХЛЧ ДТХЗ Ч ДТХЗБ. */ /* Functions for C, providing exchange transformation of */ /* 14 russian encodings to each other. */ /* бЧФПТ ЛПДБ: д.ч.иНЕМЈЧ, нБТФ 2002 */ /* рПДТПВОПУФЙ: http://www.rusf.ru/books/yo */ d109 40 a148 14 /* уМЕДХАЭЙК ЛПД СЧМСЕФУС і-ware, йНЕООП, ЕЗП НПЦОП УЧПВПДОП ТБУРТПУФТБОСФШ */ /* НПДЙЖЙГЙТПЧБФШ, Й ДБЦЕ ДЙЪБУУЕНВМЙТПЧБФШ ЛБЛ Ч ДЧПЙЮОПН ЧЙДЕ, ФБЛ Й Ч */ /* ЙУИПДОПН ФЕЛУФЕ. пДОБЛП, ЙУРПМШЪХС ЬФПФ ЛПД, ЧЩ ДПМЦОЩ ЙУРПМШЪПЧБФШ ВХЛЧХ */ /* і ЧП ЧУЕИ ФЕЛУФБИ, ЛПФПТЩЕ ОБВЙТБЕФЕ ОБ ЛПНРШАФЕТБИ: ОБЮЙОБС У */ /* ЬМЕЛФТПООЩИ РЙУЕН Й ЪБЛБОЮЙЧБС ЛТХРОПК РТПЪБЙЮЕУЛПК ЖПТНПК. */ /* This code was written by D.V.Khmelev, March 2002 */ /* More information at http://www.rusf.ru/books/yo */ /* The following code is YO-ware. YO-ware means that you can freely copy, */ /* modify and disassemble it in binary and/or source text. */ /* However, if you use this program code, you should use Russian letter YO */ /* in all texts in Russian you type in computer from e-mails */ /* to novells. */ d185 1 d195 1 d205 1 d215 1 d225 1 d229 1 a229 1 "\375\376\377" d235 1 d245 1 d255 1 d265 1 d275 1 d285 1 d295 1 d305 1 d315 1 d326 2 a327 1 int *full_encoding_list(encoding_t encoding, int table[]){ d343 3 a345 1 int *fill_recode_table(int table[],encoding_t from, encoding_t to){ d356 3 a358 1 unsigned char *srecode(unsigned char *s, encoding_t from, encoding_t to){ d370 4 a373 1 unsigned char *srecode2(unsigned char *s, unsigned char *t, encoding_t from, encoding_t to){ d386 5 d453 7 a459 1 "(see http://www.rusf.ru/books/yo/xcode.html for details)\n", d531 8 a538 1 "(РПДТПВОПУФЙ УН. http://www.rusf.ru/books/yo/xcode.html)\n", @ 2.8 log @рПРТБЧМЕОП РТЕДХРТЕЦДЕОЙЕ "suspicious pointer conversion" @ text @d36 3 d90 1 a90 1 #define REVISION "$Revision: 2.7 $" d637 1 a637 1 }; @ 2.7 log @дПВБЧМЕОП ДЕЛПДЙТПЧБОЙЕ html-хОЙЛПДЕООЩИ ФЕЛУФПЧ (ЧТПДЕ Дима) @ text @d36 4 d87 1 a87 1 #define REVISION "$Revision: 2.6 $" d703 1 a703 1 static unsigned int recode_table[256]; @ 2.6 log @йОЖПТНБГЙС П ТЕЦЙНЕ silent ДПВБЧМЕОБС Ч УРТБЧЛХ @ text @d2 1 a2 1 /* Written by 2002 D.V.Khmelev */ d36 3 d83 1 a83 1 #define REVISION "$Revision: 2.5 $" d395 1 a395 1 " "XCODE" -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] [in [out]]\n" d401 1 d432 3 d474 1 d505 3 d514 1 a514 1 msg_cant_write_temp_file,msg_pipe,msg_tryhelp, d697 72 d786 2 a787 1 int enc, int force, int chkQP, char*wt, d805 8 a812 2 fprintf(stderr,msg(msg_forceinp),encoding_name[force]); fprintf(stderr,msg(msg_outpenc),encoding_name[enc]); d818 2 d830 1 a830 1 }else if(outfname){ d834 2 d901 1 a901 1 d928 1 d943 7 d983 1 a983 1 do_recode(filename,outfname,enc,force,chkQP,wt,samefile,silent); @ 2.5 log @дПВБЧМЕО ТЕЦЙН silent РП ПРГЙЙ -s @ text @d36 3 d80 1 a80 1 #define REVISION "$Revision: 2.4 $" d400 1 d469 1 @ 2.4 log @йУРТБЧМЕОП ОЕРТБЧЙМШОПЕ РПЧЕДЕОЙЕ РТЙ ПДОПН ЙНЕОЙ ЖБКМБ @ text @d36 3 d77 1 a77 1 #define REVISION "$Revision: 2.3 $" d699 1 a699 1 int samefile){ d715 4 a718 2 fprintf(stderr,msg(msg_forceinp),encoding_name[force]); fprintf(stderr,msg(msg_outpenc),encoding_name[enc]); d766 1 d798 1 d828 1 d876 1 a876 1 do_recode(filename,outfname,enc,force,chkQP,wt,samefile); @ 2.3 log @фЕРЕТШ РТПЗТБННБ ЛПНРЙМЙТХЕФУС bc 3.1 ВЕЪ РТЕДХРТЕЦДЕОЙК Й ПЫЙВПЛ. @ text @d36 3 d851 2 a852 2 outfname=filename; samefile=1; @ 2.2 log @тЕЦЙН ФТХВЩ ФЕРЕТШ РП ХНПМЮБОЙА ФПМШЛП Ч дПУЕ/чЙОДБИ. (дПУ/Win ПРТЕДЕМСЕФУС РП РЕТЕЛМАЮБФЕМА D_ALT) @ text @d36 4 d71 1 a71 1 #define REVISION "$Revision: 2.1 $" d377 1 a377 1 " " SELF_URL_BASE "/encoding.html\n", d380 1 a380 1 "(see http://www.rusf.ru/books/yo/encoding.html for details)\n", d444 1 a444 1 " " SELF_URL_BASE "/encoding.html\n", d447 1 a447 1 "(РПДТПВОПУФЙ УН. http://www.rusf.ru/books/yo/encoding.html)\n", d500 1 a500 1 void print_version(){ d510 1 a510 1 void print_short_help(){ d523 1 a523 1 void print_long_help(){ d602 1 a602 1 int chkQP = 0; d638 1 a638 1 } d717 1 a717 1 fclose(in); d752 1 a752 1 d756 1 a756 1 d778 1 a778 1 return (a->st_size==b->st_size) d785 2 a786 1 int c=0, force=-1; d792 1 a792 1 d801 1 a801 1 print_short_help(argv[0]); return 0; d804 1 a804 1 print_short_help(argv[0]); return 0; d810 1 a810 1 default: help=1; break; d816 1 a816 1 case 't': wt="wt"; break; d825 1 a825 1 if(argv[I][2]) help=1; d827 4 a831 2 if(help) print_short_help(); if(Help) print_long_help(); @ 2.1 log @*** empty log message *** @ text @d36 3 d67 1 a67 1 #define REVISION "$Revision: 2.0 $" d829 1 a829 1 //# ifdef D_ALT d835 1 a835 1 //# endif @ 2.0 log @уНЕОБ ОПНЕТБ ЧЕТУЙЙ ОБ 2.0 @ text @d36 3 d41 1 a41 1 // ЙНЕЕФУС ПРГЙС У ФТХВПК -p, Б РПД дПУПЧУЛПК ЛПОУПМШЛХ РП ХНПМЮБОЙА d64 1 a64 1 #define REVISION "$Revision: 1.14 $" @ 1.14 log @ъОБЮЙФЕМШОЩЕ ХМХЮЫЕОЙС РП УТБЧОЕОЙА У РТЕДЩДХЭЕК ЧЕТУЙЕК. фЕРЕТШ ЙНЕЕФУС ПРГЙС У ФТХВПК -p, Б РПД дПУПЧУЛПК ЛПОУПМШЛХ РП ХНПМЮБОЙА РТПЗТБННБ ЧЩЧПДЙФ ЛТБФЛХА РПНПЭШ. еУМЙ ЧИПДОБС ЛПДЙТПЧЛБ ХЦЕ ХЛБЪБОБ, ФП РТПЗТБННБ ОЕ ПРТЕДЕМСЕФ ЕЈ БЧФПНБФЙЮЕУЛЙ, Б УТБЪХ РТПЙЪЧПДЙФ РЕТЕЛПДЙТПЧЛХ. еДЙОУФЧЕООЩК ФПОЛЙК НПНЕОФ: ЛПЗДБ ОБДП РЕТЕЛПДЙТПЧБФШ ЖБКМ ОБ НЕУФЕ. ч ЬФПН УМХЮБЕ ЙУРПМШЪХЕФУС ЧТЕНЕООЩК ЖБКМ ОБ ДЙУЛЕ, ЛБЛ Й ЧУЕЗДБ. @ text @d36 10 d61 1 a61 1 #define REVISION "$Revision: 1.13 $" d421 1 a421 1 "ОЕ ЧПУРПМШЪПЧБМЙУШ ДПРПМОЙФЕМШОЩНЙ ПРГЙСНЙ -q Й -t),\n" @ 1.13 log @дПВБЧЙМ Revision @ text @a0 2 /* If you want to output Russian messages in KOI8, uncomment definition */ /* of D_KOI (see later) !!! */ d4 6 a9 10 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <assert.h> #define VERSION "1.2" #define REVISION "$Revision: $" #define SELF_URL_BASE "http://www.rusf.ru/books/yo" #define SELF_URL SELF_URL_BASE "/src/xcode.c" d11 1 a11 2 // чЩИПДОБС ЛПДЙТПЧЛБ РП ХНПМЮБОЙА // Output encoding by default d36 3 d43 16 d343 2 a344 1 "RESTORE source file by backward conversion\n" d358 3 a361 3 "Program %s version " VERSION " written by D.V.Khmelev\n" "(see http://www.rusf.ru/books/yo/encoding.html for details)\n" "\n" d363 1 a363 1 " %s -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] [in [out]]\n" d365 1 d369 2 d394 4 d410 2 a411 1 "чпууфбопчйфш ЙУИПДОЩК ЖБКМ ПВТБФОЩН РТЕПВТБЪПЧБОЙЕН\n" d425 3 a428 3 "рТПЗТБННХ %s ЧЕТУЙС "VERSION" ОБРЙУБМ д.ч.иНЕМЈЧ\n" "(РПДТПВОПУФЙ УН. http://www.rusf.ru/books/yo/encoding.html)\n" "\n" d430 1 a430 1 " %s -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " d433 1 d437 2 d462 4 d469 1 a469 1 typedef enum{msg_descr, msg_encodings,msg_help,msg_out, d472 1 a472 1 msg_cant_write_temp_file, d480 9 d490 1 a490 2 void print_short_help(char *selfname){ char * c = selfname + strlen(selfname); d493 1 a493 3 while( (c != selfname) && (*c != '\\') && (*c != '/')) c--; if (c != selfname) c++; printf(msg(msg_help),c,c); d503 1 a503 1 void print_long_help(char *selfname){ d506 1 a506 1 print_short_help(selfname); d660 6 a665 39 int main(int argc,char ** argv) { int c=0, a=0, i, j, force=-1; int decide[NUMCOD]; FILE *f,*out=stdout,*in=stdin; int I=0; determine_self_encoding(argv[0]); for(I=1;argc>I&&(*argv[I]=='+'||*argv[I]=='-'||*argv[I]=='/');I++) { if(isdigit(argv[I][1])){ int code; if(sscanf(argv[I]+1,"%d",&code)!=1){ print_short_help(argv[0]); return 0; } if((code<1)||(code>TOTAL_ENCODING_NUMBER)){ print_short_help(argv[0]); return 0; } if(*argv[I]=='+') force=code-1; else enc=code-1; continue; } switch(argv[I][1]) { default: print_short_help(argv[0]); return 1; case 'e': case 'E': Russian=0; break; case 'h': case '?': print_short_help(argv[0]); return 0; case 'H': print_long_help(argv[0]); return 0; case 'a': case 'A': if(*argv[I]=='+') force=0; else enc=0; break; case 'w': case 'W': if(*argv[I]=='+') force=1; else enc=1; break; case 'k': case 'K': if(*argv[I]=='+') force=2; else enc=2; break; case 'i': case 'I': if(*argv[I]=='+') force=3; else enc=3; break; case 'm': case 'M': if(*argv[I]=='+') force=4; else enc=4; break; case 'q': case 'Q': chkQP = 1; break; d668 2 d671 8 a678 2 if(I<argc) { in=fopen(argv[I++],"rb"); d680 1 a680 11 fprintf(stderr,msg(msg_err_in_file),argv[I-1]); print_short_help(argv[0]); return 1; } } if(I<argc){ out=fopen(argv[I++],"wt"); if(!out){ fprintf(stderr,msg(msg_erropenfile),argv[I-1]); print_short_help(argv[0]); d691 24 a714 5 if(chkQP) read_qp(in,out); else read_file(in,out); fclose(in); fclose(out); d745 2 d754 90 @ 1.12 log @оБЮБФ МПЗ ЙЪНЕОЕОЙК @ text @d13 1 d43 3 @ 1.11 log @*** empty log message *** @ text @d40 4 @ 1.10 log @рТПЧЕТЕОБ ПТЖПЗТБЖЙС БОЗМЙКУЛПЗП @ text @d12 1 a12 1 #define VERSION "1.0" d368 2 a369 1 d397 1 a397 1 "рТПЗТБННХ %s ЧЕТУЙС 1.0 ОБРЙУБМ д.ч.иНЕМЈЧ\n" d548 2 d557 1 a557 1 if(putc(c,f)==EOF){ d668 24 a713 3 if(force>=0) fprintf(stderr,msg(msg_forceinp),encoding_name[a=force]); a718 8 if(I<argc) { out=fopen(argv[I++],"wt"); if(!out){ fprintf(stderr,msg(msg_erropenfile),argv[I-1]); print_short_help(argv[0]); return 1; } } @ 1.9 log @тХУУЛБС ПТЖПЗТБЖЙС РПРТБЧМЕОБ @ text @d1 1 a1 1 /* If you want to output russian messages in KOI8, uncomment definition */ d3 1 a3 1 /* Russian encodings with care to letter YO from www.rusf.ru/yo */ d60 1 a60 1 /* However, if you use this program code, yo should use Russian letter YO */ d327 1 a327 1 "However, if you use this program, yo should use Russian letter YO\n" d329 1 a329 1 "to novells.\n" d334 1 a334 1 "automatical recognition is supported for first 5 encodings only.\n" d346 1 a346 1 "-q quoted-pritable decoding (useful for decoding MIME-files)\n" @ 1.8 log @уППВЭЕОЙС РЕТЕДЕМБОЩ РПД ЙДЕОФЙЖЙЛБФПТЩ. рПРТБЧМЕО ЧЩЧПД Quoted-Printable @ text @d373 2 a374 2 "(пУОПЧБОП ОБ РТПЗТБННЕ, ЛПФПТХА ОБРЙУБМ бОДТЕЕК ч. мХЛШСОПЧ 14.05.1997,\n" "Й ЛПФПТХА РПФПН РТБЧЙМЙ лЙТЙММ тПФНЙУФТПЧУЛЙК Й йЗПТШ ч. лТБУУЙЛПЧ)\n" @ 1.7 log @ъДЕУШ ОЕЧЕТОБ ПВТБВПФЛБ Quoted-Pritable. оБ ЧУСЛЙК УМХЮБК УПИТБОСА РЕТЕД РЕТЕДЕМЛПК @ text @d10 1 d16 24 a281 9 // чЩИПДОБС ЛПДЙТПЧЛБ РП ХНПМЮБОЙА // Output encoding by default //#define D_KOI #ifdef D_KOI #define OUTPUT_ENC 2 // МЙВП "KOI". // or koi8 #else #define OUTPUT_ENC 0 // МЙВП "БМШФЕТОБФЙЧОБС" (Ф.Е. ДПУПЧУЛБС) //either cp866 #endif d306 1 a306 1 static char temps[1000]; d313 2 a314 1 char *descr= d330 38 a367 1 "\n"; d369 1 d371 2 a372 1 char *descrR= a387 32 "\n"; char *encodings= "The following switches could be used for input " "and output encoding. \nHowever, " "automatical recognition is supported for first 5 encodings only.\n" "More information can be found at \n" " " SELF_URL_BASE "/encoding.html\n"; char *encodingsR= "уМЕДХАЭЙЕ РЕТЕЛМАЮБФЕМЙ НПЦОП ЙУРПМШЪПЧБФШ ДМС ЧИПДОПК Й ЧЩИПДОПК " "ЛПДЙТПЧПЛ. \nпДОБЛП, " "БЧФПНБФЙЮЕУЛПЕ ПРТЕДЕМЕОЙЕ ЛПДЙТПЧЛЙ ТБВПФБЕФ ФПМШЛП ДМС РЕТЧЩИ 5.\n"; char * help[]={ "Program %s version " VERSION " written by D.V.Khmelev\n", "(see http://www.rusf.ru/books/yo/encoding.html for details)\n", "\n", "Usage:\n" " %s -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " "[input [output]]\n", "-E in English (don't forget to add -h or -H switch!)\n", "-H print help, list of 14 (fourteen) encodings supported\n", " and view YO-ware license\n", "-q quoted-pritable decoding (useful for decoding MIME-files)\n", "If input/output files are not specified, the standard input/output is used.\n", 0 }; char * helpR[]={ "рТПЗТБННХ %s ЧЕТУЙС 1.0 ОБРЙУБМ д.ч.иНЕМЈЧ\n", "(РПДТПВОПУФЙ УН. http://www.rusf.ru/books/yo/encoding.html)\n", d389 10 d401 5 a405 5 "[input [output]]\n", "-E in English (don't forget to add -h or -H switch!)\n", "-H рПМОБС РПНПЭШ, УРЙУПЛ 14 (ЮЕФЩТОБДГБФЙ) РПДДЕТЦЙЧБЕНЩИ \n" " ЛПДЙТПЧПЛ Й МЙГЕОЪЙС і-ware\n", "-q ДЕЛПДЙТПЧБОЙЕ \"quoted-pritable\" УЙНЧПМПЧ, ЙУРПМШЪХЕНЩИ Ч MIME\n", d407 22 a428 1 0 d432 11 a445 10 char **phelp=(Russian?helpR:help); char *out=Russian? "-%c ЧЩЧПДЙН Ч ЛПДЙТПЧЛЕ %-10s ": "-%c to set %-10s output"; char *forc=Russian? "+%c ОБ ЧИПДЕ ЛПДЙТПЧЛБ %-10s \n": "+%c to force %-10s input\n"; char *defl=Russian? " (РП ХНПМЮБОЙА) \n": " (default)\n"; d450 1 a450 1 for(j=0;phelp[j];j++) printf(_rec(phelp[j]),c); d452 1 a452 1 printf(_rec(out),encLetter[j], encoding_name[j]); d454 1 a454 1 else printf(_rec(defl)); d457 1 a457 1 printf(_rec(forc),encLetter[j], encoding_name[j]); a461 5 char *dsk=Russian?descrR:descr; char *encs=Russian?encodingsR:encodings; char *info=Russian? "-%d ЧЩЧПД Ч ЛПДЙТПЧЛЕ %-10s +%d ЧИПДОБС ЛПДЙТПЧЛБ %-10s\n": "-%d to set %-10s output +%d to set %-10s input\n"; d464 2 a465 2 printf(_rec(dsk)); printf(_rec(encs)); d467 1 a467 1 printf(_rec(info), d532 2 d542 2 a543 2 if (first > '9') first = toupper(first) - 'A' + 1 +'9'; if (second > '9') second = toupper(second) - 'A' + 1 +'9'; d547 69 a619 1 double rating[NUMCOD]; d658 1 a658 1 in=fopen(argv[I++],"rt"); d660 1 a660 4 char *errfile=Russian? "оЕ НПЗХ ПФЛТЩФШ ЧИПДОПК ЖБКМ %s\n": "Unable to open input file %s\n"; fprintf(stderr,_rec(errfile),argv[I-1]); d669 1 a669 4 char *errfile=Russian? "оЕ НПЗХ УПЪДБФШ ЧТЕНЕООЩК ЖБКМ. оЕФ НЕУФБ ОБ ДЙУЛЕ?\n": "Unable to create input file. No free space on disk?\n"; fprintf(stderr,_rec(errfile)); a671 24 while((c=getc(in))!=EOF) { //c_old=c; // Added by KIV if (chkQP && (c == '=')) { //Maybe, QP? int q1 = getc(in); if (!isxdigit(q1)) { if (hasQP && ((q1 == '\r')||(q1 == '\n'))) { q1 = getc(in); if ((q1 == '\r')||(q1 == '\n')) continue; }; ungetc(q1,in); } else { int q2 = getc(in); if (!isxdigit(q2)) { ungetc(q2,in); ungetc(q1,in); } else { c = getQP(q1,q2); hasQP = 1; }; } }; d673 5 a677 8 if(c>=128) for(i=0; i<NUMCOD; i++) if(recode_table[i][c-128]>=192) rating[i]+=letter_frequency [((int)recode_table[i][c-128]- 192)%32]; fputc(c,f); } a684 1 d686 1 a686 8 char *guessinp=Russian? "хЗБДБОБ ЧИПДОБС ЛПДЙТПЧЛБ %s\n":"Guessed input encoding: %s\n"; char *forceinp=Russian? "ч ЛБЮЕУФЧЕ ЧИПДОПК ЧЩОХЦДЕООП ЙУРПМШЪХЕФУС ЛПДЙТПЧЛБ %s\n": "Forced input encoding: %s\n"; char *outpenc=Russian? "чЩИПДОБС ЛПДЙТПЧЛБ %s\n":"Output encoding: %s\n"; fprintf(stderr,_rec(guessinp),encoding_name[a]); d688 1 a688 1 fprintf(stderr,_rec(forceinp),encoding_name[a=force]); d690 1 a690 1 fprintf(stderr,_rec(outpenc),encoding_name[enc]); d698 1 a698 4 char *errfile=Russian? "оЕ НПЗХ ПФЛТЩФШ ЧЩИПДОПК ЖБКМ %s\n": "Unable to open output file %s\n"; fprintf(stderr,_rec(errfile),argv[I-1]); d704 2 a705 2 while((c=fgetc(f))!=EOF){ fputc(work_recode_table[c],out); @ 1.6 log @дПВБЧЙМ РТЕДХРТЕЦДЕОЙЕ, ЮФПВЩ У ЙУРПМШЪПЧБОЙЕН РЕТЕЛМАЮБФЕМС -E ОЕ ЪБВЩЧБМЙ РЙУБФШ -h ЙМЙ -H @ text @d331 1 a331 1 "ОБЮЙООБС У ЬМЕЛФТПООЩИ РЙУЕН Й ЪБЛБОЮЙЧБС ЛТХРОПК РТПЪБЙЮЕУЛПК ЖПТНПК.\n" d600 1 a600 1 "хЗБДБОБС ЧИПДОБС ЛПДЙТПЧЛБ %s\n":"Guessed input encoding: %s\n"; @ 1.5 log @дПВБЧМЕО ЧЩЧПД РПНПЭЙ РТЙ ПЫЙВЛЕ ПФЛТЩФЙС ЖБКМБ @ text @d353 1 a353 1 "-E help in English\n", d368 1 a368 1 "-E help in English\n", @ 1.4 log @рПРТБЧМЕОБ ПТЖПЗТБЖЙЮЕУЛБС ПЫЙВЛБ Ч і-ЛПННЕОФБТЙЙ @ text @d1 2 a6 1 #include <assert.h> d258 4 a261 3 //#define D_ALT #ifdef D_ALT #define OUTPUT_ENC 0 // МЙВП "БМШФЕТОБФЙЧОБС" (Ф.Е. ДПУПЧУЛБС) d263 2 a264 1 #define OUTPUT_ENC 2 // МЙВП "KOI". d357 1 d372 1 d538 8 a545 1 assert(in!=0); d550 7 a556 1 if(f==NULL){ perror("\"tmpfile\""); exit(1);} d617 8 a624 1 assert(out!=0); @ 1.3 log @фЕРЕТШ ЧЩИПДОБС ЛПДЙТПЧЛБ УППВЭЕОЙК ОЕ ЪБЧЙУЙФ ПФ РЕТЕЛМАЮБФЕМЕК ЛПНБОДОПК УФТПЛЙ @ text @d26 1 a26 1 /* і ЧП ЧУЕИ ФЕЛУФБИ, ЛПФПТЩЕ ОБВЙТБЕФЕ ОБ ЛПНРШАФЕТБИ: ОБЮЙООБС У */ @ 1.2 log @чЕТУЙС 1.0 @ text @d257 1 d259 1 a259 1 int enc=0; // МЙВП "БМШФЕТОБФЙЧОБС" (Ф.Е. ДПУПЧУЛБС) d261 1 a261 1 int enc=2; // МЙВП "KOI". d264 3 d290 1 a290 1 return srecode2(temps,s,self_encoding,enc); d348 1 a348 1 " %s -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " d362 1 a362 1 " %s -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " d482 1 a482 1 inline int getQP(int first, int second) d491 1 a491 1 int c=0, a=0, c_old, i, j, force=-1; d510 1 a510 1 (*argv[I]=='+'?force:enc)=code-1; d517 2 a518 2 case 'h': case '?': print_short_help(argv[0]); d522 5 a526 5 case 'a': case 'A': (*argv[I]=='+'?force:enc)=0; break; case 'w': case 'W': (*argv[I]=='+'?force:enc)=1; break; case 'k': case 'K': (*argv[I]=='+'?force:enc)=2; break; case 'i': case 'I': (*argv[I]=='+'?force:enc)=3; break; case 'm': case 'M': (*argv[I]=='+'?force:enc)=4; break; d540 1 a540 1 c_old=c; d548 1 a548 1 if ((q1 == '\r')||(q1 == '\n')) d563 1 a563 1 d580 11 a590 3 fprintf(stderr,"Guessed input encoding: %s\n",encoding_name[a]); if(force>=0) fprintf(stderr,"Forced input encoding: %s\n",encoding_name[a=force]); d592 2 a593 1 fprintf(stderr,"Output encoding: %s\n",encoding_name[enc]); d607 1 @ 1.1 log @Initial revision @ text @d1 3 d10 28 a37 1 /* Russian encodings with care to letter YO from www.rusf.ru/yo */ d39 2 a40 2 ALT=0, WIN_CP1251, d42 1 a42 1 GOSTCII, d56 2 a57 2 "alt", /* ALT */ "win-cp1251", /* WIN_CP1251 */ d59 1 a59 1 "iso8859-5", /* GOSTCII */ d72 1 a72 1 /* ALT */ d81 1 a81 1 /* WIN_CP1251 */ d99 1 a99 1 /* GOSTCII */ d227 1 a227 1 unsigned char *recode(unsigned char *s, encoding_t from, encoding_t to){ d239 12 d254 3 a256 1 // чЩИПДОБС ЛПДЙТПЧЛБ d258 1 a258 1 int enc=0; d260 1 a260 1 int enc=2; d263 26 a288 1 char encLetter[]={'a','w','k','i','m'}; d290 48 d340 2 a341 6 "This program tries to determine input document encoding\n", "and to convert it into a desired one.\n" "The important feature of this program is ONE-TO-ONE conversion,\n", "which prevents you from damaging your file. If conversion is\n", "incorrect or if you even converted a binary file, you can always\n", "RESTORE source file by backward conversion\n", d343 13 a355 3 "Written by D.Khmelev, 17.03.2002\n", "(Based on a program written originally by Andrey V. Lukyanov, May 14, 1997,\n", "and updated later by Cyril Rotmistrovsky and Igor V. Krassikov)\n", d357 2 a358 1 "Usage: %s -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] " d360 4 a363 2 "-H print full help on 14 encodings ", "-q to enable quoted-pritable decoding\n", d367 2 d371 10 d382 1 d385 1 a385 1 for(j=0;help[j];j++) printf(help[j],c); d387 1 a387 1 printf("-%c to set %-10s output",encLetter[j], encoding_name[j]); d389 1 a389 1 else printf(" (default)\n"); d392 1 a392 1 printf("+%c to force %-10s input\n",encLetter[j], encoding_name[j]); d397 6 d404 2 a405 5 printf("The following switches could be used for input " "and output encoding. \nHowever, " "automatical recognition is supported for first 5 encodings only.\n" "More information can be found at \n" " http://www.rusf.ru/books/analysis/yo/encoding.html\n"); d407 1 a407 1 printf("-%d to set %-10s output +%d to set %-10s input\n", d495 3 a497 1 for(I=1;argc>I&&(*argv[I]=='+'||*argv[I]=='-');I++) { d511 2 @