]> code.delx.au - gnu-emacs/blobdiff - src/ccl.h
Merge from emacs--rel--22
[gnu-emacs] / src / ccl.h
index 5c1f90eeec8bfa0d79e02d8e26876135a7512abe..18c6ae1ebc7f0160fda27be2eb86e136eada9d34 100644 (file)
--- a/src/ccl.h
+++ b/src/ccl.h
@@ -3,6 +3,9 @@
      2005, 2006, 2007, 2008
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H14PRO021
+   Copyright (C) 2003
+     National Institute of Advanced Industrial Science and Technology (AIST)
+     Registration Number H13PRO009
 
 This file is part of GNU Emacs.
 
@@ -59,16 +62,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,19 +77,22 @@ struct ccl_program {
                                   CCL_WRITE_CHAR.  After execution,
                                   if no such byte is written, set
                                   this value to zero.  */
+  int quit_silently;           /* If nonzero, don't append "CCL:
+                                  Quitted" to the generated text when
+                                  CCL program is quitted. */
 };
 
 /* This data type is used for the spec field of the structure
    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;
 
@@ -99,8 +103,8 @@ extern int setup_ccl_program P_ ((struct ccl_program *, Lisp_Object));
 /* Check if CCL is updated or not.  If not, re-setup members of CCL.  */
 extern int check_ccl_update P_ ((struct ccl_program *));
 
-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;
@@ -109,6 +113,16 @@ 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)))             \
+      wrong_type_argument (Qcclp, (x));        \
+  } while (0);
+
 #endif /* EMACS_CCL_H */
 
 /* arch-tag: 14681df7-876d-43de-bc71-6b78e23a4e3c