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 7This file is part of GNU Emacs. 8 9GNU Emacs is free software; you can redistribute it and/or modify 10it under the terms of the GNU General Public License as published by 11the Free Software Foundation; either version 2, or (at your option) 12any later version. 13 14GNU Emacs is distributed in the hope that it will be useful, 15but WITHOUT ANY WARRANTY; without even the implied warranty of 16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17GNU General Public License for more details. 18 19You should have received a copy of the GNU General Public License 20along with GNU Emacs; see the file COPYING. If not, write to 21the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 22Boston, 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. */ 37struct 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 84struct 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. */ 93extern 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). */ 97extern 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. */ 100extern int check_ccl_update P_ ((struct ccl_program *)); 101 102extern 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. */ 106extern 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. */ 110extern 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) */ 116