1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright (c) 1996 by Sun Microsystems, Inc. 23 */ 24 25 26 #ifndef _COMMON_HAN_H_ 27 #define _COMMON_HAN_H_ 28 29 #include <sys/isa_defs.h> 30 31 #ifdef _BIG_ENDIAN 32 33 typedef union { 34 unsigned int code; 35 struct { 36 unsigned short high; 37 unsigned short low; 38 } word; 39 struct { 40 unsigned char byte1; 41 unsigned char byte2; 42 unsigned char byte3; 43 unsigned char byte4; 44 } byte; 45 struct { 46 unsigned int high16bits: 16; /* should be 0x00 */ 47 unsigned int msb1: 1; /* should be 0x01 */ 48 unsigned int data1: 7; 49 unsigned int msb2: 1; /* should be 0x01 */ 50 unsigned int data2: 7; 51 } wansung; 52 struct { 53 unsigned int high16bits: 16; /* should be 0x00 */ 54 unsigned int msb: 1; /* should be 0x01 */ 55 unsigned int chosung: 5; 56 unsigned int joongsung: 5; 57 unsigned int jongsung: 5; 58 } johap; 59 struct { 60 unsigned int high16bits: 16; /* should be 0x00 */ 61 unsigned int data1: 4; 62 unsigned int data2: 6; 63 unsigned int data3: 6; 64 } unicode; 65 struct { 66 unsigned int high8bits: 8; /* should be 0x00 */ 67 unsigned int sign1: 4; /* should be 0x0E */ 68 unsigned int data1: 4; 69 unsigned int sign2: 2; /* should be 0x02 */ 70 unsigned int data2: 6; 71 unsigned int sign3: 2; /* should be 0x02 */ 72 unsigned int data3: 6; 73 } utf8; 74 } hcode_type; 75 76 #else /* _BIG_ENDIAN */ 77 78 typedef union { 79 unsigned int code; 80 struct { 81 unsigned short low; 82 unsigned short high; 83 } word; 84 struct { 85 unsigned char byte4; 86 unsigned char byte3; 87 unsigned char byte2; 88 unsigned char byte1; 89 } byte; 90 struct { 91 unsigned int data2: 7; 92 unsigned int msb2: 1; /* should be 0x01 */ 93 unsigned int data1: 7; 94 unsigned int msb1: 1; /* should be 0x01 */ 95 unsigned int high16bits: 16; /* should be 0x00 */ 96 } wansung; 97 struct { 98 unsigned int jongsung: 5; 99 unsigned int joongsung: 5; 100 unsigned int chosung: 5; 101 unsigned int msb: 1; /* should be 0x01 */ 102 unsigned int high16bits: 16; /* should be 0x00 */ 103 } johap; 104 struct { 105 unsigned int data3: 6; 106 unsigned int data2: 6; 107 unsigned int data1: 4; 108 unsigned int high16bits: 16; /* should be 0x00 */ 109 } unicode; 110 struct { 111 unsigned int data3: 6; 112 unsigned int sign3: 2; /* should be 0x02 */ 113 unsigned int data2: 6; 114 unsigned int sign2: 2; /* should be 0x02 */ 115 unsigned int data1: 4; 116 unsigned int sign1: 4; /* should be 0x0E */ 117 unsigned int high8bits: 8; /* should be 0x00 */ 118 } utf8; 119 } hcode_type; 120 121 #endif /* _BIG_ENDIAN */ 122 123 #endif /* _COMMON_HAN_H_ */ 124