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
============================================================================
|