commit d8f1d59c30699d4393fde87f5ddb791bb96bdc47
parent 8aa75cf82c402012fb23713103d8641a90fd071d
Author: vx-clutch <[email protected]>
Date: Mon, 21 Jul 2025 19:40:40 -0400
Merge remote-tracking branch 'refs/remotes/origin/master'
save
Diffstat:
4 files changed, 235 insertions(+), 234 deletions(-)
diff --git a/.clang-format b/.clang-format
@@ -1,2 +1 @@
-Language: Cpp
BasedOnStyle: GNU
diff --git a/TODO b/TODO
@@ -1,4 +0,0 @@
-The following is a list of this that need to be done.
-
-Urgent:
- - Fix the segfault at Makefile
diff --git a/yait/contents.h b/yait/contents.h
@@ -3,241 +3,253 @@
#define line(l) l "\n"
-// README template
+/* README template */
char *readme_template =
- line("%s ( concise description )")
- line("")
- line("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor")
- line("incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis")
- line("nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")
- line("Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu")
- line("fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in")
- line("culpa qui officia deserunt mollit anim id est laborum.");
+ line ("%s ( concise description )")
+ line ()
+ line ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor")
+ line ("incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis")
+ line ("nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")
+ line ("Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu")
+ line ("fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in")
+ line ("culpa qui officia deserunt mollit anim id est laborum.");
-// configure script template
+/* configure script template */
char *configure_template =
- line("#!/bin/sh")
- line("")
- line("usage() {")
- line("cat <<EOF")
- line("Usage: $0 [OPTION]... [VAR=VALUE]...")
- line("")
- line("To assign environment variables (e.g., CC, CFLAGS...), specify them as")
- line("VAR=VALUE.")
- line("")
- line(" CC C compiler command [detected]")
- line(" CFLAGS C compiler flags [-g, ...]")
- line("")
- line("EOF")
- line("exit 0")
- line("}")
- line("")
- line("echo () { printf \"%%s\\n\" \"$*\" ; }")
- line("cmdexists () { type \"$1\" >/dev/null 2>&1 ; }")
- line("trycc () { test -z \"$CC\" && cmdexists \"$1\" && CC=$1 ; }")
- line("")
- line("prefix=/usr/bin/")
- line("CFLAGS=\"-Wall -Wextra -O2\"")
- line("LDFLAGS=")
- line("CC=")
- line("")
- line("for arg ; do")
- line("case \"$arg\" in")
- line("--help|h) usage ;;")
- line("CFLAGS=*) CFLAGS=${arg#*=} ;;")
- line("LDFLAGS=*) LDFLAGS=${arg#*=} ;;")
- line("esac")
- line("done")
- line("")
- line("printf \"checking for C compiler... \"")
- line("trycc gcc")
- line("trycc cc")
- line("trycc clang")
- line("printf \"%%s\\n\" \"$CC\"")
- line("")
- line("printf \"checking weather C compiler works... \"")
- line("status=\"fail\"")
- line("tmpc=\"$(mktemp -d)/test.c\"")
- line("echo \"typedef int x;\" > \"$tmpc\"")
- line("if output=$($CC $CFLAGS -c -o /dev/null \"$tmpc\" 2>&1) ; then")
- line("printf \"yes\\n\"")
- line("else")
- line("printf \"no; %%s\\n\" \"$output\"")
- line("exit 1")
- line("fi")
- line("")
- line("printf \"creating config.mak... \"")
- line("printf \"PREFIX=%%s\\n\" \"$prefix\" > config.mak")
- line("printf \"CFLAGS=%%s\\n\" \"$CFLAGS\" >> config.mak")
- line("printf \"LDFLAGS=%%s\\n\" \"$LDFLAGS\" >> config.mak")
- line("printf \"CC=%%s\\n\" \"$CC\" >> config.mak")
- line("printf \"done\\n\"");
+ line ("#!/bin/sh")
+ line ()
+ line ("usage() {")
+ line ("cat <<EOF")
+ line ("Usage: $0 [OPTION]... [VAR=VALUE]...")
+ line ()
+ line ("To assign environment variables (e.g., CC, CFLAGS...), specify them as")
+ line ("VAR=VALUE.")
+ line ()
+ line (" CC C compiler command [detected]")
+ line (" CFLAGS C compiler flags [-g, ...]")
+ line ()
+ line ("EOF")
+ line ("exit 0")
+ line ("}")
+ line ()
+ line ("echo () { printf \"%%s\\n\" \"$*\" ; }")
+ line ("cmdexists () { type \"$1\" >/dev/null 2>&1 ; }")
+ line ("trycc () { test -z \"$CC\" && cmdexists \"$1\" && CC=$1 ; }")
+ line ()
+ line ("prefix=/usr/bin/")
+ line ("CFLAGS=\"-Wall -Wextra -O2\"")
+ line ("LDFLAGS=")
+ line ("CC=")
+ line ()
+ line ("for arg ; do")
+ line ("case \"$arg\" in")
+ line ("--help|h) usage ;;")
+ line ("CFLAGS=*) CFLAGS=${arg#*=} ;;")
+ line ("LDFLAGS=*) LDFLAGS=${arg#*=} ;;")
+ line ("esac")
+ line ("done")
+ line ()
+ line ("printf \"checking for C compiler... \"")
+ line ("trycc gcc")
+ line ("trycc cc")
+ line ("trycc clang")
+ line ("printf \"%%s\\n\" \"$CC\"")
+ line ()
+ line ("printf \"checking weather C compiler works... \"")
+ line ("status=\"fail\"")
+ line ("tmpc=\"$(mktemp -d)/test.c\"")
+ line ("echo \"typedef int x;\" > \"$tmpc\"")
+ line ("if output=$($CC $CFLAGS -c -o /dev/null \"$tmpc\" 2>&1) ; then")
+ line ("printf \"yes\\n\"")
+ line ("else")
+ line ("printf \"no; %%s\\n\" \"$output\"")
+ line ("exit 1")
+ line ("fi")
+ line ()
+ line ("printf \"creating config.mak... \"")
+ line ("printf \"PREFIX=%%s\\n\" \"$prefix\" > config.mak")
+ line ("printf \"CFLAGS=%%s\\n\" \"$CFLAGS\" >> config.mak")
+ line ("printf \"LDFLAGS=%%s\\n\" \"$LDFLAGS\" >> config.mak")
+ line ("printf \"CC=%%s\\n\" \"$CC\" >> config.mak")
+ line ("printf \"done\\n\"");
-// Makefile template
+/* Makefile template */
char *makefile_template =
- line("prefix = /usr/bin")
- line("")
- line("%s_SRCS := $(shell find . -name '%s/*.c')")
- line("%s_OBJS := $(patsubst ./%.c,c-out/obj/%.o,$(%s_SRCS))")
- line("")
- line("%s := c-out/bin/%s")
- line("")
- line("-include config.mak")
- line("")
- line("ifeq ($(wildcard config.mak),)")
- line("all:")
- line("\t@echo \"File config.mak not found, run configure\"")
- line("\t@exit 1")
- line("else")
- line("")
- line("all: build $(%s)")
- line("")
- line("build:")
- line("\tmkdir -p c-out/bin")
- line("\tmkdir -p c-out/obj")
- line("")
- line("c-out/obj/%.o: %.c")
- line("\t$(CC) $(CFLAGS) -c $< -o $@")
- line("")
- line("$(%s): $(%s_OBJS)")
- line("\t$(CC) $(CFLAGS) -DCOMMIT=$(shell git rev-list --count --all 2>/dev/null || echo 0) $^ -o $@")
- line("")
- line("endif")
- line("")
- line("install:")
- line("\t@echo \"NOT IMPL\"")
- line("\texit 1")
- line("")
- line("uninstall:")
- line("\t@echo \"NOT IMPL\"")
- line("\texit 1")
- line("")
- line("clean:")
- line("\trm -rf c-out")
- line("")
- line("dist-clean: clean")
- line("\trm -f config.mak")
- line("")
- line(".PHONY: all clean dist-clean install uninstall build format");
+ line ("prefix = /usr/bin")
+ line ()
+ line ("%s_SRCS := $(shell find . -name '%s/*.c')")
+ line ("%s_OBJS := $(patsubst ./%.c,c-out/obj/%.o,$(%s_SRCS))")
+ line ()
+ line ("%s := c-out/bin/%s")
+ line ()
+ line ("-include config.mak")
+ line ()
+ line ("ifeq ($(wildcard config.mak),)")
+ line ("all:")
+ line ("\t@echo \"File config.mak not found, run configure\"")
+ line ("\t@exit 1")
+ line ("else")
+ line ()
+ line ("all: build $(%s)")
+ line ()
+ line ("build:")
+ line ("\tmkdir -p c-out/bin")
+ line ("\tmkdir -p c-out/obj")
+ line ()
+ line ("c-out/obj/%.o: %.c")
+ line ("\t$(CC) $(CFLAGS) -c $< -o $@")
+ line ()
+ line ("$(%s): $(%s_OBJS)")
+ line ("\t$(CC) $(CFLAGS) -DCOMMIT=$(shell git rev-list --count --all 2>/dev/null || echo 0) $^ -o $@")
+ line ()
+ line ("endif")
+ line ()
+ line ("install:")
+ line ("\t@echo \"NOT IMPL\"")
+ line ("\texit 1")
+ line ()
+ line ("uninstall:")
+ line ("\t@echo \"NOT IMPL\"")
+ line ("\texit 1")
+ line ()
+ line ("clean:")
+ line ("\trm -rf c-out")
+ line ()
+ line ("dist-clean: clean")
+ line ("\trm -f config.mak")
+ line ()
+ line (".PHONY: all clean dist-clean install uninstall build format");
-// .clang-format template
+/* .clang-format template */
char *clang_format_template =
- line("Language: Cpp")
- line("BasedOnStyle: GNU");
+ line ("BasedOnStyle: GNU");
-// BSD 3-Clause License template
+/* BSD 3-Clause License template */
char *bsd3_license_template =
- line("BSD 3-Clause License")
- line("")
- line("Copyright (c) %d, %s")
- line("")
- line("Redistribution and use in source and binary forms, with or without")
- line("modification, are permitted provided that the following conditions are met:")
- line("")
- line("1. Redistributions of source code must retain the above copyright notice, this")
- line(" list of conditions and the following disclaimer.")
- line("")
- line("2. Redistributions in binary form must reproduce the above copyright notice,")
- line(" this")
- line("list of conditions and the following disclaimer in the documentation")
- line(" and/or other materials provided with the distribution.")
- line("")
- line("3. Neither the name of the copyright holder nor the names of its")
- line(" contributors may be used to endorse or promote products derived from")
- line(" this software without specific prior written permission.")
- line("")
- line("THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"")
- line("AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE")
- line("IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE")
- line("DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE")
- line("FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL")
- line("DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR")
- line("SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER")
- line("CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,")
- line("OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE")
- line("OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.");
+ line ("BSD 3-Clause License")
+ line ()
+ line ("Copyright (c) %d, %s")
+ line ()
+ line ("Redistribution and use in source and binary forms, with or without")
+ line ("modification, are permitted provided that the following conditions are met:")
+ line ()
+ line ("1. Redistributions of source code must retain the above copyright notice, this")
+ line (" list of conditions and the following disclaimer.")
+ line ()
+ line ("2. Redistributions in binary form must reproduce the above copyright notice,")
+ line (" this")
+ line ("list of conditions and the following disclaimer in the documentation")
+ line (" and/or other materials provided with the distribution.")
+ line ()
+ line ("3. Neither the name of the copyright holder nor the names of its")
+ line (" contributors may be used to endorse or promote products derived from")
+ line (" this software without specific prior written permission.")
+ line ()
+ line ("THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"")
+ line ("AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE")
+ line ("IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE")
+ line ("DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE")
+ line ("FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL")
+ line ("DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR")
+ line ("SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER")
+ line ("CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,")
+ line ("OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE")
+ line ("OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.");
-// config.h template
+/* config.h template */
char *config_h_template =
- line("#ifndef CONFIG_H")
- line("#define CONFIG_H")
- line("")
- line("/* Program information */")
- line("#define PROGRAM \"%s\"")
- line("#define LICENSE_LINE \"%s\"")
- line("#define AUTHORS \"%s\"")
- line("#define VERSION \"pre-alpha\"")
- line("#define YEAR 2025")
- line("")
- line("#define HELP_REQUESTED 2")
- line("#define ERROR_MEMORY_ALLOCATION 3")
- line("#define ERROR_DIRECTORY_CREATION 4")
- line("")
- line("#endif");
+ line ("#ifndef CONFIG_H")
+ line ("#define CONFIG_H")
+ line ()
+ line ("/* Program information */")
+ line ("#define PROGRAM \"%s\"")
+ line ("#define LICENSE_line \"%s\"")
+ line ("#define AUTHORS \"%s\"")
+ line ("#define VERSION \"pre-alpha\"")
+ line ("#define YEAR 2025")
+ line ()
+ line ("#define HELP_REQUESTED 2")
+ line ("#define ERROR_MEMORY_ALLOCATION 3")
+ line ("#define ERROR_DIRECTORY_CREATION 4")
+ line ()
+ line ("#endif");
-// main.c (non-GNU) template
+/* main.c (non-GNU) template */
char *main_c_template =
- line("#include <stdio.h>")
- line("")
- line("int main(void) {")
- line(" printf(\"%s: Hello %s!\\n\");")
- line(" return 0;")
- line("}");
+ line ("#include <stdio.h>")
+ line ()
+ line ("int main(void) {")
+ line (" printf(\"%s: Hello %s!\\n\");")
+ line (" return 0;")
+ line ("}");
-// main.c (GNU) template
+/* main.c (GNU) template */
char *main_c_gnu_template =
- line("#include <stdio.h>")
- line("#include \"standard.h\"")
- line("")
- line("void usage(int status) {\n printf(\"Usage: %s [OPTION...]\\n\");\n}")
- line("")
- line("int main(int argc, char **argv) {")
- line(" parse_standard_options(usage, argc, argv);")
- line(" printf(\"%s: Hello %s!\\n\");")
- line(" return 0;")
- line("}");
+ line ("#include <stdio.h>")
+ line ("#include \"standard.h\"")
+ line ()
+ line ("void usage(int status) {")
+ line (" fprintf(stderr, \"Usage: %s [OPTION...]\\n\");")
+ line (" fprintf(stderr, \" --help\\tdisplay the help text and exit\\n\");")
+ line (" fprintf(stderr, \" --version\\toutput version information and exit\\n\");")
+ line ("}")
+ line ()
+ line ("int main(int argc, char **argv) {")
+ line (" parse_standard_options(usage, argc, argv);")
+ line (" printf(\"%s: Hello %s!\\n\");")
+ line (" return 0;")
+ line ("}");
-// standard.c template
+/* standard.c template */
char *standard_c_template =
- line("#include \"standard.h\"")
- line("#include \"../config.h\"")
- line("#include <stdio.h>")
- line("#include <stdlib.h>")
- line("#include <string.h>")
- line("")
- line("int")
- line("parse_standard_options (void (*usage) (int), int argc, char **argv)")
- line("{")
- line(" for (int i = 1; i < argc; ++i)")
- line(" {")
- line(" if (strcmp (argv[i], \"--help\") == 0)")
- line(" {")
- line(" usage (0);")
- line(" exit (EXIT_SUCCESS);")
- line(" }")
- line(" else if (strcmp (argv[i], \"--version\") == 0)")
- line(" {")
- line(" printf (\"%%s %%s %%d\\nCopyright (C) %%d %%s.\\n%%s\\nThis is free software: you are free to change and redistribute it.\\nThere is NO WARRNTY, to the extent permitted by law.\\n\", PROGRAM, VERSION, COMMIT, YEAR, AUTHORS, LICENSE_LINE);")
- line(" exit (EXIT_SUCCESS);")
- line(" }")
- line(" }")
- line(" return HELP_REQUESTED;")
- line("}");
+ line ("#include \"standard.h\"")
+ line ("#include \"../config.h\"")
+ line ("#include <stdio.h>")
+ line ("#include <stdlib.h>")
+ line ("#include <string.h>")
+ line ()
+ line ("int")
+ line ("parse_standard_options (void (*usage) (int), int argc, char **argv)")
+ line ("{")
+ line (" for (int i = 1; i < argc; ++i)")
+ line (" {")
+ line (" if (strcmp (argv[i], \"--help\") == 0)")
+ line (" {")
+ line (" usage (0);")
+ line (" exit (EXIT_SUCCESS);")
+ line (" }")
+ line (" else if (strcmp (argv[i], \"--version\") == 0)")
+ line (" {")
+ line (" printf (\"%%s %%s %%d\\nCopyright (C) %%d %%s.\\n%%s\\nThis is free software: you are free to change and redistribute it.\\nThere is NO WARRNTY, to the extent permitted by law.\\n\", PROGRAM, VERSION, COMMIT, YEAR, AUTHORS, LICENSE_line );")
+ line (" exit (EXIT_SUCCESS);")
+ line (" }")
+ line (" }")
+ line (" return HELP_REQUESTED;")
+ line ("}");
-// standard.h template
+/* standard.h template */
char *standard_h_template =
- line("#ifndef STANDARD_H")
- line("#define STANDARD_H")
- line("")
- line("/**")
- line(" * Parse standard command line options (--help, --version)")
- line(" * @param usage_func Function pointer to usage display function")
- line(" * @param argc Argument count")
- line(" * @param argv Argument vector")
- line(" * @return 0 on success, 1 if help/version requested, errno on error")
- line(" */")
- line("int parse_standard_options(void (*usage_func)(), int argc, char **argv);")
- line("")
- line("#endif");
+ line ("#ifndef STANDARD_H")
+ line ("#define STANDARD_H")
+ line ()
+ line ("/**")
+ line (" * Parse standard command line options (--help, --version)")
+ line (" * @param usage_func Function pointer to usage display function")
+ line (" * @param argc Argument count")
+ line (" * @param argv Argument vector")
+ line (" * @return 0 on success, 1 if help/version requested, errno on error")
+ line (" */")
+ line ("int parse_standard_options(void (*usage_func)(), int argc, char **argv);")
+ line ()
+ line ("#endif");
+
+/* WHATNEXT.md template */
+char *what_next_template =
+ line ("# What next?")
+ line ("")
+ line ("## Steps")
+ line (" - Write a description in the README")
+ line (" - Write the usage function ( write to stderr )")
+ line (" - Start writing your program");
#endif
diff --git a/yait/main.c b/yait/main.c
@@ -85,8 +85,6 @@ main (int argc, char **argv)
conf.flag.git = DEFAULT_GIT_INIT;
conf.flag.clang_format = DEFAULT_CLANG_FORMAT;
- conf.flag.GNU = true; // debug
-
conf.licence = DEFAULT_LICENSE;
int result = create_project (conf);
@@ -116,8 +114,8 @@ create_project (format_t fmt)
}
if (!fmt.name)
fmt.name = DEFAULT_USER_NAME;
- create_file_with_content ("README", readme_template,
- fmt.project ? fmt.project : DEFAULT_PROJECT_NAME);
+ create_file_with_content ("WHATNEXT.md", what_next_template);
+ create_file_with_content ("README", readme_template, fmt.project);
create_file_with_content ("configure", configure_template);
int status = system ("chmod +x configure");
if (status)
@@ -141,7 +139,7 @@ create_project (format_t fmt)
create_file_with_content ("Makefile", makefile_template, makefile_name,
makefile_name, makefile_name, makefile_name,
makefile_name, makefile_name, fmt.project,
- makefile_name, makefile_name);
+ makefile_name);
free (makefile_name);
if (fmt.flag.clang_format)
create_file_with_content (".clang-format", clang_format_template);
@@ -163,17 +161,13 @@ create_project (format_t fmt)
create_and_enter_directory (fmt.project);
if (!fmt.flag.GNU)
{
- create_file_with_content ("main.c", main_c_template,
- fmt.project ? fmt.project
- : DEFAULT_PROJECT_NAME,
- fmt.name ? fmt.name : "World");
+ create_file_with_content ("main.c", main_c_template, fmt.project,
+ fmt.name);
}
else
{
create_file_with_content ("main.c", main_c_gnu_template, fmt.project,
- fmt.project ? fmt.project
- : DEFAULT_PROJECT_NAME,
- fmt.name ? fmt.name : "World");
+ fmt.project, fmt.name);
}
if (fmt.flag.GNU)
{