commit 7674010155663271286067453ec7f573d9f5516c
parent 3a9d52c5133f0d3c25da9e8d9d074ea5dd68e2cb
Author: vx-clutch <[email protected]>
Date: Thu, 17 Jul 2025 13:46:22 -0400
save
Diffstat:
9 files changed, 95 insertions(+), 28 deletions(-)
diff --git a/.clang-format b/.clang-format
@@ -0,0 +1,2 @@
+Language: Cpp
+BasedOnStyle: GNU
diff --git a/Makefile b/Makefile
@@ -1,10 +1,9 @@
prefix = /usr/bin
-YAIT_SRCS := $(wildcard yait/*.c) $(wildcard lib/*.c)
+YAIT_SRCS := $(wildcard yait/*.c) $(wildcard core/*.c)
+YAIT_OBJS := $(patsubst yait/%.c,c-out/obj/%.o,$(YAIT_SRCS))
-YAIT_OBJS := $(patsubst yait/%.c,obj/yait/%.o,$(YAIT_SRCS))
-
-YAIT := bin/yait
+YAIT := c-out/bin/yait
-include config.mak
@@ -14,15 +13,13 @@ all:
@exit 1
else
-all: obj bin $(YAIT) $(YAIT_DOC)
-
-obj:
- mkdir -p obj/yait
+all: build $(YAIT) $(YAIT_DOC)
-bin:
- mkdir -p bin
+build:
+ mkdir -p c-out/bin
+ mkdir -p c-out/obj
-obj/yait/%.o: yait/%.c
+c-out/obj/%.o: yait/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(YAIT): $(YAIT_OBJS)
@@ -40,9 +37,9 @@ uninstall:
exit 1
clean:
- rm -rf obj bin
+ rm -rf c-out
dist-clean: clean
rm -f config.mak
-.PHONY: all clean dist-clean install uninstall
+.PHONY: all clean dist-clean install uninstall build format
diff --git a/README b/README
@@ -5,6 +5,3 @@ definitely complete. This tool will create a new directory containing all
project files needed for your new C ( maybe C++ ) project. It provides you with
a build system and some basic source files to give you a kick start on your new
project--with optional libraries!
-
-For a more in-depth explanation of how to use the tool refer to `--help` or use
-the doc tool `yait-doc`.
diff --git a/core/e.c b/core/e.c
@@ -0,0 +1,11 @@
+#include "e.h"
+#include "print.h"
+#include <stdlib.h>
+
+error_t unwrap(error_t err) {
+ if (!err.null) {
+ printfn("error: %s", err.src);
+ exit(err.status);
+ }
+ return err;
+}
diff --git a/core/e.h b/core/e.h
@@ -1,9 +1,14 @@
#ifndef ERROR_H
#define ERROR_H
+#include <stdbool.h>
+
typedef struct {
- int stat;
+ bool null;
+ int status;
const char *src;
} error_t;
+error_t unwrap(error_t);
+
#endif
diff --git a/core/file.c b/core/file.c
@@ -4,19 +4,49 @@
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+error_t touch(char *path, char *format, ...) {
+ error_t err = {0};
+ err.null = true; // success by default
-error_t write(char *path, char *format, ...) {
- error_t err;
va_list args;
va_start(args, format);
- FILE *fp;
- fp = fopen(path, "w");
+
+ FILE *fp = fopen(path, "w");
if (!fp) {
- err.stat = errno;
+ err.null = false;
+ err.status = errno;
err.src = strerror(errno);
+ va_end(args);
+ return err;
}
+
vfprintf(fp, format, args);
fclose(fp);
+
va_end(args);
return err;
}
+
+error_t dir(char *format, ...) {
+ error_t err = {0};
+ err.null = true; // success by default
+
+ va_list args;
+ va_start(args, format);
+
+ char path[1024];
+ vsnprintf(path, sizeof(path), format, args);
+
+ va_end(args);
+
+ if (mkdir(path, 0777) < 0) {
+ err.null = false;
+ err.status = errno;
+ err.src = strerror(errno);
+ }
+
+ return err;
+}
diff --git a/core/file.h b/core/file.h
@@ -2,8 +2,13 @@
#define FILE_H
#include "e.h"
+#include <unistd.h>
-error_t write(char *, char *, ...);
-void printfn(char *, ...);
+#define take(x, ...) \
+ dir(x, ##__VA_ARGS__); \
+ chdir(x);
+
+error_t touch(char *, char *, ...);
+error_t dir(char *, ...);
#endif
diff --git a/tools/format b/tools/format
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+find . -name "*.c" -exec clang-format -i {} \;
diff --git a/yait/main.c b/yait/main.c
@@ -1,18 +1,35 @@
-#include "../lib/print.h"
-#include "core.h"
+#include "../core/print.h"
+#include "../core/file.h"
+#include "format.h"
-void create(format_t);
+int create(format_t);
int main(int argc, char **argv) {
if (argc < 2) {
printfn("error: not enough arguments.");
return 1;
}
+
format_t conf;
conf.name = argv[1];
conf.nogit = false;
+
+ create(conf);
return 0;
}
-void create(format_t conf) {
+int create(format_t fmt) {
+ take(fmt.name);
+
+ touch("README",
+ "%s ( concise description )\n\n"
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n"
+ "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis\n"
+ "nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n"
+ "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu\n"
+ "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in\n"
+ "culpa qui officia deserunt mollit anim id est laborum.",
+ fmt.name);
+ touch ("hello", "world");
+ return 0;
}