binux-wl/kernel/araclar/input.c

272 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "../headerlar/input.h"
#include "../headerlar/print.h"
#include "../headerlar/sleep.h"
#include "../headerlar/string.h"
char empty[256];
#define DFT(value)
static inline uint8_t _inb(uint16_t port) {
uint8_t ret;
asm volatile ( "inb %1, %0"
: "=a"(ret)
: "Nd"(port) );
return ret;
}
char* input_character(void) {
while (1) {
switch(_inb(0x60)) {
case 0x0b: //sayılar
print_str("0");
sleep(0x02000000);
return "0";
case 0x02:
print_str("1");
sleep(0x02000000);
return "1";
case 0x03:
print_str("2");
sleep(0x02000000);
return "2";
case 0x04:
print_str("3");
sleep(0x02000000);
return "3";
case 0x05:
print_str("4");
sleep(0x02000000);
return "4";
case 0x06:
print_str("5");
sleep(0x02000000);
return "5";
case 0x07:
print_str("6");
sleep(0x02000000);
return "6";
case 0x08:
print_str("7");
sleep(0x02000000);
return "7";
case 0x09:
print_str("8");
sleep(0x02000000);
return "8";
case 0x0a:
print_str("9");
sleep(0x02000000);
return "9";
case 0x10: //harfler
print_str("q");
sleep(0x02000000);
return "q";
case 0x11:
print_str("w");
sleep(0x02000000);
return "w";
case 0x12:
print_str("e");
sleep(0x02000000);
return "e";
case 0x13:
print_str("r");
sleep(0x02000000);
return "r";
case 0x14:
print_str("t");
sleep(0x02000000);
return "t";
case 0x15:
print_str("y");
sleep(0x02000000);
return "y";
case 0x16:
print_str("u");
sleep(0x02000000);
return "u";
case 0x18:
print_str("o");
sleep(0x02000000);
return "o";
case 0x19:
print_str("p");
sleep(0x02000000);
return "p";
case 0x1e:
print_str("a");
sleep(0x02000000);
return "a";
case 0x1f:
print_str("s");
sleep(0x02000000);
return "s";
case 0x20:
print_str("d");
sleep(0x02000000);
return "d";
case 0x21:
print_str("f");
sleep(0x02000000);
return "f";
case 0x22:
print_str("g");
sleep(0x02000000);
return "g";
case 0x23:
print_str("h");
sleep(0x02000000);
return "h";
case 0x24:
print_str("j");
sleep(0x02000000);
return "j";
case 0x25:
print_str("k");
sleep(0x02000000);
return "k";
case 0x26:
print_str("l");
sleep(0x02000000);
return "l";
case 0x17:
print_str("i");
sleep(0x02000000);
return "i";
case 0x2c:
print_str("z");
sleep(0x02000000);
return "z";
case 0x2d:
print_str("x");
sleep(0x02000000);
return "x";
case 0x2e:
print_str("c");
sleep(0x02000000);
return "c";
case 0x2f:
print_str("v");
sleep(0x02000000);
return "v";
case 0x30:
print_str("b");
sleep(0x02000000);
return "b";
case 0x31:
print_str("n");
sleep(0x02000000);
return "n";
case 0x32:
print_str("m");
sleep(0x02000000);
return "m";
case 0x0C: //özel karakterler
print_str("-");
sleep(0x02000000);
return "-";
case 0x0D:
print_str("=");
sleep(0x02000000);
return "=";
case 0x1A:
print_str("[");
sleep(0x02000000);
return "[";
case 0x1B:
print_str("]");
sleep(0x02000000);
return "]";
case 0x27:
print_str(";");
sleep(0x02000000);
return ";";
case 0x33:
print_str(",");
sleep(0x02000000);
return ",";
case 0x34:
print_str(".");
sleep(0x02000000);
return ".";
case 0x35:
print_str("/");
sleep(0x02000000);
return "/";
case 0x28:
print_str("'");
sleep(0x02000000);
return "'";
case 0x29:
print_str("`");
sleep(0x02000000);
return "`";
case 0x4c:
print_str("5");
sleep(0x02000000);
return "5";
case 0x37:
print_str("*");
sleep(0x02000000);
return "*";
case 0x4a:
print_str("-");
sleep(0x02000000);
return "-";
case 0x4e:
print_str("+");
sleep(0x02000000);
return "+";
case 0x0f:
print_str(" ");
sleep(0x02000000);
return " ";
case 0x39:
print_str(" ");
sleep(0x02000000);
return " ";
case 0x1C: //enter
print_str("\n");
sleep(0x02000000);
return "0x1C";
case 0x0E: //backspace
print_str("");
sleep(0x02000000);
return "0x0E";
default: // If nothing matches with the cases
continue;
}
}
}
char* input(char* output DFT('')) {
static int line = 0;
static char result[256];
static char* alinan;
memset(result,0,256);
print_str(output);
while (1) {
alinan = input_character();
if (alinan == "0x1C") { //enter
line = 0;
alinan = NULL;
return result;
}
if (alinan == "0x0E") { //backspace
if (!memcmp(result,empty,256) == 0) {
result[strlen(result)] = '\0';
print_str((char*) strlen(result));
line--;
clear(1);
}
continue;
}
result[line] = alinan[0];
line++;
}
}