В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
лана2661
лана2661
16.05.2022 02:58 •  Информатика

ПРОГРАММИСТЫ
Напишите исходный код блокнота (любого)

Показать ответ
Ответ:
TolstoyLev
TolstoyLev
01.02.2021 20:10

C Lang

#include <ctype.h>

#include <errno.h>

#include <stdio.h>

#include <stdlib.h>

#include <sys/ioctl.h>

#include <termios.h>

#include <unistd.h>

/*** defines ***/

#define CTRL_KEY(k) ((k) & 0x1f)

/*** data ***/

struct editorConfig {

 int screenrows;

 int screencols;

 struct termios orig_termios;

};

struct editorConfig E;

/*** terminal ***/

void die(const char *s) {

 write(STDOUT_FILENO, "\x1b[2J", 4);

 write(STDOUT_FILENO, "\x1b[H", 3);

 perror(s);

 exit(1);

}

void disableRawMode() {

 if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &E.orig_termios) == -1)

   die("tcsetattr");

}

void enableRawMode() {

 if (tcgetattr(STDIN_FILENO, &E.orig_termios) == -1) die("tcgetattr");

 atexit(disableRawMode);

 struct termios raw = E.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);

 raw.c_cc[VMIN] = 0;

 raw.c_cc[VTIME] = 1;

 if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw) == -1) die("tcsetattr");

}

char editorReadKey() {

 int nread;

 char c;

 while ((nread = read(STDIN_FILENO, &c, 1)) != 1) {

   if (nread == -1 && errno != EAGAIN) die("read");

 }

 return c;

}

int getCursorPosition(int *rows, int *cols) {

 char buf[32];

 unsigned int i = 0;

 if (write(STDOUT_FILENO, "\x1b[6n", 4) != 4) return -1;

 while (i < sizeof(buf) - 1) {

   if (read(STDIN_FILENO, &buf[i], 1) != 1) break;

   if (buf[i] == 'R') break;

   i++;

 }

 buf[i] = '\0';

 if (buf[0] != '\x1b' || buf[1] != '[') return -1;

 if (sscanf(&buf[2], "%d;%d", rows, cols) != 2) return -1;

 return 0;

}

int getWindowSize(int *rows, int *cols) {

 struct winsize ws;

 if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == -1 || ws.ws_col == 0) {

   if (write(STDOUT_FILENO, "\x1b[999C\x1b[999B", 12) != 12) return -1;

   return getCursorPosition(rows, cols);

 } else {

   *cols = ws.ws_col;

   *rows = ws.ws_row;

   return 0;

 }

}

/*** output ***/

void editorDrawRows() {

 int y;

 for (y = 0; y < E.screenrows; y++) {

   write(STDOUT_FILENO, "~", 1);

   if (y < E.screenrows - 1) {

     write(STDOUT_FILENO, "\r\n", 2);

   }

 }

}

void editorRefreshScreen() {

 write(STDOUT_FILENO, "\x1b[2J", 4);

 write(STDOUT_FILENO, "\x1b[H", 3);

 editorDrawRows();

 write(STDOUT_FILENO, "\x1b[H", 3);

}

/*** input ***/

void editorProcessKeypress() {

 char c = editorReadKey();

 switch (c) {

   case CTRL_KEY('q'):

     write(STDOUT_FILENO, "\x1b[2J", 4);

     write(STDOUT_FILENO, "\x1b[H", 3);

     exit(0);

     break;

 }

}

/*** init ***/

void initEditor() {

 if (getWindowSize(&E.screenrows, &E.screencols) == -1) die("getWindowSize");

}

int main() {

 enableRawMode();

 initEditor();

 while (1) {

   editorRefreshScreen();

   editorProcessKeypress();

 }

 return 0;

}

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота