X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fmule-ccl.c;h=a1a408371891621f0ae95cd50c12f52ee2b8f7a5;hb=3328d82e5746894124bdfb8bafc8f6c650c707b6;hp=0dbec5b3ad40d282c5daa20da0b2fe0129d812b1;hpb=3198ed8319f99e19a14447745f4f93e4b4522961;p=chise%2Fxemacs-chise.git.1 diff --git a/src/mule-ccl.c b/src/mule-ccl.c index 0dbec5b..a1a4083 100644 --- a/src/mule-ccl.c +++ b/src/mule-ccl.c @@ -31,7 +31,7 @@ Boston, MA 02111-1307, USA. */ #include "lisp.h" #include "buffer.h" -#include "mule-charset.h" +#include "character.h" #include "mule-ccl.h" #include "file-coding.h" @@ -677,35 +677,35 @@ static int stack_idx_of_map_multiple; r[7] = LOWER_BYTE (SJIS (Y, Z) */ /* Terminate CCL program successfully. */ -#define CCL_SUCCESS \ -do { \ - ccl->status = CCL_STAT_SUCCESS; \ +#define CCL_SUCCESS \ + do { \ + ccl->status = CCL_STAT_SUCCESS; \ /* The "if (1)" inhibits the warning \ "end-of loop code not reached" */ \ if (1) goto ccl_finish; \ -} while (0) + } while (0) /* 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. */ -#define CCL_SUSPEND(stat) \ -do { \ - ic--; \ +#define CCL_SUSPEND(stat) \ + do { \ + ic--; \ ccl->status = (stat); \ /* The "if (1)" inhibits the warning \ "end-of loop code not reached" */ \ if (1) goto ccl_finish; \ -} while (0) + } while (0) /* Terminate CCL program because of invalid command. Should not occur in the normal case. */ -#define CCL_INVALID_CMD \ -do { \ - ccl->status = CCL_STAT_INVALID_CMD; \ +#define CCL_INVALID_CMD \ + do { \ + ccl->status = CCL_STAT_INVALID_CMD; \ /* The "if (1)" inhibits the warning \ "end-of loop code not reached" */ \ if (1) goto ccl_error_handler; \ -} while (0) + } while (0) /* Encode one character CH to multibyte form and write to the current output buffer. At encoding time, if CH is less than 256, CH is @@ -1279,61 +1279,62 @@ ccl_driver (struct ccl_program *ccl, case CCL_Extension: switch (EXCMD) { +#ifndef UTF2000 case CCL_ReadMultibyteChar2: if (!src) CCL_INVALID_CMD; - if (src >= src_end) - { - src++; - goto ccl_read_multibyte_character_suspend; - } - - i = *src++; - if (i < 0x80) - { - /* ASCII */ - reg[rrr] = i; - reg[RRR] = LEADING_BYTE_ASCII; - } - else if (i <= MAX_LEADING_BYTE_OFFICIAL_1) - { - if (src >= src_end) - goto ccl_read_multibyte_character_suspend; - reg[RRR] = i; - reg[rrr] = (*src++ & 0x7F); - } - else if (i <= MAX_LEADING_BYTE_OFFICIAL_2) - { - if ((src + 1) >= src_end) - goto ccl_read_multibyte_character_suspend; - reg[RRR] = i; - i = (*src++ & 0x7F); - reg[rrr] = ((i << 7) | (*src & 0x7F)); - src++; - } - else if (i == PRE_LEADING_BYTE_PRIVATE_1) - { - if ((src + 1) >= src_end) - goto ccl_read_multibyte_character_suspend; - reg[RRR] = *src++; - reg[rrr] = (*src++ & 0x7F); - } - else if (i == PRE_LEADING_BYTE_PRIVATE_2) - { - if ((src + 2) >= src_end) + if (src >= src_end) + { + src++; goto ccl_read_multibyte_character_suspend; - reg[RRR] = *src++; - i = (*src++ & 0x7F); - reg[rrr] = ((i << 7) | (*src & 0x7F)); - src++; - } - else - { - /* INVALID CODE. Return a single byte character. */ - reg[RRR] = LEADING_BYTE_ASCII; - reg[rrr] = i; - } + } + + i = *src++; + if (i < 0x80) + { + /* ASCII */ + reg[rrr] = i; + reg[RRR] = LEADING_BYTE_ASCII; + } + else if (i <= MAX_LEADING_BYTE_OFFICIAL_1) + { + if (src >= src_end) + goto ccl_read_multibyte_character_suspend; + reg[RRR] = i; + reg[rrr] = (*src++ & 0x7F); + } + else if (i <= MAX_LEADING_BYTE_OFFICIAL_2) + { + if ((src + 1) >= src_end) + goto ccl_read_multibyte_character_suspend; + reg[RRR] = i; + i = (*src++ & 0x7F); + reg[rrr] = ((i << 7) | (*src & 0x7F)); + src++; + } + else if (i == PRE_LEADING_BYTE_PRIVATE_1) + { + if ((src + 1) >= src_end) + goto ccl_read_multibyte_character_suspend; + reg[RRR] = *src++; + reg[rrr] = (*src++ & 0x7F); + } + else if (i == PRE_LEADING_BYTE_PRIVATE_2) + { + if ((src + 2) >= src_end) + goto ccl_read_multibyte_character_suspend; + reg[RRR] = *src++; + i = (*src++ & 0x7F); + reg[rrr] = ((i << 7) | (*src & 0x7F)); + src++; + } + else + { + /* INVALID CODE. Return a single byte character. */ + reg[RRR] = LEADING_BYTE_ASCII; + reg[rrr] = i; + } break; ccl_read_multibyte_character_suspend: @@ -1347,7 +1348,9 @@ ccl_driver (struct ccl_program *ccl, CCL_SUSPEND (CCL_STAT_SUSPEND_BY_SRC); break; +#endif +#ifndef UTF2000 case CCL_WriteMultibyteChar2: i = reg[RRR]; /* charset */ if (i == LEADING_BYTE_ASCII) @@ -1363,6 +1366,7 @@ ccl_driver (struct ccl_program *ccl, CCL_WRITE_CHAR (i); break; +#endif case CCL_TranslateCharacter: #if 0 @@ -1585,7 +1589,7 @@ ccl_driver (struct ccl_program *ccl, /* +1 is for including separator. */ point = -point + 1; if (mapping_stack_pointer - >= &mapping_stack[MAX_MAP_SET_LEVEL]) + >= mapping_stack + countof (mapping_stack)) CCL_INVALID_CMD; PUSH_MAPPING_STACK (map_set_rest_length - point, reg[rrr]); @@ -1666,7 +1670,7 @@ ccl_driver (struct ccl_program *ccl, else if (SYMBOLP (content)) { if (mapping_stack_pointer - >= &mapping_stack[MAX_MAP_SET_LEVEL]) + >= mapping_stack + countof (mapping_stack)) CCL_INVALID_CMD; PUSH_MAPPING_STACK (map_set_rest_length, reg[rrr]); PUSH_MAPPING_STACK (map_set_rest_length, op);