Не пей из копытца, козленочком станешь!

Страница ДКД (Страница провайдера) Линукс-Чайник (Оглавление)

2-е письмо


Date: Mon, 28 Jul 1997 17:11:12 +0400

From: "Nikita V. Youshchenko" yoush@cs.msu.su

To: Evgeniy Kazanov pmu@mail.iae.lt

Subject: Recoding from/to cp1251-koi8-alt

Нужен конвертер? Всегда пожалуйста. Ниже - текст на Си. Этот конвертер я использую в скриптах и в командной строке. Usage: recoder from to, читает stdin, пишет stdout, следит за переводами строк знает кодировки dos, win, koi Вообще-то глуповато, но обычно работает. Где-то у меня валялся скрипт, перекодирующий поддерево директорий. Если интересно - могу поискать.

#include 

#include 

char * dos_coding =

  "\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\241\242\243\244\245\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";

char * win_coding =

  "\300\301\302\303\304\305\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"

  "\340\341\342\343\344\345\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";

char * koi_coding =

  "\341\342\367\347\344\345\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"

  "\301\302\327\307\304\305\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";

char * get_table ( char * arg )

{

  if ( !strcmp ( arg, "dos" ) )  return dos_coding;

  if ( !strcmp ( arg, "win" ) )  return win_coding;

  if ( !strcmp ( arg, "koi" ) )  return koi_coding;

  return NULL;

}

int main ( int argc, char * argv[] )

{

  char *coding_from, *coding_to;

  int i,c;

  if ( argc != 3 || !(coding_from=get_table(argv[1])) ||

                    !(coding_to=get_table(argv[2])) )  {

    fprintf ( stderr, "Usage: recoder  \n"

                      "       codings may be \"koi\", \"win\",

\"dos\"\n" );

    return 1;

    }

  while ( (c=getchar()) != EOF )  {

    if ( c == 13 )  continue;

    if ( c == 10 )  {

      if ( coding_to != koi_coding )  putchar(13);

      putchar(10);

      }

    else  {

      for ( i=0;  coding_from[i] && (unsigned char)coding_from[i] !=

(unsigned char)c;  i++ );

      putchar ( coding_from[i] ? coding_to[i] : c );

      }

    }

  return 0;

}

Интересно, что это можно вставить в shell commands в nedit (если не знаете - это такой текстовый редактор, на мой взгляд очень удобен для программирования) Тогда там можно будет, например, перекодировать выделенный текст при помощи пункта меню. Так я борюсь со некоторыми коллегами по работе, которые ну никак не способны прожить без MustDie95

Нужно что еще - всегда пожалуйста.

Никита.

P.S. Давно хотел сам завести Linux-страничку, да что-то все некогда. Да и не особо умею я это -(