root/src/ccl.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


     1 /* Header for CCL (Code Conversion Language) interpreter.
     2    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
     3      2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
     4      National Institute of Advanced Industrial Science and Technology (AIST)
     5      Registration Number H14PRO021
     6    Copyright (C) 2003
     7      National Institute of Advanced Industrial Science and Technology (AIST)
     8      Registration Number H13PRO009
     9 
    10 This file is part of GNU Emacs.
    11 
    12 GNU Emacs is free software: you can redistribute it and/or modify
    13 it under the terms of the GNU General Public License as published by
    14 the Free Software Foundation, either version 3 of the License, or (at
    15 your option) any later version.
    16 
    17 GNU Emacs is distributed in the hope that it will be useful,
    18 but WITHOUT ANY WARRANTY; without even the implied warranty of
    19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    20 GNU General Public License for more details.
    21 
    22 You should have received a copy of the GNU General Public License
    23 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
    24 
    25 
    26 #ifndef EMACS_CCL_H
    27 #define EMACS_CCL_H
    28 
    29 /* Macros for exit status of CCL program.  */
    30 #define CCL_STAT_SUCCESS        0 /* Terminated successfully.  */
    31 #define CCL_STAT_SUSPEND_BY_SRC 1 /* Terminated by empty input.  */
    32 #define CCL_STAT_SUSPEND_BY_DST 2 /* Terminated by output buffer full.  */
    33 #define CCL_STAT_INVALID_CMD    3 /* Terminated because of invalid
    34                                      command.  */
    35 #define CCL_STAT_QUIT           4 /* Terminated because of quit.  */
    36 
    37 /* Structure to hold information about running CCL code.  Read
    38    comments in the file ccl.c for the detail of each field.  */
    39 struct ccl_program {
    40   ptrdiff_t idx;                /* Index number of the CCL program.
    41                                    -1 means that the program was given
    42                                    by a vector, not by a program
    43                                    name.  */
    44   int size;                     /* Size of the compiled code.  */
    45   Lisp_Object *prog;            /* Pointer into the compiled code.  */
    46   int ic;                       /* Instruction Counter (index for PROG).  */
    47   int eof_ic;                   /* Instruction Counter for end-of-file
    48                                    processing code.  */
    49   int reg[8];                   /* CCL registers, reg[7] is used for
    50                                    condition flag of relational
    51                                    operations.  */
    52   int status;                   /* Exit status of the CCL program.  */
    53   int buf_magnification;        /* Output buffer magnification.  How
    54                                    many times bigger the output buffer
    55                                    should be than the input buffer.  */
    56   int stack_idx;                /* How deep the call of CCL_Call is nested.  */
    57   int consumed;
    58   int produced;
    59   bool_bf last_block : 1;       /* Set to true while processing the last
    60                                    block. */
    61   bool_bf quit_silently : 1;    /* If true, don't append "CCL:
    62                                    Quitted" to the generated text when
    63                                    CCL program is quitted. */
    64 };
    65 
    66 /* This data type is used for the spec field of the structure
    67    coding_system.  */
    68 
    69 struct ccl_spec {
    70   struct ccl_program ccl;
    71 };
    72 
    73 #define CODING_SPEC_CCL_PROGRAM(coding) ((coding)->spec.ccl.ccl)
    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 bool setup_ccl_program (struct ccl_program *, Lisp_Object);
    78 
    79 extern void ccl_driver (struct ccl_program *, int *, int *, int, int,
    80                         Lisp_Object);
    81 
    82 #define CHECK_CCL_PROGRAM(x)                    \
    83   do {                                          \
    84     if (NILP (Fccl_program_p (x)))              \
    85       wrong_type_argument (Qcclp, (x)); \
    86   } while (false);
    87 
    88 #endif /* EMACS_CCL_H */

/* [<][>][^][v][top][bottom][index][help] */