* Replying to a message in : OS2
Hi Sarah,
On 06-Feb-01, Sarah Nunez wrote to All:
Over in OS2 you asked:
Off-topic request:
I need someone to give me some ideas on how to make a case
statement respond to letters as well as numbers. (Plain vanilla
ANSI C.) Please contact me privately at the email address below
The easy way is (extract from working code):
int character;
/* The character is input into a char array called 'buffer' */
character = buffer[0] | 0x20; /* Lower case ASCII characters */
if ((character >= '0') && (character <= '9'))
character -= '0'; /* Numbers to 0 - 9 */
else
if (character >= 'a')
character -= 0x57; /* ASCII alpha to 0x0a et sequa */
else
character = 0x10; /* Or other default behaviour */
/* as required by the application */
switch (character)
{
case 0x00:
character = status_display (vdu,&buffer[1],24,FALSE);
break;
case 0x01:
character = operational_display (vdu);
break;
case 0x02: /* Lost/Damaged cards */
/* etc */
break;
default:
; /* Ignore anything else */
} /* End switch statement */
How does it work?
First I or the character with 0x20 - this has no effect on the numbers
and converts letters to lower case.
Then I offset the numbers (0x30 to 0x39) to run from 0x00
otherwise I convert all lower case letters to run from 0x0A.
Any other characters are converted to a default value (in my case 0x10
because I only use 0-9 and the letters a-f) if you want all the alpha characters this would be 'z' - 0x56 (I'm too lazy to work it out at
this time of night).
Then I have a value in 'character' which runs from 0 to my upper
switch limit, and off we go :-).
George
--- Terminate 5.00/Pro
* Origin: A country point under OS/2 (2:257/609.6)