diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5444450 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +kilo: kilo.c + $(CC) kilo.c -o kilo -Wall -Wextra -pedantic -std=c99 diff --git a/kilo b/kilo new file mode 100755 index 0000000..efa933e Binary files /dev/null and b/kilo differ diff --git a/kilo.c b/kilo.c new file mode 100644 index 0000000..ad2ae99 --- /dev/null +++ b/kilo.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include + +struct termios orig_termios; + +void disableRawMode() { + tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios); +} + +void enableRawMode() { + tcgetattr(STDIN_FILENO, &orig_termios); + atexit(disableRawMode); + + struct termios raw = orig_termios; + raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + raw.c_oflag &= ~(OPOST); + raw.c_cflag |= (CS8); + raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + + tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw); +} + +int main() { + enableRawMode(); + + char c; + while(read(STDIN_FILENO, &c, 1) == 1 && c != 'q') { + if (iscntrl(c)) { + printf("%d\r\n", c); + } else { + printf("%d ('%c')\r\n", c, c); + } + } + return 0; +}