- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
#include <ncurses.h>
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#define msleep(msec) Sleep(msec)
#else
#include <unistd.h>
#define msleep(msec) usleep(msec*1000)
#endif
int main()
{
initscr();
char str[100];
addstr("Enter string: ");
getstr(str); //Считваем строку
curs_set(0); //"Убиваем" курсор, чтобы не мешался
while ( true )
{
//Перемещаем х-координату как можно дальше вправо, и будем уменьшать её, пока она != 0
for ( unsigned x = getmaxx(stdscr); x; x-- )
{
clear();
mvaddstr(getmaxy(stdscr) / 2, x, str);
refresh();
msleep(200);
}
}
endwin();
return 0;
}
ropuJIJIa 04.10.2019 06:41 # 0
ropuJIJIa 04.10.2019 06:48 # 0
j123123 04.10.2019 07:32 # 0
guest8 04.10.2019 10:41 # −999
guest8 04.10.2019 10:41 # −999
j123123 04.10.2019 07:56 # +2
#define msleep(msec) usleep(msec*1000)
Если сделать usleep(2 + 2) то эта хуйня раскроется в usleep(2 + 2 * 1000) что явно не то, что надо. Да и вообще на кой хер делать функциеподобный макрос с маленькой буквы? Почему эту хуйню не сделать как функцию?
Вторая хуйня в getstr() - эта хуйня настолько же небезопасна, как и gets().
https://linux.die.net/man/3/getstr
Вот что пишут про int getstr(char *str) :
> The function getstr is equivalent to a series of calls to getch, until a newline or carriage return is received (the terminating character is not included in the returned string). The resulting value is placed in the area pointed to by the character pointer str.
Т.е. если много хуйни написать, то можно переполнить буфер и попортить память. Чтоб такой хуйни не было, можно и нужно использовать int getnstr(char *str, int n)
Еще одна н хуйня - а на кой хер собственно нужно после вечного цикла while(true) делать endwin(); ? Цикл никогда не завершится штатным способом, так что это нахрен не надо.
Еще одна хуйня - в статье по ссылке написано "Но функцию задержки нам придётся придётся прописывать для каждой платформы отдельно, потому что unistd.h, как и windows.h это системозависимые библиотеки.". Это верно лишь отчасти. Некоторые компиляторы предоставляют необходимые обертки, например взгляните на это:
и хедер unistd.h там тоже есть
так что таким компилятором оно нормально скомпилируется и на винде, и будет это вполне нативный виндовый бинарь
guest8 04.10.2019 10:45 # −999
ropuJIJIa 04.10.2019 14:07 # 0
Или обёрткой ты называешь любой код из сишных библиотек? Ну тогда и printf нельзя использовать, потому что это обёртка над WriteConsoleA.
guest8 04.10.2019 14:10 # −999
ropuJIJIa 04.10.2019 14:24 # 0
Похоже, что используется вшитое в библиотеку определение терминала, если TERMCAP и TERMINFO отсутствуют.
guest8 04.10.2019 14:38 # −999
ropuJIJIa 04.10.2019 14:48 # 0
- Support for Terminals attached via a serial port (via terminfo)
- Support for networked Terminal connections (via terminfo)
Для всего этого говна придётся подставлять другие костыли.
А если бы в Винде был аналог ANSI.SYS, это всё бы не понадобилось...
guest8 04.10.2019 14:53 # −999
ropuJIJIa 04.10.2019 14:54 # 0
guest8 04.10.2019 15:02 # −999
gpyrou_nemyx 04.10.2019 18:49 # 0
guest8 04.10.2019 18:55 # −999
gpyrou_nemyx 04.10.2019 19:37 # 0
> накрылся еще до появления unix
Я тут напедивикил, что его последняя версия в 92 гаду вышла.
guest8 04.10.2019 19:46 # −999
guest8 04.10.2019 19:51 # −999
ropuJIJIa 04.10.2019 14:30 # 0
README.MinGW:
Короче, отсутствие переменной TERM — это специальный случай.
guest8 04.10.2019 14:39 # −999
ropuJIJIa 04.10.2019 14:16 # 0
>> #define msleep(msec) usleep(msec*1000)
Да, макросы — это зло.
Кстати, если обёртку сделать как функцию с атрибутом inline, то оптимизатор уберёт лишний код.
>> Вторая хуйня в getstr() - эта хуйня настолько же небезопасна, как и gets().
int getnstr(char *str, int n) — это тоже немножко костыльное решение. Сколько я должен выделить байт, чтобы не обидеть пользователя? Выделю я 30 букв под ФИО, а ко мне придёт Филипп Ауреол Теофраст Бомбаст фон Гогенгейм.
На мой взгляд нужна функция, которая сама умеет реаллоцировать место под строку, если его не хватает. Вызов realloc для маленькой строки на гигагерцовых машинах может занимать намного больше времени, чем интервал между нажатием клавиш?
guest8 04.10.2019 14:19 # −999
ropuJIJIa 04.10.2019 14:31 # 0
ropuJIJIa 04.10.2019 15:08 # 0
Вот pdcurses были и под Borland C, и под MSVC, и ещё под кучу компиляторов, а за порт ncurses мало кто брался.
guest8 04.10.2019 16:14 # −999
ropuJIJIa 04.10.2019 16:37 # 0
guest8 04.10.2019 16:39 # −999
ropuJIJIa 04.10.2019 16:52 # 0
guest8 04.10.2019 17:03 # −999
ropuJIJIa 04.10.2019 16:45 # 0
В Windows 3.11 консольных функций вообще нет, там консоль исключительно для запуска досовских программ. Даже под Win32s консольные программы запускаются... без консоли, т. е. в файлы писать могут, а на экран ничего не выводят. Для Windows 3.11 нужно писать отдельный эмулятор терминала, который открывает окно и рисует в нём текст (и такие эмуляторы уже существуют).
А PDCurses не требует поддержки ESC-последовательностей, там такой же хак, как и в ncurses для MinGW.
ropuJIJIa 04.10.2019 16:54 # 0
guest8 04.10.2019 17:00 # −999
ropuJIJIa 04.10.2019 17:18 # 0
%TERM% нет, но conemu поддерживает какой-то набор ESC-последовательностей, типа того, который поддерживал ANSI.SYS. По крайней мере, какое-то прыщеговно при запуске из-под conemu раскрашивает экран.
guest8 04.10.2019 10:41 # −999
ropuJIJIa 04.10.2019 14:19 # 0
guest8 04.10.2019 14:21 # −999
ropuJIJIa 04.10.2019 14:34 # 0
guest8 04.10.2019 14:42 # −999
nemyx_pycu4 05.10.2019 01:01 # −102
ropuJIJIa 04.10.2019 14:42 # 0
https://github.com/wmcbrine/PDCurses/blob/master/wincon/README.md
А вот ncurses, вероятно, есть только под MinGW и подобное.
inkanus_gray 04.10.2019 15:08 # −102
CharToOemBuff
cmepmop 04.10.2019 15:09 # −102
inkanus_gray 04.10.2019 15:12 # −102
inkanus_gray 04.10.2019 15:17 # −102
cmepmop 04.10.2019 15:24 # −102
inkanus_gray 04.10.2019 15:25 # −102
guest11 04.10.2019 21:31 # −102
ropuJIJIa 04.10.2019 16:57 # 0
В общем, ненужное прыщеговно.
guest8 04.10.2019 17:02 # −999
ropuJIJIa 04.10.2019 17:25 # 0
guest8 04.10.2019 17:34 # −999
ropuJIJIa 04.10.2019 17:41 # 0
guest8 04.10.2019 17:55 # −999
ropuJIJIa 04.10.2019 18:08 # 0
Так что запомни: wgetstr — это ввод из окна, get_wstr — ввод «широкого» символа, wget_wstr — ввод «широкого» символа из окна.
Правда, легко запомнить, в какой позиции буква «w» что означает? Не то, что виндоблядские и макоблядские функции с длинными именами.
ropuJIJIa 04.10.2019 18:19 # 0
А ещё заметили, что в ncurses.h некоторые идентификаторы со знаком подчёркивания, а некоторые без?
guest8 04.10.2019 18:25 # −999
ropuJIJIa 04.10.2019 18:30 # 0
guest8 04.10.2019 18:33 # −999
MyguJIA 04.10.2019 18:37 # 0
gpyrou_nemyx 04.10.2019 18:39 # 0
guest8 04.10.2019 18:55 # −999
guest8 04.10.2019 19:22 # −999
gpyrou_nemyx 04.10.2019 19:34 # 0
> вшений идентифайр
А какие по твоему находятся в хедерах?
nemyx 04.10.2019 19:46 # 0
guest8 04.10.2019 18:31 # −999
guest8 04.10.2019 18:32 # −999
ropuJIJIa 04.10.2019 18:34 # 0
guest8 04.10.2019 19:00 # −999
guest12 04.10.2019 19:20 # −100
Советую тебе убраться обратно, на xyz.
guest8 04.10.2019 19:23 # −999
guest12 04.10.2019 20:22 # −101
gost 04.10.2019 19:54 # 0
Вот, например, все эти говно-A и говно-W функции: по-хорошему, от первых надо вообще избавиться и течь (в сисколлах и ядре, кстати, так и сделали: там теперь только UNICODE_STRING), но увы. Я, кстати, где-то в прошлом году даже кидал описание апишки, которая, по словам из документации, не рекомендуется к использованию и нужна только для поддержки 16-битного софта, лол.
guest8 04.10.2019 20:02 # −999
j123123 05.10.2019 04:54 # 0
guest8 04.10.2019 20:08 # −999
guest8 04.10.2019 20:12 # −999
guest8 04.10.2019 20:13 # −999
guest8 04.10.2019 20:25 # −999
guest8 04.10.2019 20:42 # −999
nymuHckuu_nemyx 04.10.2019 20:48 # −102
guest8 04.10.2019 20:48 # −999
guest8 04.10.2019 20:58 # −999
guest11 04.10.2019 21:30 # −101
Уёбище, пэсдуй обратно, на xyz
На XYZ, гость.
ropuJIJIa 04.10.2019 18:23 # 0
guest8 04.10.2019 18:26 # −999
ropuJIJIa 04.10.2019 18:32 # 0
j123123 05.10.2019 05:00 # 0
guest8 04.10.2019 17:36 # −999
guest8 04.10.2019 17:38 # −999
gost 04.10.2019 17:48 # 0
guest8 04.10.2019 17:54 # −999
cmepmop 04.10.2019 17:53 # −102
https://www.datalounge.com/thread/14382637-what-is-the-psychological-need-to-suck-a-man-s-cock-
guest8 04.10.2019 20:16 # −999
guest8 04.10.2019 20:24 # −999