Browse Source

first commit

master
alistair 4 years ago
commit
afaef4fe92
  1. 16
      Makefile
  2. 92
      lipsum.c

16
Makefile

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
.PHONY: default
default: main
install: main
cp lipsum /usr/local/bin/
main: lipsum.c
gcc -O3 lipsum.c -o lipsum
static: lipsum.c
gcc -O3 -static lipsum.c -o lipsum
clean: lipsum
rm lipsum

92
lipsum.c

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
/* Read a line from a file into a newly created buffer */
int readline(FILE* in, char **out) {
int size_of_buffer = 20;
char *buffer = calloc(size_of_buffer, sizeof(char));
char character;
int count = 0;
while (true) {
character = fgetc(in);
if (character == EOF) {
buffer[count] = '\0';
*out = buffer;
return EOF;
}
if (character == '\n') {
buffer[count] = '\0';
*out = buffer;
return 0;
} else {
if (count == (size_of_buffer - 3)) {
buffer = reallocarray(buffer, (size_of_buffer *= 2),
sizeof(char));
if (!buffer) {
return 1;
}
}
buffer[count] = character;
count++;
}
}
}
char **read_word_file(char *file, int *num_ret) {
FILE *words = fopen(file, "r");
int listlen = 10;
char **wordlist = calloc(listlen, sizeof(char *));
int no;
for (no = 0; true; no++) {
if (no == listlen) {
listlen += 1;
wordlist = reallocarray(wordlist, listlen, sizeof(char*));
char *nextword;
int er = readline(words, &nextword);
if (er == EOF) {
break;
}
wordlist[no] = nextword;
}
}
*num_ret = no;
return wordlist;
}
int main (int argc, char **argv) {
if (argc > 2) {
fprintf(stderr, "Usage: lipsum <num words>\n");
return 1;
}
int num;
if (argc == 1) {
num = 50;
} else {
num = atoi(argv[1]);
if (num <= 0) {
fprintf(stderr, "Usage: lipsum <num words>\n");
return 1;
}
}
unsigned int rand_seed = time(NULL);
int len;
char **wordlist = read_word_file("/usr/share/dict/words", &len);
for (int i = 0; i < num; i++) {
int index = rand_r(&rand_seed) % len;
printf("%s ", wordlist[index]);
}
printf("\n");
}
Loading…
Cancel
Save