From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
To: Andrew Rodland <arodland@noln.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] morse code panics for 2.5.62
Date: Tue, 18 Feb 2003 18:12:48 +0100 [thread overview]
Message-ID: <20030218171247.GA351@lug-owl.de> (raw)
In-Reply-To: <b2tl9c$48c$1@main.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 4069 bytes --]
On Tue, 2003-02-18 11:00:23 -0500, Andrew Rodland <arodland@noln.com>
wrote in message <b2tl9c$48c$1@main.gmane.org>:
> Jan-Benedict Glaw wrote:
> > On Tue, 2003-02-18 14:50:38 +0100, Tomas Szepe <szepe@pinerecords.com>
> > wrote in message <20030218135038.GA1048@louise.pinerecords.com>:
> >
> > This is the first time I really look at the code, so please forgive if I
> > talk about things where already a consens was given...
>
> >> +const unsigned char morsetable[] = {
> >> + 0122, 0, 0310, 0, 0, 0163, /* "#$%&' */
> >> + 055, 0155, 0, 0, 0163, 0141, 0152, 0051, /* ()*+,-./ */
> >> + 077, 076, 074, 070, 060, 040, 041, 043, 047, 057, /* 0-9 */
> >> + 0107, 0125, 0, 0061, 0, 0114, 0, /* :;<=>?@ */
> >> + 006, 021, 025, 011, 002, 024, 013, 020, 004, /* A-I */
> >> + 036, 015, 022, 007, 005, 017, 026, 033, 012, /* J-R */
> >> + 010, 003, 014, 030, 016, 031, 035, 023, /* S-Z */
> >> + 0, 0, 0, 0, 0154 /* [\]^_ */
> >> +};
>
> >
> > You're using a set bit for long and an unset bit for a short beep, don't
> > you? Storing these values in octal/as chars is quite low on memory
> > consumption, but I'd like to learn so I suggest:
>
> It's slightly more complicated than that:
> It's set bits for long, unset bits for short, and termination when the byte
> equals 0x01 (in other words, there's an extra set bit to the left of what
> we want). This lets us represent any variable-length morse of up to 7
> dits/dahs with a byte, which is cool because nothing is more than 6, that
> I've ever seen.
So you've got a leading I bit set. Morse alphabet has got 2, 3, 4, 5 or
6 dots/dashes, right? Then I vote for either having a macro like this:
#define MORSE(letter, len, b1, b2, b3, b4, b5, b6, b7) \
(1<<(len)| [all the shifting stuff here as of the last mail])
or let's have5 separate macros for all possible lengths (which are
possibly defined by using the above macro).
Really, I'm 100% for learning!
> The use of macros is an OK hack though, it reminds me of the nethack source.
> :)
>
> The reason someone proposed this in the first place is because I had had
>
> const unsigned char * morsetable [] = {
> ".-..-.", NULL, "...-..-"
>
> and so on in the initial revision of my patch, which is quite readable, but
> takes up a lot more space, and makes the code actually a bit messier too.
Oh, that's long, too...
What about
#define IS_DASH(letter, shift) \
((letter) == '-'? (1 << shift): (0 << shift))
MORSE(shift, b1, b2, b3, b4, b5, b6) \
(1 << (shift) | IS_DASH((b1), 5) | IS_DASH((b2), 4) \
| IS_DASH((b3), 3) | IS_DASH((b4), 2) \
| IS_DASH((b5), 1) | IS_DASH((b6), 0)
#define MORSE1(letter, b1) \
MORSE(1, '.', '.', '.', '.', '.', (b1)))
#define MORSE2(letter, b1, b2) \
MORSE(2, '.', '.', '.', '.', (b1), (b2)))
#define MORSE3(letter, b1, b2, b3) \
MORSE(3, '.', '.', '.', (b1), (b2), (b3))
#define MORSE4(letter, b1, b2, b3, b4) \
MORSE(4, '.', '.', (b1), (b1), (b3), (b4))
#define MORSE5(letter, b1, b2, b3, b4, b5) \
MORSE(5, '.', (b1), (b2), (b3), (b4), (b5))
#define MORSE6(letter, b1, b2, b3, b4, b5, b6) \
MORSE(6, (b1), (b2), (b3), (b4), (b5), (b6))
Then, you can have
const char morses[] = {
MORSE2('A', '.', '-'),
MORSE4('B', '-', '.', '.', '.'),
MORSE4('C', '-', '.', '-', '.'),
MORSE3('D', '-', '.', '.'),
MORSE1('E', '.'),
MORSE4('F', '.', '.', '-', '.')
...
};
That's going to take exactly the same memory in the compiled vmlinux
image, *and* it's really readable:-) Of course, gcc will optimize any
added "bloat" away...
MfG, JBG
--
Jan-Benedict Glaw jbglaw@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/
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2003-02-18 17:02 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-18 13:50 [PATCH] morse code panics for 2.5.62 Tomas Szepe
2003-02-18 14:17 ` Jan-Benedict Glaw
2003-02-18 16:00 ` Andrew Rodland
2003-02-18 17:12 ` Jan-Benedict Glaw [this message]
2003-02-18 22:49 ` Tomas Szepe
2003-02-19 9:07 ` Jan-Benedict Glaw
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030218171247.GA351@lug-owl.de \
--to=jbglaw@lug-owl.de \
--cc=arodland@noln.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.