#define CCL_WriteConstJump 0x08 /* Write constant and jump:
1:A--D--D--R--E--S--S-000XXXXX
- 2:CONST
+ 2:const
------------------------------
- write (CONST);
+ write (const);
IC += ADDRESS;
*/
#define CCL_WriteConstReadJump 0x09 /* Write constant, read, and jump:
1:A--D--D--R--E--S--S-rrrXXXXX
- 2:CONST
+ 2:const
3:A--D--D--R--E--S--S-rrrYYYYY
-----------------------------
- write (CONST);
+ write (const);
IC += 2;
read (reg[rrr]);
IC += ADDRESS;
IC += 2;
*/
-#define CCL_Extention 0x1F /* Extended CCL code
+#define CCL_Extension 0x1F /* Extended CCL code
1:ExtendedCOMMNDRrrRRRrrrXXXXX
2:ARGUEMENT
3:...
/* Suspend CCL program because of reading from empty input buffer or
writing to full output buffer. When this program is resumed, the
- same I/O command is executed. */
+ same I/O command is executed. The `if (1)' is for warning suppression. */
#define CCL_SUSPEND(stat) \
do { \
ic--; \
ccl->status = stat; \
- goto ccl_finish; \
+ if (1) goto ccl_finish; \
} while (0)
/* Terminate CCL program because of invalid command. Should not occur
- in the normal case. */
+ in the normal case. The `if (1)' is for warning suppression. */
#define CCL_INVALID_CMD \
do { \
ccl->status = CCL_STAT_INVALID_CMD; \
- goto ccl_error_handler; \
+ if (1) goto ccl_error_handler; \
} while (0)
/* Encode one character CH to multibyte form and write to the current
/* Write a string at ccl_prog[IC] of length LEN to the current output
buffer. */
-#define CCL_WRITE_STRING(len) do { \
- if (!destination) \
- { \
- ccl->status = CCL_STAT_INVALID_CMD; \
- goto ccl_error_handler; \
- } \
- else \
- for (i = 0; i < len; i++) \
- Dynarr_add(destination, \
- (XINT (ccl_prog[ic + (i / 3)]) \
- >> ((2 - (i % 3)) * 8)) & 0xFF); \
+#define CCL_WRITE_STRING(len) do { \
+ if (!destination) \
+ { \
+ ccl->status = CCL_STAT_INVALID_CMD; \
+ goto ccl_error_handler; \
+ } \
+ else \
+ { \
+ Bufbyte work[MAX_EMCHAR_LEN]; \
+ for (i = 0; i < len; i++) \
+ { \
+ int ch = (XINT (ccl_prog[ic + (i / 3)]) \
+ >> ((2 - (i % 3)) * 8)) & 0xFF; \
+ int bytes = \
+ ( ch < ( conversion_mode == CCL_MODE_ENCODING ? \
+ 256 : 128 ) ) ? \
+ simple_set_charptr_emchar (work, ch) : \
+ non_ascii_set_charptr_emchar (work, ch); \
+ Dynarr_add_many (destination, work, bytes); \
+ } \
+ } \
} while (0)
/* Read one byte from the current input buffer into Rth register. */
static struct ccl_prog_stack ccl_prog_stack_struct[256];
int
-ccl_driver (struct ccl_program *ccl, CONST unsigned char *source,
+ccl_driver (struct ccl_program *ccl, const unsigned char *source,
unsigned_char_dynarr *destination, int src_bytes,
int *consumed, int conversion_mode)
{
int code = -1; /* init to illegal value, */
int field1, field2;
Lisp_Object *ccl_prog = ccl->prog;
- CONST unsigned char *src = source, *src_end = src + src_bytes;
+ const unsigned char *src = source, *src_end = src + src_bytes;
int jump_address = 0; /* shut up the compiler */
int i, j, op;
int stack_idx = ccl->stack_idx;
/* Instruction counter of the current CCL code. */
- int this_ic;
+ int this_ic = 0;
if (ic >= ccl->eof_ic)
ic = CCL_HEADER_MAIN;
ic = jump_address;
break;
- case CCL_Extention:
+ case CCL_Extension:
switch (EXCMD)
{
#ifndef UTF2000
break;
#endif
+#ifndef UTF2000
case CCL_WriteMultibyteChar2:
i = reg[RRR]; /* charset */
if (i == LEADING_BYTE_ASCII)
CCL_WRITE_CHAR (i);
break;
+#endif
#if 0
case CCL_TranslateCharacter:
function converts symbols of code conversion maps and character
translation tables embeded in the CCL code into their ID numbers. */
-Lisp_Object
+static Lisp_Object
resolve_symbol_ccl_program (Lisp_Object ccl)
{
int i, veclen;
int i;
Lisp_Object ccl_id;
- if ((SYMBOLP (ccl_prog)) &&
- (!NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil))))
+ if (SYMBOLP (ccl_prog) &&
+ !NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil)))
{
ccl_prog = XVECTOR_DATA (Vccl_program_table)[XUINT (ccl_id)];
CHECK_LIST (ccl_prog);
? XINT (XVECTOR_DATA (reg)[i])
: 0);
- ccl_driver (&ccl, (CONST unsigned char *)0, (unsigned_char_dynarr *)0,
+ ccl_driver (&ccl, (const unsigned char *)0, (unsigned_char_dynarr *)0,
0, (int *)0, CCL_MODE_ENCODING);
QUIT;
if (ccl.status != CCL_STAT_SUCCESS)
struct gcpro gcpro1, gcpro2, gcpro3;
Lisp_Object ccl_id;
- if ((SYMBOLP (ccl_prog)) &&
- (!NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil))))
+ if (SYMBOLP (ccl_prog) &&
+ !NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil)))
{
ccl_prog = XVECTOR (Vccl_program_table)->contents[XUINT (ccl_id)];
CHECK_LIST (ccl_prog);
outbuf = Dynarr_new (unsigned_char);
ccl.last_block = NILP (contin);
produced = ccl_driver (&ccl, XSTRING_DATA (str), outbuf,
- XSTRING_LENGTH (str), (int *)0, CCL_MODE_ENCODING);
+ XSTRING_LENGTH (str), (int *)0, CCL_MODE_DECODING);
for (i = 0; i < 8; i++)
XVECTOR_DATA (status)[i] = make_int(ccl.reg[i]);
XSETINT (XVECTOR_DATA (status)[8], ccl.ic);