This commit is contained in:
Daniel Ledda
2025-11-10 05:35:43 +01:00
parent fa0ee597ce
commit 9d3fd50137

131
app.c
View File

@@ -1,4 +1,5 @@
#include "time.h" #include "time.h"
#define DJSTD_BASIC_ENTRY
#include "djstdlib/core.c" #include "djstdlib/core.c"
typedef enum { typedef enum {
@@ -586,12 +587,13 @@ int32 cmd_dispatch(Arena *arena, StringList args, BasicCommandList cmds) {
return result; return result;
} }
int main(int argc, char **argv) { int djstd_entry(Arena *arena, StringList args) {
initialiseDjStdCore(); BasicCommandList cmds = AsList(BasicCommandList, {
Arena *arena = arenaAlloc(Megabytes(64)); {
StringList args = getArgs(arena, argc, argv); .name = s("status"),
.description = s("Shows the currently recorded exercises. Default displays the current day."),
CmdOptionArg cmdStatusOptArgs[] = { .posArgs = EmptyList(),
.optArgs = AsList(CmdOptionArgList, {
{ {
.charName = '\0', .charName = '\0',
.name = s("all"), .name = s("all"),
@@ -604,16 +606,13 @@ int main(int argc, char **argv) {
.description = s("Displays the history for a previous number of days."), .description = s("Displays the history for a previous number of days."),
.type = CmdArgType_INT, .type = CmdArgType_INT,
} }
}; }),
BasicCommand cmdStatus = {
.name = s("status"),
.description = s("Shows the currently recorded exercises. Default displays the current day."),
.posArgs = EmptyList(CmdPositionalArgList),
.optArgs = ArrayAsList(CmdOptionArgList, cmdStatusOptArgs),
.command = gymTrackerStatus, .command = gymTrackerStatus,
}; },
{
CmdPositionalArg cmdDoPosArgs[] = { .name = s("do"),
.description = s("Records an exercise with weight and reps"),
.posArgs = AsList(CmdPositionalArgList, {
{ {
.name = s("exercise"), .name = s("exercise"),
.type = CmdArgType_STRING, .type = CmdArgType_STRING,
@@ -628,102 +627,44 @@ int main(int argc, char **argv) {
.description = s("Number of repetitions performed"), .description = s("Number of repetitions performed"),
.type = CmdArgType_INT, .type = CmdArgType_INT,
} }
}; }),
BasicCommand cmdDo = { .optArgs = EmptyList(),
.name = s("do"),
.description = s("Records an exercise with weight and reps"),
.posArgs = ArrayAsList(CmdPositionalArgList, cmdDoPosArgs),
.optArgs = EmptyList(CmdOptionArgList),
.command = gymTrackerDo, .command = gymTrackerDo,
}; },
{
CmdPositionalArg cmdDeletePosArgs[] = { .name = s("delete"),
.description = s("Deletes the last given number of entries."),
.posArgs = AsList(CmdPositionalArgList, {
{ {
.name = s("count"), .name = s("count"),
.description = s("The number of entries to pop off the end of the record."), .description = s("The number of entries to pop off the end of the record."),
.type = CmdArgType_INT, .type = CmdArgType_INT,
} }
}; }),
BasicCommand cmdDelete = { .optArgs = EmptyList(),
.name = s("delete"),
.description = s("Deletes the last given number of entries."),
.posArgs = ArrayAsList(CmdPositionalArgList, cmdDeletePosArgs),
.optArgs = EmptyList(CmdOptionArgList),
.command = gymTrackerDeleteEntries, .command = gymTrackerDeleteEntries,
}; },
{
BasicCommand cmdList = {
.name = s("list"), .name = s("list"),
.description = s("Lists all available exercises in the database."), .description = s("Lists all available exercises in the database."),
.posArgs = EmptyList(CmdPositionalArgList), .posArgs = EmptyList(),
.optArgs = EmptyList(CmdOptionArgList), .optArgs = EmptyList(),
.command = gymTrackerListExercises, .command = gymTrackerListExercises,
}; },
{
CmdPositionalArg cmdAddPosArgs[] = { .name = s("add"),
.description = s("Adds a new exercise name to the database."),
.posArgs = AsList(CmdPositionalArgList, {
{ {
.name = s("name"), .name = s("name"),
.description = s("The name of the exercise to be added."), .description = s("The name of the exercise to be added."),
.type = CmdArgType_STRING, .type = CmdArgType_STRING,
}, },
}; }),
BasicCommand cmdAdd = { .optArgs = EmptyList(),
.name = s("add"),
.description = s("Adds a new exercise name to the database."),
.posArgs = ArrayAsList(CmdPositionalArgList, cmdAddPosArgs),
.optArgs = EmptyList(CmdOptionArgList),
.command = gymTrackerAddExercise, .command = gymTrackerAddExercise,
};
BasicCommand commands[] = {
cmdStatus,
cmdDo,
cmdDelete,
cmdList,
cmdAdd,
};
return cmd_dispatch(arena, args, ArrayAsList(BasicCommandList, commands));
/*
if (icmd.posArgs.length > 0) {
print("\tPositional arguments:\n");
for (EachIn(icmd.posArgs, j)) {
CmdPositionalArg arg = icmd.posArgs.data[j];
print("\t- %S: (%S) %S\n",
arg.name,
cmdArgTypeFmt(arg.type),
arg.description
);
}
} }
});
if (icmd.optArgs.length > 0) { return cmd_dispatch(arena, args, cmds);
print("\tOptions:\n");
}
int statusCode = 0;
if (statusCode == 0) {
string cmd = args.data[0];
list<string> argsRest = ListSlice(args, 1);
if (strEql(s("status"), cmd)) {
statusCode = gymTrackerStatus(arena, argsRest);
} else if (strEql(s("do"), cmd)) {
statusCode = gymTrackerDo(arena, argsRest);
} else if (strEql(s("delete"), cmd)) {
statusCode = gymTrackerDeleteEntries(arena, argsRest);
} else if (strEql(s("list"), cmd)) {
statusCode = gymTrackerListExercises(arena, argsRest);
} else if (strEql(s("add"), cmd)) {
statusCode = gymTrackerAddExercise(arena, argsRest);
} else {
print("Unknown command \"%S\"\n", args.data[0]);
statusCode = 1;
}
}
return statusCode;
*/
} }