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