Initial git import
[sxemacs] / src / mule / 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 SXEmacs
6
7 SXEmacs 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 3 of the License, or
10 (at your option) any later version.
11
12 SXEmacs 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 this program.  If not, see <http://www.gnu.org/licenses/>. */
19
20
21 #ifndef INCLUDED_mule_ccl_h_
22 #define INCLUDED_mule_ccl_h_
23
24 /* Macros for exit status of CCL program.  */
25 #define CCL_STAT_SUCCESS        0       /* Terminated successfully.  */
26 #define CCL_STAT_SUSPEND_BY_SRC 1       /* Terminated by empty input.  */
27 #define CCL_STAT_SUSPEND_BY_DST 2       /* Terminated by output buffer full.  */
28 #define CCL_STAT_INVALID_CMD    3       /* Terminated because of invalid
29                                            command.  */
30 #define CCL_STAT_QUIT           4       /* Terminated because of quit.  */
31
32 /* Structure to hold information about running CCL code.  Read
33    comments in the file ccl.c for the detail of each field.  */
34 struct ccl_program {
35         int size;               /* Size of the compiled code.  */
36         Lisp_Object *prog;      /* Pointer into the compiled code.  */
37         int ic;                 /* Instruction Counter (index for PROG).  */
38         int eof_ic;             /* Instruction Counter for end-of-file
39                                    processing code.  */
40         int reg[8];             /* CCL registers, reg[7] is used for
41                                    condition flag of relational
42                                    operations.  */
43         int private_state;      /* CCL instruction may use this
44                                    for private use, mainly for saving
45                                    internal states on suspending.
46                                    This variable is set to 0 when ccl is 
47                                    set up.  */
48         int last_block;         /* Set to 1 while processing the last
49                                    block. */
50         int status;             /* Exit status of the CCL program.  */
51         int buf_magnification;  /* Output buffer magnification.  How
52                                    many times bigger the output buffer
53                                    should be than the input buffer.  */
54         int stack_idx;          /* How deep the call of CCL_Call is nested.  */
55         int eol_type;           /* When the CCL program is used for
56                                    encoding by a coding system, set to
57                                    the eol_type of the coding
58                                    system.  */
59         int multibyte;          /* 1 if the source text is multibyte.  */
60 };
61
62 #define CCL_MODE_ENCODING 0
63 #define CCL_MODE_DECODING 1
64
65 #define CCL_CODING_EOL_LF       0       /* Line-feed only, same as Emacs'
66                                            internal format.  */
67 #define CCL_CODING_EOL_CRLF     1       /* Sequence of carriage-return and
68                                            line-feed.  */
69 #define CCL_CODING_EOL_CR       2       /* Carriage-return only.  */
70
71 /* Alist of fontname patterns vs corresponding CCL program.  */
72 extern Lisp_Object Vfont_ccl_encoder_alist;
73
74 /* Setup fields of the structure pointed by CCL appropriately for the
75    execution of ccl program CCL_PROG (symbol or vector).  */
76 extern int setup_ccl_program(struct ccl_program *, Lisp_Object);
77
78 extern int ccl_driver(struct ccl_program *, const unsigned char *,
79                       unsigned_char_dynarr *, int, int *, int);
80
81 EXFUN(Fregister_ccl_program, 2);
82
83 extern Lisp_Object Qccl_program;
84
85 /* Vector of CCL program names vs corresponding program data.  */
86 extern Lisp_Object Vccl_program_table;
87
88 /* Symbols of ccl program have this property, a value of the property
89    is an index for Vccl_program_table. */
90 extern Lisp_Object Qccl_program_idx;
91
92 #endif                          /* INCLUDED_mule_ccl_h_ */