This commit is contained in:
2025-11-10 21:54:10 -05:00
parent bfefb223f1
commit 1c9d62dabf
10 changed files with 172 additions and 41 deletions

View File

@@ -15,6 +15,7 @@ export E Q
PROGRAM = yait PROGRAM = yait
SRC = $(wildcard *.c) SRC = $(wildcard *.c)
OBJ = $(SRC:.c=.o) OBJ = $(SRC:.c=.o)
HDR = $(wildcard *.h)
CC = gcc CC = gcc
WARNINGS = -Wall -Wstrict-prototypes WARNINGS = -Wall -Wstrict-prototypes
@@ -25,7 +26,7 @@ LDFLAGS =
BINDIR = /usr/bin BINDIR = /usr/bin
LIBDIR = /usr/lib LIBDIR = /usr/lib
$(PROGRAM): $(OBJ) $(PROGRAM): $(OBJ) $(HDR)
$(E) " LINK " $@ $(E) " LINK " $@
$(Q) $(CC) $(LDFLAGS) $(DEFINES) -o $@ $(OBJ) $(LIBS) $(Q) $(CC) $(LDFLAGS) $(DEFINES) -o $@ $(OBJ) $(LIBS)
@@ -33,6 +34,9 @@ clean:
$(E) " CLEAN" $(E) " CLEAN"
$(Q) rm -f $(PROGRAM) $(OBJ) $(Q) rm -f $(PROGRAM) $(OBJ)
install: $(PROGRAM)
cp $(PROGRAM) ${BINDIR}
.c.o: .c.o:
$(E) " CC " $@ $(E) " CC " $@
$(Q) $(CC) $(CFLAGS) $(DEFINES) -c $< -o $@ $(Q) $(CC) $(CFLAGS) $(DEFINES) -c $< -o $@

8
README
View File

@@ -34,11 +34,9 @@ Something is gone:
o None o None
HOW TO INSTALL yait/fSD?
HOW TO BUILD yait/fSD? o UNIX: Look at estruct.h, do a 'make', test the program, 'make install'.
o UNIX: Compile the packge with make and install manually with for your
given system.
ACKNOWLEDGEMENTS AND STATUS ACKNOWLEDGEMENTS AND STATUS
@@ -47,3 +45,5 @@ This project's file strucutre, file format, and certain contents are
derived from uEmacs/PK 4.0 specifically from the Linux Torvalds derived from uEmacs/PK 4.0 specifically from the Linux Torvalds
distribution on GitHub. The README on from uEmacs/PK 4.0 has greater and distribution on GitHub. The README on from uEmacs/PK 4.0 has greater and
more accurate attributions, if you desire. more accurate attributions, if you desire.
November 10, 2025

76
full.c Normal file
View File

@@ -0,0 +1,76 @@
/* full.c
*
* Init to be called before project creation.
*
* written by vx-clutch
*/
#include <unistd.h>
#include "file.h"
#include "full.h"
#include "usage.h"
int full_project_init_and_cd(char *src)
{
if (ffexist(src))
die("%s already exists", src);
fmkdir(src);
if (chdir(src))
die("could not cd into %s", src);
// TODO(vx-clutch): Take in interactive arguments all at once
ffwrite("README", "\
+--------------------+\n\
| package/Author 1.0 |\n\
+--------------------+\n\
\n\
A project that does a thing 'well'.\n\
\n\
%s was written by ME!!!\n\
\n\
Copyright Notices:\n\
\n\
%s 1.0 (c) Copyright 2025 Author. \n\
Reference the COPYING file for detailed information\n\
\n\
\n\
WHAT IS package/Author?\n\
\n\
package/Author 1.0 is an optionated C and SH project generator. For C project\n\
generation is produces a similar layout to the source of this project. On\n\
SH it generates a shell script with useful useful scaffolding for a\n\
script.\n\
\n\
\n\
WHAT IS NEW\n\
\n\
Features:\n\
\n\
o This is the inital commit, EVERYTHING is new!\n\
\n\
Bug fixes - not very interesting:\n\
\n\
o None\n\
\n\
Something is gone:\n\
\n\
o None\n\
\n\
HOW TO INSTALL package/Author?\n\
\n\
o UNIX: Look at estruct.h, do a 'make', test the program, 'make install'.\n\
\n\
\n\
ACKNOWLEDGEMENTS AND STATUS\n\
\n\
This project's file strucutre, file format, and certain contents are\n\
derived from uEmacs/PK 4.0 specifically from the Linux Torvalds\n\
distribution on GitHub. The README on from uEmacs/PK 4.0 has greater and\n\
more accurate attributions, if you desire.\n\
\n\
LATE MODIFIED DATE", src, src);
return 0;
}

6
full.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef FULL_H_
#define FULL_H_
int full_project_init_and_cd(char *src);
#endif /* FULL_H_ */

View File

