update.
[chise/xemacs-chise.git-] / src / mule-ccl.h
1 /* Header for CCL (Code Conversion Language) interpreter.
2    Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
3    Licensed to the Free Software Foundation.
4
5 This file is part of XEmacs.
6
7 GNU Emacs is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs; see the file COPYING.  If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 #ifndef INCLUDED_mule_ccl_h_
23 #define INCLUDED_mule_ccl_h_
24
25 /* Macros for exit status of CCL program.  */
26 #define CCL_STAT_SUCCESS        0 /* Terminated successfully.  */
27 #define CCL_STAT_SUSPEND_BY_SRC 1 /* Terminated by empty input.  */
28 #define CCL_STAT_SUSPEND_BY_DST 2 /* Terminated by output buffer full.  */
29 #define CCL_STAT_INVALID_CMD    3 /* Terminated because of invalid
30                                      command.  */
31 #define CCL_STAT_QUIT           4 /* Terminated because of quit.  */
32
33 /* Structure to hold information about running CCL code.  Read
34    comments in the file ccl.c for the detail of each field.  */
35 struct ccl_program {
36   int size;                     /* Size of the compiled code.  */
37   Lisp_Object *prog;            /* Pointer into the compiled code.  */
38   int ic;                       /* Instruction Counter (index for PROG).  */
39   int eof_ic;                   /* Instruction Counter for end-of-file
40                                    processing code.  */
41   int reg[8];                   /* CCL registers, reg[7] is used for
42                                    condition flag of relational
43                                    operations.  */
44   int private_state;            /* CCL instruction may use this
45                                    for private use, mainly for saving
46                                    internal states on suspending.
47                                    This variable is set to 0 when ccl is 
48                                    set up.  */
49   int last_block;               /* Set to 1 while processing the last
50                                    block. */
51   int status;                   /* Exit status of the CCL program.  */
52   int buf_magnification;        /* Output buffer magnification.  How
53                                    many times bigger the output buffer
54                                    should be than the input buffer.  */
55   int stack_idx;                /* How deep the call of CCL_Call is nested.  */
56   int eol_type;                 /* When the CCL program is used for
57                                    encoding by a coding system, set to
58                                    the eol_type of the coding
59                                    system.  */
60   int multibyte;                /* 1 if the source text is multibyte.  */
61 };
62
63 #define CCL_MODE_ENCODING 0
64 #define CCL_MODE_DECODING 1
65
66 #define CCL_CODING_EOL_LF       0       /* Line-feed only, same as Emacs'
67                                            internal format.  */
68 #define CCL_CODING_EOL_CRLF     1       /* Sequence of carriage-return and
69                                            line-feed.  */
70 #define CCL_CODING_EOL_CR       2       /* Carriage-return only.  */
71
72 /* Alist of fontname patterns vs corresponding CCL program.  */
73 extern Lisp_Object Vfont_ccl_encoder_alist;
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 int setup_ccl_program (struct ccl_program *, Lisp_Object);
78
79 extern int ccl_driver (struct ccl_program *, const unsigned char *,
80                        unsigned_char_dynarr *, int, int *, int);
81
82 EXFUN (Fregister_ccl_program, 2);
83
84 extern Lisp_Object Qccl_program;
85
86 /* Vector of CCL program names vs corresponding program data.  */
87 extern Lisp_Object Vccl_program_table;
88
89 /* Symbols of ccl program have this property, a value of the property
90    is an index for Vccl_program_table. */
91 extern Lisp_Object Qccl_program_idx;
92
93 #endif /* INCLUDED_mule_ccl_h_ */