On Thu, Nov 25, 2004 at 09:59:50AM +0200, Nikolay Mitev wrote:
> Здравейте
> 
> Хайде и аз да се обадя, въпреки че малко оффтопик.
[snip]

> Да не говорим, че може да се поопрости малко:
> 
> #include <stdio.h>
> /*
> (c) Skelet (G. Georgiev) in terms of GNU GPL
> Converts cp1251 -> DOS cyrillic.
> */
> 
> int main()
> {
> unsigned char w;
> unsigned char First = 0xc0;
> unsigned char Last  = 0xff;
> while (!feof(stdin)) {
>   w = getchar();
>   if ((w >= First) && (w <= Last)) w -= 64;
>   putchar(w);
> }
> return 0;
> }

Мдаааа.. и без да искам да се заяждам или нещо такова, има още едно
дребно нещо, което се вижда доста често в такива програмки :)  По
принцип в C getchar() изобщо не връща символ (char), а си връща съвсем
истинско цяло число със знак (демек int).  Това може да се използва за
опростявяане/ускоряване на главния цикъл в тази програмка, както и във
всяка друга, която чете символ по символ:

  int w;
  while ((w = getchar()) != -1) {
    if (...)
      w -= 64;
    putchar(w);
  }

Но и иначе ще си работи :)

А само като идея: такова преобразуване под на практика всяка Unix-like
OS може да се направи с tr(1):

  tr '[\300-\377]' '[\200-\277]' < source.txt > dest.txt

Тук вече пренасочването на вход/изхода е важно, защото tr(1) никога и
никъде не приема имена на файлове директно на командния си ред, а винаги
чете от стандартния вход и пише по стандартния изход.

А иначе Велин току-що ми обърна внимание на следното:

http://zadnik.org/velin/txt/dos2win.asm
http://zadnik.org/velin/txt/dos2win.com

Вярно, под Linux няма да свърши много работа, но все пак е интересно :)

Поздрави,
Петър

-- 
Peter Pentchev  [EMAIL PROTECTED]    [EMAIL PROTECTED]    [EMAIL PROTECTED]
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
I am not the subject of this sentence.

Attachment: pgphZvsGO4qDP.pgp
Description: PGP signature

Reply via email to