From 6fa54ea346effc1c3144a6a3b35ad07fcb8cf595 Mon Sep 17 00:00:00 2001 From: jmug Date: Fri, 9 Oct 2026 12:28:16 -0700 Subject: [PATCH] feat: Raw mode --- Makefile | 2 ++ kilo | Bin 0 -> 71032 bytes kilo.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 Makefile create mode 100755 kilo create mode 100644 kilo.c 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 0000000000000000000000000000000000000000..efa933e41db87b45b725b18e323c082a784d4edb GIT binary patch literal 71032 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 +#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; +}