all repos — nimisewi_c @ 57f683f181495b802761d23e36b6d7ff75863613

simple random toki pona phrase generator

nimisewi.c (view raw)

  1#include <err.h>
  2#include <stdio.h>
  3#include <stdlib.h>
  4#include <unistd.h>
  5
  6#include <sys/types.h>
  7#include <sys/time.h>
  8
  9#include "nimisewi.h"
 10#include "nimitoki.h" /* nimi_toki, suli_pi_nimi_toki */
 11
 12void
 13open_e_nanpa_sewi() {
 14    pid_t pid;
 15    struct timeval time;
 16
 17    gettimeofday(&time, NULL);
 18    pid = getpid();
 19    srand(pid * time.tv_usec * time.tv_sec);
 20}
 21
 22const char
 23*pana_e_nimi(const char *nimi_mute[],
 24             const int suli_pi_nimi_mute,
 25             const int nanpa_nimi)
 26{
 27    if (nanpa_nimi > suli_pi_nimi_mute) {
 28        err(EXIT_FAILURE, "index out of bounds");
 29    } else if (nanpa_nimi == -1) {
 30        return "pi";
 31    } else {
 32        return nimi_mute[nanpa_nimi];
 33    }
 34}
 35
 36void
 37pana_e_nanpa_nimi(struct nanpa_nimi *nn)
 38{
 39    nn->pi_li_lon = 0;
 40    nn->nanpa_pi = -1;
 41    nn->nanpa_nimi = (rand() % 6);
 42
 43    if (nn->nanpa_nimi == 2) {
 44        nn->pi_li_lon = rand() % 2;
 45    } else if (nn->nanpa_nimi > 2) {
 46        nn->pi_li_lon = 1;
 47    }
 48    if (nn->pi_li_lon) {
 49        nn->nanpa_nimi++;
 50        nn->nanpa_pi = (nn->nanpa_nimi / 2);
 51    }
 52}
 53
 54void
 55pana_e_nanpa_pi_nimi_sewi(int *nanpa_sewi_mute,
 56                          const int suli_nimi,
 57                          struct nanpa_nimi *nn)
 58{
 59    int i;
 60
 61    for (i = 0; i <= nn->nanpa_nimi; i++) {
 62        nanpa_sewi_mute[i] = rand() % suli_nimi;
 63    }
 64
 65    if (nn->pi_li_lon) {
 66        nanpa_sewi_mute[nn->nanpa_pi] = -1;
 67    }
 68}
 69
 70int
 71main(void)
 72{
 73    int *nanpa_sewi_nimi;
 74    int i;
 75    struct nanpa_nimi nn;
 76
 77#ifdef __OpenBSD__
 78    if (pledge("stdio", NULL) == -1) {
 79        err(EXIT_FAILURE, "pledge");
 80    }
 81#endif
 82    open_e_nanpa_sewi();
 83
 84    pana_e_nanpa_nimi(&nn);
 85
 86    nanpa_sewi_nimi = (int *) calloc(nn.nanpa_nimi + 1, sizeof(int));
 87    if (nanpa_sewi_nimi == NULL) {
 88        err(EXIT_FAILURE, "calloc");
 89    }
 90
 91    pana_e_nanpa_pi_nimi_sewi(nanpa_sewi_nimi, suli_pi_nimi_toki, &nn);
 92
 93    for (i = 0; i < nn.nanpa_nimi; i++) {
 94        printf("%s ",
 95                pana_e_nimi(nimi_toki, suli_pi_nimi_toki, nanpa_sewi_nimi[i]));
 96    }
 97    printf("%s", pana_e_nimi(nimi_toki, suli_pi_nimi_toki, nanpa_sewi_nimi[i]));
 98    printf("\n");
 99
100    free(nanpa_sewi_nimi);
101
102    return 0;
103}
104