XEmacs 21.2.29 "Hestia".
[chise/xemacs-chise.git.1] / src / mule-ccl.h
1 /* Header for CCL (Code Conversion Language) interpreter.
2    Copyright (C) 1995,1999 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 /* Synched up with: FSF Emacs 20.3.10 */
23
24 #ifndef INCLUDED_mule_ccl_h_
25 #define INCLUDED_mule_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.  */
37 struct ccl_program {
38   int size;                     /* Size of the compiled code.  */
39   Lisp_Object *prog;            /* Pointer into the compiled code.  */
40   int ic;                       /* Instruction Counter (index for PROG).  */
41   int eof_ic;                   /* Instruction Counter for end-of-file
42                                    processing code.  */
43   int reg[8];                   /* CCL registers, reg[7] is used for
44                                    condition flag of relational
45                                    operations.  */
46   int private_state;            /* CCL instruction may use this
47                                    for private use, mainly for preservation
48                                    internal states for suspending.
49                                    This variable is set to 0 when ccl is 
50                                    set up.  */
51   int last_block;               /* Set to 1 while processing the last
52                                    block. */
53   int status;                   /* Exit status of the CCL program.  */
54   int buf_magnification;        /* Output buffer magnification.  How
55                                    many times bigger the output buffer
56                                    should be than the input buffer.  */
57   int stack_idx;                /* How deep the call of CCL_Call is nested.  */
58 };
59
60
61 #define CCL_MODE_ENCODING 0
62 #define CCL_MODE_DECODING 1
63
64 int ccl_driver (struct ccl_program *ccl, const unsigned char *source,
65                 unsigned_char_dynarr *destination, int src_bytes,
66                 int *consumed, int conversion_mode);
67 void setup_ccl_program (struct ccl_program *ccl, Lisp_Object val);
68
69 /* Alist of fontname patterns vs corresponding CCL program.  */
70 extern Lisp_Object Vfont_ccl_encoder_alist;
71 extern Lisp_Object Qccl_program;
72
73 #endif /* INCLUDED_mule_ccl_h_ */