// ident "%Z%%M% %I% %E% SMI" // Copyright 2005 Sun Microsystems, Inc. All rights reserved. // Use is subject to license terms. // // CDDL HEADER START // // The contents of this file are subject to the terms of the // Common Development and Distribution License, Version 1.0 only // (the "License"). You may not use this file except in compliance // with the License. // // You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE // or http://www.opensolaris.org/os/licensing. // See the License for the specific language governing permissions // and limitations under the License. // // When distributing Covered Code, include this CDDL HEADER in each // file and include the License file at usr/src/OPENSOLARIS.LICENSE. // If applicable, add the following below this CDDL HEADER, with the // fields enclosed by brackets "[]" replaced with your own identifying // information: Portions Copyright [yyyy] [name of copyright owner] // // CDDL HEADER END // // // ISO-2022-JP to eucJP // #include ISO-2022-JP%eucJP { operation init { cs = 0; }; operation reset { if (cs != 0) { // Emit state reset sequence, ESC ( J, for // ISO-2022-JP. output = 0x1b284a; } operation init; }; direction { condition { // JIS X 0201 Latin (ASCII) between 0x00...0x7f; } operation { if (cs != 0) { // We will emit four bytes. if (outputsize <= 3) { error E2BIG; } // Emit state reset sequence, ESC ( J. output = 0x1b284a; cs = 0; } else { if (outputsize <= 0) { error E2BIG; } } output = input[0]; // Move input buffer pointer one byte. discard; }; condition { // JIS X 0208 between 0xa1a1...0xfefe; } operation { if (cs != 1) { if (outputsize <= 4) { error E2BIG; } // Emit JIS X 0208 sequence, ESC $ B. output = 0x1b2442; cs = 1; } else { if (outputsize <= 1) { error E2BIG; } } output = (input[0] & 0x7f); output = (input[1] & 0x7f); // Move input buffer pointer two bytes. discard 2; }; condition { // JIS X 0201 Kana between 0x8ea1...0x8edf; } operation { if (cs != 2) { if (outputsize <= 3) { error E2BIG; } // Emit JIS X 0201 Kana sequence, // ESC ( I. output = 0x1b2849; cs = 2; } else { if (outputsize <= 0) { error E2BIG; } } output = (input[1] & 127); // Move input buffer pointer two bytes. discard 2; }; condition { // JIS X 0212 between 0x8fa1a1...0x8ffefe; } operation { if (cs != 3) { if (outputsize <= 5) { error E2BIG; } // Emit JIS X 0212 sequence, ESC $ ( D. output = 0x1b242844; cs = 3; } else { if (outputsize <= 1) { error E2BIG; } } output = (input[1] & 127); output = (input[2] & 127); discard 3; }; true operation { // error error EILSEQ; }; }; }