*** empty log message ***
[bpt/emacs.git] / src / ccl.h
index bfd4757..e1b8285 100644 (file)
--- a/src/ccl.h
+++ b/src/ccl.h
@@ -1,6 +1,9 @@
 /* Header for CCL (Code Conversion Language) interpreter.
    Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
-   Licensed to the Free Software Foundation.
+     Licensed to the Free Software Foundation.
+   Copyright (C) 2003
+     National Institute of Advanced Industrial Science and Technology (AIST)
+     Registration Number H13PRO009
 
 This file is part of GNU Emacs.
 
@@ -53,16 +56,14 @@ struct ccl_program {
                                   many times bigger the output buffer
                                   should be than the input buffer.  */
   int stack_idx;               /* How deep the call of CCL_Call is nested.  */
-  int eol_type;                        /* When the CCL program is used for
-                                  encoding by a coding system, set to
-                                  the eol_type of the coding system.
-                                  In other cases, always
-                                  CODING_EOL_LF.  */
-  int multibyte;               /* 1 if the source text is multibyte.  */
+  int src_multibyte;           /* 1 if the input buffer is multibyte.  */
+  int dst_multibyte;           /* 1 if the output buffer is multibyte.  */
   int cr_consumed;             /* Flag for encoding DOS-like EOL
                                   format when the CCL program is used
                                   for encoding by a coding
                                   system.  */
+  int consumed;
+  int produced;
   int suppress_error;          /* If nonzero, don't insert error
                                   message in the output.  */
   int eight_bit_control;       /* If nonzero, ccl_driver counts all
@@ -76,13 +77,13 @@ struct ccl_program {
    coding_system.  */
 
 struct ccl_spec {
-  struct ccl_program decoder;
-  struct ccl_program encoder;
-  unsigned char valid_codes[256];
+  struct ccl_program ccl;
   int cr_carryover;            /* CR carryover flag.  */
   unsigned char eight_bit_carryover[MAX_MULTIBYTE_LENGTH];
 };
 
+#define CODING_SPEC_CCL_PROGRAM(coding) ((coding)->spec.ccl.ccl)
+
 /* Alist of fontname patterns vs corresponding CCL program.  */
 extern Lisp_Object Vfont_ccl_encoder_alist;
 
@@ -90,8 +91,8 @@ extern Lisp_Object Vfont_ccl_encoder_alist;
    execution of ccl program CCL_PROG (symbol or vector).  */
 extern int setup_ccl_program P_ ((struct ccl_program *, Lisp_Object));
 
-extern int ccl_driver P_ ((struct ccl_program *, unsigned char *,
-                          unsigned char *, int, int, int *));
+extern void ccl_driver P_ ((struct ccl_program *, int *, int *, int, int,
+                           Lisp_Object));
 
 /* Vector of CCL program names vs corresponding program data.  */
 extern Lisp_Object Vccl_program_table;
@@ -100,4 +101,14 @@ extern Lisp_Object Vccl_program_table;
    is an index for Vccl_protram_table. */
 extern Lisp_Object Qccl_program_idx;
 
+extern Lisp_Object Qccl, Qcclp;
+
+EXFUN (Fccl_program_p, 1);
+
+#define CHECK_CCL_PROGRAM(x)                   \
+  do {                                         \
+    if (NILP (Fccl_program_p (x)))             \
+      x = wrong_type_argument (Qcclp, (x));    \
+  } while (0);
+
 #endif /* EMACS_CCL_H */