Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: Суров печат на кирилица върху Матричен принер


  • Subject: Re: lug-bg: Суров печат на кирилица върху Матричен принер
  • From: "Doncho N. Gunchev" <mr700@xxxxxxxxxxxxx>
  • Date: Fri, 26 Nov 2004 02:12:59 +0200

On 2004-11-25 (Thursday) 12:19, Peter Pentchev wrote:
> 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);
>   }

Хайде да го направим и двупосочно, имайки в предвид че изваждането на 64
в интервала 192..255 сваля 6-ти бит, а добавянето на 64 към интервала
128..191 го вдига /обратното конвертиране/ :)

#include <stdio.h>
int main(void) { // MIK <=> CP-1251 encoding swap
    short int w; // GCC 3.4 reserves 2 bytes here, int is ok too
    while ((w = getchar()) != -1) { // more data?
        if (w > 127)   // are we in the 'cyrilic' area
            w ^= 64;   // bits... are the magic
        putchar(w);
    }
    return 0;
}

gcc -s -Os -Wall -o dos2win dos2win.c # 2992 bytes :)

-- 
Regards,
  Doncho N. Gunchev    Registered Linux User #291323 at counter.li.org
  GPG-Key-ID: 1024D/DA454F79                        http://pgp.mit.edu
  Key fingerprint = 684F 688B C508 C609 0371  5E0F A089 CB15 DA45 4F79
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.