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