aboutsummaryrefslogtreecommitdiffstats
path: root/src/cnki.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cnki.h')
-rw-r--r--src/cnki.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/cnki.h b/src/cnki.h
new file mode 100644
index 0000000..6e3565f
--- /dev/null
+++ b/src/cnki.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2020, yzrh <yzrh@tuta.io>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+
+#define ADDRESS_HEAD 0x0000
+
+#define ADDRESS_CAJ_PAGE 0x0010
+#define ADDRESS_CAJ_OUTLINE 0x0110
+#define ADDRESS_CAJ_BODY 0x0014
+
+#define ADDRESS_HN_PAGE 0x0090
+#define ADDRESS_HN_OUTLINE 0x0158
+
+#define ADDRESS_KDH_BODY 0x00fe
+
+#define KEY_KDH "FZHMEI"
+#define KEY_KDH_LENGTH 6
+
+typedef struct _file_stat_t {
+ char type[4];
+ int32_t page;
+ int32_t outline;
+} file_stat_t;
+
+typedef struct _object_outline_t {
+ char title[256]; /* Starting at file_stat_t->outline + 4 */
+ char hierarchy[24];
+ char page[12];
+ char text[12];
+ int32_t depth;
+ struct _object_outline_t *next;
+} object_outline_t;
+
+typedef struct _object_outline_tree_t {
+ int id;
+ struct _object_outline_t *item;
+ struct _object_outline_tree_t *up;
+ struct _object_outline_tree_t *left;
+ struct _object_outline_tree_t *right;
+} object_outline_tree_t;
+
+typedef enum _nh_code {
+ CCITTFAX,
+ DCT_0,
+ DCT_1,
+ JBIG2,
+ JPX
+} nh_code;
+
+typedef struct _object_nh_t {
+ int32_t address; /* Starting at end of object_outline_t */
+ int32_t size;
+ int16_t page[2];
+ int32_t zero[2];
+ char *text;
+ int32_t image_format; /* nh_code */
+ int32_t image_address;
+ int32_t image_size;
+ char *image;
+ struct _object_nh_t *next;
+} object_nh_t;
+
+typedef struct _cnki_t {
+ int stat;
+ int size_buf;
+ FILE *fp_i;
+ FILE *fp_o;
+ file_stat_t *file_stat;
+ object_outline_t *object_outline;
+ object_nh_t *object_nh;
+} cnki_t;
+
+/* cnki_pdf.c */
+int cnki_pdf(cnki_t **param);
+
+/* cnki_outline_tree.c */
+int cnki_outline_tree(object_outline_tree_t **outline_tree,
+ object_outline_t **outline, int *ids);
+
+/* cnki_xml.c */
+int cnki_xml(char **xml, FILE **fp);