void keyboardHandler(registers_t regs) { unsigned char scancode; scancode = inb(0x60); if (scancode & 0x80) { // key release unsigned char newSc = scancode - 128; if (newSc == 42 || newSc == 54) { mK.lShift = 0; } } else { if (kbdus[scancode] == '\b') { monitorBackSpace(); return; } else if (kbdus[scancode] == '\n') { monitorWrite("\n"); if (readingInput) readingInput = 0; return; } if (mK.lShift) monitorPut(upperChar(kbdus[scancode])); else monitorPut(kbdus[scancode]); if (readingInput && (scancode != 42 && scancode != 54)) { if (!mK.lShift) tempBuffer[bufferCount] = kbdus[scancode]; else tempBuffer[bufferCount] = upperChar(kbdus[scancode]); bufferCount++; } else if (getchFlag && (scancode != 42 && scancode != 54)) { if (!mK.lShift) getchChar = kbdus[scancode]; else getchChar = upperChar(kbdus[scancode]); getchFlag = 0; } if (scancode == 42 || scancode == 54) { // shift keys mK.lShift = 1; } } }
TString strUpper(const TString& s){ TString str = ""; if (s.isEmpty()) return str; char* dummy = (char*)malloc(s.length()+1); if (!dummy) return str = s; for (int i = 0; i <= s.length(); i++){ dummy[i] = upperChar(s[i]); } str = (const char*)dummy; free(dummy); return str; }