home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
-
- #define FALSE 0
- #define TRUE 1
-
- struct
- {
- short write_pos,
- read_pos;
- char keys [0x40];
- } kbd_buffer = {0, 0, ""};
-
- show_buffer()
- {
- short loop;
-
- printf("key_buffer [");
- for (loop = 0;loop < 20;loop ++)
- {
- printf("%02x", kbd_buffer.keys [loop]);
- if (loop < 19)
- printf(",");
-
- }
- printf("]\n");
-
- for (loop = 0;loop < kbd_buffer.read_pos;loop ++)
- printf(" ");
- printf(" R\n");
-
- for (loop = 0;loop < kbd_buffer.write_pos;loop ++)
- printf(" ");
- printf(" W\n");
-
-
- }
-
- char char_conv( charackter)
- char charackter;
- {
- short bit_8;
-
- bit_8 = charackter & 0x80;
- if ((charackter & 0x7F) > 0x5F)
- charackter -= 0x20;
-
- charackter |= bit_8;
- if (charackter == 0x8A)
- charackter = 0x8D;
-
- return charackter;
- }
-
- char take_char()
- {
- char charackter;
-
- if (kbd_buffer.write_pos != kbd_buffer.read_pos)
- charackter = kbd_buffer.keys [kbd_buffer.read_pos++];
- else
- charackter = getc( stdin);
-
- kbd_buffer.read_pos &= 0x3F;
-
- return (char_conv( charackter) );
- }
-
- char_take_back( tkn)
- char tkn;
- {
-
- kbd_buffer.keys [kbd_buffer.write_pos++] = tkn;
-
- kbd_buffer.write_pos &= 0x3F;
- }
-
- short char_check()
- {
- return (chrcheck() || (kbd_buffer.write_pos != kbd_buffer.read_pos) );
- }
-
- short touch_char( value)
- short *value;
- {
- short char_flag;
-
- *value &= 0x7F;
- char_flag = FALSE;
- if (char_check() )
- {
- if (kbd_buffer.write_pos != kbd_buffer.read_pos)
- *value = char_conv( kbd_buffer.keys [kbd_buffer.read_pos]) | 0x80;
-
- else
- {
- *value = char_conv( getc( stdin) );
- char_take_back( *value);
- }
-
- char_flag = TRUE;
- }
- return char_flag;
- }
-
- skip_if_char()
- {
- /* can miss charackter if Pr1me is bissy so don't take chrcheck() */
- if (kbd_buffer.write_pos != kbd_buffer.read_pos)
- take_char();
- }
-