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, 2008, 2009, 2010, 2011, 2012 4 National Institute of Advanced Industrial Science and Technology (AIST) 5 Registration Number H14PRO021 6 Copyright (C) 2003 7 National Institute of Advanced Industrial Science and Technology (AIST) 8 Registration Number H13PRO009 9 10 This file is part of GNU Emacs. 11 12 GNU Emacs is free software: you can redistribute it and/or modify 13 it under the terms of the GNU General Public License as published by 14 the Free Software Foundation, either version 3 of the License, or (at 15 your option) any later version. 16 17 GNU Emacs is distributed in the hope that it will be useful, 18 but WITHOUT ANY WARRANTY; without even the implied warranty of 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 GNU General Public License for more details. 21 22 You should have received a copy of the GNU General Public License 23 along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ 24 25 26 #ifndef EMACS_CCL_H 27 #define EMACS_CCL_H 28 29 /* Macros for exit status of CCL program. */ 30 #define CCL_STAT_SUCCESS 0 /* Terminated successfully. */ 31 #define CCL_STAT_SUSPEND_BY_SRC 1 /* Terminated by empty input. */ 32 #define CCL_STAT_SUSPEND_BY_DST 2 /* Terminated by output buffer full. */ 33 #define CCL_STAT_INVALID_CMD 3 /* Terminated because of invalid 34 command. */ 35 #define CCL_STAT_QUIT 4 /* Terminated because of quit. */ 36 37 /* Structure to hold information about running CCL code. Read 38 comments in the file ccl.c for the detail of each field. */ 39 struct ccl_program { 40 ptrdiff_t idx; /* Index number of the CCL program. 41 -1 means that the program was given 42 by a vector, not by a program 43 name. */ 44 int size; /* Size of the compiled code. */ 45 Lisp_Object *prog; /* Pointer into the compiled code. */ 46 int ic; /* Instruction Counter (index for PROG). */ 47 int eof_ic; /* Instruction Counter for end-of-file 48 processing code. */ 49 int reg[8]; /* CCL registers, reg[7] is used for 50 condition flag of relational 51 operations. */ 52 int status; /* Exit status of the CCL program. */ 53 int buf_magnification; /* Output buffer magnification. How 54 many times bigger the output buffer 55 should be than the input buffer. */ 56 int stack_idx; /* How deep the call of CCL_Call is nested. */ 57 int consumed; 58 int produced; 59 bool_bf last_block : 1; /* Set to true while processing the last 60 block. */ 61 bool_bf quit_silently : 1; /* If true, don't append "CCL: 62 Quitted" to the generated text when 63 CCL program is quitted. */ 64 }; 65 66 /* This data type is used for the spec field of the structure 67 coding_system. */ 68 69 struct ccl_spec { 70 struct ccl_program ccl; 71 }; 72 73 #define CODING_SPEC_CCL_PROGRAM(coding) ((coding)->spec.ccl.ccl) 74 75 /* Setup fields of the structure pointed by CCL appropriately for the 76 execution of ccl program CCL_PROG (symbol or vector). */ 77 extern bool setup_ccl_program (struct ccl_program *, Lisp_Object); 78 79 extern void ccl_driver (struct ccl_program *, int *, int *, int, int, 80 Lisp_Object); 81 82 #define CHECK_CCL_PROGRAM(x) \ 83 do { \ 84 if (NILP (Fccl_program_p (x))) \ 85 wrong_type_argument (Qcclp, (x)); \ 86 } while (false); 87 88 #endif /* EMACS_CCL_H */