Mercurial Hosting > harelet
diff linuxconio.h @ 7:1bb981516d87
Automated Vimcurial commmit
author | VilyaemKenyaz |
---|---|
date | Sat, 09 Sep 2023 17:11:20 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linuxconio.h Sat Sep 09 17:11:20 2023 -0400 @@ -0,0 +1,218 @@ +#ifndef CONIO_H +#define CONIO_H + +#include <termios.h> +#include <unistd.h> +#include <stdio.h> +#include <fcntl.h> +#include <stdlib.h> +#include <string.h> + +#define cprintf printf +#define cscanf scanf +#define cgets gets + +#define CLEAR "\x1b[2J" +#define SET11 "\x1b[1;1f" +#define CURSOR_UP "\x1b[1A" +#define ERASE_LINE "\x1b[2K" +#define BLINK_SLOW "\x1b[5m" +#define BLINK_RAPID "\x1b[6m" +#define CC_CLEAR "\x1b[0m" + +#define BLACK "\x1b[30m" +#define RED "\x1b[31m" +#define GREEN "\x1b[32m" +#define YELLOW "\x1b[33m" +#define BLUE "\x1b[34m" +#define MAGENTA "\x1b[35m" +#define CYAN "\x1b[36m" +#define WHITE "\x1b[37m" + +#define IBLACK "\x1b[30;1m" +#define IRED "\x1b[31;1m" +#define IGREEN "\x1b[32;1m" +#define IYELLOW "\x1b[33;1m" +#define IBLUE "\x1b[34;1m" +#define IMAGENTA "\x1b[35;1m" +#define ICYAN "\x1b[36;1m" +#define IWHITE "\x1b[37;1m" + +#define BGC_BLACK "\x1b[40m" +#define BGC_RED "\x1b[41m" +#define BGC_GREEN "\x1b[42m" +#define BGC_YELLOW "\x1b[43m" +#define BGC_BLUE "\x1b[44m" +#define BGC_MAGENTA "\x1b[45m" +#define BGC_CYAN "\x1b[46m" +#define BGC_WHITE "\x1b[47m" + +#define BGC_IBLACK "\x1b[40;1m" +#define BGC_IRED "\x1b[41;1m" +#define BGC_IGREEN "\x1b[42;1m" +#define BGC_IYELLOW "\x1b[43;1m" +#define BGC_IBLUE "\x1b[44;1m" +#define BGC_IMAGENTA "\x1b[45;1m" +#define BGC_ICYAN "\x1b[46;1m" +#define BGC_IWHITE "\x1b[47;1m" + +static struct termios oldterm, newterm; + +void initTermios(int echo) +{ + tcgetattr(0, &oldterm); + newterm = oldterm; + newterm.c_lflag &= ~ICANON; + newterm.c_lflag &= echo ? ECHO : ~ECHO; + tcsetattr(0, TCSANOW, &newterm); +} +void resetTermios(void) +{ + tcsetattr(0, TCSANOW, &oldterm); +} + +int getch_(int echo) +{ + int ch; + initTermios(echo); + ch = getchar(); + resetTermios(); + return ch; +} + +void cagxy(unsigned int x, unsigned int y) +{ + printf("%s\x1b[%d;%df", CLEAR, y, x); +} + +void clrscr() +{ + printf("%s%s",CLEAR, SET11); +} + +int getch(void) +{ + return getch_(0); +} + +int getche(void) +{ + return getch_(1); +} + +void gotox(unsigned int x) +{ + printf("\x1b[%dG", x); +} + +void gotoxy(unsigned int x, unsigned int y) +{ + printf("\x1b[%d;%df", y, x); +} + +void nocursor() +{ + printf("\x1b[?25l"); +} + +void reset_video() +{ + printf("\x1b[0m"); +} + +void showcursor() +{ + printf("\x1b[?25h"); +} + +void textcolor(char *color) +{ + printf("%s",color); +} + +void textbackground(char color[11]) +{ + char col[11]; + strcpy(col,color); + col[2]='4'; + printf("%s",col); +} + +void delline() +{ + printf("%s%s", ERASE_LINE, CURSOR_UP); +} + +void clreol() +{ + printf("%s",CLEAR); +} +int putch(const char c) +{ + printf("%c",c); + return (int)c; +} + +int cputs(const char*str) +{ + printf(str); + return 0; +} + + +int wherexy(int *x, int *y) +{ + printf("\033[6n"); + if(getch() != '\x1B') return 0; + if(getch() != '\x5B') return 0; + int in; + int ly = 0; + while((in = getch()) != ';') + ly = ly * 10 + in - '0'; + int lx = 0; + while((in = getch()) != 'R') + lx = lx * 10 + in - '0'; + *x = lx; + *y = ly; +} +int wherex() +{ + int x=0,y=0; + wherexy(&x, &y); + return x; +} + +int wherey() +{ + int x=0,y=0; + wherexy(&x, &y); + return y; +} + +int kbhit() +{ + struct termios oldt, newt; + int ch; + int oldf; + + tcgetattr(STDIN_FILENO, &oldt); + newt = oldt; + newt.c_lflag &= ~(ICANON | ECHO); + tcsetattr(STDIN_FILENO, TCSANOW, &newt); + oldf = fcntl(STDIN_FILENO, F_GETFL, 0); + fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); + + ch = getchar(); + + tcsetattr(STDIN_FILENO, TCSANOW, &oldt); + fcntl(STDIN_FILENO, F_SETFL, oldf); + + if(ch != EOF) + { + ungetc(ch, stdin); + return 1; + } + return 0; +} +#endif +