From f1ae8c36c94a26e8aff2339e241542f430c96913 Mon Sep 17 00:00:00 2001 From: Doan Luu Duc Tai Date: Sun, 11 Oct 2026 19:21:34 -0500 Subject: Initial commit --- include/kd_deck.h | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/kd_image.h | 13 ++++++++ 2 files changed, 109 insertions(+) create mode 100644 include/kd_deck.h create mode 100644 include/kd_image.h (limited to 'include') diff --git a/include/kd_deck.h b/include/kd_deck.h new file mode 100644 index 0000000..13401b1 --- /dev/null +++ b/include/kd_deck.h @@ -0,0 +1,96 @@ +#ifndef KD_DECK_H +#define KD_DECK_H + +#include +#include + +#define KD_PATH_MAX 1024 +#define KD_KEY_MAX 160 +#define KD_VALUE_MAX 8192 +#define KD_NEW_PER_DAY 5 +#define KD_MAX_INTERVAL_DAYS 3650L +#define KD_NO_JUKUGO (-1) + +typedef struct KDJukugo { + char id[64]; + char front_path[KD_PATH_MAX]; + char answer_path[KD_PATH_MAX]; +} KDJukugo; + +typedef struct KDCard { + char id[64]; + char dir_path[KD_PATH_MAX]; + char image_path[KD_PATH_MAX]; + char answer_image_path[KD_PATH_MAX]; + char url_path[KD_PATH_MAX]; + char url[KD_VALUE_MAX]; + int has_image; + int has_answer_image; + int has_url; + KDJukugo *jukugo; + size_t jukugo_count; + size_t jukugo_capacity; +} KDCard; + +typedef struct KDStudyItem { + char key[KD_KEY_MAX]; + size_t card_index; + int jukugo_index; + size_t review_index; +} KDStudyItem; + +typedef struct KDReview { + char key[KD_KEY_MAX]; + long interval_days; + long ease_milli; + long repetitions; + long lapses; + long due_epoch; + long last_epoch; + long introduced_day; + int relearning; +} KDReview; + +typedef struct KDMessage { + char *text; + int is_warning; +} KDMessage; + +typedef struct KDDeck { + char root_path[KD_PATH_MAX]; + char state_path[KD_PATH_MAX]; + KDCard *cards; + size_t card_count; + size_t card_capacity; + KDStudyItem *items; + size_t item_count; + size_t item_capacity; + KDReview *reviews; + size_t review_count; + size_t review_capacity; + KDMessage *messages; + size_t message_count; + size_t message_capacity; +} KDDeck; + +void kd_deck_init(KDDeck *deck); +void kd_deck_free(KDDeck *deck); +int kd_deck_scan(KDDeck *deck, const char *root_path, const char *state_path); +int kd_deck_save(KDDeck *deck); + +const char *kd_card_url(const KDCard *card); + +long kd_today_key(time_t now); +size_t kd_new_today(const KDDeck *deck, time_t now); +size_t kd_count_due(const KDDeck *deck, time_t now); +size_t kd_count_unintroduced(const KDDeck *deck); +int kd_select_next(KDDeck *deck, time_t now, size_t *item_index); +int kd_find_kanji_item_by_number(const KDDeck *deck, const char *number, + size_t *item_index); +void kd_grade(KDDeck *deck, size_t item_index, int remembered, time_t now); +int kd_relearn_prompt(KDDeck *deck, size_t item_index, time_t now); +int kd_relearn_card(KDDeck *deck, size_t card_index, time_t now); + +void kd_add_message(KDDeck *deck, int is_warning, const char *format, ...); + +#endif diff --git a/include/kd_image.h b/include/kd_image.h new file mode 100644 index 0000000..136c0e7 --- /dev/null +++ b/include/kd_image.h @@ -0,0 +1,13 @@ +#ifndef KD_IMAGE_H +#define KD_IMAGE_H + +#include +#include "nuklear.h" + +struct nk_image kd_ppm_load(Display *display, int screen, + const char *path, + unsigned int max_width, + unsigned int max_height); +void kd_ppm_free(struct nk_image *image); + +#endif -- cgit v1.2.3