goldendict-ng/maclibs/include/eb/defs.h
2014-05-20 17:59:56 +04:00

1041 lines
20 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_DEFS_H
#define EB_DEFS_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <limits.h>
#ifdef EB_BUILD_LIBRARY
#include "sysdefs.h"
#include "zio.h"
#else
#include <eb/sysdefs.h>
#include <eb/zio.h>
#endif
#ifdef EB_ENABLE_PTHREAD
#include <pthread.h>
#endif
/*
* Disc code
*/
#define EB_DISC_EB 0
#define EB_DISC_EPWING 1
#define EB_DISC_INVALID -1
/*
* Character codes.
*/
#define EB_CHARCODE_ISO8859_1 1
#define EB_CHARCODE_JISX0208 2
#define EB_CHARCODE_JISX0208_GB2312 3
#define EB_CHARCODE_INVALID -1
/*
* Special book ID for cache to represent "no cache data for any book".
*/
#define EB_BOOK_NONE -1
/*
* Special disc code, subbook code, multi search ID, and multi search
* entry ID, for representing error state.
*/
#define EB_SUBBOOK_INVALID -1
#define EB_MULTI_INVALID -1
/*
* Size of a page (The term `page' means `block' in JIS X 4081).
*/
#define EB_SIZE_PAGE 2048
/*
* Maximum length of a word to be searched.
*/
#define EB_MAX_WORD_LENGTH 255
/*
* Maximum length of an EB* book title.
*/
#define EB_MAX_EB_TITLE_LENGTH 30
/*
* Maximum length of an EPWING book title.
*/
#define EB_MAX_EPWING_TITLE_LENGTH 80
/*
* Maximum length of a book title.
*/
#define EB_MAX_TITLE_LENGTH 80
/*
* Maximum length of a word to be searched.
*/
#if defined(PATH_MAX)
#define EB_MAX_PATH_LENGTH PATH_MAX
#elif defined(MAXPATHLEN)
#define EB_MAX_PATH_LENGTH MAXPATHLEN
#else
#define EB_MAX_PATH_LENGTH 1024
#endif
/*
* Maximum length of a directory name.
*/
#define EB_MAX_DIRECTORY_NAME_LENGTH 8
/*
* Maximum length of a file name under a certain directory.
* prefix(8 chars) + '.' + suffix(3 chars) + ';' + digit(1 char)
*/
#define EB_MAX_FILE_NAME_LENGTH 14
/*
* Maximum length of a label for multi-search entry.
*/
#define EB_MAX_MULTI_LABEL_LENGTH 30
/*
* Maximum length of alternation text string for a private character.
*/
#define EB_MAX_ALTERNATION_TEXT_LENGTH 31
/*
* Maximum length of title for multi search.
*/
#define EB_MAX_MULTI_TITLE_LENGTH 32
/*
* Maximum number of font heights in a subbok.
*/
#define EB_MAX_FONTS 4
/*
* Maximum number of subbooks in a book.
*/
#define EB_MAX_SUBBOOKS 50
/*
* Maximum number of multi-search types in a subbook.
*/
#define EB_MAX_MULTI_SEARCHES 10
/*
* Maximum number of entries in a multi-search.
*/
#define EB_MAX_MULTI_ENTRIES 5
/*
* Maximum number of entries in a keyword search.
*/
#define EB_MAX_KEYWORDS EB_MAX_MULTI_ENTRIES
/*
* Maximum number of entries in a cross search.
*/
#define EB_MAX_CROSS_ENTRIES EB_MAX_MULTI_ENTRIES
/*
* Maximum number of characters for alternation cache.
*/
#define EB_MAX_ALTERNATION_CACHE 16
/*
* The number of text hooks.
*/
#define EB_NUMBER_OF_HOOKS 54
/*
* The number of search contexts required by a book.
*/
#define EB_NUMBER_OF_SEARCH_CONTEXTS EB_MAX_MULTI_ENTRIES
/*
* Types for various codes.
*/
typedef int EB_Error_Code;
typedef int EB_Book_Code;
typedef int EB_Disc_Code;
typedef int EB_Case_Code;
typedef int EB_Suffix_Code;
typedef int EB_Character_Code;
typedef int EB_Font_Code;
typedef int EB_Word_Code;
typedef int EB_Subbook_Code;
typedef int EB_Index_Style_Code;
typedef int EB_Search_Code;
typedef int EB_Text_Code;
typedef int EB_Text_Status_Code;
typedef int EB_Multi_Search_Code;
typedef int EB_Hook_Code;
typedef int EB_Binary_Code;
/*
* Typedef for Structures.
*/
#ifdef EB_ENABLE_PTHREAD
typedef struct EB_Lock_Struct EB_Lock;
#endif
typedef struct EB_Position_Struct EB_Position;
typedef struct EB_Alternation_Cache_Struct EB_Alternation_Cache;
typedef struct EB_Appendix_Subbook_Struct EB_Appendix_Subbook;
typedef struct EB_Appendix_Struct EB_Appendix;
typedef struct EB_Font_Struct EB_Font;
typedef struct EB_Search_Struct EB_Search;
typedef struct EB_Multi_Search_Struct EB_Multi_Search;
typedef struct EB_Subbook_Struct EB_Subbook;
typedef struct EB_Text_Context_Struct EB_Text_Context;
typedef struct EB_Binary_Context_Struct EB_Binary_Context;
typedef struct EB_Search_Context_Struct EB_Search_Context;
typedef struct EB_Book_Struct EB_Book;
typedef struct EB_Hit_Struct EB_Hit;
typedef struct EB_Hook_Struct EB_Hook;
typedef struct EB_Hookset_Struct EB_Hookset;
typedef struct EB_BookList_Entry EB_BookList_Entry;
typedef struct EB_BookList EB_BookList;
/*
* Pthreads lock.
*/
#ifdef EB_ENABLE_PTHREAD
struct EB_Lock_Struct {
/*
* Lock count. (For emulating recursive lock).
*/
int lock_count;
/*
* Mutex for `lock_count'.
*/
pthread_mutex_t lock_count_mutex;
/*
* Mutex for struct entity.
*/
pthread_mutex_t entity_mutex;
};
#endif /* EB_ENABLE_PTHREAD */
/*
* A pair of page and offset.
*/
struct EB_Position_Struct {
/*
* Page. (1, 2, 3 ...)
*/
int page;
/*
* Offset in `page'. (0 ... 2047)
*/
int offset;
};
/*
* Chace of aternation text.
*/
struct EB_Alternation_Cache_Struct {
/*
* Character number.
*/
int character_number;
/*
* Alternation string for `char_no'.
*/
char text[EB_MAX_ALTERNATION_TEXT_LENGTH + 1];
};
/*
* An appendix for a subbook.
*/
struct EB_Appendix_Subbook_Struct {
/*
* Initialization flag.
*/
int initialized;
/*
* Subbook ID.
*/
EB_Subbook_Code code;
/*
* Directory name.
*/
char directory_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
/*
* Sub-directory name. (EPWING only)
*/
char data_directory_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
/*
* File name.
*/
char file_name[EB_MAX_FILE_NAME_LENGTH + 1];
/*
* Character code of the book.
*/
EB_Character_Code character_code;
/*
* Start character number of the narrow/wide font.
*/
int narrow_start;
int wide_start;
/*
* End character number of the narrow/wide font.
*/
int narrow_end;
int wide_end;
/*
* Start page number of the narrow/wide font.
*/
int narrow_page;
int wide_page;
/*
* Stop code (first and second characters).
*/
int stop_code0;
int stop_code1;
/*
* Compression Information for appendix file.
*/
Zio zio;
};
/*
* Additional resources for a book.
*/
struct EB_Appendix_Struct {
/*
* Book ID.
*/
EB_Book_Code code;
/*
* Path of the book.
*/
char *path;
/*
* The length of the path.
*/
size_t path_length;
/*
* Disc type. EB (EB/EBG/EBXA/EBXA-C/S-EBXA) or EPWING.
*/
EB_Disc_Code disc_code;
/*
* The number of subbooks the book has.
*/
int subbook_count;
/*
* Subbook list.
*/
EB_Appendix_Subbook *subbooks;
/*
* Current subbook.
*/
EB_Appendix_Subbook *subbook_current;
/*
* ebnet socket file.
*/
#ifdef EB_ENABLE_EBNET
int ebnet_file;
#endif
/*
* Lock.
*/
#ifdef EB_ENABLE_PTHREAD
EB_Lock lock;
#endif
/*
* Cache table for alternation text.
*/
EB_Alternation_Cache narrow_cache[EB_MAX_ALTERNATION_CACHE];
EB_Alternation_Cache wide_cache[EB_MAX_ALTERNATION_CACHE];
};
/*
* A font in a subbook.
*/
struct EB_Font_Struct {
/*
* Font Code.
* This font is not available, if the code is EB_FONT_INVALID.
*/
EB_Font_Code font_code;
/*
* Whether the object has been initialized.
*/
int initialized;
/*
* Character numbers of the start and end of the font.
*/
int start;
int end;
/*
* Page number of the start page of the font data.
* Used in EB* only. (In EPWING, it is alyways 1).
*/
int page;
/*
* File name of the font. (EPWING only)
*/
char file_name[EB_MAX_FILE_NAME_LENGTH + 1];
/*
* Font data cache.
*/
char *glyphs;
/*
* Compression Information.
*/
Zio zio;
};
/*
* Search methods in a subbook.
*/
struct EB_Search_Struct {
/*
* Index ID.
*/
int index_id;
/*
* Page number of the start page of an index.
* This search method is not available, if `start_page' is 0,
*/
int start_page;
int end_page;
/*
* Page number of the start page of candidates.
* (for multi search entry)
*/
int candidates_page;
/*
* Index style flags.
*/
EB_Index_Style_Code katakana;
EB_Index_Style_Code lower;
EB_Index_Style_Code mark;
EB_Index_Style_Code long_vowel;
EB_Index_Style_Code double_consonant;
EB_Index_Style_Code contracted_sound;
EB_Index_Style_Code voiced_consonant;
EB_Index_Style_Code small_vowel;
EB_Index_Style_Code p_sound;
EB_Index_Style_Code space;
/*
* Label. (for an entry in multi search)
*/
char label[EB_MAX_MULTI_LABEL_LENGTH + 1];
};
/*
* A multi-search entry in a subbook.
*/
struct EB_Multi_Search_Struct {
/*
* Search method information.
*/
EB_Search search;
/*
* Search title. (EPWING only)
*/
char title[EB_MAX_MULTI_TITLE_LENGTH + 1];
/*
* The number of entries the multi search has.
*/
int entry_count;
/*
* List of Word entry information.
*/
EB_Search entries[EB_MAX_MULTI_ENTRIES];
};
/*
* A subbook in a book.
*/
struct EB_Subbook_Struct {
/*
* Whether the object has been initialized.
*/
int initialized;
/*
* Index page.
*/
int index_page;
/*
* Subbook ID.
* This subbook is not available, if the code is EB_SUBBOOK_INVALID.
*/
EB_Subbook_Code code;
/*
* File descriptor and compression information for text file.
*/
Zio text_zio;
/*
* File descriptor and compression information for graphic file.
*/
Zio graphic_zio;
/*
* File descriptor and compression information for sound file.
*/
Zio sound_zio;
/*
* File descriptor and compression information for movie file.
*/
Zio movie_zio;
/*
* Title of the subbook.
*/
char title[EB_MAX_TITLE_LENGTH + 1];
/*
* Subbook directory name.
*/
char directory_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
/*
* Sub-directory names. (EPWING only)
*/
char data_directory_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
char gaiji_directory_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
char movie_directory_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
/*
* File names.
*/
char text_file_name[EB_MAX_FILE_NAME_LENGTH + 1];
char graphic_file_name[EB_MAX_FILE_NAME_LENGTH + 1];
char sound_file_name[EB_MAX_FILE_NAME_LENGTH + 1];
/*
* Compression hints of Text, graphic and sound files.
* (temporary need, EPWING only).
*/
Zio_Code text_hint_zio_code;
Zio_Code graphic_hint_zio_code;
Zio_Code sound_hint_zio_code;
/*
* Page number where search method titles are stored.
* (temporary need, EPWING only).
*/
int search_title_page;
/*
* The top page of search methods.
*/
EB_Search word_alphabet;
EB_Search word_asis;
EB_Search word_kana;
EB_Search endword_alphabet;
EB_Search endword_asis;
EB_Search endword_kana;
EB_Search keyword;
EB_Search menu;
EB_Search image_menu;
EB_Search cross;
EB_Search copyright;
EB_Search text;
EB_Search sound;
/*
* The number of multi-search methods the subbook has.
*/
int multi_count;
/*
* The top page of multi search methods.
*/
EB_Multi_Search multis[EB_MAX_MULTI_SEARCHES];
/*
* Font list.
*/
EB_Font narrow_fonts[EB_MAX_FONTS];
EB_Font wide_fonts[EB_MAX_FONTS];
/*
* Current narrow and wide fonts.
*/
EB_Font *narrow_current;
EB_Font *wide_current;
};
/*
* Length of cache buffer in a binary context.
* It must be greater than 38, size of GIF preamble.
* It must be greater than 44, size of WAVE sound header.
* It must be greater than 118, size of BMP header + info + 16 rgbquads.
*/
#define EB_SIZE_BINARY_CACHE_BUFFER 128
/*
* Context parameters for binary data.
*/
struct EB_Binary_Context_Struct {
/*
* Binary type ID.
* The context is not active, if this code is EB_BINARY_INVALID.
*/
EB_Binary_Code code;
/*
* Compress information.
*/
Zio *zio;
/*
* Location of the the binary data, relative to the start of the file.
*/
off_t location;
/*
* Data size.
* Size zero means that the binary has no size information.
*/
size_t size;
/*
* The current offset of binary data.
*/
size_t offset;
/*
* Cache buffer.
*/
char cache_buffer[EB_SIZE_BINARY_CACHE_BUFFER];
/*
* Length of cached data.
*/
size_t cache_length;
/*
* Current offset of cached data.
*/
size_t cache_offset;
/*
* Width of Image. (monochrome graphic only)
*/
int width;
};
/*
* Context parameters for text reading.
*/
struct EB_Text_Context_Struct {
/*
* Current text content type.
* The context is not active, if this code is EB_TEXT_INVALID.
*/
EB_Text_Code code;
/*
* Current offset pointer of the START or HONMON file.
*/
off_t location;
/*
* The current point of a buffer on which text is written.
*/
char *out;
/*
* Length of `out'.
*/
size_t out_rest_length;
/*
* Unprocessed string that a hook function writes on text.
*/
char *unprocessed;
/*
* Size of `unprocessed'.
*/
size_t unprocessed_size;
/*
* Length of the current output text phrase.
*/
size_t out_step;
/*
* Narrow character region flag.
*/
int narrow_flag;
/*
* Whether a printable character has been appeared in the current
* text content.
*/
int printable_count;
/*
* EOF flag of the current subbook.
*/
int file_end_flag;
/*
* Status of the current text processing.
*/
EB_Text_Status_Code text_status;
/*
* Skip until `skipcode' appears.
*/
int skip_code;
/*
* Stop-code automatically set by EB Library.
*/
int auto_stop_code;
/*
* The current candidate word for multi search.
*/
char candidate[EB_MAX_WORD_LENGTH + 1];
/*
* Whether the current text point is in the candidate word or not.
*/
int is_candidate;
/*
* Whether the current text point is in EBXA-C gaiji area.
*/
int ebxac_gaiji_flag;
};
/*
* Context parameters for word search.
*/
struct EB_Search_Context_Struct {
/*
* Current search method type.
* The context is not active, if this code is EB_SEARCH_NONE.
*/
EB_Search_Code code;
/*
* Function which compares word to search and pattern in an index page.
*/
int (*compare_pre)(const char *word, const char *pattern,
size_t length);
int (*compare_single)(const char *word, const char *pattern,
size_t length);
int (*compare_group)(const char *word, const char *pattern,
size_t length);
/*
* Result of comparison by `compare'.
*/
int comparison_result;
/*
* Word to search.
*/
char word[EB_MAX_WORD_LENGTH + 1];
/*
* Canonicalized word to search.
*/
char canonicalized_word[EB_MAX_WORD_LENGTH + 1];
/*
* Page which is searched currently.
*/
int page;
/*
* Offset which is searched currently in the page.
*/
int offset;
/*
* Page ID of the current page.
*/
int page_id;
/*
* How many entries in the current page.
*/
int entry_count;
/*
* Entry index pointer.
*/
int entry_index;
/*
* Length of the current entry.
*/
int entry_length;
/*
* Arrangement style of entries in the current page (fixed or variable).
*/
int entry_arrangement;
/*
* In a group entry or not.
*/
int in_group_entry;
/*
* Current heading position (for keyword search).
*/
EB_Position keyword_heading;
};
/*
* A book.
*/
struct EB_Book_Struct {
/*
* Book ID.
*/
EB_Book_Code code;
/*
* Disc type. EB* or EPWING.
*/
EB_Disc_Code disc_code;
/*
* Character code of the book.
*/
EB_Character_Code character_code;
/*
* Path of the book.
*/
char *path;
/*
* The length of the path.
*/
size_t path_length;
/*
* The number of subbooks the book has.
*/
int subbook_count;
/*
* Subbook list.
*/
EB_Subbook *subbooks;
/*
* Current subbook.
*/
EB_Subbook *subbook_current;
/*
* Context parameters for text reading.
*/
EB_Text_Context text_context;
/*
* Context parameters for binary reading.
*/
EB_Binary_Context binary_context;
/*
* Context parameters for text reading.
*/
EB_Search_Context search_contexts[EB_NUMBER_OF_SEARCH_CONTEXTS];
/*
* ebnet socket file.
*/
#ifdef EB_ENABLE_EBNET
int ebnet_file;
#endif
/*
* Lock.
*/
#ifdef EB_ENABLE_PTHREAD
EB_Lock lock;
#endif
};
/*
* In a word search, heading and text locations of a matched entry
* are stored.
*/
struct EB_Hit_Struct {
/*
* Heading position.
*/
EB_Position heading;
/*
* Text position.
*/
EB_Position text;
};
/*
* A text hook.
*/
struct EB_Hook_Struct {
/*
* Hook code.
*/
EB_Hook_Code code;
/*
* Hook function for the hook code `code'.
*/
EB_Error_Code (*function)(EB_Book *book, EB_Appendix *appendix,
void *container, EB_Hook_Code hook_code, int argc,
const unsigned int *argv);
};
/*
* A set of text hooks.
*/
struct EB_Hookset_Struct {
/*
* List of hooks.
*/
EB_Hook hooks[EB_NUMBER_OF_HOOKS];
/*
* Lock.
*/
#ifdef EB_ENABLE_PTHREAD
EB_Lock lock;
#endif
};
/*
* An entry of book list.
*/
struct EB_BookList_Entry {
/*
* name.
*/
char *name;
/*
* Title.
*/
char *title;
};
/*
* Book list.
*/
struct EB_BookList {
/*
* Book List ID.
*/
EB_Book_Code code;
/*
* The number of book entries this list has.
*/
int entry_count;
/*
* The maximum number of book entries that `entries' can memory.
*/
int max_entry_count;
/*
* Book entries.
*/
EB_BookList_Entry *entries;
/*
* Lock.
*/
#ifdef EB_ENABLE_PTHREAD
EB_Lock lock;
#endif
};
/* for backward compatibility */
#define EB_Multi_Entry_Code int
#ifdef __cplusplus
}
#endif
#endif /* not EB_DEFS_H */