From 5cdea40741e25529ecc8e9debcb81b49ba192b23 Mon Sep 17 00:00:00 2001 From: Aargh Rai Date: Mon, 15 Jun 2026 11:20:06 +0530 Subject: gitignore & README & help command & everything --- .gitignore | 2 + README.md | 26 +++++++++++ build | Bin 16560 -> 0 bytes build.c | 13 +++++- lorem | Bin 15936 -> 0 bytes src/main.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 README.md delete mode 100755 build delete mode 100755 lorem diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2c5d2d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build +lorem diff --git a/README.md b/README.md new file mode 100644 index 0000000..56a5e7c --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# Lorem + +Generate lorem ipsum + +``` +usage: lorem [OPTIONS] + +positional arguments: + mode generation mode: [w]ord, [l]ine/[s]entence, [p]aragraph (default: line) + length number of chunks to generate (default: 1) + +options: + -h --help show this message + +examples: + lorem p 2 generate 2 paragraphs + lorem w 2 generate 2 words + lorem l 2 generate 2 lines/sentences + lorem s 2 generate 2 lines/sentences + lorem 2 generate 2 lines/sentences + lorem generate 1 line/sentence + lorem paragraph 2 generate 2 paragraphs + lorem word 2 generate 2 words + lorem line 2 generate 2 lines/sentences + lorem sentence 2 generate 2 lines/sentences +``` diff --git a/build b/build deleted file mode 100755 index 26c9284..0000000 Binary files a/build and /dev/null differ diff --git a/build.c b/build.c index f4b60ff..3bfebb4 100644 --- a/build.c +++ b/build.c @@ -59,8 +59,19 @@ int main(int argc, char** argv) { execvp(argv[0], argv); } + if (argc > 1) { + if (strcmp(argv[1], "release") == 0) { + RUN_CMD({CC, "src/main.c", "-o", "lorem", "-O3", NULL}); + return 0; + } + } + RUN_CMD({CC, "src/main.c", "-o", "lorem", NULL}); - char* args[] = {"./lorem", NULL}; + char* args[4]; int k = 0; + args[k++] = "./lorem"; + if (argc >= 2) args[k++] = argv[1]; + if (argc >= 3) args[k++] = argv[2]; + args[k++] = NULL; print_cmd(args); execvp(args[0], args); } diff --git a/lorem b/lorem deleted file mode 100755 index ab0cefb..0000000 Binary files a/lorem and /dev/null differ diff --git a/src/main.c b/src/main.c index f6faaa9..55d8d63 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,149 @@ #include +#include +#include +#include +#include + +char *words[] = { + "a", "ab", "accusamus", "accusantium", "ad", "adipisci", "adipiscing", + "aliqua", "aliquam", "aliquid", "amet", "anim", "aperiam", "architecto", + "asperiores", "aspernatur", "assumenda", "at", "atque", "aut", "aute", + "autem", "beatae", "blanditiis", "cillum", "commodi", "commodo", + "consectetur", "consequat", "consequatur", "consequuntur", "corporis", + "corrupti", "culpa", "cum", "cumque", "cupidatat", "cupiditate", "debitis", + "delectus", "deleniti", "deserunt", "dicta", "dignissimos", "distinctio", + "do", "dolor", "dolore", "dolorem", "doloremque", "dolores", "doloribus", + "dolorum", "ducimus", "duis", "ea", "eaque", "earum", "eius", "eligendi", + "elit", "enim", "eos", "error", "esse", "est", "et", "eu", "eum", "eveniet", + "ex", "excepteur", "excepturi", "exercitation", "exercitationem", "expedita", + "explicabo", "facere", "facilis", "fuga", "fugiat", "fugit", "harum", "hic", + "id", "illo", "illum", "impedit", "in", "incidunt", "incididunt", "inventore", + "ipsum", "irure", "iste", "itaque", "labore", "laboriosam", "laboris", + "laborum", "laudantium", "libero", "lorem", "magna", "magnam", "magni", + "maiores", "maxime", "minima", "minim", "minus", "modi", "molestiae", + "molestias", "mollitia", "mollit", "nam", "natus", "necessitatibus", "nemo", + "neque", "nesciunt", "nihil", "nisi", "nobis", "non", "nostrud", "nulla", + "numquam", "occaecat", "odio", "odit", "officia", "omnis", "optio", + "pariatur", "perferendis", "perspiciatis", "placeat", "porro", "possimus", + "praesentium", "proident", "quae", "quaerat", "quam", "quas", "qui", "quia", + "quibusdam", "quidem", "quis", "quisquam", "quo", "ratione", "recusandae", + "reiciendis", "rem", "repellat", "repellendus", "reprehenderit", + "repudiandae", "rerum", "saepe", "sapiente", "sed", "sequi", "similique", + "sint", "sit", "soluta", "sunt", "suscipit", "tempor", "tempora", + "temporibus", "tempore", "tenetur", "totam", "ullamco", "ullam", "unde", "ut", + "vel", "velit", "veniam", "vero", "vitae", "voluptas", "voluptate", + "voluptatem", "voluptates", "voluptatibus", "voluptatum", +}; + +#define WORDS_COUNT sizeof(words) / sizeof(char*) + +enum { + MODE_WORD, + MODE_SENTENCE, + MODE_PARAGRAPH +}; + +int word_mode(int length, bool newline, bool capitalize); +int sentence_mode(int length, bool newline); +int paragraph_mode(int length, bool newline); +int print_help(); int main(int argc, char **argv) { - printf("Hello World\n"); + int mode = MODE_SENTENCE; + int length = 1; + + if ( + argc >= 2 && ( + strcmp(argv[1], "help") == 0 || + strcmp(argv[1], "h") == 0 || + strcmp(argv[1], "--help") == 0 || + strcmp(argv[1], "-h") == 0 + ) + ) { + return print_help(); + } + + if (argc == 2) { + length = atoi(argv[1]); + } else if (argc == 3) { + if ( + (strcmp(argv[1], "l") == 0) || + (strcmp(argv[1], "line") == 0) || + (strcmp(argv[1], "s") == 0) || + (strcmp(argv[1], "sentence") == 0) + ) { + mode = MODE_SENTENCE; + } else if ( + (strcmp(argv[1], "p") == 0) || + (strcmp(argv[1], "para") == 0) || + (strcmp(argv[1], "paragraph") == 0) + ) { + mode = MODE_PARAGRAPH; + } else if ( + (strcmp(argv[1], "w") == 0) || + (strcmp(argv[1], "word") == 0) + ) { + mode = MODE_WORD; + } + length = atoi(argv[2]); + } + + srand(time(NULL)); + if (mode == MODE_WORD) return word_mode(length, true, false); + printf("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + if (mode == MODE_SENTENCE) return sentence_mode(length, true); + return paragraph_mode(length, true); +} + +int word_mode(int length, bool newline, bool capitalize) { + for (int i = 0; i < length; i++) { + int index = rand() % WORDS_COUNT; + char word[1024]; + strncpy(word, words[index], 1024); + if (i == 0 && capitalize) word[0] += 'A' - 'a'; + if (i == length - 1) printf("%s", word); + else printf("%s ", word); + } + if (newline) printf("\n"); + return 0; +} + +int sentence_mode(int length, bool newline) { + for (int i = 0; i < length; i++) { + int size = 10 + rand() % 20; + word_mode(size, false, true); + printf(". "); + if (newline) printf("\n"); + } + return 0; +} + +int paragraph_mode(int length, bool newline) { + for (int i = 0; i < length; i++) { + int size = 6 + rand() % 10; + sentence_mode(size, false); + if (newline) printf("\n\n"); + } + return 0; +} + +int print_help() { + printf("usage: lorem [OPTIONS]\n\n"); + printf("positional arguments:\n"); + printf(" mode\t\tgeneration mode: [w]ord, [l]ine/[s]entence, [p]aragraph (default: line)\n"); + printf(" length\t\tnumber of chunks to generate (default: 1)\n"); + printf("\noptions:\n"); + printf(" -h --help\t\tshow this message\n"); + printf("\nexamples:\n"); + printf(" lorem p 2\t\tgenerate 2 paragraphs\n"); + printf(" lorem w 2\t\tgenerate 2 words\n"); + printf(" lorem l 2\t\tgenerate 2 lines/sentences\n"); + printf(" lorem s 2\t\tgenerate 2 lines/sentences\n"); + printf(" lorem 2\t\tgenerate 2 lines/sentences\n"); + printf(" lorem\t\t\tgenerate 1 line/sentence\n"); + printf(" lorem paragraph 2\tgenerate 2 paragraphs\n"); + printf(" lorem word 2\t\tgenerate 2 words\n"); + printf(" lorem line 2\t\tgenerate 2 lines/sentences\n"); + printf(" lorem sentence 2\tgenerate 2 lines/sentences\n"); + return 0; } -- cgit v1.2.3