init(lib): add Tanabata FM lib
This commit is contained in:
parent
f075769648
commit
b6c4837ffe
52
include/tanabata.h
Normal file
52
include/tanabata.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Tanabata file manager lib
|
||||||
|
// By Masahiko AMANO aka H1K0
|
||||||
|
|
||||||
|
#ifndef TANABATA_H
|
||||||
|
#define TANABATA_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
extern "C" {
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
// Tanabata (七夕) - the struct with all databases
|
||||||
|
typedef struct tanabata {
|
||||||
|
Sasahyou sasahyou; // Sasahyou struct
|
||||||
|
Sappyou sappyou; // Sappyou struct
|
||||||
|
Shoppyou shoppyou; // Shoppyou struct
|
||||||
|
} Tanabata;
|
||||||
|
|
||||||
|
// ==================== DATABASE SECTION ==================== //
|
||||||
|
|
||||||
|
// Initialize empty tanabata
|
||||||
|
int tanabata_init(Tanabata *tanabata);
|
||||||
|
|
||||||
|
// Free tanabata
|
||||||
|
int tanabata_free(Tanabata *tanabata);
|
||||||
|
|
||||||
|
// Weed tanabata
|
||||||
|
int tanabata_weed(Tanabata *tanabata);
|
||||||
|
|
||||||
|
// Load tanabata
|
||||||
|
int tanabata_load(Tanabata *tanabata);
|
||||||
|
|
||||||
|
// Save tanabata
|
||||||
|
int tanabata_save(Tanabata *tanabata);
|
||||||
|
|
||||||
|
// Open tanabata
|
||||||
|
int tanabata_open(Tanabata *tanabata, const char *path);
|
||||||
|
|
||||||
|
// Dump tanabata
|
||||||
|
int tanabata_dump(Tanabata *tanabata, const char *path);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif //TANABATA_H
|
||||||
96
src/tanabata/database.c
Normal file
96
src/tanabata/database.c
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
#include <malloc.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include "../../include/tanabata.h"
|
||||||
|
|
||||||
|
int tanabata_init(Tanabata *tanabata) {
|
||||||
|
int status = 0;
|
||||||
|
status |= sasahyou_init(&tanabata->sasahyou);
|
||||||
|
status |= sappyou_init(&tanabata->sappyou);
|
||||||
|
status |= shoppyou_init(&tanabata->shoppyou);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tanabata_free(Tanabata *tanabata) {
|
||||||
|
int status = 0;
|
||||||
|
status |= sasahyou_free(&tanabata->sasahyou);
|
||||||
|
status |= sappyou_free(&tanabata->sappyou);
|
||||||
|
status |= shoppyou_free(&tanabata->shoppyou);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tanabata_weed(Tanabata *tanabata) {
|
||||||
|
int status = 0;
|
||||||
|
status |= sasahyou_weed(&tanabata->sasahyou);
|
||||||
|
status |= sappyou_weed(&tanabata->sappyou);
|
||||||
|
status |= shoppyou_weed(&tanabata->shoppyou);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tanabata_load(Tanabata *tanabata) {
|
||||||
|
int status = 0;
|
||||||
|
status |= sasahyou_load(&tanabata->sasahyou);
|
||||||
|
status |= sappyou_load(&tanabata->sappyou);
|
||||||
|
status |= shoppyou_load(&tanabata->shoppyou);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tanabata_save(Tanabata *tanabata) {
|
||||||
|
int status = 0;
|
||||||
|
status |= sasahyou_save(&tanabata->sasahyou);
|
||||||
|
status |= sappyou_save(&tanabata->sappyou);
|
||||||
|
status |= shoppyou_save(&tanabata->shoppyou);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tanabata_open(Tanabata *tanabata, const char *path) {
|
||||||
|
if (path[-1] == '/') {
|
||||||
|
fprintf(stderr, "Failed to open tanabata: output path must not end with '/'\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
struct stat st;
|
||||||
|
if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) {
|
||||||
|
fprintf(stderr, "Failed to open tanabata: directory '%s' does not exist\n", path);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int status = 0;
|
||||||
|
char *file_path = malloc(strlen(path) + 10);
|
||||||
|
strcpy(file_path, path);
|
||||||
|
status |= sasahyou_open(&tanabata->sasahyou, strcat(file_path, "/sasahyou"));
|
||||||
|
strcpy(file_path, path);
|
||||||
|
status |= sappyou_open(&tanabata->sappyou, strcat(file_path, "/sappyou"));
|
||||||
|
strcpy(file_path, path);
|
||||||
|
status |= shoppyou_open(&tanabata->shoppyou, strcat(file_path, "/shoppyou"));
|
||||||
|
free(file_path);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tanabata_dump(Tanabata *tanabata, const char *path) {
|
||||||
|
if (path[-1] == '/') {
|
||||||
|
fprintf(stderr, "Failed to dump tanabata: output path must not end with '/'\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
struct stat st;
|
||||||
|
if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) {
|
||||||
|
fprintf(stderr, "Failed to dump tanabata: directory '%s' does not exist\n", path);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int status = 0;
|
||||||
|
char *file_path = malloc(strlen(path) + 10);
|
||||||
|
strcpy(file_path, path);
|
||||||
|
status |= sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou"));
|
||||||
|
strcpy(file_path, path);
|
||||||
|
status |= sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou"));
|
||||||
|
strcpy(file_path, path);
|
||||||
|
status |= shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou"));
|
||||||
|
free(file_path);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user