commit a9da6ecfee53b02b1788d92071650ab7c24ef52b
parent 4a9c1f17b744b9bcc5e4b1d394cab4d215ebc384
Author: vx-clutch <[email protected]>
Date: Mon, 28 Jul 2025 12:31:40 -0400
save
Diffstat:
6 files changed, 131 insertions(+), 133 deletions(-)
diff --git a/c-out/bin/yait b/c-out/bin/yait
Binary files differ.
diff --git a/c-out/obj/main.o b/c-out/obj/main.o
Binary files differ.
diff --git a/c-out/obj/yait.o b/c-out/obj/yait.o
Binary files differ.
diff --git a/config.mak b/config.mak
@@ -0,0 +1,4 @@
+PREFIX=/usr/bin/
+CFLAGS=-Wall -Wextra -O2
+LDFLAGS=
+CC=gcc
diff --git a/yait/debug.h b/yait/debug.h
@@ -0,0 +1,35 @@
+#ifndef DEBUG_H
+#define DEBUG_H
+
+#ifdef DEBUG
+#define on_error(msg, code) \
+ if (err) \
+ { \
+ fprintf (stderr, "\n"); \
+ printfn (msg ": %s", strerror (err)); \
+ return code; \
+ }
+#else
+#define on_error(msg, code) \
+ if (err) \
+ { \
+ printfn (msg ": %s", strerror (err)); \
+ return code; \
+ }
+#endif
+
+#ifdef DEBUG
+#define debug(fmt, ...) \
+ fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "\e[0m\n", __LINE__, \
+ ##__VA_ARGS__)
+#define debugc(fmt, ...) \
+ fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "... \e[0m", __LINE__, \
+ ##__VA_ARGS__)
+#define done fprintf (stderr, "done.\n")
+#else
+#define debug(fmt, ...) ((void)0)
+#define debugc(fmt, ...) ((void)0)
+#define done ((void)0)
+#endif
+
+#endif // DEBUG_H
diff --git a/yait/main.c b/yait/main.c
@@ -23,6 +23,7 @@
#include "../core/standard.h"
#include "contents.h"
#include "format.h"
+#include "debug.h"
#define DEFAULT_USER_NAME "unknown"
#define DEFAULT_PROJECT_NAME "Project"
@@ -30,55 +31,13 @@
#define DEFAULT_GIT_INIT true
#define DEFAULT_CLANG_FORMAT true
-#define print_option(option, description) \
- printf (" %-20s %-20s\n", option, description)
-
-#ifdef DEBUG
-#define on_error(msg, code) \
- if (err) \
- { \
- fprintf (stderr, "\n"); \
- printfn (msg ": %s", strerror (err)); \
- return code; \
- }
-#else
-#define on_error(msg, code) \
- if (err) \
- { \
- printfn (msg ": %s", strerror (err)); \
- return code; \
- }
-#endif
-
-#ifdef DEBUG
-#define debug(fmt, ...) \
- fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "\e[0m\n", __LINE__, \
- ##__VA_ARGS__)
-#define debugc(fmt, ...) \
- fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "... \e[0m", __LINE__, \
- ##__VA_ARGS__)
-#define done fprintf (stderr, "done.\n")
-#else
-#define debug(fmt, ...)
-#define debugc(fmt, ...)
-#define done
-#endif
-
-int create_license (format_t);
-int create_configure ();
-int create_makefile (format_t);
-int create_project (format_t);
-int generate_source_code (format_t);
-int maybe_apply_clang_format (format_t);
-int reset_path_ ();
-int sanitize (format_t *);
-int setup_git (format_t);
-int parse_arguments (format_t *, int, char **);
-
/* This is to keep track of how deep we are within
the project tree. This is used in reset_path */
int depth;
+#define print_option(option, description) \
+ printf (" %-20s %-20s\n", option, description)
+
void
usage (int status)
{
@@ -102,94 +61,6 @@ usage (int status)
printf (" --version output version information and exit\n");
}
-int
-main (int argc, char **argv)
-{
- int err;
-
- if (argc < 2)
- {
- printfn ("error: not enough arguments.");
- return 1;
- }
-
- err = initialize_main (&argc, &argv);
- err = parse_standard_options (usage, argc, argv);
-
- if (err && err != HELP_REQUESTED)
- {
- printfn ("error: %s", strerror (err));
- return err;
- }
-
- format_t conf = { 0 };
-
- // TODO: Argument Parsing
- conf.project = "sample_project";
- conf.name = "vx_clutch";
-
- if (!conf.name)
- {
- struct passwd *pw = getpwuid (getuid ());
- conf.name = (pw && pw->pw_name) ? pw->pw_name : DEFAULT_USER_NAME;
- }
-
- conf.flag.git = DEFAULT_GIT_INIT;
- conf.flag.clang_format = DEFAULT_CLANG_FORMAT;
- conf.license = DEFAULT_LICENSE;
-
- err = create_project (conf);
- if (!err)
- debug ("project made successfully");
- else
- debug ("something when wrong");
-
- return err;
-}
-
-int
-create_project (format_t fmt)
-{
- int err;
-
- debugc ("sanitize");
- err = sanitize (&fmt);
- on_error ("failed to sanitize format", err);
- done;
-
- debugc ("take %s", fmt.project);
- err = create_and_enter_directory (fmt.project);
- depth = 0;
- on_error ("failed to create or enter directory", err);
- done;
-
- // debug ("create licenseing");
- // err = create_license_if_needed (fmt);
- // on_error ("failed to create license", err);
-
- debugc ("create makefile");
- err = create_makefile (fmt);
- on_error ("failed to create Makefile", err);
- done;
-
- debug ("setup git");
- err = setup_git (fmt);
- if (err)
- printfn ("warning: git initialization failed: %s", strerror (err));
-
- debug ("create .clang-format");
- err = maybe_apply_clang_format (fmt);
- if (err)
- printfn ("warning: clang-format setup failed: %s", strerror (err));
-
- debugc ("generate source code");
- err = generate_source_code (fmt);
- on_error ("failed to generate source code", err);
- done;
-
- return 0;
-}
-
/* This macro exist purely because I like how it looks. */
#define reset_path reset_path_ ()
int
@@ -405,3 +276,91 @@ parse_arguments (format_t *conf, int argc, char **argv)
}
return 0;
}
+
+int
+create_project (format_t fmt)
+{
+ int err;
+
+ debugc ("sanitize");
+ err = sanitize (&fmt);
+ on_error ("failed to sanitize format", err);
+ done;
+
+ debugc ("take %s", fmt.project);
+ err = create_and_enter_directory (fmt.project);
+ depth = 0;
+ on_error ("failed to create or enter directory", err);
+ done;
+
+ // debug ("create licenseing");
+ // err = create_license_if_needed (fmt);
+ // on_error ("failed to create license", err);
+
+ debugc ("create makefile");
+ err = create_makefile (fmt);
+ on_error ("failed to create Makefile", err);
+ done;
+
+ debug ("setup git");
+ err = setup_git (fmt);
+ if (err)
+ printfn ("warning: git initialization failed: %s", strerror (err));
+
+ debug ("create .clang-format");
+ err = maybe_apply_clang_format (fmt);
+ if (err)
+ printfn ("warning: clang-format setup failed: %s", strerror (err));
+
+ debugc ("generate source code");
+ err = generate_source_code (fmt);
+ on_error ("failed to generate source code", err);
+ done;
+
+ return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+ int err;
+
+ if (argc < 2)
+ {
+ printfn ("error: not enough arguments.");
+ return 1;
+ }
+
+ err = initialize_main (&argc, &argv);
+ err = parse_standard_options (usage, argc, argv);
+
+ if (err && err != HELP_REQUESTED)
+ {
+ printfn ("error: %s", strerror (err));
+ return err;
+ }
+
+ format_t conf = { 0 };
+
+ // TODO: Argument Parsing
+ conf.project = "sample_project";
+ conf.name = "vx_clutch";
+
+ if (!conf.name)
+ {
+ struct passwd *pw = getpwuid (getuid ());
+ conf.name = (pw && pw->pw_name) ? pw->pw_name : DEFAULT_USER_NAME;
+ }
+
+ conf.flag.git = DEFAULT_GIT_INIT;
+ conf.flag.clang_format = DEFAULT_CLANG_FORMAT;
+ conf.license = DEFAULT_LICENSE;
+
+ err = create_project (conf);
+ if (!err)
+ debug ("project made successfully");
+ else
+ debug ("something when wrong");
+
+ return err;
+}