1
Fork 0
zero-epwing-go/build-post.h

335 lines
11 KiB
C

/* -*- C -*-
* Copyright (c) 1997-2006 Motoyuki Kasahara
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef EB_BUILD_POST_H
#define EB_BUILD_POST_H
#include "defs.h"
/*
* Text domain name.
*/
#define EB_TEXT_DOMAIN_NAME "eb"
/*
* Data size of a book entry in a catalog file.
*/
#define EB_SIZE_EB_CATALOG 40
#define EB_SIZE_EPWING_CATALOG 164
/*
* Maximum number of search titles.
*/
#define EB_MAX_SEARCH_TITLES 14
/*
* File names.
*/
#define EB_FILE_NAME_START "start"
#define EB_FILE_NAME_HONMON "honmon"
#define EB_FILE_NAME_FUROKU "furoku"
#define EB_FILE_NAME_APPENDIX "appendix"
/*
* Directory names.
*/
#define EB_DIRECTORY_NAME_DATA "data"
#define EB_DIRECTORY_NAME_GAIJI "gaiji"
#define EB_DIRECTORY_NAME_STREAM "stream"
#define EB_DIRECTORY_NAME_MOVIE "movie"
/*
* Search word types.
*/
#define EB_WORD_ALPHABET 0
#define EB_WORD_KANA 1
#define EB_WORD_OTHER 2
#define EB_WORD_INVALID -1
/*
* Index Style flags.
*/
#define EB_INDEX_STYLE_CONVERT 0
#define EB_INDEX_STYLE_ASIS 1
#define EB_INDEX_STYLE_REVERSED_CONVERT 2
#define EB_INDEX_STYLE_DELETE 2
/*
* Text content currently read.
*/
#define EB_TEXT_MAIN_TEXT 1
#define EB_TEXT_HEADING 2
#define EB_TEXT_RAWTEXT 3
#define EB_TEXT_OPTIONAL_TEXT 4
#define EB_TEXT_SEEKED 0
#define EB_TEXT_INVALID -1
/*
* Search method currently processed.
*/
#define EB_SEARCH_EXACTWORD 0
#define EB_SEARCH_WORD 1
#define EB_SEARCH_ENDWORD 2
#define EB_SEARCH_KEYWORD 3
#define EB_SEARCH_MULTI 4
#define EB_SEARCH_CROSS 5
#define EB_SEARCH_ALL 6
#define EB_SEARCH_NONE -1
/*
* Arrangement style of entries in a search index page.
*/
#define EB_ARRANGE_FIXED 0
#define EB_ARRANGE_VARIABLE 1
#define EB_ARRANGE_INVALID -1
/*
* Binary data types.
*/
#define EB_BINARY_MONO_GRAPHIC 0
#define EB_BINARY_COLOR_GRAPHIC 1
#define EB_BINARY_WAVE 2
#define EB_BINARY_MPEG 3
#define EB_BINARY_GRAY_GRAPHIC 4
#define EB_BINARY_INVALID -1
/*
* Text-stop status.
*/
#define EB_TEXT_STATUS_CONTINUED 0
#define EB_TEXT_STATUS_SOFT_STOP 1
#define EB_TEXT_STATUS_HARD_STOP 2
/*
* The maximum index depth of search indexes.
*/
#define EB_MAX_INDEX_DEPTH 6
/*
* The maximum length of path name relative to top directory of a CD-ROM
* book. An example of the longest relative path is:
*
* "subdir01/subdir02/filename.ebz;1"
*/
#define EB_MAX_RELATIVE_PATH_LENGTH \
(EB_MAX_DIRECTORY_NAME_LENGTH + 1 \
+ EB_MAX_DIRECTORY_NAME_LENGTH + 1 \
+ EB_MAX_FILE_NAME_LENGTH)
/*
* The environment variable name to enable/disable debug messages.
*/
#define EB_DEBUG_ENVIRONMENT_VARIABLE "EB_DEBUG"
/*
* Trace log macro.
*/
#define LOG(x) do {if (eb_log_flag) eb_log x;} while (0)
/*
* Get an unsigned value from an octet stream buffer.
*/
#define eb_uint1(p) (*(const unsigned char *)(p))
#define eb_uint2(p) ((*(const unsigned char *)(p) << 8) \
+ (*(const unsigned char *)((p) + 1)))
#define eb_uint3(p) ((*(const unsigned char *)(p) << 16) \
+ (*(const unsigned char *)((p) + 1) << 8) \
+ (*(const unsigned char *)((p) + 2)))
#define eb_uint4(p) ((*(const unsigned char *)(p) << 24) \
+ (*(const unsigned char *)((p) + 1) << 16) \
+ (*(const unsigned char *)((p) + 2) << 8) \
+ (*(const unsigned char *)((p) + 3)))
#define eb_uint4_le(p) ((*(const unsigned char *)(p)) \
+ (*(const unsigned char *)((p) + 1) << 8) \
+ (*(const unsigned char *)((p) + 2) << 16) \
+ (*(const unsigned char *)((p) + 3) << 24))
/*
* Test whether `off_t' represents a large integer.
*/
#define off_t_is_large \
((((off_t) 1 << 41) + ((off_t) 1 << 40) + 1) % 9999991 == 7852006)
/*
* External variable declarations.
*/
/* log.c */
extern int eb_log_flag;
/* hook.c */
extern EB_Hookset eb_default_hookset;
/*
* Function declarations.
*/
/* appendix.c */
void eb_initialize_alt_caches(EB_Appendix *appendix);
void eb_finalize_alt_caches(EB_Appendix *appendix);
/* appsub.c */
void eb_initialize_appendix_subbooks(EB_Appendix *appendix);
void eb_finalize_appendix_subbooks(EB_Appendix *appendix);
/* bcd.c */
unsigned eb_bcd2(const char *stream);
unsigned eb_bcd4(const char *stream);
unsigned eb_bcd6(const char *stream);
/* binary.c */
void eb_initialize_binary_context(EB_Book *book);
void eb_reset_binary_context(EB_Book *book);
void eb_finalize_binary_context(EB_Book *book);
/* booklist.c */
EB_Error_Code eb_booklist_add_book(EB_BookList *booklist, const char *name,
const char *title);
/* filename.c */
EB_Error_Code eb_canonicalize_path_name(char *path_name);
void eb_canonicalize_file_name(char *file_name);
EB_Error_Code eb_fix_directory_name(const char *path, char *directory_name);
EB_Error_Code eb_fix_directory_name2(const char *path,
const char *directory_name, char *sub_directory_name);
void eb_fix_path_name_suffix(char *path_name, const char *suffix);
EB_Error_Code eb_find_file_name(const char *path_name,
const char *target_file_name, char *found_file_name);
EB_Error_Code eb_find_file_name2(const char *path_name,
const char *sub_directory_name, const char *target_file_name,
char *found_file_name);
EB_Error_Code eb_find_file_name3(const char *path_name,
const char *sub_directory_name, const char *sub2_directory_name,
const char *target_file_name, char *found_file_name);
void eb_compose_path_name(const char *path_name, const char *file_name,
char *composed_path_name);
void eb_compose_path_name2(const char *path_name,
const char *sub_directory_name, const char *file_name,
char *composed_path_name);
void eb_compose_path_name3(const char *path_name,
const char *sub_directory_name, const char *sub2_directory_name,
const char *file_name, char *composed_path_name);
void eb_path_name_zio_code(const char *path_name, Zio_Code default_zio_code,
Zio_Code *zio_code);
/* font.c */
void eb_initialize_fonts(EB_Book *book);
void eb_load_font_headers(EB_Book *book);
void eb_finalize_fonts(EB_Book *book);
/* hook.c */
void eb_initialize_default_hookset(void);
/* jacode.c */
void eb_jisx0208_to_euc(char *out_string, const char *in_string);
void eb_sjis_to_euc(char *out_string, const char *in_string);
/* log.c */
void eb_initialize_log(void);
const char *eb_quoted_stream(const char *stream, size_t stream_length);
const char *eb_quoted_string(const char *string);
/* match.c */
int eb_match_word(const char *word, const char *pattern, size_t length);
int eb_pre_match_word(const char *word, const char *pattern, size_t length);
int eb_exact_match_word_jis(const char *word, const char *pattern,
size_t length);
int eb_exact_pre_match_word_jis(const char *word, const char *pattern,
size_t length);
int eb_exact_match_word_latin(const char *word, const char *pattern,
size_t length);
int eb_exact_pre_match_word_latin(const char *word, const char *pattern,
size_t);
int eb_match_word_kana_single(const char *word, const char *pattern,
size_t length);
int eb_match_word_kana_group(const char *word, const char *pattern,
size_t length);
int eb_exact_match_word_kana_single(const char *word, const char *pattern,
size_t length);
int eb_exact_match_word_kana_group(const char *word, const char *pattern,
size_t length);
/* message.c */
EB_Error_Code eb_initialize_messages(EB_Book *book);
/* multi.c */
EB_Error_Code eb_load_multi_searches(EB_Book *book);
EB_Error_Code eb_load_multi_titles(EB_Book *book);
/* narwfont.c */
EB_Error_Code eb_open_narrow_font_file(EB_Book *book, EB_Font_Code font_code);
EB_Error_Code eb_load_narrow_font_header(EB_Book *book,
EB_Font_Code font_code);
EB_Error_Code eb_load_narrow_font_glyphs(EB_Book *book,
EB_Font_Code font_code);
/* search.c */
void eb_initialize_search_contexts(EB_Book *book);
void eb_finalize_search_contexts(EB_Book *book);
void eb_reset_search_contexts(EB_Book *book);
void eb_initialize_search(EB_Search *search);
void eb_finalize_search(EB_Search *search);
void eb_initialize_searches(EB_Book *book);
void eb_finalize_searches(EB_Book *book);
EB_Error_Code eb_presearch_word(EB_Book *book, EB_Search_Context *context);
/* setword.c */
EB_Error_Code eb_set_word(EB_Book *book, const char *input_word, char *word,
char *canonicalized_word, EB_Word_Code *word_code);
EB_Error_Code eb_set_endword(EB_Book *book, const char *input_word, char *word,
char *canonicalized_word, EB_Word_Code *word_code);
EB_Error_Code eb_set_keyword(EB_Book *book, const char *input_word, char *word,
char *canonicalized_word, EB_Word_Code *word_code);
EB_Error_Code eb_set_multiword(EB_Book *book, EB_Multi_Search_Code multi_id,
EB_Multi_Entry_Code entry_id, const char *input_word, char *word,
char *canonicalized_word, EB_Word_Code *word_code);
/* subbook.c */
void eb_initialize_subbooks(EB_Book *book);
void eb_finalize_subbooks(EB_Book *book);
/* text.c */
void eb_initialize_text_context(EB_Book *book);
void eb_finalize_text_context(EB_Book *book);
void eb_reset_text_context(EB_Book *book);
void eb_invalidate_text_context(EB_Book *book);
EB_Error_Code eb_forward_heading(EB_Book *book);
/* widefont.c */
EB_Error_Code eb_open_wide_font_file(EB_Book *book, EB_Font_Code font_code);
EB_Error_Code eb_load_wide_font_header(EB_Book *book, EB_Font_Code font_code);
EB_Error_Code eb_load_wide_font_glyphs(EB_Book *book, EB_Font_Code font_code);
/* strcasecmp.c */
int eb_strcasecmp(const char *string1, const char *string2);
int eb_strncasecmp(const char *string1, const char *string2, size_t n);
#endif /* not EB_BUILD_POST_H */