@@ -1,6 +1,8 @@
#ifndef GLOBALS_H_ #ifndef GLOBALS_H_
#define GLOBALS_H_ #define GLOBALS_H_
enum { SINGLE, FULL };
#define NPAT 4096 /* number of bytes for path buffer */ #define NPAT 4096 /* number of bytes for path buffer */
#endif /* GLOBALS_H_ */ #endif /* GLOBALS_H_ */

65
main.c
View File

@@ -18,16 +18,18 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "globals.h"
#include "proj.h"
#include "shell.h" #include "shell.h"
#include "usage.h" #include "usage.h"
#include "version.h" #include "version.h"
#include "proj.h"
void usage(int status) void usage(int status)
{ {
printf("Usage: %s filename\n", PROGRAM_NAME); printf("Usage: %s filename\n", PROGRAM_NAME);
printf(" or: %s [options]\n\n", PROGRAM_NAME); printf(" or: %s [options]\n\n", PROGRAM_NAME);
fputs(" -S enable shell creation mode\n", stdout); fputs(" -s enable shell creation mode\n", stdout);
fputs(" -S enable shell creation mode as a full project\n", stdout);
fputs(" --help display this help and exit\n", stdout); fputs(" --help display this help and exit\n", stdout);
fputs(" --version output version information and exit\n", stdout); fputs(" --version output version information and exit\n", stdout);
@@ -36,37 +38,44 @@ void usage(int status)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int c = 0;
int S = 0; int S = 0;
int carg; int mode = -1;
char *package = NULL;
if (argc == 2) { if (argc < 2)
if (strcmp(argv[1], "--help") == 0) {
usage(EXIT_FAILURE);
}
if (strcmp(argv[1], "--version") == 0) {
version();
exit(EXIT_SUCCESS);
}
}
for (carg = 0; carg < argc; ++carg) {
if (argv[carg][0] == '-') {
switch (argv[carg][1]) {
case 'S':
S = 1;
break;
}
}
}
if (argc < 2 || c)
die("not enough arguments"); die("not enough arguments");
char *package = argv[carg - 1]; for (int i = 1; i < argc; ++i)
{
if (argv[i][0] == '-')
{
if (strcmp(argv[i], "--help") == 0)
usage(EXIT_SUCCESS);
else if (strcmp(argv[i], "--version") == 0)
{
version();
exit(EXIT_SUCCESS);
}
else if (strcmp(argv[i], "-s") == 0) {
S = 1;
mode = SINGLE;
}
else if (strcmp(argv[i], "-S") == 0) {
S = 1;
mode = FULL;
}
else
die("unknown option");
}
else
package = argv[i];
}
if (S) if (!package)
makeshell(package); die("no package name provided");
if (S == SINGLE || S == FULL)
makeshell(package, mode);
else else
makeproj(package); makeproj(package);

22
shell.c
View File

@@ -11,18 +11,25 @@
#include "estruct.h" #include "estruct.h"
#include "file.h" #include "file.h"
#include "full.h"
#include "globals.h"
#include "input.h" #include "input.h"
#include "shell.h" #include "shell.h"
#include "single.h"
#include "usage.h" #include "usage.h"
int makeshell(char *src) int makeshell(char *src, int complexity) {
{
if (ffexist(src))
die("%s already exists", src);
char *license = LICENSE; char *license = LICENSE;
if (complexity == SINGLE)
single_init(src);
else if (complexity == FULL)
full_project_init_and_cd(src);
else
die("invalid state! shell.c:%d", __LINE__);
if (!QLICENSE) if (!QLICENSE)
license = getstring("License"); license = getstring("License");
char *description = getstring("Description"); char *description = getstring("Description");
ffwrite(src, "\ ffwrite(src, "\
@@ -58,7 +65,8 @@ while [ $# -gt 0 ]; do\n\
exit 1 ;;\n\ exit 1 ;;\n\
esac\n\ esac\n\
shift\n\ shift\n\
done", license, description, 2025, "fSD", description); done",
license, description, 2025, "fSD", description);
struct stat st; struct stat st;
if (stat(src, &st) == 0) if (stat(src, &st) == 0)

View File

@@ -1,6 +1,6 @@
#ifndef SHELL_H_ #ifndef SHELL_H_
#define SHELL_H_ #define SHELL_H_
int makeshell(char *src); int makeshell(char *src, int complexity);
#endif /* SHELL_H_ */ #endif /* SHELL_H_ */

20
single.c Normal file
View File

@@ -0,0 +1,20 @@
/* single.c
*
* Init to be called before single file
* creation as a final product.
*
* written by vx-clutch
*/
#include <unistd.h>
#include "file.h"
#include "single.h"
#include "usage.h"
int single_init(char *src)
{
if (ffexist(src))
die("%s already exists", src);
return 0;
}

6
single.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef SINGLE_H_
#define SINGLE_H_
int single_init(char *src);
#endif /* SINGLE_H_ */