
1: /* Header for CCL (Code Conversion Language) interpreter. 2: Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3: 2005, 2006, 2007 4: National Institute of Advanced Industrial Science and Technology (AIST) 5: Registration Number H14PRO021 6: 7: This file is part of GNU Emacs. 8: 9: GNU Emacs is free software; you can redistribute it and/or modify 10: it under the terms of the GNU General Public License as published by 11: the Free Software Foundation; either version 2, or (at your option) 12: any later version. 13: 14: GNU Emacs is distributed in the hope that it will be useful, 15: but WITHOUT ANY WARRANTY; without even the implied warranty of 16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17: GNU General Public License for more details. 18: 19: You should have received a copy of the GNU General Public License 20: along with GNU Emacs; see the file COPYING. If not, write to 21: the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 22: Boston, MA 02110-1301, USA. */ 23: 24: #ifndef EMACS_CCL_H 25: #define EMACS_CCL_H 26: 27: /* Macros for exit status of CCL program. */ 28: #define CCL_STAT_SUCCESS 0 /* Terminated successfully. */ 29: #define CCL_STAT_SUSPEND_BY_SRC 1 /* Terminated by empty input. */ 30: #define CCL_STAT_SUSPEND_BY_DST 2 /* Terminated by output buffer full. */ 31: #define CCL_STAT_INVALID_CMD 3 /* Terminated because of invalid 32: command. */ 33: #define CCL_STAT_QUIT 4 /* Terminated because of quit. */ 34: 35: /* Structure to hold information about running CCL code. Read 36: comments in the file ccl.c for the detail of each field. */ 37: struct ccl_program { 38: int idx; /* Index number of the CCL program. 39: -1 means that the program was given 40: by a vector, not by a program 41: name. */ 42: int size; /* Size of the compiled code. */ 43: Lisp_Object *prog; /* Pointer into the compiled code. */ 44: int ic; /* Instruction Counter (index for PROG). */ 45: int eof_ic; /* Instruction Counter for end-of-file 46: processing code. */ 47: int reg[8]; /* CCL registers, reg[7] is used for 48: condition flag of relational 49: operations. */ 50: int private_state; /* CCL instruction may use this 51: for private use, mainly for saving 52: internal states on suspending. 53: This variable is set to 0 when ccl is 54: set up. */ 55: int last_block; /* Set to 1 while processing the last 56: block. */ 57: int status; /* Exit status of the CCL program. */ 58: int buf_magnification; /* Output buffer magnification. How 59: many times bigger the output buffer 60: should be than the input buffer. */ 61: int stack_idx; /* How deep the call of CCL_Call is nested. */ 62: int eol_type; /* When the CCL program is used for 63: encoding by a coding system, set to 64: the eol_type of the coding system. 65: In other cases, always 66: CODING_EOL_LF. */ 67: int multibyte; /* 1 if the source text is multibyte. */ 68: int cr_consumed; /* Flag for encoding DOS-like EOL 69: format when the CCL program is used 70: for encoding by a coding 71: system. */ 72: int suppress_error; /* If nonzero, don't insert error 73: message in the output. */ 74: int eight_bit_control; /* If nonzero, ccl_driver counts all 75: eight-bit-control bytes written by 76: CCL_WRITE_CHAR. After execution, 77: if no such byte is written, set 78: this value to zero. */ 79: }; 80: 81: /* This data type is used for the spec field of the structure 82: coding_system. */ 83: 84: struct ccl_spec { 85: struct ccl_program decoder; 86: struct ccl_program encoder; 87: unsigned char valid_codes[256]; 88: int cr_carryover; /* CR carryover flag. */ 89: unsigned char eight_bit_carryover[MAX_MULTIBYTE_LENGTH]; 90: }; 91: 92: /* Alist of fontname patterns vs corresponding CCL program. */ 93: extern Lisp_Object Vfont_ccl_encoder_alist; 94: 95: /* Setup fields of the structure pointed by CCL appropriately for the 96: execution of ccl program CCL_PROG (symbol or vector). */ 97: extern int setup_ccl_program P_ ((struct ccl_program *, Lisp_Object)); 98: 99: /* Check if CCL is updated or not. If not, re-setup members of CCL. */ 100: extern int check_ccl_update P_ ((struct ccl_program *)); 101: 102: extern int ccl_driver P_ ((struct ccl_program *, unsigned char *, 103: unsigned char *, int, int, int *)); 104: 105: /* Vector of CCL program names vs corresponding program data. */ 106: extern Lisp_Object Vccl_program_table; 107: 108: /* Symbols of ccl program have this property, a value of the property 109: is an index for Vccl_protram_table. */ 110: extern Lisp_Object Qccl_program_idx; 111: 112: #endif /* EMACS_CCL_H */ 113: 114: /* arch-tag: 14681df7-876d-43de-bc71-6b78e23a4e3c 115: (do not change this comment) */