time Utility for working with time/dates

This commit is contained in:
2025-10-16 14:15:55 +02:00
parent 7445689010
commit 553b893a9c
4 changed files with 88 additions and 0 deletions

2
user/time/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.o
time

24
user/time/Makefile Normal file
View File

@ -0,0 +1,24 @@
include $(ROOT)/mk/grabsrc.mk
include ../Makefile.inc
.PHONY: all clean
TARGET := time
LDFLAGS += -L$(ROOT)/ulib -l:libulib.a
SRCFILES := $(call GRABSRC, .)
CFILES := $(call GET_CFILES, $(SRCFILES))
OBJ := $(call GET_OBJ, $(SRCFILES))
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
all: $(TARGET)
$(TARGET): $(OBJ)
$(LD) $^ $(LDFLAGS) -o $@
echo $$(realpath $(TARGET)) >> $(FILES)
clean:
rm -f $(OBJ) $(TARGET)

24
user/time/main.c Normal file
View File

@ -0,0 +1,24 @@
#include <stdint.h>
#include <stddef.h>
#include <ulib.h>
#define CMDS(X) \
X(now)
void main(void) {
if (argslen() == 0) {
return;
}
char *cmd = args()[0];
#define X(name) if (string_strcmp(cmd, #name) == 0) { \
extern void tm_ ## name(void); \
tm_ ## name(); \
return; \
}
CMDS(X)
#undef X
uprintf("time: unknown command %s\n", cmd);
}

38
user/time/now.c Normal file
View File

@ -0,0 +1,38 @@
#include <stdint.h>
#include <stddef.h>
#include <ulib.h>
struct {
char *format;
} TM_NOW_CONFIG = {0};
static Arg ARGS[] = {
ARG("-fmt", ARG_STRING, &TM_NOW_CONFIG.format),
ARG_END(),
};
void tm_now(void) {
int32_t ret;
if ((ret = parse_args(args()+1, argslen()-1, ARGS)) < 0) {
uprintf("time: could not parse args: %d\n", ret);
return;
}
Time tmbuf;
time(&tmbuf);
if (TM_NOW_CONFIG.format == NULL) {
uprintf("%02u/%02u/%02u %02u:%02u:%02u\n",
tmbuf.day, tmbuf.month, tmbuf.year,
tmbuf.hour, tmbuf.minute, tmbuf.second
);
return;
}
if (string_strcmp(TM_NOW_CONFIG.format, "unix") == 0) {
timeunix_t unix = time_tounix(&tmbuf);
uprintf("%lu\n", unix);
} else {
uprintf("time: unknown format %s\n", TM_NOW_CONFIG.format);
}
}