конечно просто.
1. выше пост '[Выделить]' и копировать на вставить в nano сохранить где первый строк
// test_grief_generator.c
...
...
пример
nano test_grief_generator.c
как успешно вставить и сохранить, выход из nano.
2. команда для компилятор и запустить, где эту строки в посту.
// ~$ gcc test_grief_generator.c -o test_grief_generator -lpthread
// ~$ ./test_grief_generator
пример
компилятор
~$ gcc test_grief_generator.c -o test_grief_generator -lpthread
и чтобы пустую вывод это без ошибку.
запустить
~$ ./test_grief_generator
всё идёт.
а выход эту посту.
// exit - 'Enter'
Пользователь добавил сообщение 05 Октября 2018, 13:23:41:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
│ ╭╮╭╾╮╭╾╾╾╾╮ │
│ ╭╾╯╰╯ ╰╯ ╰╾╮ ╭╭│
│ ╭╯ ╰╾╯╯│
│ ╭╾╮╭╯ │
│ ╭╾╾╾╾╯ ╰╯ │
│ ╭╾╾╯ │
│ ╭╾╾╯ │
│╾╯ │
│ │
│ │
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Пользователь добавил сообщение 05 Октября 2018, 13:29:49:
// test_grief_generator.c
// victor00000 (c) 2018
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <locale.h>
#include <sys/ioctl.h>
// ~$ gcc test_grief_generator.c -o test_grief_generator -lpthread
// ~$ ./test_grief_generator
// exit - 'Enter'
int exit_0 = 0;
const char *cls_c = "\e[1;1H\e[2J";
int cvadr[] = { L'┏', L'━', L'┓', L'│', L'┛',
L'━', L'┗', L'│', 0
};
//int lt[] = { L'━', L'┏', L'━',
//L'╲', L'╳' };
int *lt = (int *)L"╾╭╮╯╰";
// int lt[] = { L'▁', L'╱', L'▔',
// L'╲', L'╳' };
typedef struct {
int w, h;
} wht;
int **xy, yy;
//=================cls
void cls()
{
fwrite(cls_c, 1, strlen(cls_c), stdout);
}
//=====================get w h
int getwhterm(int *wt, int *ht)
{
int e;
struct winsize wl;
e = ioctl(STDOUT_FILENO, TIOCGWINSZ, &wl);
*ht = wl.ws_row;
*wt = wl.ws_col;
return e;
}
//=================xy_rnd
void xy_rnd(wht wh)
{
int i, l = 0, d = 0;
for (i = 1; i < wh.h - 1; i++)
xy[i][wh.w - 2] = L' ';
l = yy;
yy += -1 + rand() % 3;
if (yy < 1)
yy = 1;
if (yy > wh.h - 2)
yy = wh.h - 2;
d = xy[l][wh.w - 3];
//==============3
if (l == yy) {
// if (d == lt [ 0 ] )
d = lt[0];
/*
if (d == lt[1])
d = lt[ 0 ];
if (d == lt [ 1 ])
d = lt[2];
if (d == lt[3])
d = lt[0];
*/
} else {
if (l < yy) {
d = lt[2];
xy[l][wh.w - 2] = d;
d = lt[4];
}
if (l > yy) {
d = lt[3];
xy[l][wh.w - 2] = d;//lt [0];
d = lt[1];
}
}
xy[yy][wh.w - 2] = d;//lt [0];
//==============2
}
//===================xy_down
void xy_down(wht wh)
{
int x, y;
for (x = 1; x < wh.w - 2; x++) {
for (y = 1; y < wh.h - 1; y++) {
//xy [y] [x] = L'.';
xy[y][x] = xy[y][x + 1];
}
}
}
//===================xy_clear
void xy_clear(wht wh)
{
int x, y;
for (y = 0; y < wh.h; y++) {
for (x = 0; x < wh.w; x++) {
if (x == 0 || x == wh.w - 1)
xy[y][x] = cvadr[3];
else
xy[y][x] = L' ';
if (y == 0) {
xy[y][x] = cvadr[1];
if (x == 0)
xy[y][x] = cvadr[0];
if (x == wh.w - 1)
xy[y][x] = cvadr[2];
}
if (y == wh.h - 1) {
xy[y][x] = cvadr[1];
if (x == 0)
xy[y][x] = cvadr[6];
if (x == wh.w - 1)
xy[y][x] = cvadr[4];
//===================1
}
}
}
}
//====================xy_init
int **xy_init(wht wh)
{
int **x_y = 0;
x_y = malloc(sizeof(int) * wh.h);
int i;
for (i = 0; i < wh.h; i++) {
x_y[i] = malloc(sizeof(int) * wh.w);
}
return x_y;
}
//=================tp
void *tp(void *a)
{
wht *wh = (wht *) a;
int x, y;
while (1) {
xy_rnd(*wh);
xy_down(*wh);
cls();
for (y = 0; y < wh->h; y++) {
for (x = 0; x < wh->w; x++) {
printf("%lc", xy[y][x]);
}
// if (y != wh->h - 1)
puts("");
}
if (exit_0 == 1)
break;
usleep(1000 * 60);
}
return 0;
}
//==================m0
int main()
{
srand(time(0));
setlocale(LC_ALL, getenv("LANG"));
int wt, ht, e;
e = getwhterm(&wt, &ht);
if (e != 0) {
perror("Err");
return 1;
}
pthread_t t;
wht wh;
wh.w = wt;
wh.h = ht - 1;
yy = wh.h - 2;
xy = xy_init(wh);
xy_clear(wh);
xy[wh.h - 2][wh.w - 2] = lt[0];
xy_down(wh);
pthread_create(&t, 0, tp, &wh);
char cb;
while (fread(&cb, 1, 1, stdin) != 1) {
}
// pthread_cancel(t);
exit_0 = 1;
pthread_join(t, 0);
for (e = 0; e < wh.h; e++)
free(xy[e]);
free(xy);
return 0;
}