[OT] C-Frage
Jan-Benedict Glaw
jbglaw at lug-owl.de
Thu Feb 20 16:47:02 CET 2003
On Thu, 2003-02-20 15:53:26 +0100, Florian Lohoff <flo at rfc822.org>
wrote in message <20030220145326.GB21810 at paradigm.rfc822.org>:
> On Thu, Feb 20, 2003 at 03:08:23PM +0100, Jan-Benedict Glaw wrote:
> >
> > Nein. Ich creiere ein Array, das exakt zwei Werte beinhalten soll:
> >
> > a[0] == 'S';
> > a[1] == 'l';
> a[2] == \0x0;
>
> i=strlen(a);
>
> Aber bevor wir weiter raten sag doch mal welches problem du
> loesen willst.
Also - aufmerksame lkml-Leser wissen, daß ein Morsecode-Treiber für
panic()-Meldungen im Anflug ist. Früher hatte der mal ein char
*morsecodes[], indem alle Morsecodes wirklich als Strings d'rinstanden.
Doof - braucht viel Speicher. Also wirden die Strings in einzenle Bytes
umgewandelt (ein Minus ist ein gesetztes Bit, ein Punkt ein nicht
gesetztes Bit). Dann braucht man nur noch ein unsigned char pro
Morsealphabets-Buchstaben. Das ist natürlich nicht mehr lesbar, weil es
nur noch 'ne Hex-Tabelle ist. Also dachte ich mir - anderer Ansatz:
#define IS_DASH(letter, shift) \
(((letter) == '-')? 1 << (shift): 0)
#define MORSE(length, morse) \
((1 << (length)) | IS_DASH((morse)[0], 5) \
| IS_DASH((morse)[1], 4) \
| IS_DASH((morse)[2], 3) \
| IS_DASH((morse)[3], 2) \
| IS_DASH((morse)[4], 1) \
| IS_DASH((morse)[5], 0))
#define MORSE0 (0)
#define MORSE1(letter, code) MORSE(1, "....." (code))
#define MORSE2(letter, code) MORSE(2, "...." (code))
#define MORSE3(letter, code) MORSE(3, "..." (code))
#define MORSE4(letter, code) MORSE(4, ".." (code))
#define MORSE5(letter, code) MORSE(5, "." (code))
#define MORSE6(letter, code) MORSE(6, "" (code))
Diese kleinen Monster bauen daraus dann die Hex-Zahlen so, wie sie nun
in der Tabelle stehen. Das könnte man dann (in lesbar) so nutzen:
static unsigned char morsecodes[] = {
MORSE2('A', ".-"),
MORSE4('B', "-..."),
MORSE4('C', "-.-."),
MORSE3('D', "-.."),
...
};
Das funktioniert alles - wenn man morsecodes[] in eine Funktion
hineinpackt - also auf den Stack. Aber das will ich nicht, der
Kernel-Stack ist immer zu klein:-)
MfG, JBG
--
Jan-Benedict Glaw jbglaw at lug-owl.de . +49-172-7608481
"Eine Freie Meinung in einem Freien Kopf | Gegen Zensur
fuer einen Freien Staat voll Freier Bürger" | im Internet!
Shell Script APT-Proxy: http://lug-owl.de/~jbglaw/software/ap2/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20030220/d6adc891/attachment.sig>
More information about the Linux
mailing list