#ifndef _key_c_ #define _key_c_ #include "elastro.h" int ReadKey(void) { int key,key1,key2,key3,key4; struct termios it; key = 0; key1 = 0; key2 = 0; key3 = 0; key4 = 0; tcgetattr(fileno(stdin),&it); it.c_lflag &= ~(ICANON); it.c_lflag &= ~(ECHO); it.c_iflag &= ~(INPCK|ISTRIP|IXON); it.c_oflag &= ~(OPOST); it.c_cc[VMIN] = 1; it.c_cc[VTIME] = 0; tcsetattr(fileno(stdin),TCSANOW,&it); key1 = fgetc(stdin); if(key1 == 27){ key2 = fgetc(stdin); if(key2 == 91){ key3 = fgetc(stdin); if(key3 == 91){ key4 = fgetc(stdin); if(key4 == 65)key = FN1; if(key4 == 66)key = FN2; if(key4 == 67)key = FN3; if(key4 == 68)key = FN4; if(key4 == 69)key = FN5; } if(key3 == 49){ key4 = fgetc(stdin); if(key4 == 55)key = FN6; if(key4 == 56)key = FN7; if(key4 == 126)key = HOME; } if(key3 == 50){ key4 = fgetc(stdin); if(key4 == 48)key = FN9; if(key4 == 49)key = FN10; if(key4 == 51)key = FN11; if(key4 == 52)key = FN12; if(key4 == 126)key = INS; } if(key3 == 51){ key4 = fgetc(stdin); if(key4 == 126)key = DEL; } if(key3 == 52){ key4 = fgetc(stdin); if(key4 == 126)key = END; } if(key3 == 53){ key4 = fgetc(stdin); if(key4 == 126)key = PGUP; } if(key3 == 54){ key4 = fgetc(stdin); if(key4 == 126)key = PGDN; } if(key3 == 65)key = UP; if(key3 == 68)key = LEFT; if(key3 == 67)key = RIGHT; if(key3 == 66)key = DOWN; } } tcgetattr(fileno(stdin),&it); it.c_lflag |= ICANON; it.c_lflag |= ECHO; it.c_iflag |= IXON; it.c_oflag |= OPOST; tcsetattr(fileno(stdin),TCSANOW,&it); if(key == 0){ if(key1 != 0){ if(key3 == 0){ if(key4 == 0)key = key1; } } } if(key == 10) key = ENTER; if(key == 127)key = BACKSPACE; if(key == 8) key = BACKSPACE; if(key == 9) key = TAB; return(key); } #ifdef OSX11 int ReadKey(void) { int key,key1,key2,key3,key4; struct termios it; key = 0; key1 = 0; key2 = 0; key3 = 0; key4 = 0; tcgetattr(fileno(stdin),&it); it.c_lflag &= ~(ICANON); it.c_lflag &= ~(ECHO); it.c_iflag &= ~(INPCK|ISTRIP|IXON); it.c_oflag &= ~(OPOST); it.c_cc[VMIN] = 1; it.c_cc[VTIME] = 0; tcsetattr(fileno(stdin),TCSANOW,&it); key1 = fgetc(stdin); if(key1 == 27){ key2 = fgetc(stdin); if(key2 == 91){ key3 = fgetc(stdin); if(key3 == 91){ key4 = fgetc(stdin); if(key4 == 65)key = FN1; if(key4 == 66)key = FN2; if(key4 == 67)key = FN3; if(key4 == 68)key = FN4; if(key4 == 69)key = FN5; } if(key3 == 49){ key4 = fgetc(stdin); if(key4 == 55)key = FN6; if(key4 == 56)key = FN7; if(key4 == 126)key = HOME; } if(key3 == 50){ key4 = fgetc(stdin); if(key4 == 48)key = FN9; if(key4 == 49)key = FN10; if(key4 == 51)key = FN11; if(key4 == 52)key = FN12; if(key4 == 126)key = INS; } if(key3 == 51){ key4 = fgetc(stdin); if(key4 == 126)key = DEL; } if(key3 == 52){ key4 = fgetc(stdin); if(key4 == 126)key = END; } if(key3 == 53){ key4 = fgetc(stdin); if(key4 == 126)key = PGUP; } if(key3 == 54){ key4 = fgetc(stdin); if(key4 == 126)key = PGDN; } if(key3 == 65)key = UP; if(key3 == 68)key = LEFT; if(key3 == 67)key = RIGHT; if(key3 == 66)key = DOWN; } } tcgetattr(fileno(stdin),&it); it.c_lflag |= ICANON; it.c_lflag |= ECHO; it.c_iflag |= IXON; it.c_oflag |= OPOST; tcsetattr(fileno(stdin),TCSANOW,&it); if(key == 0){ if(key1 != 0){ if(key3 == 0){ if(key4 == 0)key = key1; } } } if(key == 10) key = ENTER; if(key == 127)key = BACKSPACE; if(key == 8) key = BACKSPACE; if(key == 9) key = TAB; return(key); } #endif /*end of OSX11*/ #endif /*_key_c*/