/* ---------------------------------------------------- * Function: scrn_puts * * Prints a string on the screen. * --------------------------------------------------*/ void scrn_puts(char *str){ unsigned char *stru = (unsigned char *) str; while(*stru != 0){ scrn_putc(*stru); stru++; } }
/* ---------------------------------------------------- * Function: kb_handler * --------------------------------------------------*/ void kb_handler(void *r){ unsigned char c = kb_read(); if(c & 0x80){ /* key release */ c &= 0x7F; /* get rid of the key release bit */ /* Shift */ if(c == 42 || c == 54){ kb_flags &= ~KBF_SHIFT; } /* CTL */ else if(c == 29 || c == 128+29){ kb_flags &= ~KBF_CTL; } /* ALT */ else if(c == 56 || c == 128+56){ kb_flags &= ~KBF_ALT; /* TODO: separate Alt and AltGr * */ } /* CAPSLOCK */ else if(c == 58){ kb_flags &= ~KBF_CAPS; } /* TODO: SUP (Logo Key) */ } /* key press */ /* Shift */ else if(c == 42 || c == 54){ kb_flags |= KBF_SHIFT; } /* CTL */ else if(c == 29 || c == 128+29){ kb_flags |= KBF_CTL; } /* ALT */ else if(c == 56 || c == 128+56){ kb_flags |= KBF_ALT; } /* CAPSLOCK */ else if(c == 58){ kb_flags |= KBF_CAPS; } /* TODO: SUP (Logo Key) */ else{ if(kb_flags & KBF_SHIFT){ c = kb_layout_sh[c]; } else{ c = kb_layout[c]; } unsigned char i; if(kb_print_to_screen){ for( i=0 ; i<buffer_pos ; i++){ scrn_putc(kb_buffer[i]); kb_buffer[i] = 0; } buffer_pos = 0; scrn_putc((char) c); } else{ if(buffer_pos >= KB_BUFFER_SIZE){ strcpy(kb_err, "Keyboard buffer full."); } else{ kb_buffer[buffer_pos] = (char) c; buffer_pos++; } } } }