-#include <term.h>
-#include <ncurses.h>
#include <stdio.h>
#include <stdlib.h>
+#include <term.h>
#include <time.h>
+#define A_POGRUBIONY (1 << 0)
+
+#define KOLOR_CZARNY 0
+#define KOLOR_CZERWONY 1
+#define KOLOR_ZIELONY 2
+#define KOLOR_BRAZOWY 3
+#define KOLOR_NIEBIESKI 4
+#define KOLOR_MAGENTA 5
+#define KOLOR_CYJAN 6
+#define KOLOR_BIALY 7
+
typedef struct {
int attr;
int kolor;
} atrybut;
-atrybut bombki[] = {
- {A_BOLD, COLOR_RED},
- {A_BOLD, COLOR_BLUE},
- {A_BOLD, COLOR_YELLOW},
- {A_BOLD, COLOR_MAGENTA},
- {A_BOLD, COLOR_CYAN},
- {A_BOLD, COLOR_WHITE},
+atrybut const bombki[] = {
+ {A_POGRUBIONY, KOLOR_CZERWONY},
+ {A_POGRUBIONY, KOLOR_NIEBIESKI},
+ {A_POGRUBIONY, KOLOR_BRAZOWY},
+ {A_POGRUBIONY, KOLOR_MAGENTA},
+ {A_POGRUBIONY, KOLOR_CYJAN},
+ {A_POGRUBIONY, KOLOR_BIALY},
};
-int ile_b = sizeof bombki / sizeof *bombki;
+int const ile_b = sizeof bombki / sizeof *bombki;
+
+atrybut const choinka = {0, KOLOR_ZIELONY};
+atrybut const podstawa = {0, KOLOR_BRAZOWY};
+atrybut const podpis = {A_POGRUBIONY, KOLOR_CZERWONY};
+atrybut const gwiazdka = {A_POGRUBIONY, KOLOR_BRAZOWY};
-atrybut choinka = {0, COLOR_GREEN};
-atrybut podstawa = {0, COLOR_YELLOW};
-atrybut podpis = {A_BOLD, COLOR_RED};
-atrybut gwiazdka = {A_BOLD, COLOR_YELLOW};
+void inicjuj_rng()
+{
+ unsigned ziarno = 0;
+ FILE* f = fopen("/dev/urandom", "rb");
+ if (f != NULL) {
+ unsigned nowe_ziarno;
+ if (fread(&nowe_ziarno, sizeof nowe_ziarno, 1, f) == 1) {
+ ziarno = nowe_ziarno;
+ }
+ fclose(f);
+ }
+ if (ziarno == 0) {
+ ziarno = time(NULL);
+ }
+ srand(ziarno);
+}
-char rysunek[] =
+char const rysunek[] =
" *\n"
" /.\\\n"
" /..'\\\n"
static atrybut ostatni = {-1, -1};
if (ostatni.attr == attr->attr && ostatni.kolor == attr->kolor) return;
ostatni = *attr;
- if (attr->attr & A_BOLD) {
+ putp(exit_attribute_mode);
+ if ((attr->attr & A_POGRUBIONY) != 0) {
putp(enter_bold_mode);
- } else {
- putp(exit_attribute_mode);
}
putp(tparm(set_a_foreground, attr->kolor));
}
int main()
{
- srand(time(NULL));
+ inicjuj_rng();
setupterm(NULL, 1, NULL);
- atrybut* kolor = &choinka;
+ atrybut const* kolor = &choinka;
for (int i = 0; rysunek[i] != '\0'; i++) {
char c = rysunek[i];
if (c == '[') kolor = &podstawa;
- atrybut* akt = kolor;
+ atrybut const* akt = kolor;
if (c >= 'a' && c <= 'z') akt = &podpis;
if (c == '.') akt = &bombki[rand() % ile_b];
if (c == '*') akt = &gwiazdka;